Encryption
Deeplinks are encrypted using symmetric key encryption generated from a Diffie-Hellman key exchange. While deeplink sessions will be created in plaintext, an encrypted channel will be created to prevent session tokens from getting hijacked.
Encryption & Decryption Workflow
Backpack deeplinks are encrypted with the following workflows:
Connect
- [dapp]: On the initial - connectdeeplink, apps should include a- dapp_encryption_public_keyquery parameter. It's recommended to create a new x25519 keypair for every session started with- connect. In all methods, the public key for this keypair is referred to as- dapp_encryption_public_key.
- [backpack]: Upon handling a - connectdeeplink, Backpack will also generate a new x25519 keypair.- Backpack will return this public key as - wallet_encryption_public_keyin the- connectresponse.
- Backpack will create a secret key using Diffie-Hellman with - dapp_encryption_public_keyand the private key associated with- wallet_encryption_public_key.
- Backpack will locally store a mapping of - dapp_encryption_public_keyto shared secrets for use with decryption in subsequent deeplinks.
 
- [dapp]: Upon receiving the - connectresponse, the dapp should create a shared secret by using Diffie-Hellman with- wallet_encryption_public_keyand the private key associated with- dapp_encryption_public_key. This shared secret should then be used to decrypt the- datafield in the response. If done correctly, the user's public key will be available to share with the dapp inside the- dataJSON object.
Subsequent Deeplinks
- [dapp]: For any subsequent methods (such as SignAndSendTransaction and SignMessage), apps should send a - dapp_encryption_public_key(the public key side of the shared secret) used with Backpack along with an encrypted- payloadobject.
- [backpack]: Upon approval, Backpack will encrypt the signed response as a JSON object with the encryption sent as a - data=query param.
- [dapp]: Upon receiving the deeplink response, apps should decrypt the object in the - data=query parameter to view the signature.
Encryption Resources
To learn more about encryption and decryption, please refer to the following libraries:
JavaScript
iOS
Android
