我目前正在从事一个庞大的PHP项目,我们正在认真考虑在其中使用library库。
我的问题与“钠密码盒”功能有关。我们将使用此功能实现公钥身份验证加密。我们将使用“钠密码盒键盘”功能生成键盘,使用“钠密码盒非字节”函数生成密码子,并通过“钠密码箱”和“钠密码盒打开”功能来密封/打开密码盒。
我的问题基本上是“这有多安全”?
公钥将是公开的,所以我们担心的是,有人可能会通过“破解”发送者的秘密密钥来生成一个正确的密封盒,或者通过破解接收方的SK来打开一个密封的盒子。这些键是64位十六进制字符串.我的假设是正确的,这意味着有16^64吗?
如果是的话,这意味着以每秒100万次的速度强迫所有可能的组合需要3.6717430630808 *10^63年?还是有更“高效”的攻击?
在官方的found网站上,我发现了有关我们想要使用的函数的以下算法细节:
密钥交换: X25519 加密: XSalsa20流cipher身份验证: Poly1305 MAC
有人能解释一下这意味着什么吗?以下解释是否正确:
发布于 2017-11-07 15:22:59
您可以将crypto_box_curve25519xsalsa20poly1305看作是X25519 (密钥协商方案)、XSalsa20 (对称密钥流密码)和Poly1305 (一次多项式评估消息身份验证代码)的某种组合。但是,当你用它来设计一些东西时,这并不是最好的思考方法--部分原因是你可以用很多方法来组合它们,但主要是因为它不能帮助你找出它如何适合你的应用程序。
相反,您应该将其视为一种契约,其中包含您的义务和crypto_box_curve25519xsalsa20poly1305的安全服务:
crypto_box_curve25519xsalsa20poly1305不提供第三方可验证性,在某些圈子中也被称为不可否认:如果Alice向Bob发送了一个盒子,Bob就无法在密码上说服查理,认为Alice在没有向Charlie展示伪造Alice\rightarrowBob消息的能力的情况下,就向他发送了该消息。
这一点在“安全模型”下的NaCl密码_方框文件中有更多的学术细节。
攻击费用。crypto_box_curve25519xsalsa20poly1305的设计目标是“128位安全级别”,这意味着一个硅芯片上的时间消耗面积--你为它供电的时间--最著名的攻击是围绕着2^{128}位操作的,这比我们想象中的任何人都要多。
crypto_box_curve25519xsalsa20poly1305的密钥确实有256位长,但是在X25519中有足够的数学结构,比简单地列举和尝试所有可能的密钥要便宜得多,以至于在256位域上的椭圆曲线上所能得到的最好结果是128位安全级别。在“ECDLP安全”下,您可以在SafeCurves上找到有关这些攻击的高度技术性参考。
crypto_secretbox_xsalsa20poly1305的秘密密钥是一种构造crypto_box_curve25519xsalsa20poly1305的操作,它的长度也是256位,但是秘密盒允许多目标攻击的对象的性质,其中最著名的区域*破坏至少一组不可忽略的n目标k-bit密钥的时间代价比2^k要小得多。对crypto_secretbox使用256位密钥可以保证,即使对于一组难以想象的2^{128}目标,以不可忽略的概率破坏其中至少一个目标的最知名区域*的时间代价仍然超过2^{128}位操作。
发布于 2017-11-07 10:30:57
你的一些假设比较接近,但一点也不正确。我想我可以解释什么是X25519,XSalsa20和Poly1005。
X25519是DH使用的Curve25519,它有128个比特的安全性,它允许在两个用户之间创建一些“共享秘密”。
XSalsa20是对称加密算法,它使用X25519中的“交换”密钥,以及生成的当前加密算法。
Poly1305是MAC,它将保证消息不被更改。要比较一下,如果您以前使用OpenSSL与他们的AES-CBC,您可能会使用HMAC,出于同样的原因。它与当代一代无关。
有一些重要的事情要知道。密封盒(sodium_crypto_box_seal)和秘密盒(sodium_crypto_box)是不同的。“密封盒”使用“临时密钥”和接收方的公钥,因此发送方为每条消息创建一个随机密钥。“秘密盒”使用发送方的私钥(和公钥)和收件人的公钥,因此它允许检查发送者。
16^64的假设是正确的,因为密钥长度是256位。到目前为止,蛮力仍然是最好的攻击方法。但是,正如@Squeamish Ossifrage所描述的,您需要生成一个安全的随机密钥,在您提到的关于sodium_crypto_box_keypair的文章中,它是安全的。现在需要是随机的和唯一的,你可以用random_bytes(24)来做这个提议,它的长度是24个字节。
https://crypto.stackexchange.com/questions/52912
复制相似问题