Hash
不可區分混淆器在混淆密碼檢查功能時會洩露密碼嗎?
假設我有一個愚蠢的密碼檢查功能:
def dumb_checker(password): return password == "my_secret_key_that_should_not_be_revealed"
可以通過散列密碼來隱藏密碼,如下所示:
def obfuscated_checker(password): return hash(password) == PRECOMPUTED_HASH_OF_MY_SECRET_KEY
這意味著不可區分混淆器( $ IO $ ) 也應該隱藏密碼,因為它是最好的混淆器。
但是不可區分性混淆器不能接受任何密碼檢查功能並返回
dumb_checker
作為規範形式嗎?對於任何兩個等效的實現 $ F_1 $ 和 $ F_2 $ , 兩個都 $ IO(F_1) $ 和 $ IO(F_2) $ 等於dumb_checker
函式,所以對手將無法區分他是否被給定 $ IO(F_1) $ 或者 $ IO(F_2) $ . 然而,這種混淆並沒有隱藏密碼。
但是不可區分混淆器不能接受任何密碼檢查功能並將dumb_checker作為規範形式返回嗎?
不,為了這樣做,混淆器必須能夠取消散列常量。