我正在使用下面的chacha20poly1305锈蚀库加密桌面应用程序中的一些数据。用户提供的密钥(从不离开他们的设备)在本地加密一些数据,然后将加密的数据发送到服务器进行备份。
为了加密数据,这个库需要一个nonce,我不确定这个值应该是什么。理想情况下,用户可以单独使用密钥恢复加密数据。然而,为了解密任何数据,现在也是必需的。在应用程序中硬编码一些现在感觉很奇怪,但是如果我随机地生成一个现在,用户将需要记住这个现在和他们提供的密钥,以便恢复加密的数据。
发布于 2020-10-11 18:53:07
该库还使用XChaCha20Poly1305,这需要一个192位(24字节)的位。这是ChaCha20Poly1305的一个扩展,以增加现在的尺寸,ChaCha20有96位的非bit.它没有标准,只有ietf.org中的草案
现在是“一次使用的数字”的缩略语。关键的一点是,一个人不能再使用(键,现在)对。我们称它为“一次性滥用”。如果发生这种情况,就会丢失机密性,因为攻击者可以使用拖床技术来显示这两个明文。甚至有一种自动方法来解决这个问题:
或者详细的例子见这个问题的答案;
对于192位的非less,随机的现在产生是安全的,因为按照生日悖论,您需要用相同的密钥加密2^{96}消息,才能再次以50%的概率访问相同的数字,所以您应该加密更少的消息,以确保此概率可以忽略不计。请记住,您需要使用像/dev/urandom这样的好的随机数生成器。如果愿意,您仍然可以使用反基非计数器。
我不知道这个价值应该是多少。理想情况下,用户可以单独使用密钥恢复加密数据。
nonce不需要是秘密的,可以与文件一起保存而无需加密。这不是不安全,只有钥匙是秘密。现在帮助安全地使用一个键不止一次。它是安全的,只要(键,现在)对永远不会发生两次。
然而,为了解密任何数据,现在也是必需的。
这是完全正常的,因为解密与具有相同密钥和时间的加密相反。XChaCha20Poly1305生成一个流,我们将它用于x-或明文。为了重新生成流,我们需要使用相同的输入。
在应用程序中硬编码一些现在感觉很奇怪,但是如果我随机地生成一个现在,用户将需要记住这个现在和他们提供的密钥,以便恢复加密的数据。
硬编码的现在是不可接受的,因为它将被使用不止一次。记住现在没有问题,它是安全的。将其保存在像nonce\mathbin\|encryptedFile\|tag.这样的文件中
注1:XChaCha20Poly1305是一个认证加密认证加密,如果正确使用,它将为您提供机密性、完整性和身份验证。在解密过程中不能忽略不正确的标记。如果标记不匹配,则抛出一个错误。
\perp)是如果标记不匹配的停止。注2:最近有一个关于用相同的密钥加密许多小文件是否危险?的问题。我们也可以使用类似的想法为每个文件生成不同的密钥。
最后一个注意事项:如果您使用相同的密钥和时间多次加密和更新数据,这也会导致出现误用,文件的某些新版本和旧版本可能会失去机密性。因此,对于每一个更新,都使用一个新的nonce,并再次加密该文件。
发布于 2020-10-12 20:45:04
另一种选择是将nonce存储在服务器端,使用加密的数据或在外部服务中存储。这样,您不需要用户保存它,甚至不需要知道它,您的应用程序应该知道如何在需要时获取它以进行解密。
https://crypto.stackexchange.com/questions/84500
复制相似问题