密碼學協議 門限

密碼學協議 門限

這是之前在Matrix67的博客上看到的,補充些我本身的理解安全

背景

設想:老大某天想要向某人傳送一封密信,爲了不一個特工被抓了送信就失敗了,因而他把密文加密,把密文和密鑰都給了幾個特工----這樣掛了一個或者被抓了一個也不要緊,只要還有別的特工送到就好了.可是,情報雖然是能比較大機率的送到了,因爲這個情報是祕密情報,老大不但願它被泄漏在別人手裏.一旦某個特工被抓了,或者叛變了,情報不久泄漏了嗎?因此,他想到把按特工的人數把密鑰平均分紅幾份,每一個特工各拿一份,這樣即便特工被抓或者叛變,情報也不會泄漏出去.可是,這又走到了另一個極端:只要有一個特工被抓了,情報就不能送出去了.因此他就想:有沒有這麼一個辦法,我送出去n個特工,只要有其中任意的m我的或以上到達,就能把情報送出去.可是隻要少於m我的到達,哪怕是m-1個,情報都不能被收到呢?函數

這樣的問題就叫(m,n)門限編碼

解決方案

要解決的問題能夠轉化成:加密

組合數學的解決辦法

  1. 分出來的每份密鑰應該分給至少多少個特工?博客

  2. 怎麼決定每一個特工受手上有那些密鑰?數學

  3. 到底要把密鑰分紅多少份?原理

雖然這個問題的順序是有點反直覺的順序,怎麼能先決定怎麼分配,再決定要把密鑰分紅幾份呢?事實上,這三個問題的順序確實是咱們第一個解決方案的思考順序(至少我是這麼思考這個問題的)密碼

什麼是鴿籠原理(抽屜原理)

通俗的說,就是基於這麼一個事實:如今有8只鴿子,可是隻有5個籠子,要把鴿子所有放進鴿籠裏面,那麼至少有一個籠子裝2只或兩隻以上的籠子.協議

思路

如今有n個特工,可是但願只要有其中大於等於m個特工到達就能得到完整的密鑰,把祕密情報解密出來.因此對於分出來的每一份密鑰,從n個特工中任意選出的m個特工的手中,都至少要有一份.根據鴿籠原理,只要每份密鑰都至少準備n-m+1份就能夠了.由於這意味這受傷沒有這份密鑰的特工人數有n-(n-m+1)=m-1人,最壞的狀況下,前面到達m-1我的都是沒有這份密鑰的,那麼第m個到達的特工必然手中有這份密鑰.思考

如今來解決第二個問題.劃分的依據就是,不但願兩個不一樣密鑰徹底相同的被分配在幾個不一樣的特工手裏.意思就是避免這種狀況跟出現(這裏以(3,5)門限爲例,&表明特工的編號):

&1: 2 4
&2: ...
&3: 2 4
&4: 2 4
&5: ...

這樣,第2號密鑰就和4號密鑰徹底相同的被分配在2,3,4特工手上,這樣就會致使2號密鑰出現4號密鑰必然出現,2號密鑰出現4號密鑰必然不出現,這樣2號密鑰和4號密鑰就徹底沒有必要分離開來.這樣,第二個問題也解決了.

還剩下最後一個問題.先假設每份鑰匙準備的數量就是n-m+1份(稍候就會說明爲何要如此假設).根據第二個問題的結論:不能有兩個不一樣的密鑰徹底相同的被分配在幾個不一樣的特工手裏,對於(n,m)門限,最多能夠分紅C(n-m+1,n)=C(n-(n-m+1),n)=C(m-1,n)個密鑰.下面就來證實密鑰的數量少於C(m-1,n)是不行的.假設分少了一把鑰匙,再一次根據第二個問題的結論:不會除向戀歌不一樣的密鑰徹底相同的被分配在幾個不一樣的特工手裏,這說明,對於本來手裏沒有着把密鑰的m-1個特工來講,其餘密鑰都至少有一個特工有(以(3,5)門限爲例,0表示沒有.1表示有).

** 1 2 3 4 5 6 7 8 9 10
&1 1 1 1 1 1 1 0 0 0 0
&2 1 1 1 0 0 0 1 1 1 0
&3 1 0 0 1 1 0 1 1 0 1
&4 0 1 0 1 0 1 1 0 1 1
&5 0 0 1 0 1 1 0 1 1 1

若是少了10號密鑰,那麼對於1號特工和2號特工,對於1-9號密鑰兩我的都至少有一我的有,因此這就不知足必需要m個特工到齊才能把密鑰湊齊這個前提條件.同時,若是分少的鑰匙不只僅一份,那麼只要這m-1個特工到齊,就更能夠湊齊密鑰的全部部分了.所以,當每份鑰匙準備的數量爲n-m+1分時,必須分紅C(m-1,n)分密鑰才行.

那麼,每份密鑰準備的數量能不能大於 n-m+1份呢?

答案是否認的

從上面的分析可知,在到達密鑰數量冗餘的臨界點以前,密鑰數量的增長會致使對到達特工數量的要求的增長.因此,每份密鑰準備的數量爲n-m+k(k>1且爲整數),準備C(m-k,n)份密鑰的時候,對安全到達的特工的數量要求最高.在這種狀況下,對於任意一把密鑰,沒有它的特工人數有m-k我的,也就是說,若是分少了這一把密鑰,只要有本來沒有這把密鑰的這m-k我的到達就能夠解出情報了,這是在剩下的n-m+k我的中增長這把鑰匙,只要有n-m+k中的任意一我的到達就能夠解開了,因此總的來講只須要m-k+1我的到達就能夠了,又由於k>1,因此m-k+1 < m,也就說不知足必需要m個或以上的特工人數到達才能解開情報.

至此,咱們就完美解決了(m,n)門限的問題了.作法是隻須要把密鑰分紅C(m-1,n)分,每一個人持有C(m-1,n)*(n-m+1)/n=C(m-1,n-1)份密鑰就好了.

空間幾何

這是一個十分美的解決辦法.仍是先從個上面的(3,5)門限的例子來講把,只要把密鑰編碼成空間中的一個點,每一個特工手上拿着一個平面方程.全部特工所持有的平面方程所有都交於一個點.由於只有三個或以上的平面才能交於一個點,因此,只要有三個特工到達,拿出他們手裏的平面方程一解,答案就是密鑰.用這種解決辦法,對於(m,n)門限,只要把空間的維數相應的改變成m就能夠了~

多項式

對於一個n階的多項式f(x)=a[1]x^n+a[2]x^(n-1)+...+a[n-1]x^2+a[n]x+a[n+1]來講,只須要知道這個函數圖像上面的n+1個點就能夠把這個多項式接出來.能夠利用這一點,對於(m,n門限),把密鑰編碼成一個m-1次的多項式,只要有m個特工到達,就能夠把多項式解出來,而少了一個任是不能還原處這個多項式的.

其實這兩個解決辦法我認爲本質上是同樣的,但是聽起來就更喜歡第上一個

數論

什麼是中國剩餘定理

思路

基於中國剩餘定理,對於密鑰x,(m,n)門限,咱們能夠構造出這麼一種狀況,任意m-1個a[i]的乘積都小於x,可是任意m個a[i]的乘積都比x大.每一個特工拿着一個a[i]和b[i].這樣的話,任意m-1個特工到達都算不出正確的x,可是任意m個特工到達都能算出x

最後

若是僅僅是實體世界的話....直接造一個密碼箱....每一個特工都拿着相同的鑰匙....可是隻有m把鑰匙同時戳進去擰才能打開就好了嘛.....

相關文章
相關標籤/搜索