-
-
Notifications
You must be signed in to change notification settings - Fork 27
QR verfication #168
Comments
well, this all is subject to change. meanwhile, NEXTLEAP has released the underlaying protocol, see http://countermitm.readthedocs.io/en/latest/ for details (was also on the Delta Chat mailing list; cave: it's a longer reading) and https://github.com/nextleap-project/countermitm/ for discussion. in fact, in the first version, the QR code expired, however, for the first tests, it appears more practical for testing to create it static. also the advantages should not be ignored: it is eg. possible to print it on a business card this way. btw. there is already random data (the INVITENUMBER) in the QR code, so it is not possible to guess it. wrt. the hidden communication: yes, automated processing of administrative messages arises a new attack vector, this is also discussed in the protocol. |
Thanks for responding and providing the links. It's good to discuss subjects to change as it is a way to improve things. :)
Good that you already implemented expiring codes. Disabling for testing is no problem, but I think that contact data sharing and contact verification should never be mixed up. It's a basic requirement to maintain credibility of the verification process. Passing on a business card is by no means a contact/key verification, but currently like having a master key to (re)verify all your contacts? May the system notification message in the background be suppressed just as easily? Simply have both:
|
well, you have met someone in person and also giving the person sth. out-of-band. this can to be a good start of a key verification. |
Right, meeting someone in person is kind of a requisite for human verification. Contact details can be exchanged and and keys can be verified. But let's rather be carefull, the spec may just need some more refinement, to not make shifted claims or suggestions. I mean IIUC, "passing on (a copy) of a business card" does not require that you are meeting those passing it on (again), not to speak of intercepting the plain-text INVITENUMBER. Once that qr number goes around, everybody can get "verified" (in a meaningless way). Thus, it's better to use one-time, temporary "verification QRs", and separate static "contact setup QRs". Ok, here comes a small, quite terse but with constructive intent, overview of potential subjects to change. I know it contains some exaggerations, but let them serve to avoid unnecessary risks:
Now, here's an idea for a simple-to-use solution that might tackle many of the raised problems and better fulfill the verification ambitions: Let the qr code scanner use the front (selfie) cam, and have the devices run though a sequence to exchange fingerprints AND public keys in both ways using QR codes (longer data can be transfered using the QRStream app). |
Well, the advantage of the current process is that it is quite fast (probably faster than the process you described). And if I know the other person personally and sometimes meet him/her, it is secure enough. |
I see, the one-way-OOB address+fingerprint scanning ("QR contact setup") may have been quicker to implement than two-way-OOB address+key exchange. But, I see no drawback for two-way-OOB scanning, other than maybe having to implement repetitive scanning, if it is not possible to cram the whole public key into a larger QR. But maybe even two-way OOB scanning of just the address+fingerprint is enough. IMHO one-way-OOB address+fingerprint scanning is inferior, because it
With printed or scanned business cards featuring QR codes, or especially for the MITM or network level mentioned in above documents, all readers will get a verified status for arbitrary addresses, regardless if you know that person or sometimes meet him/her. And the idea of recursive trusting third-party "verifications" for further "verifications" makes all this even worse. So, the simple distinction between something like an "introduced-by", and an actual two-way OOB "verified" status may solve the problem way more adequately. And may also actually be well-understandable: "John Newby" (has no verified icon, but show) "introduced-by r10s (who may be verified, and show that icon), Hocceruser, and testbird." |
There seems to exist another key promotion or referral (not verifying) scheme: As far as I understand that, this provider is signing autocrypt headers: https://posteo.de/blog/neu-vereinfachte-e-mail-verschl%C3%BCsselung-mit-autocrypt-und-openpgp-header May this be used in dubious ways? |
Guys, please be more cautious when touting the lab feature. How would you rank another project with things looking like semi-concepts and deceptive use of labels like "OOB - verfied" when in fact it is just "has seen QR of X"? For example, the one-way instead of two-way OOB scanning leaves one leg sticking out for capture: So, with a copy of your one-way QR everyone can contact you and get that "verfied" label, and...
"In for a penny, in for a pound." (Aka, one must finish what one starts before leaving the lab, be careful with unsure claims, and scrap insecure things and wrong claims.) Symmetric two-way-OOB QR scanning may allow to provide levels of true verification, fix the privilege flaws, and actually be easier to use than the one-way arbitrary contact |
This frontend seems to have two-way-OOB working, besides Bluetooth or Wi-Fi message transport: |
Yes, Bluetooth and Wi-Fi transport are an interesting addition that would make things faster and more reliable (esp. for Wi-Fi, Bluetooth seems to have its own issues). Two-way is no feature imho. And do not mix things here: This has nothing to do with the scanned code being static or not.
Why? It's a labs feature that should be tested. Not more and not less. However, in general, this should be discussed in the issue you created here nextleap-project/countermitm#58 - maybe we should close this issue here to be more focused :) |
hmm, imho, checking the fingerprint of the public key of a chat member will validate its correctness. This could be done by the fingerprint, spelled to the chat member by phone or direct contact or even by a generated QR code that I can scan and which is compared with the fingerprint of the selected chat partner. What in my eyes is important is away to detect changed pub keys (by manipulating the mails) and mange the trust level. Especially the manual (voice transferred) check of the fingerprint is a must. |
Have a little look, comparing to the draft below.
Actually, it explicitly mentions to introduce additional attack surfaces in several steps (not safe). And it could leave the unfortunate impression to disguise a new and different method behind well-established terms and processes, rather than finding more precisely descriptive terms to explain any differences and present all the new aspects. There is no response in the nextleap issue, and since any flaws are irrelevant as long as they're not part of deltachat, I more constructively contribute an improvement idea instead: 2-way OOB Autocrypt Verificaton Protocol Spec V0.0 "out of the cloud draft" A single button to verify contacts for the user. When pressed, it starts QR scanning on the front-camera, and shows QR codes on the display, together with the instruction to pair with another device (front-to-front) until they beeped. Process description: The devices start to
This process "only" verifies that the peer device has access to the secret key belonging to the presented public key. If (once) email connectivity is available, the devices may send regular encrypted messages to each other, and confirm the correct association to the email address. Advantages of this 2-way pairing
Optionally 1), to get some verification that the person holding the device actually belongs to the key, before the process starts, the device may show a screen with a checkword to be told to the person, and input fields to enter the checkwords from the peer. (Best proceedings, like self-entered checkwords, would have to be investigated.) Optionally 2), the basic pairing process could be optionally further extended into a "custom mode", in which the process stops after receiving the vcard, to present the received vcard, and allow the user to select all those data fields of the peer that he knows or could verify, and only afterward the process proceeds to transmit the signatures for all the selected fields to the peer.] Verified-by (signed key gossip?) The devices keep track of the email addresses that a key is used with. The user is warned if the key of a contact changes, by inserting a notification about the event into the corresponding messages, and changing the corresponding user icon (badge, overlay) in the chat list and all other places changes accordingly. Further, the contact profiles store (only) the change events in a list for investigation (instead of the whole messaging history). The contact profiles also list any other contacts that may be using the same key. A user may indicate to another user that a third party was verified and has been using the key with a specific email address, by sending the key of the third party and its address(es), signed using the devices own secret key. Such "verfied-by" indications can be sent automatically by the device, when adding a new contact to a group. The minimal trust level for "secure groups" could default to such "verified-by self-verfied contacts". |
One problem with 2-way OOB Autocrypt Verificaton: How do users know how far they need to hold their smartphones apart? |
Good point, I later played around with two phones, but forgot to write yesterday: Approaching a QR with the back-camera, successful qr scanning range was beginning at about 40cm. The minimal distance to capture each others whole display was to at about 30cm, here, and the harder to get part is the lower display. But this also showed another problem, most of the times the auto focus is on the background, not on the other phone. A lower resolution QR might work anyway. So,
|
Because the exchange does not contain any tokens (only challenges) the protocol may also be ok to be used over wireless near field (radio) communication "NFC". |
|
closing this, discussion is taken place here https://github.com/nextleap-project/countermitm/issues |
Well, unfortunately no one replied to the issue I opened there. No one could explain what I may not be seeing just right. Fortunately, there are now others that have started to pick on exactly the same theoretical basics that I brought up. In the end, the solution for a practical messenger will have to
The basics are: => Easy verification management UX for a local web-of-trust
=> claim chains only as another optional, alternative, advanced, distributed storage backend for the UX |
BTW: The 2-way OOB sequence could start with showing a plain, static vcard compatible QR (that may be printed on a business contact card), and only start to present a challenge in between after detecting another vcard QR in the video stream. If the detected QR is only from a static business card, the process can end if only the same qr (and no challenge) is read repeatedly for say 1550ms. |
so, you made the discussion starting :) |
Proper 2-way OOB key comparison also eliminates the need for having system messages running in behind the back of the user (a large minus). |
If simultanious scanning and displaying is too advanced for a starter, just placing a button on the display to switch between scan/show the ID, (public) encryption key data (and an decryption challenge) would be enough to allow propper 2-way OOB checks, without implementing known security flaws (cross channel, backgroud channel, ...) (allow manual subsequent scanning in both directions) |
This is about the experimental "labs" qr code option available through the advanced settings.
The QR code seems to be static.
With a picture of it everyone could get auto-verfied? Maybe add a timestamp plus a random check word to the qr, to be re-shown on the reading client and valid for handshaking messages during the next 24h? (greylisting). So the reading user sees the same checkword displayed after scanning? Maybe even allow the qr-showing user to
editextend the random checkword with an own and/or reader supplied string, before generating and showing the qr? With this, the users could verify that the correct qr is read and used?There is hidden communication (not visible to the user) going on in the background.
This has shown to create security problems when bugs are discovered. It could be another reason to show a check word and require the user of the qr-showing client to actively, one-time-accept the reception of these background message from this sender address. (Allows to see if the correct, same, temporary check word that was shown (possibly even user edited) and included within the qr shows up again in the received background message.)
The text was updated successfully, but these errors were encountered: