Stream-Cipher
流密碼的對數蠻力
首先,我想確保我正確理解流密碼:我通過流密碼放置一個plainchar(例如字節?)並接收一個cipherchar。正確的?
當我現在有一對明文/密文時,我可以暴力破解映射
plainchar[0]
到的所有秘密cipherchar[0]
。對於下一個字元,我只需要嘗試第一個成功的密碼。這樣,蠻力搜尋空間以對數方式減少。這個對嗎?
更新正如@poncho 正確指出的那樣,搜尋空間不是以對數方式減少的,而是為明文生成密文的昂貴的加密操作。這必須對每個嘗試過的密碼進行,這是暴力破解的所有可能密碼。
…然後我可以暴力破解映射
plainchar[0]
到的所有秘密cipherchar[0]
。對於下一個字元,我只需要嘗試第一個成功的密碼。這樣,蠻力搜尋空間以對數方式減少。是¹ , ²。問題是,*“暴力破解所有秘密”*本來就應該是不可能的。
¹ 對於安全的流密碼。
²以及另一個答案中正確指出的對數減少的非標准定義。
這樣,蠻力搜尋空間以對數方式減少。
嗯,不。
如果有 $ N $ 可能的鍵,然後你測試 $ N $ 第一個字節上的鍵。然後,您只保留第一個字節上成功的那些,並在第二個字節上測試那些;大約是 $ N / 256^1 $ . 然後,您測試那些在兩個字節上都成功的鍵,大約是 $ N / 256^2 $ 鍵。
當您計算已測試的密鑰總數(包括您多次測試的密鑰)時,您會得出預期的結果:
$$ N + N/256^1 + N/256^2 + N/256^3 + … = (256/255)N $$
和, $ (256/255)N $ 不是“對數減少” $ N $ …