Hash
可以“打包”數字的加密函式
是否有一種加密算法可以“打包”一堆字元串/數字並“確認”是否存在字元串/數字(稍後在程式碼中),同時保持輸出隱藏?
例如,我有算法 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.output
者key
洩露了數據,他們仍然必須知道集合中的值才能獲得真實的答案(100
在上述情況下),這將保護這些值的200
完整性300
, 即使key
和algo1.output
被揭示然後,他們將不得不依靠蠻力方法來提取這些值,這可能會使攻擊者付出高昂的代價。
似乎我們可以在這裡使用具有同態隱藏和綁定屬性的承諾方案。這些承諾方案通常用於安全的多方計算和零知識證明生成目的。
承諾方案是一種密碼原語,它允許一個人承諾一個選定的值(或選定的語句),同時對其他人隱藏,並能夠在以後揭示承諾的值。承諾方案的設計使得一方在承諾後不能更改價值或聲明:也就是說,承諾方案具有約束力。
承諾方案是一個交易對手承諾某個價值的一種方式,使得承諾的價值保持私密,但可以在稍後當承諾方洩露承諾過程的必要參數時披露。強承諾方案必須既是資訊隱藏又是計算綁定。
有不同類型的承諾方案。佩德森承諾方案是一種流行的方案。還有其他方法,例如多項式承諾方案。
根據評論編輯
這裡的承諾方案的目的是承諾一個數字的存在(一個打包的數字),然後保持輸出隱藏,直到需要顯示它。可以使用算術電路、函式加密等來實現用於打包數字的算法。安全多方計算的優點是將打包操作委託給多方並聚合操作結果。這是推薦承諾方案和多方計算的觀點。