Я генерирую пару ключей таким образом
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>
Как видите, если я рассматриваю только модуль и показатель степени, этот закрытый ключ совпадает с открытым ключом (!).
Учитывая, что текст зашифрован открытым ключом, ирасшифровывается с помощью закрытого ключа, ясно, что никто не может расшифровать сообщение с помощью этого поддельного ключа. Итак, подобный поддельный ключ бесполезен.
Мне просто интересно, есть ли что-то еще для надежного соответствия пары ключей.