为什么密钥大小<对于openssl_pkey_new(),384位被认为太小了?

时间:2018-01-19 19:08:33

标签: php ssl cryptography public-key-encryption

具体来说,我的问题如下,使用PHP和OpenSSL,以及函数:

openssl_pkey_new(array $configargs)

在这个论坛的另一部分,我看到有人说"如果你告诉$ configargs你想要一个256位的密钥,或者这样,它就太容易破解了。"所以我认为这就是为什么函数不允许密钥大小小于384位的原因。但是怎么能这么简单呢?

384的密钥大小为我们提供了105和369个字符长度的密钥。比特币有更短的密钥(私钥是64个字符长吗?),并且不被认为容易破解&#39 ;? (比特币键似乎是十六进制的,但这只会强调我的问题:如果我将这些键从open_ssl_pkey_new()转换为十六进制形式,它们会更长一些吗?)。

非具体:我想要做的是加密' ARBITRARY_STRING'在浏览器中(在用户端)使用用户的私钥,然后将其(连同其他数据)发送到服务器,在那里我用公钥解密。所以我知道数据来自正确的人。但是,如果用户必须输入的密钥很长,那将是不切实际的。

我想要的原因是:我不喜欢用户必须通过网络发送他的女贞密钥(我之前使用password_hash()和password_verify()。当然我既不信任用户验证前端的哈希值......

感谢任何建议! :)

1 个答案:

答案 0 :(得分:1)

毫无疑问,您正在尝试生成RSA密钥对。 RSA的效率相对较低,因为密钥大小不随所提供的安全强度线性增加。正如其他人所指出的那样,EC密钥和RSA密钥之间存在巨大差异。这种差异也可以在例如https://keylength.com。 RSA 384绝对不安全,而EC 384在量子密码分析失效之前是相当安全的。

非对称原语的安全性取决于加密系统中某些组件的大小。例如,对于RSA,密钥大小由模数的大小确定,模数是一个大整数。通常,密钥的编码比密钥大小大得多,因为它包括各种其他信息,标题和其他元信息。密钥的编码大小对安全强度几乎没有说明,并且比较编码的大小根本没有意义。