RSA - 您可以从私钥创建公钥吗?

时间:2011-06-15 01:30:25

标签: encryption cryptography rsa

我正在为实验室项目创建加密策略,并想知道是否存在仅从私钥创建公钥的功能?

否则,公钥只能与某个密钥生成器的私钥同时创建吗?

P.S。一个快速的谷歌没有真正的帮助。

5 个答案:

答案 0 :(得分:14)

私钥和公钥一起创建。此外,RSA私钥的标准存储格式包括所有公钥字段,因为它对优化的实现和屏蔽(防止某些侧通道攻击)很有用。请参阅RSA标准本身:PKCS#1

编辑问题已被编辑,最初仅限RSA。对于其他非对称算法,不要求公钥可以从私钥派生,也没有任何相反的要求。对于基于离散对数的算法(Diffie-Hellman,El-Gamal,DSA以及所有这些算法的椭圆曲线变体),可以从私钥轻松计算公钥。可以设想简并RSA,其中私钥的知识不允许重建公钥,但是这不需要存储良好性能所需的一些关键元素(完整细节,存储RSA模数因子允许)通过中国剩余定理进行4倍速度增强,所以每个人都存储因子)。在更概念的基础上,公钥是公共的,所以假设“每个人”都知道它;实际上,私钥存储格式几乎总是包含用于存储公钥的规定,或者至少包含用于重建公钥的足够数据。

答案 1 :(得分:8)

是的,你可以这样做(对于一些,可能不是全部,pkc方案)。从ssh-keygen man文件:

-y读取私钥文件并打印公钥。

答案 2 :(得分:2)

取决于算法。使用RSA,你不能,EC可以。但是,公钥通常总是与私钥一起存储(当然不是相反的方式),所以这不是一个真正的问题(如果你有私钥,同一个文件也包含公钥) )。

答案 3 :(得分:1)

从命令行

中的私钥中提取公共RSA密钥

命令行比较显示,如果忽略空格,公共RSA密钥和提取密钥之间没有区别。

  1. 在主目录下生成公共私钥配对,没有密码短语,也没有密码。

    ssh-keygen -t rsa -f ~/id_rsa -N '' -C ""

  2. 将公钥生成到文件' extracted_public_key'

    ssh-keygen -y -f '/home/vagrant/id_rsa' > extracted_public_key

  3. 使用" extracted_public_key'扩展公钥。文件忽略空格。

    diff -b id_rsa.pub extracted_public_key

  4. 忽略id_rsa.pub末尾的空格,公钥和提取的密钥之间没有区别。

答案 4 :(得分:0)

实际上,公钥大多与私钥一起生成。

如果丢失了公共密钥但获得了私钥,您仍然可以从私钥中恢复公钥。

您要做的就是从私钥中提取公钥,如下所示:

从私钥中提取公钥:

ssh-keygen -f~/.ssh/test_rsa -y > ~/.ssh/test_rsa.pub

-f 选项指定用于列出指纹的密钥文件 -y 选项将读取私密SSH密钥文件,并将SSH公钥输出到stdout。公钥部分将重定向到与私钥同名但扩展名为.pub的文件。

注意: 如果密钥设置了密码,则生成公共密钥将需要密码。