2013-01-23 23 views
-2

我可以很容易地手工製作類似於下面的我自己的加密算法:使用衆所周知的加密算法有什麼好處?

// make sure the private key is long enough 
byte key[] = {0x3e, 0x33, 0x7e, 0x02, 0x48, 0x2a, 0x4e, ...}; 
byte data[] = "a string to be encrypted".getBytes("utf-8"); 
for (int i = 0, j = 0; i < data.length; ++i, ++j) { 
    data[i] ^= key[j]; 
    if (j + 1 == key.length) 
     j = 0; 
} 

通過上面的算法,如果我不放棄的私鑰,我找到破解加密的沒有簡單的方法(或我太天真了?),如果可以像這樣輕鬆創建加密算法,那麼創建標準有什麼意義?使用這些衆所周知的算法有什麼好處?

+1

如果您不滿意我的問題,請在此留下您的理由! – neevek

+0

這裏有一些很好的理由: http://stackoverflow.com/questions/3651090/home-made-cryptography –

回答

3

直接談論你的算法,有一對夫婦的主要問題是:

  1. 如果你的數據比你的關鍵時間越長,那麼它就會變得非常容易恢復你的關鍵,因爲它就像一個Vigenere密碼。

  2. 您只能使用密鑰來加密單個消息。使用同一個密鑰加密兩個或更多消息會導致重複使用消息中密鑰的相同問題,但更糟糕的是。

  3. 因爲您的密鑰必須與實際上安全的消息一樣長,所以您有一個密鑰管理噩夢。你如何存儲與信息一樣長的密鑰?你如何安全地將它傳達給任何想要閱讀的人?如果你想加密一個1GB的文件怎麼辦?您現在需要2GB存儲空間用於您的加密版本

  4. 您的密鑰必須是完全隨機的。隨機數字生成器中的任何缺陷都會暴露您的消息和密鑰的相關信息。誠然,這是一個像AES算法的問題太多,但同時不良RNG會降低努力打破了AES的消息/關鍵,它是不是幾乎一樣糟糕,因爲它會爲你的方案

好像AES這樣的已知算法解決了這些問題,使用短密鑰來獲得更高的安全性。一個256位的密鑰可以用來加密大量的消息,然後它變得不安全,並且管理和存儲256位密鑰比1GB密鑰容易得多。

+0

謝謝你,這是**的**答案我找!它清楚地指出了我的算法的缺陷,這有助於我理解爲什麼它不安全,爲什麼我應該使用衆所周知的算法而不是手工製作算法。再次感謝彼得,這真的很有幫助! – neevek

1

使用衆所周知的算法的主要好處是,它將被審查和分析缺陷和弱點。如果您推出自己的產品,則無法獲得社區評估的好處。此外,根據您的平臺,使用內置加密可能幾乎同樣簡單或簡單。

我不是密碼分析方面的專家,但是這個簡單的東西可能並不安全。

此外,如果這很容易,不是每個人都這樣做嗎?

3

您使用一個衆所周知的算法爲了not become Dave

Schneier's Law指出「任何人都可以發明一種安全系統,以至於他或她無法想象如何打破它。」

這基本上意味着:安全系統(加密算法,認證系統,...)不能被認爲是安全的,因爲創建者說它是安全的。其他專家必須先審覈它(通常需要長時間審覈)才能被視爲安全。

+0

第一個鏈接很有趣,我不會成爲戴夫! – neevek

相關問題