我正在为实验室项目创建加密策略,并想知道是否存在仅从私钥创建公钥的功能?
否则,公钥只能与某个密钥生成器的私钥同时创建吗?
P.S。一个快速的谷歌没有真正的帮助。
答案 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密钥和提取密钥之间没有区别。
在主目录下生成公共私钥配对,没有密码短语,也没有密码。
ssh-keygen -t rsa -f ~/id_rsa -N '' -C ""
将公钥生成到文件' extracted_public_key'
ssh-keygen -y -f '/home/vagrant/id_rsa' > extracted_public_key
使用" extracted_public_key'扩展公钥。文件忽略空格。
diff -b id_rsa.pub extracted_public_key
忽略id_rsa.pub末尾的空格,公钥和提取的密钥之间没有区别。
答案 4 :(得分:0)
实际上,公钥大多与私钥一起生成。
如果丢失了公共密钥但获得了私钥,您仍然可以从私钥中恢复公钥。
您要做的就是从私钥中提取公钥,如下所示:
从私钥中提取公钥:
ssh-keygen -f~/.ssh/test_rsa -y > ~/.ssh/test_rsa.pub
-f 选项指定用于列出指纹的密钥文件 -y 选项将读取私密SSH密钥文件,并将SSH公钥输出到stdout。公钥部分将重定向到与私钥同名但扩展名为.pub的文件。
注意: 如果密钥设置了密码,则生成公共密钥将需要密码。