什麼是安全多方計算
全是數理邏輯和密碼學知識,按照自己的理解將概念通俗化些。還是有很多疑惑在裡面,比如混淆電路就完全沒理解清楚。
主要是指透過一組演算法,人們透過網路協同工作,可以安全的獲取結果和計算值,並且可以保證這一個數值的正確性
數學模型為:有n個參與者P1,P2,…Pn,要以一種安全的方式共同計算一個函式。安全保證輸出結果的正確認和輸入、輸出資訊的保密性
考慮一個問題:
兩個爭強好勝的富翁Alice和Bob在街頭相遇,如何在不暴露各自財富的前提下比較出誰更富有?
安全多方計算是作為密碼學的一個領域,允許多個數據所有者在互不信任的基礎上進行協同計算,輸出結果,通俗來說就是:任何一方都無法得知結果以外的任何資訊。
可以保證使用方獲取資料的使用價值,但是不用獲取原始資訊
在web上這個理念已經有了很好的使用:
一個Web服務查詢可以資料組合完成回答,透過將儲存在一臺裝置上的資料與儲存在由模板控制的第三臺裝置格式化的另一臺裝置上的資料組合,所有這些都由在負載均衡器後面執行的Kubernetes叢集管理器進行編排。即使相互連線的桌上型電腦也可以利用CPU晶片與顯示卡和網絡卡的強大功能協同工作,為同一使用者提供服務。
工作原理
先看上述富翁問題的解決方案:
找個天平,兩邊放上封閉的盒子,富翁分別在盒子裡面放上等量價值的砝碼,哪邊沉就說明誰更富有?
這個方案想起來並沒有什麼問題,但是誰來提供天平?天平是否動過手腳嗎?天平提供者改了天平默默地記錄了各個砝碼的重量呢,這樣就洩露了富翁的財富了
那麼繼續借助密碼學能不能解決這個問題呢?密碼學中有個不經意傳輸的協議:從待發送的訊息中傳送一條給接收者,但是事後對傳送了那一條訊息依然未知。不太容易理解,
具體透過案例瞭解下:
不經意傳輸:alice給bob傳輸了一條訊息,但是bob有1/2的機率收不到,在傳輸結束後,alice並不知道bob手機否接受到了這條資訊n選一傳輸:這個更實用些,alice傳遞n條資訊給blob,blob只選擇自己有用的那一條資訊,根據輸入獲取到輸出,但是alice並不知道blob選擇了那個,也不知道最終輸出是啥?根據不經意傳輸是不是能解決富翁問題呢?
富翁A找到10個箱子,並且進行編號,每個箱子放上不同的水果:如果序號小於自己的財富:放蘋果,相等:梨,大於:香蕉把這10個箱子都上鎖,傳遞給富翁B富翁B收到箱子,根據自己的財富值在對應的箱子上加一把鎖,然後銷燬其他箱子,消除編號,寄給富翁A富翁A拿到回來的箱子,因為箱子都是一樣的。富翁A開啟箱子,若是蘋果:A富有,梨:同樣,香蕉:B富有
這樣A不知道B選擇的幾號箱子,B不知道箱子裡面是啥水果,這樣A、B預設約定了一個函式
對於上述問題:
A、B都擁有資料,但是並不想資料被任何人知道,所以雙方想了一個約定函式。A相當於對自己的資料進行加密處理,傳遞給B,B透過A的加密資料再進行計算,這個是在密文的基礎上進行的,任何人也不知道原始資料是啥,計算完成後,將結果返回給A,A解開後得到最終結果這裡面每個參與者都有自己的資料,並且不信任其他參與者和第三方,完成同一個目標結果的過程,這個就叫做多方計算
除了多方計算外,還有個同態加密,屬於外包計算的一種,這個說的是A一方有資料,但是沒計算資源,B有計算資源但是沒資料。A怎麼保證資料不被洩露的情況下傳給B,讓B進行計算後返回結果?
同態加密:直接將原文加密,然後在密文上進行各種運算,最終得到結果的密文
基本方法差分隱私
對過程中的資料進行噪聲干擾,讓原始資料淹沒在噪聲中,攻擊者拿到資料後無法得知真實的資料結果
混淆電路
完全沒看懂
金鑰分享
這個的基本思路是:將金鑰分發給多方,每個參與方收到的都是金鑰的一部分,一個或多個參與方無法還原出金鑰資料
零知識證明
證明者能夠在不向驗證者傳送任何有用資訊的情況下使驗證者知道這個結論是正確的
這個是一個機率的驗證方式,驗證者基於一定的隨機性向證明者提出問題,若是正確,這說明證明者擁有知識。
看個經典案例:
C和D之間有個門,知道口令的人才能開啟門,證明者知道秘密口令,並希望向驗證者證明,但是又不希望洩露秘密口令
首先驗證者在A點,證明者在B點證明者隨機選擇走到C和D點, 驗證者在A點無法知道證明者選擇的方向驗證者走到B點,並且要求證明者從左邊或者右邊出來證明者按照驗證者的要求從指定方向出來,必要時需要口令開啟門
如果證明者知道口令,則一定可以從正確方向出來,若證明者不知道口令,則有1/2的機率從正確方向出來,重複次數多了,機率就能驗證證明者是否真實的知道秘密口令