Encryption

秘密計算兩個人擁有的兩個數字的乘法

  • April 30, 2022

例如,Alice 和 Bob 有兩個數字 $ a $ 和 $ b $ , 分別。他們想計算乘法 $ a\cdot b $ 在愛麗絲不知道的情況下 $ b $ 或者鮑勃知道 $ a $ 並發送這個乘法 $ a\cdot b $ 給卡羅爾。卡羅爾會用這個 $ a\cdot b $ 做進一步的申請。Carol 不會與 Alice 或 Bob 勾結。Golang 中是否有任何方法和庫/工具可以實現這一目標?謝謝!

一個不假設的解決方案 $ a $ 和 $ b $ 是非零的,並且不必計算乘法逆運算,這也涉及 Alice 和 Bob 之間的通信,除了事先就公共隨機字元串達成一致(這被稱為“私人同時消息”模型):

愛麗絲和鮑勃同意 $ r,s,t $ (三個隨機數)。愛麗絲發送 $ c = a+r, c’ = c\cdot s + t $ 給卡羅爾,鮑勃發送 $ d = b+s, d’ = b\cdot r - t $ 給卡羅爾。卡羅爾計算 $ c\cdot d - (c’ + d’) $ .

在這裡,總和可以取模 $ n $ , 在哪裡 $ n $ 是一個公共上界 $ a $ 和 $ b $ ,而“隨機”是指一個均勻隨機的元素 $ \mathbb{Z}/n\mathbb{Z} $ .

注意:您問題的關鍵點是假設 Carol 不會與 Alice 和 Bob 勾結。一個經典的結果是,只要可以串通的參與方數量嚴格低於總數的一半,安全計算就不需要任何密碼學或計算假設,這裡就是這種情況。因此,除了基本算術之外,您不需要 Golang 中的特殊庫/工具。

引用自:https://crypto.stackexchange.com/questions/99890