將 NewHope/LWE 密鑰交換轉換為類似 Diffe-Hellman 的算法
“Diffe-Hellman-like”算法是指與 Curve25519 等具有相同 API 的算法(不考慮參數大小等微不足道的差異):一個函式
$$ F: (P_\text{other}, S_\text{self}) \rightarrow \text{Shared secret} $$ 在哪裡 $ S_\text{self} $ 可以任意多次使用不同的值 $ P_\text{other} $ .
民間傳說(至少從 2010 年開始)可以按照您的建議去做,但效率低於任何基於 Ring-LWE 的加密方案或 KEM 的“密鑰傳輸”方法。
所以這是你可以做的:有一個公共多項式 $ a\in Z_q[X]/(X^n+1) $ 這是大家共享的。它需要均勻隨機,因此可以設置為 XOF(1),其中 XOF 類似於 SHAKE。這樣,它是“隨機的”,我們很確定裡面沒有種植活板門 $ a $ .
那麼人 $ i $ 選擇兩個多項式 $ s_i,e_i\in Z_q[X]/(X^n+1) $ 用小係數發布他的密鑰 $ b_i=as_i+e_i $ . 現在如果聚會 $ i $ 和 $ j $ 想分享一把鑰匙,派對 $ i $ 計算 $ s_ib_j = as_is_j+s_ie_j $ 和派對 $ j $ 計算 $ s_jb_i= as_is_j+s_je_i $ . 自從 $ s_ie_j $ 和 $ s_je_i $ 是具有小係數的多項式的乘積,乘積本身的係數是有界的(例如 $ \beta $ ).
所以我們真正想要的是 $ s_ie_j $ 不影響的高階位 $ as_is_j $ . 如果發生這種情況 $ q $ 遠大於 $ \beta $ . 基本上,如果 $ q=2^k \beta $ ,那麼高階位不受影響的機率約為 $ 1-2^{-k} $ . 所以通過設置 $ q $ 足夠大,檢索共享密鑰的方法是計算 HighOrderBits $ (s_ib_j) $ .
那麼為什麼不這樣做呢?因為你需要設置 $ q $ 相當大,並且潛在的硬晶格問題變得更容易,之間的差距越大 $ q $ 和係數 $ s_i,e_i $ 是。所以你必須增加你的戒指的尺寸來補償。可以設置此類參數,但我估計實現與正常 Ring-LWE 加密/密鑰交換方案類似的安全性將導緻密鑰比基於 Ring-LWE 的方案大 20 到 40 倍左右。因此可以預期大約 20KB - 40KB。