Wire-ios: YOU HAVEN'T USED THIS DEVICE FOR A WHILE. SOME MESSAGES MAY NOT APPEAR HERE

Created on 15 Oct 2016  路  10Comments  路  Source: wireapp/wire-ios

I GET SOME YELLING MESSAGES ON MY PHONE:

YOU HAVEN'T USED THIS DEVICE FOR A WHILE. SOME MESSAGES MAY NOT APPEAR HERE

I didn't changes phones, but i use the mac desktop app in parallel. This seems to happen after only a couple of days:
81d53610-2ca4-4f83-988b-c43f39de44e7

  • [ ] Please don't use CAPS
  • [ ] this should only happen after a longer period of inactivity
  • [ ] tapping them it should

    • [ ] either load the missing messages or

    • [ ] at least explain why they're missing

Bug

All 10 comments

hi, @joernhees! Thanks for contacting us. We appreciate you report and will investigate and prioritize the issue.

Hi @joernhees , the expected behavior is that you should see these kind of messages only after you did not open the app for 4 weeks, and only if you never received any notification (e.g. no one wrote you) during those 4 weeks.
So while your points about using CAPS is still valid, the message should not be visible at all for the average user.
The real issue here is that you are getting this message even when 4 weeks have not passed (from what I can see from the screenshot). As @KoalaBoomka said, we are investigating the issue but we were not able to reproduce it.
Could you please check if you still get this behavior with the latest build available on the App Store? The previous "you haven't used this device..." messages will still be there (as it "already happened") but going forward you should not see any new ones.
If you still do, please let us know and we will ask you for more details so that we can reproduce and fix the issue. Thanks for your patience!

not yet, but i'll let you know when it happens again.

but let me ask: why do i need ugly warning messages in cases where no messages arrived and i didn't use my device?

(it's a bit like those paypal emails telling you that your account summary for the last month is ready, "just login" to see that there wasn't a single transaction)

The trigger "you did not receive messages in those 4 weeks" does not mean that no one sent you messages, just that you did not receive them.
Maybe your device was switched off for 4 weeks or maybe you were offline because you had data roaming turned off during a month-long trip.
When you finally come back online, you can only recover the last 4 weeks worth of messages. There is no way for us to know, and to display to you, if someone sent you a message 5 weeks ago, hence we have to warn you that you _might_ have missed some messages in that conversation.

@joernhees I'm gonna close this issue now as there's nothing we could change, as @marcoconti83 explained, this is caused by the architecture of our end-to-end encryption implementation.
It should happen rarely and when it happens, we really want user to notice this message.

@joernhees the all-caps for system messages would be removed in the next release.

Having a 4 week expire time on messages sent by a device seems like not the most user friendly behavior. As an example, what if I have the desktop client and the Android app, but I don't use the desktop client very often? If I go 4 weeks without logging into the desktop, do I lose all the messages I ever sent from that client?

As an even simpler example, what if I get a new phone? Will all my messages from my old phone disappear after 4 weeks?

@dead10ck thanks for the question, I believe I can clarify a little by explaining how the message is encrypted and delivered. This may be not the entirely precise explanation, but it would catch the high level things and should help in the understanding.

I'll start from explaining what is the encryption session. When one device is communicating with another in the end-to-end encrypted way they both have to know the way to encrypt messages in the way that no one else can decrypt them. To establish the session with known device X, one must first fetch the initial key (prekey) from the backend and using this key initiate the session. When the session is initiated, the message keys can be inferred from it's state. Encrypting the message changes the session.

Every message has the new key. If the messages are only sent in one direction, then every next message is encrypted with the key created using the HKDH (hashing) key derivation function. However, with every message the key is sent to reset the encryption session using the Diffie-Hellman procedure. This is more secure, since this key cannot be inferred from the previous keys by the attacker.

Let's imagine we have users A and B, and they have their devices, say A_d, A_m and B_d, B_m. When A_d wants to send the message to the conversation with B, it has to have the ongoing encryption session with A_m, B_d and B_m. Having the session, device would encrypt message for every receiver with their session and send the cipher text to wire backend.

It's now up to Wire to dispatch the message. Here is the issue discussed above can happen: say the device B_d is offline, and we have no measure to deliver the message that we are holding to for more than 4 weeks. In this case we are going to start dropping the messages older than 4 weeks, and when device B_d is coming online we would notify that device that it might be missing messages.

Why are we dropping those messages? For several reasons:

  1. It's not secure in the way that all those messages where encrypted using the HKDF-generated keys, so if it happens that first message is decrypted using certain measures, the attacker can also decrypt all upcoming messages (if attacker has the access to wire backend or user account).
  2. Our privacy policy is limiting the timeframe that we can keep user messages.

Why I think it's not as critical as it may sound:

  1. The messages must be dispatched to mobile clients, since they are activated with the push notifications.
  2. If not, the sender would see no delivery receipt and would be aware that message was not received.

I hope you are satisfied with my answer that is may be slightly too technical, but hopefully for the good reason. Feel free to ask upcoming questions.

@mikeger thanks for your detailed explanation! That certainly does make sense from a technical perspective.

I'm just thinking that from a user perspective, it might be surprising for users coming from other messaging apps like Facebook Messenger to find out that their messages are not stored indefinitely. Likewise, I think it will be disappointing if a user uses one platform's client less frequently, to log in and find out they can never see the messages older than 4 weeks on the less frequently used device.

I'm also not quite sure it is happening exactly as you describe for me. In my case, my phone had copies of messages from another one of my devices at one point in time, but it seems they disappeared and were replaced with the message described in this issue.

If the messages disappeared then this can be some other issue that produces the same output, of which we are not aware yet. Comparing to FB messenger, it's very true that user might expect the messages to persist on the "website" forever.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jensrossbach picture jensrossbach  路  4Comments

KVTaniguchi picture KVTaniguchi  路  4Comments

IpsmLorem picture IpsmLorem  路  3Comments

IpsmLorem picture IpsmLorem  路  6Comments

IpsmLorem picture IpsmLorem  路  3Comments