Hash

可以“打包”數字的加密函式

  • June 19, 2020

是否有一種加密算法可以“打包”一堆字元串/數字並“確認”是否存在字元串/數字(稍後在程式碼中),同時保持輸出隱藏?

例如,我有算法 X,我可以執行類似的東西:

// From Alice's side
algo1 = new X(key);

algo1.pack(100)
algo1.pack(200)
algo1.pack(300)

algo1.finalize()
print(algo1.output) // Prints a bunch of random bytes

//Later, somewhere in Bob's code
algo2 = new X(key, algo1.output);

algo2.has(111) // false
algo2.has(222) // false
algo2.has(100) // true
algo2.has(200) // true

我確實意識到這可以通過加密數據庫來完成,但我正在尋找算法中的解決方案。

目的是數據隱藏:萬一向攻擊algo1.outputkey洩露了數據,他們仍然必須知道集合中的值才能獲得真實的答案(100在上述情況下),這將保護這些值的200完整性300, 即使keyalgo1.output被揭示

然後,他們將不得不依靠蠻力方法來提取這些值,這可能會使攻擊者付出高昂的代價。

似乎我們可以在這裡使用具有同態隱藏和綁定屬性的承諾方案。這些承諾方案通常用於安全的多方計算和零知識證明生成目的。

承諾方案是一種密碼原語,它允許一個人承諾一個選定的值(或選定的語句),同時對其他人隱藏,並能夠在以後揭示承諾的值。承諾方案的設計使得一方在承諾後不能更改價值或聲明:也就是說,承諾方案具有約束力。

承諾方案是一個交易對手承諾某個價值的一種方式,使得承諾的價值保持私密,但可以在稍後當承諾方洩露承諾過程的必要參數時披露。強承諾方案必須既是資訊隱藏又是計算綁定。

有不同類型的承諾方案。佩德森承諾方案是一種流行的方案。還有其他方法,例如多項式承諾方案。

根據評論編輯

這裡的承諾方案的目的是承諾一個數字的存在(一個打包的數字),然後保持輸出隱藏,直到需要顯示它。可以使用算術電路、函式加密等來實現用於打包數字的算法。安全多方計算的優點是將打包操作委託給多方並聚合操作結果。這是推薦承諾方案和多方計算的觀點。

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