為什麼算法需要密鑰空間?
為什麼算法需要密鑰空間?我認為加密的人會定義他/她自己的密鑰。
加密算法不需要密鑰空間。然而,根據定義,它有一個。
在我看來,您的困惑主要是術語。在密碼學中,加密系統的“密鑰空間”被簡單地定義為算法可以接受的所有可能(不同)密鑰的集合。
例如,假設我們回到了古羅馬時代,使用簡單的移位密碼加密消息。顯然,要加密和解密消息,我們需要知道正確的密鑰:字母表移動的字母數。
顯然,“1”是這個密碼的有效密鑰,因為我們確實可以將字母表移動一個字母。“2”和“3”也是如此,依此類推。同樣清楚地,“1.5”不是一個有效的鍵,因為將字母表移動一個半字母是沒有意義的。因此,雖然鍵 1、2 和 3 都是鍵空間的一部分,但 1.5 不是。既不是 $ \pi $ 或者 $ \sqrt{-1} $ 或“香蕉”。
(一個更微妙的問題是移位密碼的密鑰空間是否應該包括“0”或“-1”或“999”。當然,零字母的字母移位是可能的;它只是不會掩蓋任何資訊方式,因此即使按照古羅馬標準也是完全不安全的。類似地,我們可以將字母表移動 999 個字母——但是,由於現代和古羅馬字母表實際上都沒有那麼多字母,它只會環繞並等價於一些較小的移位量。通常,出於密碼分析的目的,我們希望忽略這些明顯等效的密鑰,而只是說移位密碼的密鑰空間具有與字母表中的字母一樣多(不同)的密鑰;或者少一個,如果不允許使用零鍵。)
那麼,為什麼我們要關心鍵空間或它的大小呢?好吧,一方面,某人攻擊密碼的一種簡單方法是嘗試使用每個可能的密鑰解密擷取的消息,並查看哪些結果是有意義的。密鑰空間越大,密碼就越能抵抗這種幼稚的攻擊。(此外,在現代加密中,我們實際上嘗試設計我們的算法,以便希望這種天真的攻擊是最好的,或者至少接近最好的。因此,除非有人通過找到更有效的攻擊來破解密碼,密鑰空間的大小是算法強度的直接衡量標準。)
此外,當我們選擇我們的加密密鑰時,我們顯然需要選擇一個屬於密鑰空間的密鑰;否則,根據定義,它將不起作用。實際上,最安全的選擇通常是從整個密鑰空間中均勻地隨機選擇密鑰。如果我們不這樣做(並且攻擊者知道或可以猜到我們是如何選擇我們的密鑰的;我們通常無法證明事實並非如此),那麼他們可以通過嘗試我們更有可能選擇的密鑰來加速攻擊第一的。因此,僅僅知道鍵空間的大小是不夠的;我們還需要知道密鑰空間是什麼,或者至少足以讓我們從中選擇隨機密鑰。