首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端加密的当前值应该是什么?

客户端加密的当前值应该是什么?
EN

Cryptography用户
提问于 2020-10-11 17:34:41
回答 2查看 2.4K关注 0票数 8

我正在使用下面的chacha20poly1305锈蚀库加密桌面应用程序中的一些数据。用户提供的密钥(从不离开他们的设备)在本地加密一些数据,然后将加密的数据发送到服务器进行备份。

为了加密数据,这个库需要一个nonce,我不确定这个值应该是什么。理想情况下,用户可以单独使用密钥恢复加密数据。然而,为了解密任何数据,现在也是必需的。在应用程序中硬编码一些现在感觉很奇怪,但是如果我随机地生成一个现在,用户将需要记住这个现在和他们提供的密钥,以便恢复加密的数据。

EN

回答 2

Cryptography用户

发布于 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是一个认证加密认证加密,如果正确使用,它将为您提供机密性、完整性和身份验证。在解密过程中不能忽略不正确的标记。如果标记不匹配,则抛出一个错误。

  • 加密(c,tag)= XChaCha20Poly1305Enc(key,nonce,message)
  • 解密(m|\perp) = XChaCha20Poly1305Dec(key,nonce,c),其中\perp (\perp)是如果标记不匹配的停止。

注2:最近有一个关于用相同的密钥加密许多小文件是否危险?的问题。我们也可以使用类似的想法为每个文件生成不同的密钥。

最后一个注意事项:如果您使用相同的密钥和时间多次加密和更新数据,这也会导致出现误用,文件的某些新版本和旧版本可能会失去机密性。因此,对于每一个更新,都使用一个新的nonce,并再次加密该文件。

票数 16
EN

Cryptography用户

发布于 2020-10-12 20:45:04

另一种选择是将nonce存储在服务器端,使用加密的数据或在外部服务中存储。这样,您不需要用户保存它,甚至不需要知道它,您的应用程序应该知道如何在需要时获取它以进行解密。

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

https://crypto.stackexchange.com/questions/84500

复制
相关文章

相似问题

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