together Back to IRC

A FIELD GUIDE / EXPERIMENTAL

Know who is
in the circle.

Meet in person. Check each other's devices. Agree on who belongs. Then let the cryptography protect the conversation.

01 / AROUND THE SAME TABLE

Try it with your friends

The lab demo plays all three people on one page. Start with friends gives each person their own device session. Both use real encryption. Neither changes the privacy of ordinary IRC channels.

  1. Sign in on every phone.

    Open IRC in each person's browser. First-time users need the IRC owner's approval before they can participate. Sharing a room link does not skip that step. Keep this guide in a separate tab.

  2. One person opens a room.

    Choose Start with friends, then Copy room link. Share the complete link privately with the people present. Everyone else opens that link, not a fresh room. Keep the part after the #; it carries the room's access token.

  3. Create and check every device.

    Enter your name and choose Create this device. Open Show my QR & pairing code. Everyone scans every other person's screen with Use camera, checks the person, then taps Verify this device. Verification goes both ways. With three people, each person verifies two others.

    If the camera fails, copy and paste the full pairing code and compare it directly with the other person's screen. A familiar display name alone is not enough. Codes expire after ten minutes.

  4. Agree on exactly the same circle.

    Once everyone has verified everyone, one person taps Propose this group. The others tap Join proposed group. Compare the names and the entire transcript fingerprint on every device. If they match your intended group, everyone taps Confirm this roster. Finish within five minutes.

  5. Wait for confirmation, then send.

    Every device should say Circle confirmed. Send an invented message and check that everyone receives it. Keep the tabs open. Reloading, closing the tab, or the phone discarding the page loses that device's keys and history.

If someone gets stuck

For a sign-in error, sign in to IRC in the same browser, return to the room tab, and choose Retry after signing in. For an incomplete link, ask the host to copy the full room link again.

If fingerprints disagree, stop and compare everyone's devices. Don't confirm through a mismatch. If a ceremony expires, a participant loses their tab, or competing proposals leave the circle waiting, start a fresh room together. There is no automatic recovery. The 30-minute room timer starts when the room is created.

02 / MATCH THE DEVICE TO THE PERSON

A QR code is a check on the keys

Each session creates private keys in the browser and a public enrollment card. The card contains its device ID, name, public keys, an MLS joining package, room, and expiry. The QR carries a fingerprint of that entire card, plus the room and device ID. Your browser fetches the card and checks it against the fingerprint you received directly.

If a relay substitutes different keys, the fingerprint check fails. A copied name cannot pass that check on its own. But someone can forward a QR code from elsewhere: the software cannot measure physical presence. Looking at the person and their screen is your part of the process. There is no Bump gesture, Bluetooth discovery, or offline peer-to-peer transport in this version.

The room link

Lets an approved IRC user exchange public cards and encrypted traffic in this room. Keep it private.

The pairing code

Lets you check which device keys you are agreeing to trust. It contains no message-decryption key.

These are Together's application rules. MLS leaves decisions about identity and membership policy to the application. RFC 9750, access control

03 / FOUR DIFFERENT JOBS

The math, gently

1. Hashes make changes detectable.

A hash turns data into a fixed-length fingerprint. SHA-256 produces 256 bits, displayed here as 64 hexadecimal characters. The same input produces the same result; finding different data with the same result is intended to be computationally infeasible. A hash does not encrypt its input or tell you who wrote it. NIST, Secure Hash Standard

Change one letter. Compare the fingerprints.

A real SHA-256 calculation on example text, entirely in this tab. This is not a real enrollment card.

SHA-256 fingerprintCalculating…
SHA-256 fingerprintCalculating…

Calculating the example…

2. Key agreement creates a shared secret.

A device keeps a private number and publishes a related public value. Two devices can combine their own private value with the other's public value to reach the same secret, without sending that secret over the network. X25519 is the elliptic-curve method used in Together's MLS suite. RFC 7748, X25519 key agreement

Show me the idea with small numbers

This is an intentionally insecure, small-number Diffie–Hellman illustration, not X25519 or Together's implementation. “Mod 23” means take the remainder after division by 23.

Public starting values: 5 and 23.

Alice keeps 6 private; publishes 5⁶ mod 23 = 8.

Bob keeps 15 private; publishes 5¹⁵ mod 23 = 19.

Alice calculates 19⁶ mod 23 = 2.
Bob calculates 8¹⁵ mod 23 = 2.

They reach the same result by doing the operations in different orders. These tiny values are easy to break. Real X25519 uses large elliptic-curve values and carefully specified validation, not these toy powers. Key agreement also needs authentication, otherwise you might agree on a secret with an impostor.

3. Signatures record a device's approval.

A private signing key creates a signature for a particular record. The matching public key checks it. Changing the record invalidates the signature. Ed25519 is the signature scheme used here. A valid signature is evidence about a device key, not a person's legal identity or truthful intentions. RFC 8032, Ed25519

Together uses a separate signing key for its consent receipts. Each receipt covers the exact proposed change or the resulting group checkpoint, so a “yes” to one roster cannot be reused as a “yes” to another.

4. Encryption protects message contents.

AES-128-GCM turns message bytes into ciphertext with an authentication tag. The receiver uses the correct key to recover the message and check that it has not been altered. NIST, authenticated encryption with GCM

Key derivation makes separate keys for separate purposes from secret material and context. HKDF is the derivation method in this suite. Sharing a hash fingerprint does not reveal those secret keys. RFC 5869, HKDF

Messaging Layer Security, or MLS, coordinates these jobs for a group. It arranges member secrets in a tree and advances to a new epoch, a version of the group's cryptographic state, when a membership change is committed. Its key schedule derives encryption keys; it is more than one permanent password shared by everyone. RFC 9420, protocol overview

Together runs OpenMLS in WebAssembly inside each browser. OpenMLS implements the MLS protocol. Our browser wrapper and consent rules are additional code; using an established library does not independently validate that code.

04 / WHO AGREED TO WHAT?

A history of consent

Together keeps a linked record of membership decisions. Each new decision refers to the fingerprint of the previous checkpoint. Devices verify the signatures and links, then confirm the actual resulting MLS state. This is the circle's lineage. It is Together's experimental policy, not a requirement of MLS.

  1. CHECKPOINT A

    Alice · Bob · Charlie

    All three confirm the founding circle.

  2. REFERENCES A

    Alice & Bob approve

    The exact proposal removes Charlie.

  3. CHECKPOINT B

    Alice · Bob

    New epoch. Both confirm before chat resumes.

A membership change needs consent before it is applied, then confirmation of the resulting state.

To add someone, every existing member verifies and approves the new device; everyone in the resulting group confirms. To remove someone, every remaining member approves and confirms, with at least two remaining. The person being removed has no veto. A two-person circle must start over instead of removing one person.

After the removal completes, Charlie's device cannot decrypt subsequent messages. It can still read messages it already received. A newly admitted device gets the signed membership history, but not earlier chat messages or their keys. These are behaviors exercised by this experiment's browser tests.

What does the chain prove, and what doesn't it prove?

It proves that the corresponding device keys signed these linked records. It is not a blockchain, a permanent human identity, or proof that everyone was in the same room. Signed receipts can be copied and shown to others, which has privacy implications.

Devices reject invalid signatures, unexpected members, and delivered conflicts. A malicious relay can still withhold messages or keep people separated. Refreshing loses the local record, so this version does not demonstrate protection against restoring old state across restarts.

05 / THE BOUNDARY OF THE PROMISE

Private content isn't invisible activity

Your browser encrypts before sending. IRC's relay delivers ciphertext. Internet access is required, even around the same table; the phones do not connect directly to each other.

What each participant in the system can see
WhoWhat they can see
Confirmed group devicesDecrypted messages for their membership, the roster, and signed membership history.
IRC's relayPublic device cards and names, routing and membership metadata, encrypted messages, traffic timing and sizes. The service also knows account and network information. It is not anonymous.
Someone with the room link and IRC accessRoom metadata and ciphertext. The link alone does not grant MLS membership or message keys.

MLS distinguishes message confidentiality from metadata privacy. Its forward-secrecy and recovery guarantees depend on correct key updates, deletion, and secure endpoints. This experiment does not establish secure memory erasure or recovery after device compromise. RFC 9420, security considerations

KEEP READING

Sources, without the mystery

The linked standards explain the cryptographic tools. They do not certify Together. The room limits, approval rules, and instructions above describe this implementation, checked against its source on September 19, 2026.