-
-
Notifications
You must be signed in to change notification settings - Fork 332
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Enhancement] Encrypt signaling and the possibility to mark devices as verified #180
Comments
This could also be automatically triggered after a device is paired. Then, the security number could also be shown as PGP phrases |
This private-public key pair should also be used to encrypt the traffic relayed via the websocket fallback |
Maybe it would also be okay to show the verification screen whenever a transfer request / message is sent for the first time between two devices. After the approval on both devices that they are seeing the same security number, the transfer request / message is sent as expected and the devices are never bothered with the verification screen again. When using the QR-codes, the verification could be done automatically by adding an additional secret to the QR code that ensures the connection is safe. Idea:
Idea2:
|
Summary of the ideas aboveEach user creates a public/private key pair which is permanent. Before exchanging their display names, peers exchange their public keys and fulfill a handshake by encrypting the signaling communication with these public keys. When using the websocket fallback, all communication is encrypted with the public key. New peers get a small button A button Whenever a peer connects with a public key in the trusted keys list, bellow the peer we add a label like Comparing security numbers can also be done via a QR code. For this, clicking the QR code might show a built-in QR code scanner (#265). This shows a success dialog: marking it as verified must be always be done manually! Hence, there should be no mechanism to automatically verify devices when paired via QR code, as this might be confusing to users. If the comparison fails, the key should be marked as unverified. The security number should not be part of any link. Copying it should only copy the number itself. Afterwords, detection of peers on the same browser is as simple as detecting if a both peers of a connection have the same public key. Also, the peer secret should be saved additionally alongside the public key as well. If the peer secret does not match the public key -> Do not connect / update roomIds |
Implementing this only adds zero trust to the signaling server if the client code can be trusted. NoteAdd a note on page or on FAQ: „You need to trust this URL/server. To increase security use the official native apps or browser extensions.“ No trust of web versionVerifying a peer using the mobile version would falsely indicate that it can be trusted completely. As we do not know anything about the code our peer uses, we should not trust it. Probably, this verification feature should only be available on the native apps. Clients that use the web version of PairDrop should have a web client label in place of the verification button / label: Then all peers would have one of these three labels:
On the verify screen there should be a note: |
What problem is solved by the new feature
MITM. Make PairDrop zero trust if code integrity can be insured (dedicated clients, Browser extensions or local running PairDrop in client mode).
Describe the feature
The security number should be more present when sending files by adding it to the receive dialog to increase its usage. (We could use a two to three word phrase instead to make it easier. Would this be confusing?).
First idea
To make sure this is only needed once for paired devices, part of the pairing should be a verification of the security number.
This will ensure connections with paired devices are always secure.
Verifications can always be done via a dialog and the security number or a QR code consisting of the current peer id and its public key.
Verified clients could get a mark next to the security number.
Another possibility:
There is only one key pair per device so the public key sent to peers never changes. (This makes the device identifiable by peers and server though)
Public keys of clients get saved to DB as trusted keys whenever a verification is done. When a peer connects and its public key is signaled we can check whether it is a trusted key and show checkmark. So the verification would be independent of the pairing.
This makes only sense when the client files are not fetched but stationary aka client to be developed and client files downloaded via Releases on GitHub, on App Store or a solution with self hosted client.
Additional context
See https://github.com/saljam/webwormhole as reference
The text was updated successfully, but these errors were encountered: