公钥和私钥有何不同?

lak*_*tak 19 cryptography

我有一个跟进问题给定一个私钥,是否可以派生它的公钥?

公钥和私钥是否"相同"(在您选择公开的意义上)或者您可以使用私钥而不是使用公钥执行更多操作?

编辑 - 更好地陈述我的问题:

当生成两个密钥时,我可以随机选择其中一个作为公钥吗?

kri*_*iss 13

一些论文描述将公钥和私钥的角色视为非常对称,但你绝对不能在现实世界中交换私钥和公钥的角色.

常用用法:

  • 公钥必须用于加密和验证签名
  • 私钥必须用于解密和签名

有几个原因:

  • 你不想让用户选择应该发布哪个密钥,哪个不发布.公钥在全球发布,您可以将其视为您的公共身份.当你要证明给别人,你比别人有这个身份更深入的了解是必须的私处:可以读取文件发送给它的消息,您可以登录可以由任何人谁知道你的公共ID来verifyed消息.如果要发布的公钥/私钥的哪一部分留给用户,那么最终用户将发布这两部分.但这不是主要原因.

  • 当你有私钥时,你真的有两个密钥,每个常见的实现,我知道提供工具从私人文件中提取公钥.这对pgp,gpg,openssl来说都是如此.这意味着所谓的私钥文件存储私钥和公​​钥,如算法中所述.这是设计的.

例如,使用openssl生成RSA密钥对的命令序列可以是:

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
Run Code Online (Sandbox Code Playgroud)

应该清楚的是,第一个命令在私钥文件中生成两个密钥,并且仅从中提取公钥.

结果是,如果您的私钥被破坏,您的密钥都会受到损害.另一种方法是安全的,如果您既不知道文件中的公钥也不知道数学攻击,则无法推断出私钥.

  • 使用私钥进行加密在数学上是微弱的:嗯,前一点已经足够了,但是一些狡猾的用户可能正在考虑使用非对称加密技术来保持两个密钥的隐藏以便交换数据.如果你想做那种交流,不要使用对称加密.是的,可以使用私钥来加密消息并使用公共密钥对其进行解密(这基本上是用于签名的,但用例不同,因为您还有初始消息).这两个密钥的内部参数并不相同,密码学的所有强大性只能用于通常的方向和常用用法.


Meh*_*ari 11

这实际上取决于你所说的"私钥".在几乎所有实际的引用中,知道私钥的发送者也知道公钥.它为其他人提供了公钥,因此需要了解它.因此,实质上,"私钥"将包含"公钥"信息,或者至少它可以从中派生出来.

通常,您不能交换私钥和公钥.实际上,它们并不总是相同类型(取决于所使用的密码系统).例如,在ECDSA中,您的公钥是椭圆曲线上的二维"点",而您的私钥是数字.

  • 在RSA中,由于公钥是从私钥计算的,因此切换它们意味着您以前的私钥现在是公钥,任何人都可以很容易地生成您现在用作私钥的以前的公钥.在RSA中切换公钥/私钥会使RSA不安全. (4认同)