Here's such a thread: %hoAVki/…
I miss @Sybil =(
A quick summary of these things (mostly to sort this out for myself):
Mathematically speaking, sigchain backlinks define a total order on all messages of the same feed.
Subjective opinion: All chronological sorting of messages from the same feed should use this total order.
It is impossible to get a total order on messages from more than one feed.
Cypherlinks (assuming collisions are impossible ) define a strict partial order on the set of all messages. This is the largest happened-before relation for which ssb provides cryptographic guarantees.
Subjective opinion: All chronological sorting on messages from multiple feeds should be based on this relation. Receive-time or timestamps can be used as tie-breakers (which are needed since the order is only partial), but so could be alphanumeric comparison, or any other mechanism you can come up with. Since all tiebreakers are equal, none of them should be part of the core protocol.
Given a partial order (i.e. the happens-before relation defined by cypherlinks (which includes sigchain backlinks)), timestamps can be checked against it. Given two messages m1
and m2
with timestamps t1
and t2
respectively, if (m1, m2)
is an element of the cryptographically verified partial order (i.e. m1 happened-before m2
), but t1 > t2
, then the timestamps are inconsistent. If t1 < t2
and (m1, m2)
is in the partial order, then the timestamps may be made up, or they may not be. The very notion of a "correct" timestamp is useless in a distributed setting. The best you can get is "does not violate the happens-before relation", but that's all.
Even if a timestamp is from the future (from your perspective), this does not imply a malicious lie, but can simply be the result of clockdrift (either on your end, on the peer's end, or on both ends), or any other sort of issues (hardware failure, sandboxing, timezones, etc.).
This is not a hypothetical and theoretical issue, it happens all the time. I can remember multiple times where I've received messages "from the future" in patchwork.
All of these considerations are related to cryptographically verified relations. You can go on and use a web of trust to get probabilistic guarantees for the quality of timestamps, such as in the thread @kas linked, and there are surely some great "solutions" that involve proof of work. I'm personally not really interested in these approaches, at least not until we get the cryptographically secure parts done right.