Security

Encrypted end to end, and honest about the limits.

Deskdrop only talks to devices you approve, on your own network. Here is exactly how that works, and what it does not protect against.

Pairing

Same six digits on both screens means no one is in between.

The PIN is computed from the key exchange itself. Someone in the middle would end up with a different secret, and so a different PIN on each screen. You would see it immediately.

MacBook Air

048 291

Match

OnePlus Nord 4

048 291

Match

MacBook Air
OnePlus Nord 4
  1. Hello · X25519 public key

    Sent in the clear. A public key is safe to show.

  2. Hello back · X25519 public key

    The phone answers with a fresh key of its own.

  3. 048 291048 291

    Both derive 048 291

    Same secret on both sides, so the same PIN. Nothing about it crosses the network.

  4. ✓ trusted✓ trusted

    You approve on both screens

    The phone's key fingerprint is pinned from now on.

  5. AES-256-GCM frames

    Clips, file chunks and call alerts, encrypted both ways.

Session keys

Two keys, one for each direction.

Each side sends with one key and receives with the other, and each direction counts its own frames. A single shared key would let the two counters collide, which is the classic way AES-GCM breaks. Deskdrop never allows it.

MacBook Air

ephemeral X25519

OnePlus Nord 4

ephemeral X25519

shared secret → HKDF-SHA256

Also the source of the six-digit PIN

Mac → phone

own 32-byte key · own counter

Phone → Mac

own 32-byte key · own counter

nonce =8-byte counter‖4 zero bytes

Primitives

Standard cryptography, nothing homemade.

Built on the x25519-dalek, hkdf and aes-gcm Rust crates. Secret keys are zeroized from memory after use, and dependencies go through cargo audit on every CI run.

Key exchange

X25519

New keys every session, so old traffic stays safe if a key leaks later.

Key derivation

HKDF-SHA256

Separate keys for each direction, so nonces can never collide.

Encryption

AES-256-GCM

Authenticated, so tampered frames are rejected, not decrypted.

Replay protection

Counter nonce

A frame with an old or repeated counter drops the connection.

Fingerprints

SHA-256

Stored in the trust list and checked on every reconnect.

Randomness

OS CSPRNG

Keys come from the operating system's secure random source.

Threat model

What it stops, and what it cannot.

Open any item for the detail.

Deskdrop defends against

  • Someone listening on your Wi-Fi

    They see only ciphertext. All content is encrypted with a 256-bit key.

  • A fake device during pairing

    The PIN comes from the shared secret, so a man in the middle shows a different PIN on each screen.

  • Replayed traffic

    Frames carry a strictly increasing counter. Anything out of order is rejected.

  • Unknown devices on the network

    They are refused until you approve them on screen.

  • A trusted device swapping its key

    A reconnect with a different key fingerprint triggers a security error and ends the session.

  • Oversized payloads

    Frames are capped at 40 MB, clipboard items at 10 MB by default, and pushes are rate limited per device.

  • Executable attachments

    Files such as .exe, .bat, .ps1 and .sh are blocked by default.

Outside what it can protect

  • A device you already trust turning hostile

    It can push content to you. Revoke it with deskdrop-cli devices revoke.

  • Physical access to your machine

    Anyone who can read the trust store or process memory can impersonate your devices. Use full-disk encryption.

  • Device names on the network

    Names in mDNS records are not encrypted, so others on the network can see which devices run Deskdrop.

  • Relying on the secret filter

    It is a heuristic and will miss patterns. Treat it as a safety net, not a guarantee.

  • Exposing Deskdrop to the internet

    It is built for local networks. Keep port 47823 closed to anything outside your subnet.

  • Malware already on your computer

    Anything with OS-level access can read the clipboard directly.

Known gaps being worked on

Private device names

mDNS will carry an opaque ID, and the friendly name will only be shared after the handshake.

Authenticated local socket

The daemon's IPC socket is limited to your user today. A per-run challenge will be added for shared machines.

Found a vulnerability?

Please report it privately instead of opening a public issue. Reports are acknowledged within 48 hours, and reporters are credited in the release notes unless they ask not to be.

Report privately