Algorithm-Design
什麼是加密原語,真的嗎?
我遇到的“密碼原語”這個詞越多,我就越沒有信心真正理解它的含義。只是我,還是這個詞沒有通用的定義?或者這個詞是否有一些我缺少的上下文敏感性?
一些說明我困惑的問題:
- 這個術語是指我們只有啟發式安全參數的算法嗎?
- 它是指由操作模式或協議呼叫的建構塊,獨立於其安全參數的形式嗎?
- 它是否指的是流行的安全目標,如消息認證碼、偽隨機函式、抗碰撞雜湊函式等,通常用作模式和協議中的建構塊?
- 在 SHA-2 等 Merkle-Damgård 散列函式中,這是原語:
- 雜湊函式作為一個整體?
- 壓縮功能?
- 一個但不是另一個,隨著我們談論 SHA-2 的上下文而變化?(例如,分析 SHA-2 的安全性與分析使用它的協議的安全性。)
- 由於 HMAC 的安全性證明吸引了 Merkle-Damgård 散列的壓縮函式的屬性,在這種情況下是“原始”,散列函式還是壓縮函式?
- 在 SHA-3 中,哪些是“原語”?
- SHA3-256
- Keccak海綿功能
- 凱卡克排列
正如其他人在評論中指出的那樣,“密碼原語”是通用的建構塊。這究竟意味著什麼取決於您的觀點和抽象級別。
最基本的原語是那些認為一個函式是安全的,但要麼你不能進一步分解它,要麼它的各個部分沒有安全參數。例子:
- 素數域中的模冪不能再被分解,我們可以將其與固有的離散對數問題一起使用來創建公鑰密碼學。
- 對稱加密——我們認為像 AES 這樣的對稱加密是安全的,具有明確定義的安全屬性。但是它的各個部分,例如單輪或輪中的單步,沒有任何有意義的安全屬性。當然,它們會帶來一定程度的混亂和擴散。然而,密碼的強度也是整個結構的結果——例如,減少輪數的 AES 攻擊是已知的。
還有一些原語,沒有進一步說明。例如,如果您假設一個公鑰加密方案並且只需要它的通用算法(Enc、Dec),那麼該加密方案就是您的建構塊。它不是底層的陷門單向功能,因為您不關心實際使用的是哪一個。
要回答您的問題:
- 不,實際上完全不同。原語由它們的安全屬性定義。有些具有啟發式安全特性,即經受了多年的密碼分析(例如密碼散列函式和對稱加密)。其他人具有可證明的安全屬性 - 有或沒有假設。有假設的例子是公鑰密碼學,沒有假設的例子是 Shamir 的秘密共享——它的安全性是無條件的。
- 好吧,原語是由它的安全屬性定義的。我不確定您所說的“安全論證形式”是什麼意思。但是所有具有可證明的安全論點的東西(以及一些僅針對對稱加密等最基本事物的啟發式論點)都可以成為更高層次抽象的原語。
- 是的,它可以。
- (和 5.、6.)散列函式通常可以被認為是原語。壓縮函式通常不是加密原語,因為它們沒有安全屬性。但你肯定可以稱它為原始的——沒有加密。這就像散列函式:一般來說,散列函式不是加密的。如果您談論加密散列函式,您實際上應該將其稱為加密散列函式- 除非上下文絕對清楚。
但是,每當您談論特定功能而不是通用功能時,原始術語就是一個不好的選擇。