【密码学】【多方安全计算】Secret Sharing秘密共享浅析
Secret Sharing秘密共享淺析
- 什么是秘密共享
- 加解密過程
- 驗證加解密
- 參考文獻
秘密共享(Secret Sharing)是實現多方安全計算的一種常用方式,MPC當然也可以用混淆電路(Garbled Circuit)實現,本文旨在淺析秘密共享的基本原理,有對混淆電路感興趣的同學可閱讀下一篇博客。
什么是秘密共享
Secret Sharing被稱為秘密共享或私密共享,有一個秘密數值D,數值D被分解為n個片段并設置一個閾值k,當擁有k個以上片段時才可以恢復數值D,這種秘密分享叫做閾值秘密分享。
普通的秘密分享指將秘密數值D,分解成n個片段,當n個片段都被集合起來時才可以恢復秘密值D。
普通的秘密共享的問題在于,秘密的安全性得到了保證,但是管理的風險增加了,如果有一個片段被丟失將導致整個秘密無法被恢復。所以在業界常用的是閾值秘密共享。本文也就此進行討論。
加解密過程
在閾值秘密分享中,每個i人手中的信息被記為D_i,從D計算出D_1,…,D_n的過程被稱為加密。從k個D_i中計算D的過程稱之為解密。
1.加密過程
隨機生成k-1個數,a_1,…,a_{k-1},加上a_0==D湊夠k個數。多項式的定義:D_i = a_0 + … + a_{k-1}*i^(k-1)。
2.解密過程
湊齊k個人,每人手中有i和D_i。D_i值為上述多項式計算出來的結果,k個多項式就構成了一個方程組,其中a_0,…,a_{k-1}為未知數。通過對方程組的求解即可獲得未知數的值。其中a_0為D。
這里方程組未知數的個數為k,所以需要k個以上的方程才能明確未知數的值。如果湊的人數少于k,是無法求解出未知數的。
驗證加解密
我們可以設置一個秘密值D來對上述的過程進行驗證。我們假設秘密值D=7,只有湊夠了k=3人時才可以解密出D的值。
我們構造k個系數,其中a_0=D=7,剩下兩個參數我們隨機指定,a_1=0,a_2=1。
假設我們有n個人有可能需要了解秘密D,我們給他們每個人的信息如下:
D_1 = q(1)= D + a_1 + a_2 = 8
D_2 = q(2) = D + 2a_1 + 4a_2 = 11
D_3 = q(3) = D + 3a_1 + 9a_2 = 16
…
D_n = q(n) = D + n*a_1 + n^2 * a_2
假設現在第 1, 3, 10 三個人湊到一起了,他們可以湊出來以下方程組:
D_1 = 8 = D + a_1 + a_2
D_3 = 16 = D + 3a_1 + 9a_2
D_10 = 107 = D + 10a_1 + 100a_2
求解這個方程組,我們得到 a_0=D=7,a_1=0, a_2=1 。其中 a_0=7 就是要揭示的秘密。
參考文獻
如何共享一個秘密
密鑰分享Secret Sharing介紹
總結
以上是生活随笔為你收集整理的【密码学】【多方安全计算】Secret Sharing秘密共享浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节跳动面试官:java读取xml文件
- 下一篇: 学习涉外商务礼仪