Rsa

來自公鑰的 RSA 模數 (N) 並根據 p、q 計算 N 不等於

  • April 16, 2015

我有一個公共指數和模數形式的 RSA 公鑰,如下所示:

String exponent = "0000000000000003";
String modulus = "D8016FFDDFBA4B144B0AB13FF01968048B2FC9AA269311D11357DC8CEDCABA232BEC118D3B05AFA2406D27BFB6602B45B80E91D4F446E4A753C251EA6EB8AB8E3F304585DD202D8B04538EB4DD1F87D9A27E1E7B34A304396BBC38EE669E823BD03C1F43698B4B3128F3770C465CE415FD0F965F3170CED1470ED777751DE59D";

而且我還有一個相應的 RSA 密鑰的私有 CRT 密鑰,如下所示:

String p = "F401F9E76A0E65D80AA8CF0D526D8D8747E53A3E1223B143AA73F675708ED966AB96965040907CCDF3D5C77904AA0906A6941E3A9C69AEC1F99E73E6EDB07191";
String q = "E29F25EC241F0FEDAD28B8DD1DCBABBD066F4F557467AE6A2CE4ED34F9D93257E2F8C8B6EE1F7A687E386BFEE9C20C3388385E82AFA498237FF801D283216D4D";
String dp = "A2ABFBEF9C09993AB1C5DF5E36F3B3AF85437C29616D20D7C6F7F9A3A05F3B99C7B9B98AD5B5A8894D392FA6031C06046F0D697C6846748151144D449E75A10B";
String dq = "9714C3F2C2BF5FF3C8C5D0936932727E044A34E3A2EFC99C1DEDF378A690CC3A975085CF496A519AFED047FF46815D77B02594571FC31017AAA5568C576B9E33";
String qinv = "075130A6D464E1541E92CCDF21BC4860D4E9E1BEF664CF5900A93774C67A507C13F1FAD2BEC2DCD0BEB4F2535C8175890ABA1BE851D0067B462C4876477E5DA7";

這種密鑰是出於測試目的而生成的。

所以我想檢查它是否正確,我發現將 p 與 q 相乘會產生不同的模數 N,分別。N只有二分之一不同。我使用了以下計算:

byte[] bp = hexToByteArray(p);
byte[] bq = hexToByteArray(q);
byte[] bdp = hexToByteArray(dp);
byte[] bdq = hexToByteArray(dq);
byte[] bqinv = hexToByteArray(qinv);

BigInteger pBI = new BigInteger(bp);
BigInteger qBI = new BigInteger(bq);
BigInteger modulusBI = pBI.multiply(qBI);

得到的模數modulusBI在十六進制中具有以下值:

0160502A518CD54E933929557FE02EC03CDB4016A007B2233BFEF8E28362AE649D5CB2860C55B86BCE5EF447C7F4160B89421517A8389DC1DA2BDC30FDE6CCB03F304585DD202D8B04538EB4DD1F87D9A27E1E7B34A304396BBC38EE669E823BD03C1F43698B4B3128F3770C465CE415FD0F965F3170CED1470ED777751DE59D

該值與公鑰的原始模數 N 不同,但其中一半是正確的,如您所見:

Computed N :0160502A518CD54E933929557FE02EC03CDB4016A007B2233BFEF8E28362AE649D5CB2860C55B86BCE5EF447C7F4160B89421517A8389DC1DA2BDC30FDE6CCB0 3F304585DD202D8B04538EB4DD1F87D9A27E1E7B34A304396BBC38EE669E823BD03C1F43698B4B3128F3770C465CE415FD0F965F3170CED1470ED777751DE59D
Original N :D8016FFDDFBA4B144B0AB13FF01968048B2FC9AA269311D11357DC8CEDCABA232BEC118D3B05AFA2406D27BFB6602B45B80E91D4F446E4A753C251EA6EB8AB8E 3F304585DD202D8B04538EB4DD1F87D9A27E1E7B34A304396BBC38EE669E823BD03C1F43698B4B3128F3770C465CE415FD0F965F3170CED1470ED777751DE59D

模數的後半部分是正確的。這是為什麼?我在將素數 p 和 q 相乘時犯了一些錯誤嗎?

bc 在 unix 上:

肥胖=16

基數 = 16

p=F401F9E76A0E65D80AA8CF0D526D8D8747E53A3E1223B143AA73F675708ED966AB96965040907CCDF3D5C77904AA0906A6941E3A9C69AEC1F99E73E6EDB07191

q=E29F25EC241F0FEDAD28B8DD1DCBABBD066F4F557467AE6A2CE4ED34F9D93257E2F8C8B6EE1F7A687E386BFEE9C20C3388385E82AFA498237FF801D283216D4D

n=D8016FFDDFBA4B144B0AB13FF01968048B2FC9AA269311D11357DC8CEDCABA232BEC118D3B05AFA2406D27BFB6602B45B80E91D4F446E4A753C251EA6EB8AB8E3F304585DD202D8B04538EB4DD1F87D9A27E1E7B34A304396BBC38EE669E823BD03C1F43698B4B3128F3770C465CE415FD0F965F3170CED1470ED777751DE59D

p*qn

0

所以,這個問題是微不足道的,家庭作業(在發布之前)很容易做。

引用自:https://crypto.stackexchange.com/questions/25024