我正在以这种方式生成密钥对
var rsa = new RSACryptoServiceProvider();
_privateKey = rsa.ToXmlString(true);
_publicKey = rsa.ToXmlString(false);
如果我们做一个简单的 Console.Write(_publicKey) 我们有
<RSAKeyValue>
<Modulus>nW/DERb839Z6fM594Eg3Y3AnpEKjMP/QzGn/iJW9snGkIl3crsa6a+g8S7uKNM0rBNoIdYnMlJTRDoPBpl35eO+ad/V0K9CJ+AqAo4q2pVEsJJujjhNX0C6wwrocS5vGWnuX02JZzVwiQxailo0qdq0qYLhp2ckQLUfwGxWr1mU=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
如果我们做一个简单的 Console.Write(_privateKey)
<RSAKeyValue>
<Modulus>nW/DERb839Z6fM594Eg3Y3AnpEKjMP/QzGn/iJW9snGkIl3crsa6a+g8S7uKNM0rBNoIdYnMlJTRDoPBpl35eO+ad/V0K9CJ+AqAo4q2pVEsJJujjhNX0C6wwrocS5vGWnuX02JZzVwiQxailo0qdq0qYLhp2ckQLUfwGxWr1mU=</Modulus>
<Exponent>AQAB</Exponent>
<P>wrI5ll8sm45OI+jGNVombQB9YUMMzlHgiP//q8N6shYDkmaGrijYrM0/xm9mXn8sxTvg+jX55159Mpuk1rIiBw==</P>
<Q>zwIriOVyG45A3i3UHQt+KijTz1kSw+m03Fbw3WDbh2ooYewCvLoLFWCsgk1TeXfMK5u7dLdttgGqC27qd6i5Mw==</Q>
<DP>JL4dwBMWCAVDGePEBC2PMuL0xnYw5H7vMOufBHtPnGwrIGXY5OUwfuv9LSW42/yEJnS2cIHfN5rNZc+ZvCrB4Q==</DP>
<DQ>aL53WtCGeWz0Y7easYukLh70deFjPmBd1HPlco7U5eMQReQOyoH0o7+D6nbH+xlj5Njq9DbwO30CFsDrwNpNww==</DQ>
<InverseQ>OV9TPLS5fli7K59hGH1m5ZnTT80UY9XJzKRFRjWuDHI1P7QL+d6+1d08DAICDWTu6ac/1jD8ibmO6AxOmYw6OQ==</InverseQ>
<D>kiQjm+KN2645R09as2311F1Qvv6Ig7yDcqzWYlA1pcYtiSU97BNXC0GpbtdohHkK/Nbz0T+X4zh9Ew8lHCzRnIdSQZwGyeCXmk8QNvzK3HTOmLgaTu6UaNFtilqgYWzXHuu8WtvWyyN5F3bLb+PYJ1hAMCrS1RxOqlxXczgSqQU=</D>
</RSAKeyValue>
我想检查生成并保存后的两个密钥是否匹配。
正如我们所知,任何人都可以访问公钥。
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
对于我阅读的内容,为了检查私钥和公钥是否属于同一对,我们验证模数是否相同并且公钥的指数等于私钥的 PublicExponent
如果我使用公钥并且我这样做:
<RSAKeyValue>
<Modulus>nW/DERb839Z6fM594Eg3Y3AnpEKjMP/QzGn/iJW9snGkIl3crsa6a+g8S7uKNM0rBNoIdYnMlJTRDoPBpl35eO+ad/V0K9CJ+AqAo4q2pVEsJJujjhNX0C6wwrocS5vGWnuX02JZzVwiQxailo0qdq0qYLhp2ckQLUfwGxWr1mU=</Modulus>
<Exponent>AQAB</Exponent>
<P>Hi-guys==</P>
<Q>Im-doing-something-nasty==</Q>
<DP>to-pass==</DP>
<DQ>the-key-check==</DQ>
<InverseQ>XXXXXXXXXXXXXXXX==</InverseQ>
<D>YYYYYYYYYYYYYYYYYYYYYYYYY=</D>
</RSAKeyValue>
正如你所看到的,如果我只考虑模数和指数,这个私钥匹配公钥(!)。
考虑到文本用公钥加密,用私钥解密,很明显没有人可以用这个伪造的密钥解密消息。所以,这样的伪造钥匙是没有用的。
我只是想知道,对于健壮的密钥对匹配是否还有其他事情要做。