2013-06-18 14 views
0

我道歉,如果這已經回答過了,但我沒能發現任何東西。這個問題是由另一個與安全有關的問題中留言這裏的啓發上SO:安全:更長的密鑰與更多的可用字符

How to generate a random, long salt for use in hashing?

具體評論如下(接受的答案的第六評論):

...二,更重要的是,這將只返回十六進制 個字符 - 即0-9和AF。它永遠不會返回一個字母更高的 比F.你減少你的輸出,只是16個可能的字符 時,有可能是 - 而且幾乎肯定是 - 許多其他有效 字符。

- AgentConundrum 10月14日在'12 17:19

這讓我思考。假設我有一些任意的字節序列,每個字節隨機分佈在2 ^(8)。假設這個鍵是A.現在假設我將A轉換成它的十六進制字符串表示,鍵B(例如0xde 0xad 0xbe 0xef =>「d e e d b e e f」)。

有些東西是顯而易見的:

  • LEN(B)= 2 LEN(A)
  • 在B中的符號被限制在2 ^(4)離散值,同時在所述的範圍內的符號2 ^(8)
  • A和B表示相同的 '數量',只是使用不同的編碼。

我的懷疑是,在這個例子中,兩個密鑰最終會同樣安全(否則每個密碼破解工具只會將一個表示轉換爲另一個表示以進行更快速的攻擊)。然而,在這個人爲的例子之外,我懷疑有一個重要的安全道德可以擺脫這種情況;特別是在選擇隨機性來源時。

因此,簡而言之,這是更加希望從安全的立場來看:更長的密鑰或鍵,其值涵蓋多個離散的符號?

我對這背後的理論很感興趣,所以對於任何人也可以提供數學/證據的人來說,額外的獎勵金星(或者至少是我的不倦的讚美)。

+0

請注意2^8是單字節強度鍵。不是8字節,因爲我認爲你繼續假設。我會繼續閱讀並試圖提供一個答案 –

+0

的確。我要傳達的是任意長度密鑰的每個離散字節覆蓋2 ^(8)。上面的示例8字節密鑰實際上存在於2 ^(64)中。我對這種含糊不清的道歉。 – phobos51594

+0

我陷入了困境。我正在研究一個答案......它相當長。我只是完成了一個加密課程,所以我現在真的知道這個東西! –

回答

1

讓我們長8可能的組合的二進制字符串開始從00000000 11111111和所有排列這給我們的2^8或256種可能的密鑰的密鑰空間。現在讓我們看看選項A:

答:添加一個附加位。 我們現在有一個9位的字符串,所以可能的值在000000000和111111111之間,這給了我們一個2^9或512個密鑰的密鑰空間大小。然而,我們也有選項B.現在讓我們假設我們有一個三元系統,其中接受的數字是0,1和2.仍假設一個長度爲8的字符串,我們有3^8或6561個鍵......顯然要高得多。

但是! Trinary不存在!

讓我們來看看你的例子。請注意我會澄清一些,你可能會對此感到困惑。用一個4字節的開始(或32位)的位串: 11011110 10101101 10111110 11101111(這是,順便說一句,相當於0xDEADBEEF位串)

由於我們的各數位可能的值是0或1,的基我們的指數是2.由於有32位,我們有2^32作爲這個密鑰的強度。現在讓我們看看你的第二把鑰匙DEADBEEF。每個「數字」可以是0-9或A-F的值。這給了我們16個值。我們有8個「數字」,所以我們的指數是16^8 ...也等於2^32!所以這些鍵的強度是一樣的(另外,因爲它們是相同的東西)。

但我們談論的是真正的密碼,而不僅僅是那些愚蠢的小二進制東西。考慮一個長度爲8的小寫字母的字母密碼:我們有26個可能的字符,其中8個字符,所以它的實力是26^8或者2088億(大概需要1分鐘)。在長度上添加一個字符會產生26^9或5.4萬億個組合:大約20分鐘左右。讓我們回到我們的8字符字符串,但添加一個字符:空格字符。現在我們有27^8,這是282億....比添加一個額外的字符更少!

當然,合適的解決方案是做到這兩個:例如,27^9是7.6萬億個組合,或約半小時的破解。使用大寫字母,小寫字母,數字,特殊符號和空格字符的8個字符的密碼需要大約20天才能破解......仍然不夠強大。添加另一個角色,這是5年。

作爲參考,我通常會將我的密碼設置爲16個字符以上,並且它們至少有一個Cap,一個空格,一個數字和一個特殊字符。這樣一個16個字符的密碼需要數百萬億年的時間才能暴力破解。

+0

有趣。我期望0xDEADBEEF和「DEADBEEF」是相等的,但是我曾經期望在搜索空間中添加一個字符會獲得勝利,因爲字符對鍵中的每個索引都是「可用的」。也不知道有關trinary的一點。酷寫! – phobos51594

+0

@ phobos51594:只是想澄清。 0xDEADBEEF是十六進制代碼,每個字符的鍵空間爲16。然而,「DEADBEEF」這個詞的每個字符(A-Z)有一個26的密鑰空間。此外,trinary不存在(也不是一個詞:P)。我僅僅以此爲例來說明增加複雜性的差異。 –

2

如果不同的符號的密碼可用的數量爲x,並且長度爲y,然後不同的可能的密碼(因此針對蠻力攻擊的強度)的數目是x ** y。所以你想要最大化x ** y。兩個增加x或增加y會做到這一點,哪一個讓更大的總取決於所涉及的實際數量和你的實際限制是什麼。

但是一般來說,增加x只給出多項式增長,而增加y則給出指數增長。所以從長遠來看,長度是勝利的。

+0

+1的增長模式,這真的很有幫助。謝謝(你的)信息! – phobos51594

相關問題