交換密碼的軟體實現?
我有一個應用程序(詳述如下),它要求使用可交換的密碼。我一直在做一些Google搜尋和閱讀,在這些討論中似乎提到了兩種算法——SRA(不是RSA)和 Pohlig-Hellman 取冪。(據說 SRA 是 RSA 的變體?)。我需要一些強大的東西,所以 XOR 將不起作用。
我希望執行一些實現其中一個人的實際軟體,這樣我就可以玩弄它們並展示我想到的方案,但我找不到任何方案。在我看來,這些東西不在Schneier 的**Applied Cryptography frx附帶的原始碼中。任何人都可以推薦 SRA 或 Pohlig-Hellman 的實現源嗎?
如果我能掌握它,這就是我想如何使用這項技術。我為醫療保健提供者 A 工作,該提供者與我們的同事/競爭對手提供者 B 在同一地理區域運營。我們知道我們共享一些患者,但我們不知道我們有哪些共同點,甚至不知道有多少人。
我們可以交換例如我們患者的 SSN 的列表並找出我們共享的人,除了我們並不真正信任彼此以應有的照顧來處理這些敏感數據,哇,人們會嚇壞的討厭我們,如果我們用他們的 SSN 等免費提供我們。所以——請理所當然地認為發送原始 SSN 既不實用也不可取。
但這就是我們也許可以做的。我拿起我的交換密碼軟體,生成一個加密密鑰,將它保存在安全的地方,然後生成一個加密的 SSN 文件(每個 SSN 都用我的密鑰單獨加密)。我在提供商 B 的同事也這樣做。然後我們交換加密列表,每個人都用我們自己的密鑰加密其他人的加密 SSN。然後我們交換雙重加密的列表。因為密碼是可交換的,先用密鑰 A 加密,然後用密鑰 B 加密應該得到與先用密鑰 B 再用密鑰 A 加密相同的結果。這意味著在兩個雙重加密列表上共享的任何值都表示相同SSN,因此是共享患者。因此,我們確切地知道我們共享誰,而不會暴露我們整個患者名單的 SSN。
為了澄清一點,您需要可交換的、確定性的“加密”(否則即使明文匹配,交換密文也不一定匹配),並且具有私有加密功能(否則,它是確定性的並且明文空間是小,可以進行詳盡的搜尋)。例如,Elgamal 是可交換的,但它也是隨機的和公鑰的。加密是用引號引起來的,因為你從不解密,你實際上只需要一個具有這些屬性的陷門函式。
Pohlig-Hellman和SRA是合適的。
就實現而言,我不知道。然而,Pohlig-Hellman 只需一個數論庫就很容易實現(它只是一個模冪運算——您不需要在應用程序中解密)。如果您的 DSA 庫具有從密鑰生成公鑰的功能,則可以將其用作加密功能。
同樣,SRA 只是具有兩個密鑰對的 RSA。如果您可以呼叫 RSA 實現的密鑰生成函式,則可以這樣獲取 $ e,d $ 如果你提供 $ p,q $ ,那麼這將起作用。
這兩種密碼都很古老,並且是在某些攻擊已知之前開發的。對於 Pohlig-Hellman,您應該在乘法子組中工作,這需要對明文進行編碼。SRA 可能會像 RSA 一樣洩露明文的 Jacobi 符號(我認為即使 $ e $ 不知道?)。
最後,您正在實現的應用程序稱為“私有集交集”。有很多關於如何做到這一點的論文,以及整個協議的一些實現。假設其中一方是惡意的,您實施它的方式存在一些問題。
如果雙方都是誠實的(只送出真實值)和公平的(一方先於另一方了解結果),那似乎沒問題。但是有各種各樣的攻擊可以通過使用專門為此目的設計的私有集合交叉協議來解決。