強度等級:凱撒密碼
SITREP:我正在決定哪種形式的“隨機”數字生成最適合凱撒密碼,該密碼使用不同的整數加密每個字母作為移位。這種加密是通過我擁有並將編寫的 C# 程式碼處理的。我有以下幾種選擇。
(注意:此時將密鑰傳輸到接收器不是問題,當它出現問題時,我將打開一個新問題,這還包括如何隱藏我使用哪種方法獲取密鑰,因為那是再次提問。另外需要注意的是,所有未指定在特定度量中生成的隨機數都應假定是從 C# 程式碼生成的
Random.Next();
謝謝。)選項:
- 使用者輸入。這可以達到我的消息長度或低於它,在這種情況下,我可以使用隨機數或簡單地重複使用者提供的序列(如果這是選定的方法,請告知最佳選項)。
- 隨機生成的數字。我知道 OTP 的使用,但也想知道較短的密鑰有多可行。
- 電腦或使用者生成的密鑰。這種方法有很多想法,例如與文件大小、時間戳等相關的密鑰。是否有另一種有據可查的加密使用在我可能調查的同時對我的使用隱蔽起來很好用?
回答:如果社區未在此處公開支持,請支持聲明。如果您想連結到另一個可能有幫助的問題或文章,請隨時這樣做。感謝您的時間。
老實說,我認為它們都沒有太大區別,因為凱撒密碼是一個弱密碼。您可以在 Wikipedia 上查看 Breaking the cipher。它使用一種稱為頻率分析的方法,該方法忽略了鍵強度。
另外,您提到的三種方法都有其弱點。您應該使用安全的隨機生成器。
嗯,首先關於您的加密類型:
…對於一個用不同整數加密每個字母作為移位的凱撒密碼…
這實際上描述了一個 Vigenère 密碼。破解這種密碼的經典方法是
- 先確定密鑰長度
- 破解密鑰的每個字母的基礎凱撒密碼。
遵循這條路線的前提條件當然是密鑰比實際的加密文本短得多。為什麼?例如,如果文本有 20 個字元,而密鑰有 5 個字元,則密鑰的每個字母只有 4 個字母的加密文本,這使得頻率分析變得困難(但並非不可能!)。
如果密鑰與加密文本一樣長,那麼這會導致一種 OTP,據我所知,這種 OTP(如果操作正確)是不可破解的。基於密鑰是如何構造的假設,試圖破解它將是對密鑰的直接攻擊。
請注意:破解經典的 Vigenère 完全獨立於擁有關於密鑰的資訊。事實上,如果關鍵是一個普通詞,或者完全隨機的變化,Vigenère 也很容易被破解。唯一相關的問題是密鑰的長度。
現在你的選擇:
- 使用者輸入的密鑰,與文本一樣短或相同(或更大)大小:如果密鑰大小比文本短得多,則它是經典的 Vigenère,很容易被破壞。
如果密鑰與文本一樣長,則必須嘗試破壞 OTP 的方法。 2. 隨機生成的密鑰:(偽)隨機數生成器的周期遠大於任何合理的文本,因此對 Vigenère 的經典攻擊在這裡不起作用。再說一次,偽隨機數生成器有自己的漏洞,因此直接攻擊密鑰可能是一種選擇。
真正的隨機數會產生完美的、牢不可破的密碼。實際上,密鑰的傳輸會是問題,但是正如您在這裡明確地說這不是問題,這種加密將是完美的。 3. 電腦或使用者生成的密鑰:如上所述,問題不在於密鑰是由電腦生成還是由使用者生成,而是密鑰是否足夠長以使經典的 Vigenère 攻擊成為不可能。
底線:如果你想讓 Vigenère 堅不可摧,你必須同時做兩件事:
- 使密鑰與加密文本一樣長,並且
- 以無法猜測的方式創建密鑰