Encryption(加密机制)

Deeplinks 使用对称密钥加密,密钥通过 Diffie-Hellman 密钥交换生成。虽然 deeplink 会话是以明文形式创建的,但会创建一个加密通道,防止会话令牌被劫持。

加密和解密工作流程

Backpack 的 deeplinks 加密工作流如下:

连接

  1. [dapp]:在初次连接的 deeplink 请求中,应用应包含一个 dapp_encryption_public_key 查询参数。推荐为每次连接请求创建一个新的 x25519 密钥对。在所有方法中,此密钥对的公钥被称为 dapp_encryption_public_key

  2. [backpack]:在处理连接 deeplink 时,Backpack 会生成一个新的 x25519 密钥对。

    • Backpack 会将此公钥作为 wallet_encryption_public_key 返回,并在连接响应中提供。

    • Backpack 会使用 Diffie-Hellman 方法,通过 dapp_encryption_public_keywallet_encryption_public_key 的私钥生成共享密钥。

    • Backpack 会本地存储 dapp_encryption_public_key 与共享密钥之间的映射,用于后续 deeplinks 的解密操作。

  3. [dapp]:在接收到连接响应后,应用应通过 Diffie-Hellman 方法使用 wallet_encryption_public_keydapp_encryption_public_key 的私钥创建共享密钥。该共享密钥将用于解密响应中的 data 字段。如果操作正确,用户的公钥将作为 JSON 对象中的一部分与应用共享。

  1. [dapp]:对于任何后续方法(如 SignAndSendTransaction SignMessage),应用程序应发送一个 dapp_encryption_public_key(与 Backpack 共享密钥的公钥部分),以及一个加密的有效载荷对象。

  2. [backpack]:一旦获得批准,Backpack 将把签名的响应加密为一个 JSON 对象,并将加密内容作为 data= 查询参数发送。

  3. [dapp]:收到deeplinks 响应后,应用程序应解密 data= 查询参数中的对象以查看签名。

加密资源 (Encryption Resources)

要了解更多关于加密和解密的信息,请参考以下库:

JavaScript

iOS

Android

Last updated