Provable-Security
密碼原語中可證明安全性的簡單設計
我們可以說一個密碼原語有 $ n $ 位安全性,如果它不能在少於以下的時間內破壞一種攻擊 $ 2^n $ 時間(在某些情況下是時區乘積)。密碼原語可以說是 $ n $ 如果最快的可能攻擊(包括相同類型的理論和未來攻擊)至少需要 $ 2^n $ 時間。
為了做出這樣的安全證明,我們需要分析我們的加密原語。如果我們有更複雜的設計,我們可能會擁有更多開箱即用的安全性(和性能,以及其他任何需要的東西),但我們無法證明這一點。
例子:
- 根據 Wikipedia的Salsa20/15對差分密碼分析是 128 位安全的,並且僅使用add、rotate、xor和**add的非線性
- SHA3 有 24 輪 $ n $ 輸出位是 $ \frac{n}{2} $ -bit在一些合理的假設下安全地防止衝突,並且只使用旋轉、異或、非,並且具有來自**和的非線性
所以我們可以使用更簡單的設計,從而使密碼分析變得足夠容易,我們可以製作安全證明。這樣,我們就可以準確地知道需要多少輪,並且只使用那麼多輪。相比之下:
- AES-128 在創建時 6 輪對所有攻擊都是 128 位安全的,添加了 4 輪作為安全邊際,總共 10 輪,使用s-box、xor、shift、添加 非線性主要來自s -盒子
- SHA-256 有 64 輪(沒有理由?)並且是 128 位安全的,可以防止47 輪的衝突,使用add、rotate、xor 和(對於選擇/多數)具有來自add 的非線性,以及
我們希望通過更精細的設計,它們更高效,需要更少的輪次來獲得相同的安全性並提供更好的性能。它們的複雜性使得設計針對它們的攻擊變得更加困難。
現在有什麼更好的做法,簡單地設計一些東西以便證明它是安全的,或者設計一些更複雜的東西並依賴它在其生命週期內不會被破壞?
未來總是有可能出現新的攻擊,並破壞已被證明可以抵禦當時已知的所有類型攻擊的安全工具。但沒有什麼可以真正防禦這一點。
此外,這裡比較的是設計——將 256 位流密碼與 128 位塊密碼放在一起,將海綿散列與 Merkle-Damgard 散列放在一起是不公平的。也恰好是 Salsa20 和 SHA3 比 AES 和 SHA2 更新。
簡單地設計一些東西,以便證明它是安全的
如果不做一些假設,我們目前無法證明任何東西的安全性(嗯,除了資訊安全的東西,如 OTP)。我們能做的最好的就是:
- 這是安全的,假設這個抽象問題很困難(但這並沒有說明抽象問題是否真的很困難)。公鑰密碼系統往往屬於這一類。
- 這對這些類型的攻擊是安全的(但這並沒有說明其他類型的攻擊)。AES 屬於這一類,因為我們有針對線性和差分密碼分析的安全性證明。
並希望它在有生之年沒有壞掉?
我們不知道如何在簡單或複雜系統中避免這種情況。