<p dir="ltr">Den 7 okt 2014 03:30 skrev "Andy Isaacson" <<a href="mailto:adi@hexapodia.org">adi@hexapodia.org</a>>:<br>
><br>
> Of course a malicious-client-tolerant distributed cryptographic system<br>
> will have a somewhat different set of failure modes to convey to the<br>
> user, but I'm just responding to the argument that it is impossible to<br>
> design a UX to handle even the simplest case of transcript inconsistency<br>
> (of a missing message in the history).  The existing modern centralized<br>
> chat systems handle this case OK and users find it acceptable.  Let's<br>
> achieve feature parity in a distributed system and get on with finding<br>
> and solving the actually hard problems.<br>
><br>
> The first actually hard problem that we get to attack is, what happens<br>
> when Bob sends m1 to Alice and m2 to Carlos, then Alice replies m3.<br>
> What does Carlos see, and how can he prove it?  But there are more hard<br>
> problems than just that one. A taxonomy of transcript consistency errors<br>
> would be useful...</p>
<p dir="ltr">My opinion is that you should use a hash chain per device that is part of the conversation. (This isn't substantially different from previous proposals. But details may differ.)</p>
<p dir="ltr">You got both your phone and laptop in the conversation from your account? You'll need either one hash chain per device, or proxy everything via one of the two devices (to not leak as much usage metadata and preserve consistency). </p>
<p dir="ltr">All messages sent acknowledges all of the last messages on each chain that is part of the conversation. If you see a message from a broken chain (you got message 1, 2 and 4 from Bob but not 3) then your message states that, and hopefully somebody else relay that message to you, allowing you to later acknowledge receipt.</p>
<p dir="ltr">If the network is unreliable, the devices should acknowledge more than one message at a time from each chain. Maybe with the hashes listed directly (reveals to other devices if you've seen something they haven't), maybe with a bloom filter (smaller and faster but don't reveal if you've seen something they haven't), or a Merkle tree hash (small, quick checks, possible to confirm if you've seen messages they haven't by recomputing the whole thing and checking if it is identical with the known messages - but requesting the lacking messages isn't straightforward). </p>
<p dir="ltr">Messages acknowledged by all devices and received in-order could have a green marker in the UI.</p>
<p dir="ltr">Messages received out of order would get a yellow flag, and there should be a feature for allowing you to tap it and see which messages that was created later than it but received earlier (maybe simple receipt order counters, timestamps of receipt, or similar). You should be able to dismiss the flag once you confirmed to your device that you are aware about the correct order. </p>
<p dir="ltr">Messages not yet acknowledged by everybody has a triple dot symbol like this ... to show "waiting for acknowledgement" for X minutes, then it switches to a red flag. Tapping it should show who hasn't yet acknowledged it. Note: devices going offline must try to signal it in advance to reduce false negatives here.<br>
 <br>
Forked chains (where different messages was sent to different people) get a red flag. Tapping it could show who reported receiving different messages (Alice received a message 5 with hash X from Carol, Bob received a message 5 with hash Y). </p>
<p dir="ltr">Messages that others report that they received out of order would have a small marker. This is because reordering could potentially cause the other participants to misinterpret the intended message, so you should be able to check this (it would be voluntary to let your device report what was received out of order). </p>
<p dir="ltr">Seeing another device claim to not have received all messages you have received will prompt your device to relay them. </p>
<p dir="ltr">Hopefully this won't be very resource heavy. Unless used in really huge active groups, the load on RAM, CPU and bandwidth from the overhead introduced by the hash chains should be manageable even by really cheap Chinese budget smartphones. I don't believe devices weaker than that type of devices are going to be common for messaging anywhere. It might however cause you to exceed some carrier's limited data caps (a few hundred MB / month isn't rare in some places, including USA). </p>