jimichi

messages that don't say
who talks to whom.

confidential messaging with metadata protection, and the measurements that show what that protection is worth.

content is the easy part.

encryption hides what you say. it does not hide when you speak, how much, or to whom. jimichi is built around that second question, and measures how much an observer who sees only timings and volumes can still learn.

three hops

every message crosses a chain of three relays under nested encryption. the client draws the chain at random from the nodes it lists; each hop strips one layer and learns only its neighbours. two clients talk through a mailbox on the last node of their chains, under an end-to-end layer: the mailbox holds only records of a constant size that it cannot read.

one size

every cell is the same size, whether it carries a real message, cover traffic or a circuit setup. a message has to fit one cell: a longer one is refused.

memory only

session keys are ephemeral. the buffers that hold them sit in locked memory and are zeroed after use, and a relay writes nothing to disk itself. copies the crypto libraries keep on the heap are not locked.

measured

the repository ships the attack too: a traffic correlation observer that scores how much timing and volume still give away.

we built the attack ourselves.

a frame from the jimichi film: pieces of an onion fall through a fractalsound on

the first film

quiet by design.

keys load only after you unlock and are wiped when you lock. contacts are checked by comparing safety numbers.

early design of a client that is not built yet, subject to change.

locked

keys load into memory only after you unlock, and are wiped when you lock.

unlock
Miraverified
yesterday
did you get home ok?
yes, thanks. the last train was empty.
good. sleep well
today
are we still on for lunch?
yes, around one.
delivered
the place near the library?
they have a new menu
perfect. see you at the entrance.
sent
message
a conversation

safety number

you
Mira

compare these numbers in person or on a call. if they match, nobody is in between.

372018841905532716042995744018602739118513640577298031622491
safety number

cover traffic alone does not help.

a passive observer correlates every entry flow with every exit flow. chance is auc 0.5.

preliminary passive series on its original revision, median of five runs per configuration.

1.000
attack auc with cover traffic on top, even at x2.99 the bandwidth between relays. every flow is linked.
0.951
attack auc with a constant rate at the client only, 70 ms. the client's phase still crosses the chain.
0.562
attack auc when relays send on their own clocks, 66.5 ms period, 10 ms window. these runs cannot show that it is at chance. the price is a 187 ms median round trip.

the full table and figures

read the code. check the numbers.

everything is open: the system, the attack against it, and the harness that produced every figure on this site.