首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用(py)NaCl/libsodium进行密钥包装、密钥封装

如何使用(py)NaCl/libsodium进行密钥包装、密钥封装
EN

Security用户
提问于 2022-12-08 16:15:06
回答 1查看 102关注 0票数 2

我们要包装/封装

  1. 带有非对称键盘的对称密钥,
  2. 对称密钥和对称密钥,
  3. 带有对称密钥的私钥。

在每种情况下,我们都希望允许用相同的密钥包装/封装多个密钥(在案例2中可能不需要,在第3种情况下可以避免)。我们还想把数字1和2结合起来,也就是说,用非对称键(S)和对称键(S)来封装/封装密钥。

数字3是密钥封装的标准情况,而在第1和第2种情况下,我认为密钥包装是首选方法。

我们使用Python,而pyNaCl (“”)似乎是一个不错的库。不过,我愿意听取其他建议。

然而,pyNaCl/pyNaCl似乎不提供密钥包装或密钥封装的方法。我假设后者被隐式地用于“密封盒”(大数据的非对称加密)。这还不够,因为我们希望封装多个非对称键的单键(并且能够在以后添加更多的键)。

我们是否应该尝试在给定方法的基础上构建密钥封装和密钥包装?如果是这样的话,是怎么做的?

  • 密钥封装似乎(!)很简单(我们可能会得到一个额外的隐式密钥封装,就像上面提到的那样)。
  • 对于密钥包装,我不太确定该做什么。计算合成IV (SIV)得到AES-GCM?
    • 我更喜欢使用cipher的首选AE密码SXalsa20 20/Poly1305的密钥包装算法。

我们甚至可以使用对称密钥加密密钥,也可以使用密钥封装。

通常,我倾向于避免为密钥封装和密钥包装编写自己的方法。

EN

回答 1

Security用户

发布于 2022-12-10 14:54:12

  • 使用crypto_kdf()派生两个密钥:一个用于身份验证(让我们称之为kH),另一个用于加密(让我们称之为kE)。
  • 用24字节的输出计算h=crypto_generichash(kH, key_to_be_wrapped) .这将既是加密现在和身份验证者。
  • 您的包装密钥将是wk=crypto_stream_xor(kE, h, key_to_be_wrapped)。返回hwk的级联。

若要展开包装,请计算KhKe,然后:

  • crypto_stream_xor(kE, h, wk)返回包装好的秘密。
  • 使用它重新计算h,如果它与包装键中的不匹配,则返回一个错误

h可以被截断为16个字节,但在这种情况下,在调用crypto_stream_xor()时添加一些填充。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/266915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档