Zk-Snarks 與同態加密
我一直在閱讀一些有關加密算法的內容。我遇到過這兩種算法。我的案例是處理加密數據的能力,我的數據將是字元串數據。我看到同態加密僅適用於數字數據。
我讀過同態具有可擴展性問題,因為它使加密數據增加了 100 倍。
是否必須將 zk-snark 與同態加密一起使用,或者可以使用兩者之一?
哪一個用於哪些案例?
我大大簡化了,也許其他人可以提供更正式的答案。
我看到同態加密僅適用於數字數據。
將字元串編碼為整數的方法有很多,您可以將字元串編碼為字節,然後將這些字節轉換為整數。
我讀過同態具有可擴展性問題,因為它使加密數據增加了 100 倍。
同態加密確實以密文大小和計算效率為代價。
哪一個用於哪些案例?
ZK-SNARKS
ZK-Snark 是一種零知識的知識證明:一方,證明者,知道一個秘密,並想說服另一方,驗證者,涉及該秘密的陳述是真實的,而不會洩露秘密。
範例:使用者知道密碼 $ x $ 並且伺服器知道密碼的雜湊值 $ h $ ,使用者需要證明語句:
我知道一個價值 $ x $ 這樣 $ H(x)=h $
同態加密
同態加密是一種加密方案:一個值 $ x $ 被轉化為密文 $ c=Enc_k(x) $ 使用密鑰 $ k $ , 這樣 $ c $ 沒有透露任何關於 $ x $ 沒有鑰匙。
我們說這樣的方案對於特定的操作是同態的(我將設計它 $ \cdot $ ) 如果給定 $ Enc_k(x_1) $ 和 $ Enc_k(x_2) $ , 可以計算 $ Enc_k(x_1\cdot x_2) $ 無需解密密文。
如果給定加密輸入,我們說它是完全同態的 $ Enc_k(x_1), \dots Enc_k(x_n) $ , 可以計算任意函式 $ f $ , 價值 $ Enc_k(f(x_1,\dots, x_n)) $ 無需解密密文。
案例:我們知道一些秘密價值 $ x $ ,並且想要這個值 $ f(x) $ . 自從 $ f $ 計算量太大,我們需要將其委託給擁有更多資源的工作人員(例如雲伺服器)。為了避免暴露 $ x $ 給工人,我們可以發送 $ Enc_k(x) $ 給工人,工人計算 $ f $ 通過同態計算,並返回 $ Enc_k(f(x)) $ . 然後我們可以解密 $ f(x) := Dec_k(Enc_k(f(x))) $ .
比較
Zk-snarks 通常在計算由持有秘密的一方實現時使用,它被信任以保護秘密,但不被信任以正確執行計算。
當計算由不知道秘密的一方實現時,通常使用同態加密,並且不信任保護這些秘密,但信任正確執行計算。
如果你想確保工人發回這兩個結構可以組合 $ Enc_k(f(x)) $ 而不是其他價值 $ Enc_k(g(x’)) $ . 然後我們可以要求工人發回計算正確完成的證明。但是我們不需要零知識屬性,因為工人不知道任何秘密。