目前,我已经为Android和PHP构建了一个应用程序,该应用程序使用chacha20-poly1305加密了一些数据。由于我使用libsodium作为它们的主干,因此这些程序工作正常。
但是,现在我为Arduino创建了相同的东西。但是我为此使用了一个不同的库。我正在使用以下输入:
Plaintext: 0000000000000001
Nonce: 0000000000000001
Key: b78b94bdf407e2fb0c4cb01e74fee7db743d4d5ab636fe4c181511137dedfc46
在libsodium上,它使用mac产生以下密文:
78260b2aca088071 3c8eea6f05b671ed72f1bc61fee7cc22
但是在Arduino上:
78260b2aca088071 4d888c3b8fe1a4ab8a28d5e593fe7a25
所以我的问题是:两者都有效吗?反之则不行,那么Arduino版本的问题可能是什么?
答案 0 :(得分:5)
ChaCha20-Poly1305有两个变体,原始版本和IETF版本。 IETF版本占用了12个字节的随机数,而原始版本占用了8个字节。
据我所知,IETF版本的变化是使随机随机数的使用更加安全,因为重用的机会更少。
您的Android / PHP版本使用的是旧版,而Arduino版本使用的是更新的IETF版本。
Libsodium implements both variants(以及第三个XChaCha20)。因此,最简单的解决方案可能是让您更改现有代码以使用IETF版本。另外,如果您正在使用的库,可以使用原始版本更改Arduino版本。