為什麼要對偽隨機函式的竊聽者隱藏密鑰?
知道用於給定偽隨機函式的密鑰比訪問該函式的預言機有什麼好處 $ F_k(\cdot) $ 和實際的鑰匙 $ k $ 哪個會被使用?
首先十分感謝
為了詳細說明 fkraiem 的答案,我們想要一個偽隨機函式族的安全屬性 $ F $ 擁有是(計算)與隨機函式無法區分的。也就是說,一個對手,給予預言機訪問某些功能 $ f: X \to Y $ ,應該無法區分以下兩種可能性:
- $ f = F_k $ 對於一些隨機選擇的(秘密)密鑰 $ k $ , 或者
- $ f $ 從所有函式的整個集合中均勻隨機選擇 $ X $ 至 $ Y $ .
要實現的關鍵是允許對手知道如何計算 $ F_k(x) $ 對於任何給定的鍵 $ k $ 並輸入 $ x $ . 因此,如果對手知道哪個密鑰 $ k $ 據說在案例 1中用於實例化預言機,他們可以簡單地選擇任意輸入 $ x $ , 查詢預言機 $ f(x) $ ,並檢查結果是否匹配 $ F_k(x) $ . 如果 $ f $ 真的是 $ F_k $ ,結果顯然總是匹配的;如果 $ f $ 是一個隨機函式,他們只會以機率這樣做 $ 1/|Y| $ .
附言。由於函式族 $ F $ 是有效可計算的,並且因為我們希望證明沒有有效的對手可以區分隨機實例 $ F $ 從一個隨機函式中,我們是否明確地授予對手如何計算的知識真的沒有區別 $ F $ 與否:在所有可能的高效對手中,總會有一些碰巧知道如何正確計算 $ F $ . 當然,也有無數可能的對手計算 $ F $ 錯誤,因此無法區分這兩種情況,但我們只關心少數正確的情況。
當然,對於任何給定的鍵 $ k $ ,也會有一些對手可以簡單地猜對。不同的是,定義 $ F $ 是固定的,而在不可區分遊戲中, $ k $ 每次玩遊戲時隨機選擇。所以一個正確猜測定義的對手 $ F $ 每次都會正確評估它,而正確猜測的對手 $ k $ 在一輪遊戲中幾乎肯定會在任何另一輪猜錯。
也許更清晰的思考方式是,通過允許對手成為任何有效的算法,並要求我們的密碼系統對任何此類對手都是安全的,我們基本上允許對手知道任何可以編碼為多項式時間算法,並且作為遊戲的一部分,它沒有明確隨機化(並且對對手隱藏)。特別是,這隱含地體現了Kerckhoff 的原則:在所有可能的對手中,總有一些人確切地知道我們的密碼系統是如何工作的