Implementing Signal's Double Ratchet algorithm (2020)
nfil.dev
nfil.dev
https://github.com/rongarret/ratchet-js
based on an earlier implementation I did in Common Lisp:
https://github.com/rongarret/tweetnacl/blob/master/ratchet.l...
Network & servers > Use SOCKS proxy - ON
Network & servers > SOCKS proxy settings > Proxy - 127.0.0.1:9050
Network & servers > SOCKS proxy settings > Use .onion hosts - Required
Network & servers > SOCKS proxy settings > Use random credentials - ON
Network & servers > Advanced network settings > Private routing - Always
Network & servers > Advanced network settings > Allow Downgrade - No
Network & servers > Advanced network settings > Show message status - ON
Network & servers > Advanced network settings > Transport isolation - Chat profile
Audio & video calls > Always use relay - ON [NOTE: get a good VPN to protect call metadata]
Privacy & security > Send link previews - OFF
Privacy & security > Show last messages - OFF
Privacy & security > Auto-accept images - OFF
Privacy & security > Blur media - [As desired]
The above configuration beats the pants off Session (Signal alternative typically recommended) and actually works decently (unlike Session)!
IMO the above really needs to come set by default and I might fork the client to do it (calling it SimplerX).
The hash ratchet protects new messages, but if the hash key is compromised at one point in time, an attacker can derive all future message keys indefinitely. The DH ratchet defeats that by generating a new key. If the attacker can't get that key, they lose the chain, making the protocol self healing against point-in-time key compromises.
[1] https://signal.org/docs/specifications/doubleratchet/#diffie...