ChaCha20-Poly1305计算出错误的Mac

Gio*_*gen 4 encryption

目前,我已经为Android和PHP构建了一个应用程序,该应用程序使用chacha20-poly1305加密了一些数据。由于我使用libsodium作为它们的主干,因此这些程序工作正常。

但是,现在我为Arduino创建了相同的东西。但是我为此使用了一个不同的库。我正在使用以下输入:

Plaintext: 0000000000000001
Nonce: 0000000000000001
Key: b78b94bdf407e2fb0c4cb01e74fee7db743d4d5ab636fe4c181511137dedfc46
Run Code Online (Sandbox Code Playgroud)

在libsodium上,它使用mac生成以下密文:

78260b2aca088071 3c8eea6f05b671ed72f1bc61fee7cc22
Run Code Online (Sandbox Code Playgroud)

但是在Arduino上:

78260b2aca088071 4d888c3b8fe1a4ab8a28d5e593fe7a25
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:两者都有效吗?反之,它们不起作用,那么Arduino变体可能是什么问题?

mat*_*att 5

ChaCha20-Poly1305有两种变体,原始版本和IETF版本。IETF版本占用12字节的现时值,而原始版本占用8字节。

据我了解,IETF版本的更改是使使用随机数随机数更为安全,因为重用的机会较少。

您的Android / PHP版本使用的是旧版,而Arduino版本使用的是更新的IETF版本。

Libsodium实现了这两个变体(以及第三个变体 XChaCha20)。因此,最简单的解决方案可能是让您更改现有代码以使用IETF版本。或者,您可以使用原始库来更改Arduino版本,如果您使用的库可以的话。

  • @tmadam所以我对此感到好奇并开始调查。事实证明,这只是每个变量输入到身份验证器中的数据的顺序和格式。我在要点中添加了一些代码(希望如此)来解释差异。 (4认同)