RSA公钥/私钥问题

时间:2019-12-14 22:47:02

标签: encryption cryptography rsa signing

我是加密新手,但我有几个问题。我知道这个问题很复杂,但是我并不是专门要求该标准,而是什么可行,也就是说,即使不是真正的RSA方法,也应该是安全的,即使它不是标准,但应该证券化。一般而言,这是关于非对称加密的问题。

1)哪个私钥用于签署证书?是与组织的公钥相关的私钥,还是与公钥有关的私钥。我认为这是第一个,因为在Java中,当我尝试使用不是证书中的公钥对的私钥进行签名时,它会失败(编辑。我知道它可能取决于“证书”的内容,并且签名只是对一小部分字节签名)。

如果使用组织的私钥对证书进行签名:这意味着授权机构不能对证书进行签名(它不具有组织的私钥):是否意味着提供了签名由组织?

2)与问题有关。 1,但是授权机构需要私钥来生成证书吗?像2遍签名一样,使用两个密钥来验证签名。如果是,那么专门用于哪个目的?

如果主持人不需要私钥,是否足以检查证书是否有效,证书是否正确以及授权机构是否在数据库中包含给定的公钥(或进行最大程度的检查)如果数据库中的证书与一次性检查的证书相同,则逐字节检查),假设不能从公用密钥推导出专用密钥?

3)我对公共/私有和加密/解密关系感到困惑。我所看到和了解到的是,私有加密密钥用于签名,私有解密密钥用于保护通信安全,我们也可以说加密/解密只是一种语言,它除了转换为加密语言外没有其他现实。方向或其他。但是在Java中使用类Signature对文档进行签名,则需要提供一个私钥来生成签名(如果我正确的话)。另一方面,您使用它来解密通信,对吗?因此,您可以使用它进行加密和解密。可以吗要这样做还是我们需要2对密钥来进行安全通信,一个用于证书,另一个用于通信?

4)脱离主题,但我认为RSA密钥是不对称的,但提供相同的数学属性,并且具有某种对称性,因此我们可以使用解密密钥进行双向编码。 出于好奇,此示例是否正确:

to the left: encrypt with private key
to the right: encrypt with public key
   ... <-> messageP2 <-> messageP1 <-> message <-> messageR1 <-> message R2 <-> message R3 <-> ...

谢谢

2 个答案:

答案 0 :(得分:1)

证书的全部重点是对PKI(公钥基础结构)的信任

  • PKI中的密钥始终是密钥对。私有方始终由所有者保守秘密
  • 有太多方,每个人都知道其他人的公钥
  • 每个人都知道CA的公钥(如果要多层CA,则已知的CA必须签署子CA的密钥)
  • 每个人都将其公开密钥嵌入到由CA签名的证书中

如果您现在想与某人交流,则要求他们提供证书...由于您尚不认识他们(或者确切地说,您尚不知道他们的钥匙),因此无法确定您正在与预定方进行沟通

他们发送了他们的证书...

现在您可以检查信任链:

他们的证书是由某人签名的...是值得信任的人并且签名有效吗?

有人值得信赖吗?一个很简单的问题:某人是可以为目标方签署证书的受信任的CA吗?换句话说:我们可以在受信任的CA列表中找到同级CA证书,还是另一个受信任的CA将其证书签名为CA证书?

签名有效吗?可以测试是否知道签名CA的发布密钥

现在,如果我们知道并信任该CA怎么办? ...一切正常...但是如果我们不知道该怎么办呢?通常,我们的通信合作伙伴可以提供该CA的证书(因为证书是公开的,换句话说,不是秘密的)

现在我们可以重复...所提供的CA证书是否由可信任的人签名并且签名有效?

整个要点是:不需要具有包含所有公钥的庞大数据库,并且通信方只要能够验证证书,就能够自行验证身份

因此请牢记...

1)CA私钥用于对证书进行签名。证书上的签名等同于以下语句:“可以要求签名人对证书中所有值的有效性负责”

2)CA在证书上签名...在这里签名是需要密钥的操作...仅在CA的数据库中拥有证书是不够的...请考虑到证书的身份在无法与CA通信的情况下,需要对持有人进行检查

3)减轻混乱

签名/解密...私钥
验证/加密...公钥

通常用于签名和加密的密码系统是不同的... RSA在这里是独角兽,可以同时用于两者

证书背后的想法是,您可以嵌入公共密钥,并将其绑定到身份,以使公共信任的CA足以使两个其他未知方安全地交换其密钥。

4) 从数学的角度来看...是的...

RSA操作为X ^ e mod N = C ... C ^ d mod N = X

其中X =纯文本... C =密文... N,e,d rsa参数

RSA背后的原理是e * d mod phi(N)= 1

因此

(X^e)^e = X^(e*e)   
(X^(e*e))^d = X^(e*e*d) = X^(e*1) = X^e  
(X^e)^d = X^(e*d) = X^1 = X

答案 1 :(得分:0)

拥有授权机构颁发的证书的目的是授权机构证明密钥中的信息是准确的。为了验证该证书,必须使用仅证书颁发机构已知的私钥对证书进行签名。