是什麼,MCRYPT_RIJNDAEL_128
,MCRYPT_RIJNDAEL_256
,MCRYPT_BLOWFISH
之間的差異等哪一種最適合在網絡數據傳輸?這些加密算法有什麼區別?
回答
Rijandel是目前「一個好標準」算法AES的另一個名稱。數字128或256是密鑰長度。
河豚是一個有些較老的64位塊密碼(AES是128比特塊密碼)。
你真的不能說,它們中的任何「好」或「差」的,因爲他們沒有真正地被打破,但總體AES應該是優越,大多數實現更快了。另外,大多數現代CPU在硬件上都支持AES,這會使其更快......所以不是沒有什麼理由使用AES。
至於密鑰長度,對於對稱密碼來說,128位實際上是足夠的。除非你是你的國家的核武器代碼的守護者,否則你會想用256位密鑰代替。
請注意,如果你想在一個合理的方式使用256位密鑰,那麼您將需要大約40個字符的密碼。這再一次表明,密碼算法不是安全鏈中的薄弱環節,而是人。
編輯:在第二個想法,50-60個字符大概是對於256位密鑰所需的密碼長度更合理的猜測。英語語言每個字符的熵不會超過2比特。假設你使用了一個更隨機的字母和數字字符序列(但是仍然必須能夠記住它),所以也許我們每個角色會有4-5位熵(相當樂觀!)。這將需要您輸入51到64個字符,因此密碼的熵大致與密鑰匹配。
現在的問題是:我們有多少人有50個字符的密碼? :-)
更新:
截至2011年年底,存在上的Rijndael/AES(波格丹諾夫,Khovratovich,Rechberger),這是不是爲「只是理論」或「搞笑降低一個一鍵恢復攻擊全面「的攻擊。這種攻擊對全方位AES有效,比蠻力快4倍。因此,從形式上講,人們可能會認爲Rijndael被「破壞」。
實際上,攻擊迄今爲止不相關。即使支持的密鑰長度最短,攻擊速度比蠻力還要快四倍,即使採用大規模硬件實施也不切實際。但是,如果攻擊能夠得到改善,未來這可能會發生變化。
誰說加密密鑰(和IV)必須是人類可讀的? ['openssl_random_pseudo_bytes(32)'](http://us3.php.net/manual/en/function.openssl-random-pseudo-bytes.php)將爲您提供256位的加密足夠的隨機性,這恰好是AES-256中的最大密鑰大小。它可以安全地存儲base64編碼。 – Charles 2011-03-10 00:39:08
每個角色的2位熵?聽起來低的密碼方式,我猜想更像是每個字符5或6位。我猜想英文文本(如報紙文章)的每個字符的熵會比密碼的熵小得多。 – 2011-03-10 00:40:14
@Charles:確實,你可以爲密鑰創建256位隨機數,但是它有什麼好處?這隻會進一步改變問題:你如何保護這個隨機密鑰?不管隨機生成的密鑰有多少個隨機比特,它不會比安全鏈中最薄弱的環節更安全。對稱加密永遠不是薄弱環節。 99%是人類的時間(因爲人類完全無法選擇好密碼並保持安全),而對於剩下的1%,它幾乎總是一個重要的交換協議。 – Damon 2011-03-10 00:54:04
這取決於你想要的答案類型:實現差異僅僅是編程問題,而設計差異通常是非常詳細的數學證明。解釋幾種加密算法之間錯綜複雜的設計差異可能超出了本網站的範圍。另外,每種算法都有缺點,有些是已知的,有些則沒有。現有算法中的特定弱點通常會導致他們退休,但可以採取一些方法來解決它們(經典示例:DES有一些密鑰的子集,導致易於破解的代碼,解決方法是不使用這些密鑰)。
兩個Rijndael算法和河豚被認爲是安全的。
MCRYPT_RIJNDAEL_128 VS MCRYPT_RIJNDAEL_256:
唯一的區別是塊的大小。您可以使用128位,192位或256位密鑰。
更大的密鑰需要更長的時間來蠻力。
256位版本爲此更安全。
注意:128位版本仍然需要大量時間時間蠻力。
目前Rijndael算法是高級加密標準:
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
AES普遍較快是那麼河豚,因爲:
- 該算法本身是處理器更有效(位VS字節塊)。
- Manny處理器支持AES的硬件加速。
結論:
- 所有三個選項都足夠安全的數據傳輸。
- 選擇取決於數據的'祕密'。
- Rijndael被廣泛使用,因此在某些情況下更容易實現。
對128鍵的蠻力是不現實的。它不會發生。如果你有一個i7,你可以每秒做大約4000萬次AES操作。假設我的數字是錯誤的1000倍,並假設攻擊者擁有一個擁有5億臺這種機器的巨大僵屍網絡。現在用這些數字除以2^128再除以(86400 * 365)。那仍然是10^11年。哎呀,我們的星球甚至還沒有存在10^11年。很可能您的密碼將被破壞。 – Damon 2011-03-10 00:41:46
這就是爲什麼我提到它需要'很多時間'。目前,暴力破解是解密AES加密數據而不使用密鑰的唯一方法,換句話說,沒有更快的方法,然後嘗試所有可能的選項。基本上128位AES加密仍然非常安全,有太多的可能性:) – Anne 2011-03-10 01:09:43
'RIJNDAEL_256'不是AES。只有'RIJNDAEL_128' – CodesInChaos 2013-01-18 22:24:37
RSA是一種非對稱加密算法,最大密鑰長度2048,用於2030年建議AES是對稱算法,最大密鑰大小爲256位,用於2015年擬議年度蛇形加密算法也是對稱算法,密鑰大小爲256,
這並不能回答這個問題! – alfasin 2012-10-10 18:31:12
對這個問題的答案是,關於MCRYPT_RIJNDAEL_128和MCRYPT_RIJNDAEL_256,「數字128或256是關鍵字長度」 - 這是不正確的。這些數字是指塊大小,而不是密鑰長度。但是,兩種實現(使用128或256位的塊大小)都可以接受128位或256位的密鑰。
- 1. 這些有什麼區別?
- 2. 這些有什麼區別?
- 3. 這些np.linalg.norm方法有什麼區別
- 4. 這些.find()用法有什麼區別?
- 5. 這些縮放算法有什麼區別?
- 6. 這些陳述有什麼區別嗎?
- 7. 這些LINQ查詢有什麼區別?
- 8. 這些功能有什麼區別
- 9. 這些git命令有什麼區別?
- 10. 這些verilog代碼有什麼區別?
- 11. 這些在C++中有什麼區別?
- 12. 這些CIL語句有什麼區別?
- 13. 這些GAE庫有什麼區別?
- 14. 這些查詢有什麼區別?
- 15. 這些字符有什麼區別?
- 16. 這些C++代碼有什麼區別?
- 17. 這些ID /類有什麼區別?
- 18. 這些SQL條件有什麼區別?
- 19. 這些PHP變量有什麼區別?
- 20. 這些#import聲明有什麼區別?
- 21. 這些授權API有什麼區別?
- 22. 這些POST命令有什麼區別?
- 23. 這些功能有什麼區別?
- 24. 這些例子(*和&)有什麼區別?
- 25. 這些JSON命令有什麼區別?
- 26. 這些NGINX模塊有什麼區別?
- 27. 這些os.popen調用有什麼區別?
- 28. 這些查詢有什麼區別?
- 29. 這些選擇器有什麼區別?
- 30. 這些字符有什麼區別?
什麼數據正在傳輸,它們之間傳輸了什麼? – 2011-03-09 23:55:33
這個問題非常廣泛 - 你能縮小範圍嗎? – 2014-01-07 15:36:24