【问题标题】:Why is keysize < 384 bits deemed too small for openssl_pkey_new()?为什么 keysize < 384 位对于 openssl_pkey_new() 来说太小了?
【发布时间】:2018-01-19 19:08:32
【问题描述】:

[2020 年评论:这是我几年前在开始阅读该主题之前提出的一个研究不足的问题。我回过头来稍微清理一下这个问题——因为当时我想知道的核心是理解为什么密钥必须有一定的大小。然而,当一个人开始学习新事物时,我真的相信提出错误的问题是朝着提出越来越好的问题迈出的重要一步。因此,我觉得很遗憾,这个论坛不鼓励人们提出不能反映良好理解的问题。我希望这个论坛以后能朝着这个方向发展更多。评论结束。]


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

openssl_pkey_new(array $configargs)

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

我想要做的是用用户的私钥在浏览器(在用户端)中加密“ARBITRARY_STRING”,然后将它(连同其他数据)发送到服务器,在那里我用公钥解密。但是,如果用户必须输入的密钥那么长,那将是不切实际的。

感谢您的任何建议!或者更适合该目的的建议。

【问题讨论】:

  • 一个 UTF-8 字符占用一个字节,即 8 位。 256 位只有 32 个字节。这意味着 256 位只能允许 32 个字符的密钥。
  • @JosephEvans:没有 UTF-8 字符,但有一个 UTF-8 编码的字符。它最多占用 4 个字节,具体取决于字符。只有当它是 ASCII 集中的一个字符时,它才会占用一个字节。
  • “openssl_pkey_new() 的输出键仍然是字母数字” - 它们不是。只有当您以 PEM 格式保存时,您才会获得字母数字数据,因为这是使用 base64 编码。
  • “比特币的密钥要短得多” - 比特币使用 ECC 而不是 RSA 作为其密钥。 ECC 需要比 RSA 更短的密钥,即 256 位 ECC 与 3072 位 RSA 相当。
  • 您似乎将各种公钥加密概念混为一谈。 Stackoverflow 不是解开它们的正确位置。您将不得不去其他地方获取有关公钥密码学的教程。祝你的任务好运。

标签: php ssl cryptography public-key-encryption


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我现在开始研究 EC。似乎更适合这个目的。
猜你喜欢
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2011-04-10
  • 2014-08-04
  • 2014-02-14
相关资源
最近更新 更多