what jimichi does not protect
a tool that hides some metadata is easy to overtrust. these are the edges, stated plainly.
- a global observer
- the model does not cover an adversary who watches every link at once.
- a compromised device
- if your phone or computer is taken over, jimichi cannot help. neither can side-channel attacks on it.
- root on a relay host
- locked memory stops swapping, not a privileged reader. against root on the machine hosting a node, process-level measures do not work.
- connection timing
- each circuit opens and closes its own tcp connections along the chain. those moments match and are visible to a global observer; the attack here does not measure them.
- coercion
- the deniable container gives a cover story, not immunity against being forced to hand over a password.
where the results stop.
the testbed
- nodes are containers on a single machine. network delays and the separation between operators are modelled, not reproduced.
- the correlation attack runs where the true flow labels are known. carrying the estimates to a real network needs care.
- the dataset is synthetic: cover traffic is generated, not captured from real users.
- latency needs a clock finer than a millisecond, so latency runs happen on linux, not on a windows host.
cryptography and memory
- the gost implementation is not a certified cryptographic facility. the algorithms are the same and checked against the standards test vectors, but no protection class is claimed.
- libraries keep their own copies of keys on the go heap, and the aead working key stays there for the life of the circuit. secmem protects only its own buffers.
- circuit layers have no forward secrecy against a neighbour: the node key lives until the node restarts. a wire capture alone cannot be read without the ephemeral link keys.
- the cell format has constant size and replay protection but is not full sphinx: nothing else hides a node’s position in the chain.
timing
- sending on a node’s own clock needs the node period a few percent shorter than the client’s; the testbed uses 5%. with equal periods a missed tick is never caught up.
- a link is covered only if the node sending on it has the measure on. the client cannot check that its nodes do.
- the circuit setup cell leaves at once, not on the node clock, and marks the start of a circuit on every link.
- without own-clock sending, the exit reply leaves after delivery, so a real recipient’s delivery time would show.
deniability
- it breaks through the environment rather than the cryptography: filesystem journals, shadow copies, timestamps, ssd wear-leveling and trim leave traces of writes.
- an adversary with several snapshots of the container over time sees changes where the decoy claims nothing happened. the property is not claimed against that adversary.