Encryption
Last updated
Last updated
Deeplinks are encrypted using symmetric key encryption generated from a . While deeplink sessions will be created in plaintext, an encrypted channel will be created to prevent session tokens from getting hijacked.
Backpack deeplinks are encrypted with the following workflows:
[dapp]: On the initial connect
deeplink, apps should include a dapp_encryption_public_key
query 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 connect
deeplink, Backpack will also generate a new x25519 keypair.
Backpack will return this public key as wallet_encryption_public_key
in the connect
response.
Backpack will create a secret key using Diffie-Hellman with dapp_encryption_public_key
and the private key associated with wallet_encryption_public_key
.
Backpack will locally store a mapping of dapp_encryption_public_key
to shared secrets for use with decryption in subsequent deeplinks.
[dapp]: Upon receiving the connect
response, the dapp should create a shared secret by using Diffie-Hellman with wallet_encryption_public_key
and the private key associated with dapp_encryption_public_key
. This shared secret should then be used to decrypt the data
field in the response. If done correctly, the user's public key will be available to share with the dapp inside the data
JSON object.
[dapp]: For any subsequent methods (such as and ), apps should send a dapp_encryption_public_key
(the public key side of the shared secret) used with Backpack along with an encrypted payload
object.
[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.
To learn more about encryption and decryption, please refer to the following libraries:
JavaScript
iOS
Android