2013-02-18 43 views
0

我要去做實現RSA加密。我想知道。在RSA加密中加密速度比解密快多少倍。我嘗試使用System.currentTimeMillis()來計算java中的已用時間。但給我時間加密= 0.05毫秒,而時間解密0.55毫秒意味着從那個1:11。我認爲這個結果是不理智的我的代碼是後續在RSA密碼學中加密時間是否小於解密時間?

//here my key has 256 bits 
for (;;) { 
      long begin = System.currentTimeMillis(); 

      for (int i = 0; i < num; i++) { 

      decrypt(); 
      } 

      long end = System.currentTimeMillis(); 

      long time = end - begin; 

      if (time >= 10000) { 
       System.out.printf("Average Encryption takes: %.2f ms\n", 
         (double) time/num); 
       break; 
      } 

      num *= 2; 
     } 

p = BigInteger.probablePrime(128, random); 
q = BigInteger.probablePrime(128, random); 
N = (p.subtract(one)).multiply(q.subtract(one)); 
e = BigInteger.probablePrime(32, random); 
d = e.modInverse(N); 

private void encrypt() 
{ 
    C= M.modPow(e,N); 
} 

private void decrypt() 
{ 
    RM = C.modPow(d, N); 
} 

請這些結果

任何解釋
+0

「num」的值是什麼? – David 2013-02-18 16:55:25

+0

[爲什麼RSA解密過程需要比加密過程更長的時間?](http://stackoverflow.com/questions/2316241/why-rsa-decryption-process-takes-longer-time-than-the-encryption -process) – osgx 2013-02-19 01:15:56

+0

根據'e'和'n'的選擇,加密的解密速度可能是解密速度的20到500倍。在你的情況下,他們比正常尺寸更接近你選擇了一個相當大的'e'和一個小'n'。 – CodesInChaos 2013-04-28 18:15:11

回答

5

請,不實現RSA自己,這是很容易做到的是錯誤的,它需要數月編寫能抵抗3-4次較老的密碼攻擊的版本。

All the crypto code you’ve ever written is probably broken - 託尼Arcieri

RSA encryption is more difficult. The 'best practice' in implementing RSA is: don't implement RSA. Other people have done it better than you can. - 馬修•格林(約翰霍普金斯大學)

Why Cryptography Is Harder Than It Looks - 布魯斯,1997:

大部分系統都沒有設計,並在演唱會中實現與密碼學家,但由工程師認爲密碼學只是另一個組成部分。不是。

在RSA的工業實施,加密使用某人的公鑰是更快然後解密使用的私鑰,因爲公共密鑰具有短公共指數e,通常是65537(0x10001)。這是事實,當使用快速求冪(方法名爲Exponentiation_by_squaring)。 這個操作的時間線性取決於位長度,線性地取決於1位指數的值,對於65537(17位長度和​​2位處於狀態1),長度和計數都很小。

在您的僞代碼RSA樣操作e是32位和它通常短於d,因此使用e指數操作比與相同更快d

+0

Mr osgx。你爲什麼說不要自己實現RSA?我嘗試通過使用java.I來學習RSA思想,嘗試理解理論學習,然後轉換爲實際應用程序。在上面的程序中,我測試了m(明文)= 64位時的加密和解密函數,並給出了正確的結果我的問題是錯誤的程序嗎?我不能在這裏計算時間,然後依靠結果和寫在我的研究中? – Mhsz 2013-02-18 21:15:40

+1

@mhsz學習RSA永遠不會錯,但是你明確地不應該嘗試將它轉換爲實際的應用程序。你不需要,你可以簡單地依靠提供的庫來代替。如上所述,對RSA有很多攻擊。防止例如使用定時的邊信道攻擊真的很難。 – 2013-02-18 22:22:22

+0

@mhsz,當然,你可以通過實現它來學習RSA,但是你不應該在實際產品中使用你的實現,因爲你的實現是脆弱的(易於破解/破解)。真正的(商業)RSA實現是巨大的,由經驗豐富的密碼學教育人員完成。 Crypto講師,[Dan Boneh(Stanford)](http://en.wikipedia.org/wiki/Dan_Boneh)說:「不要自己實施加密」。請閱讀有關RSA的真實書籍,例如: http://books.google.com/books?id=q35DEvUTkH0C特別CHAPT。 6或應用密碼學或應用密碼學手冊或PKCS#1。 – osgx 2013-02-18 22:42:42