繁体   English   中英

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

[英]RSA - Can you create a public key from a private key?

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

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

PS 一个快速的谷歌并没有真正帮助。

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

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

是的,您可以这样做(对于某些,可能不是全部,pkc 方案)。 从 ssh-keygen 手册文件中:

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

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

从命令行从私钥中提取公钥 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

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

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

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

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

从私钥中提取公钥:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM