我只是想知道,如果你應該寫一種真正安全的應用程序,數據通過不安全的網絡傳輸,你會使用什麼樣的加密算法來使它安全?我知道幾個C++庫加密提供不同的算法很好的功能,但我不太確定使用哪種密碼 - AES,DES,RSA,Blowfish或者更多不同的東西?可用於C/C++的最強密碼?
請提供您的想法和建議。
我只是想知道,如果你應該寫一種真正安全的應用程序,數據通過不安全的網絡傳輸,你會使用什麼樣的加密算法來使它安全?我知道幾個C++庫加密提供不同的算法很好的功能,但我不太確定使用哪種密碼 - AES,DES,RSA,Blowfish或者更多不同的東西?可用於C/C++的最強密碼?
請提供您的想法和建議。
其實,我們可能不需要知道所有的細節。但是,恕我直言,將這些算法與責任鏈模式或複合+策略級聯。
這是個玩笑嗎? – 2010-04-02 18:03:00
您列出的加密需求的要求太少。這取決於具體情況。
例如,如果通信鏈路的兩個端點都是可信的,那麼您可以擔心加密,並且它們都會生成用於另一端的公鑰以加密信息。在這種情況下,RSA將是我個人的選擇。但是,如果您不相信另一個端點,並且正在使用加密來確定它是否「有密鑰」,那麼您將計數預設密鑰,而不是私有/公共加密。在這種情況下,三重DES(DES現在認爲有點弱)可能是一個不錯的選擇。
希望這會有所幫助!
我同意你的第一段 - 使用RSA。你的第二段已過時。現在認爲三重DES有點虛弱。 AES是另一個更好的選擇,或者蛇,或者Blowfish,另外兩個AES入圍者。 – 2010-04-02 17:45:19
@Ninefingers:Blowfish不是AES決賽選手。 Twofish是 - 如果我沒記錯的話。 Blowfish是一種較舊的密碼,旨在成爲一種好的DES替代品。 – sellibitze 2010-04-02 18:42:17
儘管一些加密算法比其他加密算法更容易破解,但弱點更多的是關鍵代。如果您的密鑰生成算法是可預測的,則更容易找出您的密鑰並解密數據包。
所以,我不會出汗哪種加密算法(AES很好)。但要確保你有一個很好的來源real隨機性生成你的密鑰。
如果您使用的是任何常見的POSIX操作系統,請使用/dev/random來生成您的密鑰。
和存儲。你可以使用世界上所有的密碼,但是如果我能掌握你的密鑰,這是浪費精力。 – 2010-04-02 17:49:08
任何公知道密碼已經很好地理解安全的水平,使這部分很簡單之間AES密鑰。我會更關心你使用的圖書館的質量和信任水平,以及你使用它的錯誤。你是否考慮過使用像ssh這樣的外部程序來完成關鍵操作並處理連接,並使用API庫驅動它?
Crypto++,也許是最有名的,最大的,最好的C++加密庫,包含一些可以使用的算法。它還可以爲您提供一個用於這些算法的良好的密碼安全隨機庫。
根據他們的FAQ,這很大程度上取決於你想要做什麼。從他們的recommended list of algorithms:
塊密碼:DES-EDE3,AES,蛇(蛇比AES速度較慢,但具有較大的安全餘量,並且不容易受到定時攻擊。)
流密碼:上述任何CTR模式中的分組密碼
快速流密碼:Salsa20,Panama,Sosemanuk(可從第5版獲得。5)
散列函數:SHA-256,SHA-512,惠而浦
消息認證碼:HMAC/SHA1或HMAC與
公共密鑰加密的上述散列函數之一:RSA/OAEP/SHA1,ECIES
簽名:RSA/PSS/H,ECDSA/H,其中H的上述散列函數
密鑰協商一個:DH,ECDH
隨機數發生器:RandomPool,AutoSeededRandomPool
我們無法給出一個確切的答案因爲沒有人不知道你想要完成什麼。
你所分割對稱塊密碼與公鑰密碼首先:
順便說一句:
然而所以你不應該考慮他們永遠安全的事情可以根據CPU的在幾年功率變化..
有一點要考慮的是,公鑰密碼通常比慢分組密碼,這就是爲什麼commong協議通常使用第一個來交換一個simmetric密鑰,然後與AES等算法一起使用。
3DES仍被認爲是安全的。 – 2010-04-02 17:44:34
答案是:不。如果它必須是安全的,並且您提出這個問題,這意味着您需要找一位安全專家來做。您不打算通過在SO上尋求幫助來設計安全協議。你可以[也許]使用現有的協議,如ssh或TLS,但如果你自己推出,你將失敗。
如果您想通過不安全的網絡傳輸數據,您需要的不僅僅是一個密碼,還需要一個安全的協議,可能包括密鑰分發和身份驗證。
如果你真的對加密實現非常認真,不僅僅是爲了理解密碼學的基礎數學,而是需要做更多的事情,而不是正確地實現數字加密。您還需要擔心旁路攻擊。例如,如果您的實現需要不同的時間(取決於密鑰),那麼攻擊者可以根據您的各種響應時間推斷出密鑰的相關信息。這只是基本的算法,沒關係把它放在一起。
這通常是一個尚未解決的問題和正在進行的研究領域。大多數或所有的實現都是有缺陷的,儘管對於最新版本的常用庫來說,可能並不是任何人都公開宣稱可以利用它們的方式。過去已經演示了基於時間的OpenSSL攻擊,儘管只有在高度可預測的本地網絡AFAIK上。基本上,只要您喜歡就可以度過,直至包括整個職業生涯。
在實踐中,只要使用SSL,無論您的平臺使用哪種實現。
語言(C/C++)與此問題無關。用brainf * ck編寫的RSA與用C編寫的RSA一樣安全。大多數着名的語言都具有高質量的加密庫。 – 2010-04-02 17:42:08
「大多數知名語言都具有高質量的加密庫」,不幸的是,brainf * ck是一個顯着的例外。 – 2010-04-02 18:27:48