RSA в публичния ключ на C# е същият като частния ключ?

Търсих много онлайн, но останах със съмнения относно криптографията с публичен ключ и частен ключ на RSA.

Когато проверих сайта на MSDN, опитах това

 RSACryptoServiceProvider rsaEncryptDecrypt = new RSACryptoServiceProvider();

 byte[] privateKeyByte = rsaEncryptDecrypt.ExportParameters(true).Modulus;
 byte[] publicKeyByte = rsaEncryptDecrypt.ExportParameters(false).Modulus;

 string privateKey = Convert.ToBase64String(privateKeyByte);
 string publicKey = Convert.ToBase64String(publicKeyByte);

Низовият публичен ключ и частният ключ са Едни и същи!!! Правилно ли е? Имам предвид как могат низовете да са еднакви? Не трябва ли да са два различни ключа?

Моля, поправете ме, ако греша. Объркан съм !

Благодаря ви предварително!

АКТУАЛИЗАЦИЯ

Сбърках параметрите,

Но тогава: Когато видях

https://stackoverflow.com/questions/6592990/simple-rsa-encryption-decryption-in-net#answer-6593054%22

Как мога да получа стойност на низ? защото трябва да го съхранявам в App.config и да имам достъп до него, когато пожелая. Искам да кажа, че трябва да съхранявам публичния и частния ключ както в App.config

АКТУАЛИЗАЦИЯ 2

Съжалявам, току-що използвах свойството ToXmlString на екземпляра на RSACryptoServiceProvider. Получих частния ключ и публичния ключ.


person Nagaraj Tantri    schedule 24.02.2012    source източник
comment
току-що трансформирахте модула! Тази част е една и съща и за двата клавиша ;) - проучете малко за RSA, не е толкова трудно: можете да прочетете за модула (N) тук: en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation   -  person Random Dev    schedule 24.02.2012


Отговори (3)


Modulus е еднакъв и за двете.

Публичният ключ се състои от степента на криптиране e и модула n.

Традиционно ключът за декриптиране се състои от експонента за декриптиране d и същия модул n. За по-добро представяне често включва някои повече числа, като простите множители p и q на n.

За да визуализирате по-добре какво включва публичен ключ, опитайте ToXmlString(false/true)

Публичен ключ ToXmlString(false):

<RSAKeyValue>
    <Modulus>4ZpwnuksQkLuqLczu5eJcS6aIFaPsTwGpS57/P9rviJWI7sweYZnE/eBVtPVKoanhgHxmcHyk4GbyvCnXKSzDw==</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

Публичен ключ+частен ключ ToXmlString(true):

<RSAKeyValue>
     <Modulus>4ZpwnuksQkLuqLczu5eJcS6aIFaPsTwGpS57/P9rviJWI7sweYZnE/eBVtPVKoanhgHxmcHyk4GbyvCnXKSzDw==</Modulus>
     <Exponent>AQAB</Exponent>
     <P>8lLDYv+MEBUdp0eUY3an4mlU7ovmyV6f60RJoXOB9Hs=</P>
     <Q>7lYYef5/PvPOyrN0HGZPt/RWknfVd4c3Kc6WVEZICX0=</Q>
     <DP>UI3GufAthWMfmm4nG/Fj2dYeD7aeH66/BpyKxYr6VmU=</DP>
     <DQ>sBZkFx30nWo8in5zdtgQZfTcUXLAAIOiOf0sDC+w4XE=</DQ>
     <InverseQ>GBkNq0KZ4ERaEO/oVQoQDONw6ZHixNimR5IJ7cbzKXw=</InverseQ>
     <D>ErLyUrmQ6Y0SqvlEWHAe/DqYm8WQ82e+RUKtFDM3gvK9ygloqftx6rhn9XvM/ji1JnrDqiuepn5T3D3F+3GVQQ==</D>
</RSAKeyValue>
person CodesInChaos    schedule 24.02.2012
comment
О, добре, разбрах.. сбърках параметрите. :( ! Как мога да получа стойност на низ? защото трябва да го съхранявам в App.config и да имам достъп до него, когато пожелая. Искам да кажа, че трябва да съхранявам публичния и частния ключ както в App.config - person Nagaraj Tantri; 24.02.2012
comment
Не мога да получа отделен частен ключ в низ? - person Nagaraj Tantri; 24.02.2012
comment
@NagarajTantri Защо искате частния ключ без публичния? Единствената част от комбинирания частен+публичен ключ, която не е част от частния ключ, е показателят e. И тъй като често има стандартна стойност, като например 2^16+1, оставянето й не ви печели нищо. Просто бих разгледал публичния ключ като подмножество на частния ключ. - person CodesInChaos; 24.02.2012
comment
@CodelnChaos- О, добре разбрах.. Благодаря ви много за помощта. :) - person Nagaraj Tantri; 24.02.2012

Погледнете документацията за RSAParameters - обществеността ключът се формира от {e, n} (Exponent и Modulus). Частният ключ се формира от {d, n} (D и Modulus). така че когато извикате ExportParameters(false), вие ще получите същия модул като това е част от публичната информация - но няма да получите стойност за свойството D.

person Jon Skeet    schedule 24.02.2012

Хм, предполагам, че коментарът ми все пак е добър отговор:

Тъй като сте трансформирали само модулната част на ключовете и тази част е там както в частния, така и в публичния ключ, не е чудно.

Вижте тук: http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation

person Random Dev    schedule 24.02.2012