Veiligheid Telegram

Door MBV op zaterdag 22 februari 2014 15:35 - Reacties (25)
Categorie: -, Views: 7.839

Ik heb gisteren redelijk naÔef Telegram geÔnstalleerd nadat een paar kennissen mij een SMS daarover hadden gestuurd. Op het eerste gezicht leken ze vrij goed te reageren op veiligheidsissues die anderen hadden gevonden, dus ik vond het de moeite waard. Toen hoorde ik wat geruchten over de veiligheid van je adresboek, en heb ik besloten eens door de code te gaan graven. Gotta love GPL :) Ik had voordat ik begon te zoeken 2 problemen gezien op internet:
- niet verifieerbare encryptie: http://unhandledexpressio...stand-back-we-know-maths/
- rare matches op adreslijst: http://mcleaver.blogspot....-verses-whatsapp.html?m=1

De encryptie zal ik me niet aan wagen, geen ervaring mee en geen tijd om het van A tot Z uit te zoeken. De adreslijst zou te doen moeten zijn, toch? Dat was wel even zoeken: de code is niet echt van hoge kwaliteit (functies van honderden regels zonder duidelijke structuur, inline classes van net zo lang, enzovoort). Na een uur zoeken heb ik het gevonden:
https://github.com/DrKLO/...tactsController.java#L421

Daar loopt hij door al je contacten heen, stopt voor- en achternaam met telefoonnummer in een pakketje (regel 430), en op regel 450 tot en met 453 wordt dat pakketje verstuurd naar hun server, met hun zelf-verzonnen encryptieprotocol. Wat die server ermee doet is mag Joost weten, maar dit komt sowieso niet overeen met hun privacy policy.

Ik heb dus een mooi mailtje getypt, en ben benieuwd naar hun reactie.
Hi Telegram,

according to your privacy policy: "Telegram uses phone numbers as unique identifiers, so that it is easy for you to switch from other messaging apps (SMS, WhatsApp, etc.) and retain your social graph. We always ask your permission before syncing your contacts."

On my phone, Galaxy S4 mini with Android 4.3 (account is +31xxxxxxxx) no such question was asked, but I do see for all my friends who is available on Telegram. The matches are plausible, and they are for contacts of which I have phone numbers. However, some blogs suggest that you also match on names, so I started digging through the code, and found this:
https://github.com/DrKLO/...tactsController.java#L421

The android app sends first name, last name and phone number for every contact in my address book instead of just the phone number you promised to use as identifier. Supposedly after asking for permission (which I don't recall giving, but that might be a simple bug) everything is sent for your server to read, using your 'secure' communication protocol (don't invent your own crypto!).

I suggest two changes to this mechanism:
- fix the bug that the android app doesn't ask for permission to share my address book. I'd probably start looking for it myself if a well-known encryption scheme was used, and the second point would be fixed
- send only a hash of the phone number to the server. This way you can't know my contacts until they sign up to telegram. You don't need anything more, so according to bullet 2 of your privacy policy you shouldn't store anything more: "Telegram only stores the data it needs to function properly — for as long as you want Telegram to function."

Until you fix the issues with the address book I won't use it, and until you start using a decent encryption scheme (http://unhandledexpressio...stand-back-we-know-maths/) I won't treat it as any more secure than WhatsApp.

Regards,
MBV