我的設備不支持完整的3DES(EDE)。我如何使用標準DES來模擬一個?加密模式是CBC。效仿3DES EDE只使用DES
回答
通過拾取它們不以任何方式彼此相關的三個獨立的DES密鑰開始。
您需要將DES放入ECB模式,而不是CBC模式。您還需要確保每個加密和解密操作僅在64位塊上完成,沒有更多或更少。填充方案等將導致實現中的漏洞,並且將導致通過蠻力發現塊內容的速度比對每個密鑰的蠻力更快。
利用第一密鑰,加密您的明文。使用第二個密鑰解密該值。使用第三個密鑰,加密完整塊的值。它看起來像這樣:
Encrypt(k3, Decrypt(k2, Encrypt(k1, plaintext)))
解密是周圍的其他方法,看起來像這樣:
Decrypt(k1, Encrypt(k2, Decrypt(k3, ciphertext)))
當加密塊用3DES然後需要申請您的運行模式如CBC或CTR,並在需要時應用填充。
要小心。
3DES只是DES使用的明文三次:
ciphertext = E_K3(D_K2(E_K1(plaintext)))
plaintext = D_K1(E_K2(D_K3(ciphertext)))
E_Kn = Encryption with Key number n.
D_Kn = Decryption with Key number n.
所以,你可以很容易地 「模仿」 只用DES 3DES。
在CBC模式中你需要一個四開始,然後異或與以前的密文塊的下一個明文塊。如果你的設備不支持CBC,那麼這也很容易「模擬」。
塊模式加密
你要做的就是,你在兩個或三個分別分成大小爲128位(16字節)或168位(24字節)的密鑰。因此,對於一個16字節的密鑰K,你將有兩個密鑰Ka和Kb,對於一個24字節的密鑰,你將有Ka,Kb和Kc。 DES ABC鍵具有約112比特的有效強度,DES ABA鍵有一個有效強度的約80比特。要加密一個8字節的塊(DES和3DES的塊大小),你需要執行下面的加密操作:Cn = E(Ka,D(Kb,E(Kc,Mn)))其中Mn是純文本消息的第n個塊,並且Cn是密文的第n個塊。如果你沒有Kc,那麼你可以使用Ka(DES ABC鍵和DES ABA鍵)。
爲此,需要一個單獨的塊加密的DES,其等同於在ECB模式的單個塊加密,或者與CBC單個塊加密和由值00H的8個字節的IV。
CBC
所以這是排序的塊加密,現在你需要某種形式的加密模式和填充模式。我將在這裏解釋CBC模式加密,ECB不應該用於加密非隨機數據。
使用CBC模式加密,您可以將矢量與純文本進行異或運算。矢量通常只是最後一個DESede加密塊的輸出。由於您沒有任何前面的密文,您需要使用隨機數據自己創建第一個向量。這個向量被稱爲初始化向量或IV。請參閱wikipedia以獲得清晰的圖像。
填充塊密碼模式只允許純文本的完全塊進行加密。所以你需要一些填充方案。儘管有很多填充模式,但大部分時間都使用PKCS#5填充。您應該像下面這樣填充純文本:填充字節值爲0Xh,其中X是創建完整塊所需的填充字節數。 X應該在1到8之間:換句話說,總是使用PKCS#5填充;這使得可以從純文本中區分填充字節。
如果您在在線協議中使用填充,那麼您需要防止填充oracle攻擊。在這種情況下,強烈建議使用某種形式的完整性檢查,例如,通過使用單獨的密鑰在密文上添加HMAC。
- 1. 使用DES/3DES與python
- 2. 解密錯誤使用des ede,javax.crypto.badpaddingexception
- 3. 使用三重DES(3DES)與PHP 7.1
- 4. 今天還在使用DES還是3DES?
- 5. PBE優於DES,3DES和AES
- 6. 哪些密鑰長度具有des-ede-cbc密碼?
- 7. DES示例無效?
- 8. OpenSSL.NET DES函數
- 9. 2個不同的3DES(ede)鍵在加密時給出相同的輸出
- 10. 3DES的密鑰大小無效
- 11. 仿效在bash
- 12. 設置CEDET/EDE與Irrlicht配合使用
- 13. 使用庫設置emacs EDE項目
- 14. 仿效Paper.js
- 15. 在JavaScript中仿效/使用延續?
- 16. 仿效SQL
- 17. 使用OpenSSL解密DES
- 18. 使用System.Security.Cryptography使用DES類c加密#
- 19. 如何效仿Event.timeStamp
- 20. 仿效觸摸屏
- 21. 使用DES中的私鑰在使用DES時不會自動生成密鑰
- 22. 無法使用DES cbc加密
- 23. 如何在Android上使用3DES算法?
- 24. 使用Java解密3Des中的值
- 25. 3des for arduino uno
- 26. Triple Des SSH2 via phpseclib
- 27. 效仿Python的在.NET
- 28. 經典ASP中的三重DES解密?
- 29. 效仿的p點擊:selectOneRadio
- 30. 效仿.NET [過時]屬性
如果在塊邊界上不執行操作,由於填充和應用CBC,將導致不安全的實現。 CBC和填充必須在複合3DES操作之後完成。 – 2012-04-20 12:26:40
@ MichaelJ.Gray這不是一個非常明確的建議邁克爾。對於加密,我不認爲你想在複合3DES操作之後進行填充。 – 2012-04-20 13:55:13
@owlstead我的錯誤。你是對的。 CBC將在之後被應用,原因很明顯,並且將以加密(k3,Decrypt(k2,Encrypt(k1,Pad(plaintext))))的形式對未對齊的塊進行填充。當我昨晚發佈時,已經很晚了;) – 2012-04-20 22:12:08