使用多個獨立但非隨機密鑰的 XOR 有多安全?
我將從實際的角度來處理這個問題。所有範例都不是真實的,僅用於說明目的。
我有一條消息,即秘密比特幣密鑰,我想安全地儲存它。
消息 =
KwjwmREseNZmZ8yeNKrurN6qPuh9FhrLAefYa2nTLafLkGmWW9ta
為此,我想出了 4 個看起來獨立、有點私密且可以恢復的密鑰。
關鍵 1 是我最喜歡的書中第 100 頁及以上的一組遺言,以匹配消息長度:
鍵1 =
help knows the at sortes state the citizens color science costs unfairness
密鑰 2 是來自比特幣區塊編號 121047 的 Merkle Root,這可能是我 2 個孩子的生日 121 和 047(對於一年中的日期數,可在 blockchain.info 輕鬆獲得)
鍵2=
1b28458e4191e60f4553357cb7b54a9cc15ea0a27e8f5df27dab6d3aab3d3be4
鍵 3 是我的主要婚禮照片文件的名稱,儲存在我的相冊、郵件中並與朋友共享。
鍵3=
IMG_20170511_144510.jpg
Key4 是另一個比特幣地址,僅用於作為密鑰,兩份將存放在家庭保險箱和銀行的保險箱中
鍵4 =
L1jkNAKpG1hu7omtYW6fFFDGw1AaYrdkiUr4NpBANziKVHdZgx8v
密鑰不會在任何地方重複使用。KEY3 被複製以匹配消息的長度。對消息和所有密鑰進行異或(逐字節)以獲得安全程式碼。
問題是: 生成的程式碼有多安全?我可以線上儲存嗎?如果 1 或 2 個密鑰(但不再有)被洩露,安全性能否保持?
我知道可能沒有正確的答案,但如果我錯過了一些漏洞,我將不勝感激。我應該有更多的鑰匙嗎?什麼樣的鑰匙會有幫助?我可以混合更多純文字鍵嗎?
如果您問為什麼不使用具有良好加密的密碼,對我來說驗證進行加密的程序會比較棘手,而在任何舊的離線智能手機上用幾行 JavaScript 進行 XOR 在 HTML 中是微不足道的(之後將被銷毀) ,並且在未來將是微不足道的。
謝謝。
PS。如果有人感興趣,我可以嘗試弄清楚如何發布完成這項工作的 HTML。
生成的程式碼有多安全?我可以線上儲存嗎?
很不安全。無論您如何想出這些密鑰(實際上是密碼片語),它都會有極端的偏見。這些偏見足以對你的明文做出一些很好的猜測。這就是 RC4 在 WEP 協議中不安全的原因,並且 RC4 的偏差相對較小。
這也存在密碼通常存在的問題,即您作為人類無法準確記住複雜的密碼。您必須將它們全部寫下來(在這種情況下可以發現它們)或使用一些實際上會降低其強度的方案(您的鍵 1 到 3)。
如果 1 或 2 個密鑰(但不再有)被洩露,安全性能否保持?
對於發現的每個密鑰,其他密鑰的偏差變得更加明顯。如果發現了 2 個鍵(尤其是 2 和 4 鍵),這幾乎是您在報紙上找到的一個難題來解決。
我的建議是堅持使用已知算法。如果您需要使用密碼加密某些內容,請使用 bcrypt 之類的東西將您的密碼擴展為高熵密鑰,然後使用該密鑰在 CTR 等良好模式下使用 AES 之類的東西進行加密。
您的方案非常安全,因為密鑰是相當隨機的。但是你必須意識到你的五個真正的關鍵是:-
Key1: last words from page 100 in your favourite book Key2: my 2 kids' birthdays Key3: main wedding photograph Key4: "L1jkNAKpG1hu7omtYW6fFFDGw1AaYrdkiUr4NpBANziKVHdZgx8v" Key5: there are 4 keys that need to be xored together
這部分是書籍密碼,部分只是關鍵材料的指針和輔助回憶錄。與完美相比,安全性略有下降,因為密鑰並非完全隨機。 生活模式分析可能有助於將搜尋範圍縮小到您最喜歡的事物。顯然,關鍵 4 必須寫下來。但是你可能很狡猾,把它紋在你的貓背上的皮毛下面。實際的字元序列是相當不相關的,只是工作的一部分。
這裡提出了一個類似的想法,它使用 pi 的數字作為流密碼 /OTPish 事物。同樣,真正的關鍵是從零開始的偏移量。
安全性的一個主要來源是沒有人知道真正有多少密鑰。最重要的是,您不必寫下密鑰 1 - 3 或 5。我不認為可以用比特來量化安全級別。只是假設它是牢不可破的。