Galileo's Proposed Authentication Algorithm: Part 1
berthub.eu
berthub.eu
How does the key being transmitted afterwards actually help it?
If we need a chain of message keys to be able to decode a block of messages, and messages frequently go missing, doesn't this mean missing a message in the chain makes authenticating any later (er... previous?) messages of the block impossible?
This is now even feasible for handheld equipment, as "chip scale" atomic clocks are now commercially available, with dimensions on the order of a few cm on each side. This one is based on Rubidium: https://www.microsemi.com/product-directory/embedded-clocks-..., and here's another based on cesium: http://www.jackson-labs.com/index.php/products/csac
At one point Digikey was even stocking them as an off-the-shelf item! Relatively cheap too, "just" thousands of dollars per unit.
Starting from scratch, with invalid time will make the device susceptible to attack, but if this is a rare event then it hardly matters because attacks should be detected by other devices ("herd immunity"?), but if there's a sufficiently low frequency key distribution schedule then a user can validate that the time the device got from Galileo seems right.
The delayed publication of the key give the algorithm the needed asymmetricity. Since a key only authenticates message in a specific time window, attackers can't reuse the key once it's out there.
Regarding your last point, you can reconstruct "used" key with new keys. The keys are basically generated with K_{n-1} = F(K_n), where F is a hash function. So with the current key you can authenticated all previous messages.
EDIT: Does the network generate all X keys in advance in reverse or something?
That means you can't easily fork a new chain with a K_6' as the receiver can easily check f(K_6') = K_5 where f is a hash function that is hard to reverse.
Once the key has been published, an adversary can use it to generate messages. A requirement in TESLA is that there is close time-synchronisation between the sender and receiver. This is enforced by the safe-packet test as defined in https://tools.ietf.org/html/rfc4082 which checks that the message packet was received within the time window expected from key signing.
As the satellite positioning systems depend heavily on highly synchronised clocks this is pretty reasonable.
My OpenTimestamps project is a curious example where I actually made an effort to avoid implementing this by accident.
tl;dr: It's a service that does Bitcoin timestamping. In the process, centralized servers generate "calendars" - the database of digests they've timestamped. Now, for disaster recovery the calendar servers have a HMAC with secret key to authenticate digests they've promised to timestamp. The idea being that the HMAC lets us get timestamps back from the community to re-add to the calendar in case the data somehow gets lost.
For technical reasons, that HMAC "signs" the current time, and the output of that HMAC gets timestamped securely with Bitcoin. But since OTS servers are not supposed to be trusted, that HMAC digest is deliberately truncated to 64 bits to make it feasible to brute force with significant effort, thus making them not useful as an actual timestamp: https://github.com/opentimestamps/opentimestamps-server/blob...
This is ok for their intended purpose, because if you're willing to brute force 64-bits, I'm ok letting you add some junk to the OTS calendars in the event of a disaster.
I'm actually considering using that scheme as a trusted timestamping mechanism for OTS, by simply revealing the HMAC keys after they've been timestamped by Bitcoin. They're already derived with a merkle tree from a single seed - each second gets a different HMAC key. To turn that into a verifiable signature you just need to derive all the keys in advance, construct a tweaked version of that merkle tree, and then publish the root. A full signature is then the HMAC output, and a path up the tree to the public root.
The advantage for OTS is the amortized size of the signatures would be smaller than a ECC signature, plus being hash based it's a quantum resistant scheme.
OpenTimestamps is a free, open-source, standard for creating timestamps using (mainly) Bitcoin as the root of trust. The calendar server system makes this efficient, using merkle trees to aggregate an unlimited number of timestamp requests into a single Bitcoin transaction, allowing it to be free to use, funded by donations.
At a later time, you can reveal the data, and others can see your earlier tweet and be sure you have had the data since the tweet.
Except opentimestamps doesn't need to rely on the honesty of twitter.
Yup!
However, it's important to understand that the only thing OpenTimestamps can do is prove data existed prior to some point in time. It can't prove data is unique. Twitter however can.
A simple example is if I want to show off how good I'm at predicting which team is going to win some sports championship. With a Twitter hash commitment I can only pick one team; with OpenTimestamps I could just timestamp every single possible prediction in advance.
Which in most years would have worked! Though depending on the sports championship, this year that trick wouldn't have been easy because I'd have to have brute-force timestamped a lot of predictions to have a "Cancelled due to COVID-19" timestamp handy. :)