The skip ratchet came from needing a way to agree on a hash chain in the Webnative File System without knowing the participants in advance, and where there may be very long periods between synchronisation (and to guard against certain Byzantine conditions).



Hash chains are a simple way to generate pseudorandom data, but are inefficient in situations that require long chains. This can cause unnecessary overhead for use cases including logical clocks, synchronizing the heads of a pseudorandom stream, or non-interactive key agreement. This paper presents the β€œskip ratchet”, a novel pseudorandom function that can be efficiently incremented by arbitrary intervals.


There’s a couple implementations, but the Rust one gets the most attention