代码之家  ›  专栏  ›  技术社区  ›  Yuri van Geffen

NSec.密码学使用ChaCha20Poly1305和SharedSecret加密和解密

  •  0
  • Yuri van Geffen  · 技术社区  · 5 年前

    我正在尝试使用加密(和解密)从一个设备发送到另一个设备的消息NSec.密码学,但我发现文档有点模糊。据我所知,我需要一个 Key PublicKey 分别为装置A和B。我可以把这些变成 SharedSecret :

    var sharedSecret = KeyAgreementAlgorithm.X25519.Agree(encryption.Key, deviceKey);
    

    但是,这个共享的秘密对于加密似乎没有什么用处 Encrypt(...)

    var cyphertext = AeadAlgorithm.ChaCha20Poly1305.Encrypt(sharedSecret, nonce, new byte[0], message);
                                                                  ^-- will not work
    

    我有很多问题:

    1. 天气怎么样 ChaCha20Poly1305.Encrypt
    2. 如何使用a的私钥和B的公钥(如lib中的box和secret box)对消息进行加密?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Maarten Bodewes    5 年前

    SharedSecret :

    表示 key agreement 以及 输入 key derivation

    这应该回答1和2: 用于派生实际键,它本身不是键。

    如何使用a的私钥和B的公钥(如lib中的box和secret box)对消息进行加密?

    至于第三条:你需要一个 临时密钥对 在发送方A和接收方B的公钥上。然后使用发送方的临时私钥执行密钥协议和密钥派生(如上所述),并使用密文发送临时公钥。别忘了在密钥协议之后销毁发送者的临时私钥;你不再需要它了,泄露它会破坏密文。

    接收方现在可以使用其静态私钥和接收到的临时公钥执行相同的协议,并最终解密消息。