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

Encryption RSA-您可以从私钥创建公钥吗?,encryption,cryptography,rsa,Encryption,Cryptography,Rsa,我正在为一个实验室项目创建一个加密策略,想知道是否有能力仅从私钥创建公钥 否则,公钥只能与来自某个密钥生成器的私钥同时创建吗 顺便说一句,一个快速的谷歌并没有真正的帮助。私钥和公钥是一起创建的。此外,RSA私钥的标准存储格式包括所有公钥字段,因为它对于优化实现和屏蔽(防止某些旁道攻击)非常有用。请参阅RSA标准本身: 编辑:问题已编辑,最初仅为RSA。对于其他非对称算法,没有要求公钥可以从私钥派生,也没有任何相反的要求。对于基于离散对数的算法(Diffie-Hellman、El-Gamal、DS

我正在为一个实验室项目创建一个加密策略,想知道是否有能力仅从私钥创建公钥

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


顺便说一句,一个快速的谷歌并没有真正的帮助。

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

编辑:问题已编辑,最初仅为RSA。对于其他非对称算法,没有要求公钥可以从私钥派生,也没有任何相反的要求。对于基于离散对数的算法(Diffie-Hellman、El-Gamal、DSA和所有这些算法的椭圆曲线变体),公钥很容易从私钥计算出来。可以设想一种退化RSA,其中私钥的知识不允许重构公钥,但这不需要存储良好性能所需的一些关键元素(详细地说,通过中国剩余定理,存储RSA模因子可以使速度提高4倍,因此每个人都存储这些因子)。从概念上讲,公钥是公开的,因此假设“每个人”知道这一点;实际上,私钥存储格式几乎总是包含存储公钥的规定,或者至少包含足够的数据来重建公钥。

是的,您可以这样做(对于某些pkc方案,可能不是所有pkc方案)。从ssh keygen man文件:


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

取决于算法。对于RSA,您不能,而对于EC,您可以。但是,公钥通常与私钥一起存储(当然不是相反),因此这不是一个真正的问题(如果您有私钥,则同一文件还包括公钥)。

从命令行从私钥中提取公钥 命令行比较,以显示在忽略空格的情况下,公共RSA密钥和提取密钥之间没有区别

  • 在主目录下生成没有密码短语和密码的公私密钥配对

    ssh-keygen-t rsa-f~/id\u rsa-N'-C'

  • 将公钥生成到文件“提取的\u公钥”

    ssh-keygen-y-f'/home/vagrant/id\u rsa'>提取的\u公钥

  • 具有“提取的公钥”文件的Diff公钥忽略空白

    diff-b id\u rsa.pub提取的\u公钥


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

    实际上,公钥主要是与私钥一起生成的

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

    您只需从私钥中提取公钥,如下所示:

    从私钥中提取公钥:

    ssh-keygen -f~/.ssh/test_rsa -y > ~/.ssh/test_rsa.pub
    
    -f选项指定要列出指纹的密钥文件 -y选项将读取SSH私钥文件并将SSH公钥打印到标准输出。公钥部分将重定向到与私钥同名但扩展名为.pub的文件

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

    我回滚了编辑。我认为原始海报打算将此问题仅应用于RSA。+1。但这可能不会实际“创建”公钥,它只会从私钥文件中提取它(与私钥一起存储在该文件中).这个问题(及其答案)对我很有用。但它不应该转到“服务器故障”而不是stackoverflow吗?