謂詞加密算法是如何實現的?
在網際網路上大量閱讀之後,我似乎無法弄清楚如何
Predicate Encryption
工作。正如我所讀到的,它由 4 個算法組成:
Setup()
- (輸出MSK
- 主密鑰和PK
- 公鑰)
Encrypt(PK, text)
- (輸出CT
- 密文)
GenKey(MSK, predicate)
- (輸出 aToken
)
Query(Token, CT)
- 如果是0,如果false
是1true
我不明白
GenKey
算法是如何工作的,你如何基於MSK
and生成令牌predicate
,當然,你如何ciphertext
使用生成的token
.有人能指出我正確的方向嗎?也許是一些虛擬碼或非常詳細的解釋。
謝謝!
起初,您的語法 (Setup,GenKey,Encrypt,Query) 似乎是帶有關鍵字搜尋 (PKES) 的公鑰加密的語法。在基於謂詞的加密的情況下,我們使用 Decrypt 而不是 Query。
Sahai-Waters 模糊IBE
我推薦Sahai 和 Waters:基於身份的模糊加密 (EUROCRYPT 2005)作為第一步。我假設您了解基於配對的密碼學和秘密共享的基礎知識。
在 Fuzzy IBE 中,密文和密鑰與屬性集相關聯, $ X $ 和[Math Processing Error] $ Y $ , 分別。如果[Math Processing Error] $ X $ 和[Math Processing Error] $ Y $ 至少分享 $ t $ 元素,可以解密密文 $ c_X $ 使用 $ sk_Y $ . 語法如下:
- $ \mathsf{Setup}(1^{\kappa},n,t) $ 輸出 $ msk $ 和 $ pk $ , 在哪裡 $ \kappa $ 是安全參數, $ n $ 是宇宙的大小,並且 $ t $ 是門檻值參數。
- $ \mathsf{GenKey}(msk,Y) $ 輸出 $ sk_Y $ , 在哪裡 $ Y \subseteq {1,\dots,n} $ .
- $ \mathsf{Encrypt}(pk,X,m) $ 輸出一個 ciphertxt $ c_X $ , 在哪裡 $ X \subseteq {1,\dots,n} $ .
- $ \mathsf{Dec}(sk_Y,c_X) $ 輸出[Math Processing Error] $ m $ 如果[Math Processing Error] $ X $ 和[Math Processing Error] $ Y $ 至少分享[Math Processing Error] $ t $ 元素。
他們設計的方案如下(我省略了 enc 和 dec):
- 設置:主密鑰是[Math Processing Error] $ \alpha,t_1,\dots,t_n \in \mathbb{Z}_q $ 主公鑰是[Math Processing Error] $ e(g,g)^{\alpha} $ 和[Math Processing Error] $ T_i = g^{t_i} $ .
- GenKey:主生成共享 $ s_1,\dots,s_n $ 的[Math Processing Error] $ \alpha $ 通過使用 $ (n,t) $ 秘密共享方案,計算[Math Processing Error] $ D_i = g^{s_i/t_i} $ 對於每個[Math Processing Error] $ i $ , 並返回[Math Processing Error] $ D_i $ 為了 $ i \in Y $ .
其他方案
基於配對組的基於謂詞的加密方案通常採用這種結構。直覺地說,他們像 Sahai 和 Waters 一樣將主密鑰隱藏/共享到使用者密鑰中。
如果您需要實現範例,我們可以在密碼庫中找到更複雜的基於謂詞的加密方案的(概念驗證)實現: