The short authentication string, in both of the forms the protocol can
produce.
Show one of these to a person and ask whether it matches what the other
person sees, out of band. Comparing them programmatically across a
channel this flow itself established proves nothing: that channel is what
is being verified.
Treat this value as secret while the flow is open. Anything that
learns it learns what an interposed party would need to answer the
comparison correctly. Do not log it, do not persist it, do not put it in
a crash report. The Rust core hand-writes a redacting debug format for
exactly this reason and cannot reach across this boundary to do the same
for JavaScript.
emoji is optional and decimals is not, and that asymmetry belongs to
the protocol rather than being a convenience: the symbol form exists only
when both sides negotiated it, so a screen offering only symbols has a
live path with nothing to show. The digits are always there once the keys
are exchanged.
The short authentication string, in both of the forms the protocol can produce.
Show one of these to a person and ask whether it matches what the other person sees, out of band. Comparing them programmatically across a channel this flow itself established proves nothing: that channel is what is being verified.
Treat this value as secret while the flow is open. Anything that learns it learns what an interposed party would need to answer the comparison correctly. Do not log it, do not persist it, do not put it in a crash report. The Rust core hand-writes a redacting debug format for exactly this reason and cannot reach across this boundary to do the same for JavaScript.
emojiis optional anddecimalsis not, and that asymmetry belongs to the protocol rather than being a convenience: the symbol form exists only when both sides negotiated it, so a screen offering only symbols has a live path with nothing to show. The digits are always there once the keys are exchanged.