



| 子秘密\( V_i \) | 秘密S | \( p_1 \) | \( p_2 \) | \( p_3 \) | \( p_4 \) | \( p_5 \) | \( p_6 \) | \( p_7 \) | \( p_8 \) | \( p_9 \) | \( p_{10} \) | ||
| \( V_1 \) | 14293994 | 451 | 2 | 13 | 23 | 53 | |||||||
| \( V_2 \) | 5117046 | 451 | 2 | 3 | 31 | 61 | |||||||
| \( V_3 \) | 7312956 | 451 | 3 | 5 | 23 | 47 | |||||||
| \( V_4 \) | 25934755 | 451 | 5 | 7 | 31 | 53 | |||||||
| \( V_5 \) | 117664547 | 451 | 7 | 13 | 47 | 61 | |||||||
| 整數 j | 二進位 | \( i=1 \) | \( i=2 \) | \( i=3 \) | 集合\( S_j \) | |
| 1 | 001 | \( B(1,1)=0 \) | \( B(1,2)=0 \) | \( B(1,3)=1 \) | \( S_1=\{\; s_3 \}\; \) | |
| 2 | 010 | \( B(2,1)=0 \) | \( B(2,2)=1 \) | \( B(2,3)=0 \) | \( S_2=\{\; s_2 \}\; \) | |
| 3 | 011 | \( B(3,1)=0 \) | \( B(3,2)=1 \) | \( B(3,3)=1 \) | \( S_3=\{\; s_2,s_3 \}\; \) | |
| 4 | 100 | \( B(4,1)=1 \) | \( B(4,2)=0 \) | \( B(4,3)=0 \) | \( S_4=\{\; s_1 \}\; \) | |
| 5 | 101 | \( B(5,1)=1 \) | \( B(5,2)=0 \) | \( B(5,3)=1 \) | \( S_5=\{\; s_1,s_3 \}\; \) | |
| 6 | 110 | \( B(6,1)=1 \) | \( B(6,2)=1 \) | \( B(6,3)=0 \) | \( S_6=\{\; s_1,s_2 \}\; \) | |
| 7 | 111 | \( B(7,1)=1 \) | \( B(7,2)=1 \) | \( B(7,3)=1 \) | \( S_7=\{\; s_1,s_2,s_3 \}\; \) | |
| 使用者1 拿到質數 \( s_1=p_4p_5p_6p_7 \) | 使用者2 拿到質數 \( s_2=p_2p_3p_6p_7 \) | 使用者3 拿到質數 \( s_3=p_1p_3p_5p_7 \) | ||||
數位世界的糾察隊-糾錯編碼的基礎及應用
張耀祖
糾錯編碼能控管數位通信、資料的品質,其理論與組合數學有著密切關係。本文介紹編碼的概念、發展史和應用,並透過實例來了解編碼的操作。

| 字母 | 編碼 | 字母 | 編碼 | 字母 | 編碼 |
| a | 00001 | j | 01010 | s | 10011 |
| b | 00010 | k | 01011 | t | 10100 |
| c | 00011 | l | 01100 | u | 10101 |
| d | 00100 | m | 01101 | v | 10110 |
| e | 00101 | n | 01110 | w | 10111 |
| f | 00110 | o | 01111 | x | 11000 |
| g | 00111 | p | 10000 | y | 11001 |
| h | 01000 | q | 10001 | z | 11010 |
| i | 01001 | r | 10010 |
錯誤訊息的偵測與修正
賴紹正
為什麼條碼機可以正確地讀出你購買的商品價錢?為什麼稍稍刮損的音樂CD仍可播放?數位訊息中暗藏著什麼祕密,且讓我們來一探究竟。
\( \underbrace{\overbrace{50300702}^{資訊}1}_{字碼} \)
圖三:在這串訊息中,前8位數為有用的資訊,最後一位則是「冗位」,總共是9位數的字碼。
1.Shmir秘密分享 | |
| 設秘密為\(S\),\(n\)個人共享秘密,至少要\(k\)位才能重組秘密 \(f(x)\)為\(k-1\)次多項式,其中常數項為秘密\(S\),其餘各項係數為隨機整數 計算\(f(x)\)上\(n\)個點座標,將各個座標分派給\(n\)個人 Shamir's secret sharing的\(\displaystyle f(x)=\sum_{i=0}^{k-1}a_ix^i\)等同於 Reed-Solomon錯誤校正碼的\(\displaystyle p_m(a)=\sum_{i=0}^{k-1}m_i a^i\) | 範例出自Shamir's secret sharing 設秘密為\(S=1234\),\(n=6\)個人共享秘密,至少要\(k=3\)位才能重組秘密 \(f(x)\)為\(k-1=2\)次多項式,其中常數項為秘密\(S\),1次項和2次項係數為隨機整數 \(f(x)=1234+166x+94x^2\pmod{1613}\) 計算\(f(x)\)上6個點座標 \(f(1)=1234+166\cdot 1+94\cdot 1^2=1494\equiv 1494\pmod{1613}\) \(f(2)=1234+166\cdot 2+94\cdot 2^2=1942\equiv 329\pmod{1613}\) \(f(3)=1234+166\cdot 3+94\cdot 3^2=2578\equiv 965\pmod{1613}\) \(f(4)=1234+166\cdot 4+94\cdot 4^2=3402\equiv 176\pmod{1613}\) \(f(5)=1234+166\cdot 5+94\cdot 5^2=4414\equiv 1188\pmod{1613}\) \(f(6)=1234+166\cdot 6+94\cdot 6^2=5614\equiv 775\pmod{1249}\) 將\((1,1494),(2,329),(3,965),(4,176),(5,1188),(6,775)\)分派給6個人 |
2.當\(k\)個人聚在一起要重建秘密(無錯誤情況) | |
| 有\(k\)個人聚在一起要重組秘密\(S\),利用拉格朗日插值多項式計算出\(f(x)\) 秘密為\(S=f(0)\) | 假設第2,4,5位聚在一起要重組秘密\(S\),利用拉格朗日插值多項式根據\((2,329),(4,176),(5,1188)\)計算出\(f(x)\) \(\displaystyle f(x)=329\frac{(x-4)(x-5)}{(2-4)(2-5)}+176\frac{(x-2)(x-5)}{(4-2)(4-5)}+1188\frac{(x-2)(x-4)}{(5-2)(5-4)}\) \(\displaystyle =329\frac{(x-4)(x-5)}{6}-88(x-2)(x-5)+396(x-2)(x-4)\) \(\equiv 329\cdot 269(x-4)(x-5)-88(x-2)(x-5)+396(x-2)(x-4)\pmod{1613}\) \(\equiv 1234+166x+94x^2 \pmod{1613}\) 秘密為\(f(0)=1234\) |
3.有錯誤情況用Berlekamp-Welch演算法修正解碼 | |
| 設\(e\)為發生錯誤數量,錯誤位置多項式\(\displaystyle E(x)=\sum_{i=0}^{e}e_i x^i\),最高次方係數\(e_e=1\) (1)當\((a_i,b_i)\)為正確的點座標時 \(E(a_i)\ne 0\)(\(x=a_i\)代入錯誤位置多項式不為0(不符合)) \(b_i=f(a_i)\)(點座標\((a_i,b_i)\))符合\(f(x)\)多項式) (2)當\((a_i,b_i)\)為錯誤的點座標時 \(E(a_i)=0\)(\(x=a_i\)代入錯誤位置多項式為0(符合)) \(b_i\ne f(a_i)\)(點座標\((a_i,b_i)\)不符合\(f(x)\)多項式) \(b_i=f(a_i)\),兩邊同乘\(E(a_i)\)得到\(b_iE(a_i)=f(a_i)E(a_i)\) 設\(Q(a_i)=f(a_i)E(a_i)\)得到\(b_iE(a_i)=Q(a_i)\),\(b_iE(a_i)-Q(a_i)=0\) (1)當\((a_i,b_i)\)為正確的點座標時(\(E(a_i)\ne 0,b_i=f(a_i)\)) \(b_iE(a_i)-Q(a_i)=b_iE(a_i)-f(a_i)E(a_i)=E(a_i)(b_i-f(a_i))=0\)等式成立 (2)當\((a_i,b_i)\)為錯誤的點座標時(\(E(a_i)=0,b_i\ne f(a_i)\)) \(b_iE(a_i)-Q(a_i)=b_iE(a_i)-f(a_i)E(a_i)=0(b_i-f(a_i))=0\)等式成立 代表點座標\((a_i,b_i)\)無論正確還是錯誤都符合\(b_iE(a_i)-Q(a_i)=0\) 將\(b_iE(a_i)-Q(a_i)=0\),以\(\displaystyle E(a_i)=\sum_{i=0}^{e}e_i a_i^i\),\(\displaystyle Q(a_i)=\sum_{i=0}^q q_ia_i^i\)展開 \(b_i(e_0+e_1a_i+e_2a_i^2+\ldots+e_ea_i^e)-(q_0+q_1a_i+q_2a_i^2+\ldots+q_qa_i^q)=0\) 其中\(q=n-e-1\),又\(E(x)\)最高次方係數\(e_e=1\),方程式改成 \(b_i(e_0+e_1a_i+e_2a_i^2+\ldots+e_{e_1}a_i^{e-1})-(q_0+q_1a_i+q_2a_i^2+\ldots+q_qa_i^q)=-b_ia_i^e\) 將各個點座標\((a_i,b_i)\)代入上式,解聯立方程組求\(e_0,e_1,\ldots,e_{e-1},q_0,q_2,\ldots,q_q\) \(E(x)\)有\(e\)個未知數,\(Q(x)=f(x)E(x)\)有\(k+e\)個未知數,需要\(n=e+(k+e)\)個方程式 該演算法從假設最大可能錯誤數\(\displaystyle e =\Bigg\lfloor\;\frac{n-k}{2}\Bigg\rfloor\;\)開始。如果方程式無法求解,則將\(e\)減1並重複此過程,直到聯立方程組可以求出惟一解或\(e\)降至0,表示沒有找到錯誤。 找到\(E(x)\)和\(Q(x)\),解\(E(x)=0\)得到錯誤位置,計算\(\displaystyle f(x)=\frac{Q(x)}{E(x)}\),秘密\(S=f(0)\) | 有5個人聚在一起但不知道哪個人的子秘密是錯誤的 \((1,1494),(2,329),(3,123),(4,176),(5,1188)\),(\((3,123)\)應為\((3,965)\)) \(\displaystyle e=\Bigg\lfloor\;\frac{5-3}{2}\Bigg\rfloor\;=1\),最多可以修正1個錯誤 錯誤位置多項式\(E(x)=e_0+x\),只有1個錯誤為1次多項式,\(e_0\)為錯誤點的\(x\)坐標 設\(Q(x)=E(x)f(x)\)次數為\(e+(k-1)=1+2=3\)次 \(Q(x)=q_0+q_1x+q_2x^2+q_3x^3\) 將\((a_i,b_i)=(1,1494),(2,329),(3,123),(4,176),(5,1188)\)代入\(b_i \cdot E(a_i)-Q(a_i)=0\) \(b_i(e_0+a_i)-(q_0+q_1a_1+q_2a_1^2+q_3a_1^3)\equiv 0\pmod{p}\) \(b_ie_0-(q_0+q_1a_1+q_2a_1^2+q_3a_1^3)\equiv -b_ia_i\pmod{p}\) \(\cases{1494e_0-(q_0+q_1\cdot 1+q_2 \cdot 1^2+q_3\cdot 1^3)\equiv -1494\cdot 1\cr 329e_0-(q_0+q_1\cdot 2+q_2 \cdot 2^2+q_3\cdot 2^3)\equiv -329\cdot 2\cr 123e_0-(q_0+q_1\cdot 3+q_2 \cdot 3^2+q_3\cdot 3^3)\equiv -123\cdot 3\cr 176e_0-(q_0+q_1\cdot 4+q_2 \cdot 4^2+q_3\cdot 4^3)\equiv -176\cdot 4\cr 1188e_0-(q_0+q_1\cdot 5+q_2 \cdot 5^2+q_3\cdot 5^3)\equiv -1188\cdot 5}\pmod{1613}\) 解聯立方程組,得到\(e_0=-3,q_0=-476,q_1=736,q_2=-116,q_3=94\) \(E(x)=-3+x\),解\(E(x)=0\),錯誤在\(x=3\) \(Q(x)=f(x)E(x)=f(x)(x-3)=-476+736x-116x^2+94x^3\pmod{1613}\) 使用綜合除法計算\(f(x)\) \(\frac{\matrix{94&-116&736&-476&|3\cr &282&498&3702&| }}{\matrix{94&166&1234&|3226& }}\) 餘式\(3226\equiv 0\pmod{1613}\)是整除的 \(f(x)=1234+166x+94x^2\pmod{1613}\) \(f(3)=1234+166\cdot 3+94\cdot 3^2=2578\equiv 965\pmod{1613}\) 正確的子秘密為\((3,965)\) 秘密\(S=f(0)=1234\) |
原始Shamir秘密分享方案 | 秘密壓縮方案 |
| 假設分派者(Dealer)選定要共享的秘密S及一個質數p,滿足\( 0<S<p \)。分派者任意挑選一個\( k-1 \)次方的多項式\( f(x)=a_0+a_1x+a_2x^2+...+a_{k-1}x^{k-1} \),滿足\( a_0=S \),\( 0<a_1,a_2,…,a_{k-1}<p \)。 分派者利用\( f(x) \)產生n個子金匙\( (i,f(i)) \),\( i=1,2,...,n \)。每對\( (i,f(i)) \)可視為多項式\( f(x) \)在坐標平面上的一個點,由於\( f(x) \)為\( k-1 \)次方的多項式,因此k對或k對以上的點坐標可惟一決定\( f(x) \),進而重建出秘密S。 | 假設\(b=(b_1,b_2,\ldots,b_k)\)是要分享的秘密,存在唯一一個Reed-solomon碼字(cdoeword)\(D\),前\(k\)個就是密碼本身,即\(D_1=b_1,D_2=b_2,\ldots,D_k=b_k\)。事實上,\(D\)可以由Shamir方法的拉格朗日插值多項式或標準Reed-Solomon編碼演算法找到。只有剩下\(r-1-k\)個\(D_{k+1},\ldots,D_{r-1}\)可以分給參與者共享秘密,如前面所述,至少\(k\)個(未被竄改)才能還原秘密。 |
範例 | |
| 設秘密\(S=1234567890\)非常長 再找比\(S\)還大的質數\(p=1234567907\) \(f(x)=1234567890+15618435x+38443541x^2\pmod{p}\) 常數項\(a_0=S\),係數\(a_1,a_2\)為小於\(p\)的任意整數 \((1,f(1))=(1,54061959)\) \((2,f(2))=(2,185011017)\) \((3,f(3))=(3,392847157)\) \((4,f(4))=(4,677570379)\) \((5,f(5))=(5,1039180683)\) \((6,f(6))=(6,243110162)\) 每位使用者所拿到的子秘密幾乎和原始秘密長度相同 當三位使用者聚在一起,將各個子秘密\((3,f(3)),(4,f(4)),(6,f(6))\)利用拉格朗日插值多項式 \(\displaystyle f(x)=392847157\frac{(x-4)(x-6)}{(3-4)(3-6)}\) \(\displaystyle +677570379\frac{(x-3)(x-6)}{(4-3)(4-6)}\) \(\displaystyle +243110162\frac{(x-3)(x-4)}{(6-3)(6-4)}\pmod{p}\) \(f(x)=1234567890+15618435x+38443541x^2\pmod{p}\) 秘密\(S=f(0)=1234567890\) | 將秘密\(1234567890\)拆成\(S=(0,1234),(1,567),(2,890)\) \(p=1613\) 利用拉格朗日插值多項式,產生通過\((0,1234),(1,567),(2,890)\)三點的二次多項式\(f(x)\) \(\displaystyle f(x)=1234\cdot \frac{(x-1)(x-2)}{(0-1)(0-2)}+567\cdot \frac{(x-0)(x-2)}{(1-0)(1-2)}+890\cdot \frac{(x-0)(x-1)}{(2-0)(2-1)}\pmod{1613}\) \(f(x)=1234+451x+495x^2\pmod{1613}\) 常數項\(a_0=S\),係數\(a_1,a_2\)是根據拉格朗日插值多項式所產生的特定整數 \((3,f(3))=(3,590)\) \((4,f(4))=(4,1280)\) \((5,f(5))=(5,1347)\) \((6,f(6))=(6,791)\) \((7,f(7))=(7,1225)\) \((8,f(8))=(8,1036)\) 每位使用者所拿到的子秘密縮短許多 當三位使用者聚在一起,將各個子秘密\((3,f(3)),(4,f(4)),(6,f(6))\)利用拉格朗日插值多項式 \(\displaystyle f(x)=590\frac{(x-4)(x-6)}{(3-4)(3-6)}+1280\frac{(x-3)(x-6)}{(4-3)(4-6)}+791\frac{(x-3)(x-4)}{(6-3)(6-4)}\pmod{1613}\) \(f(x)=1234+451x+495x^2\pmod{1613}\) \(f(0)=1234\),\(f(1)=567\),\(f(2)=890\) 合併秘密\(S=1234567890\) |
安全性 | |
| 若已知2個子秘密\((3,392847157),(4,677570379)\) 代入\(f(x)=a_0+a_1x+a_2x^2\pmod{p}\)得 \(\cases{392847157=a_0+3a_1+9a_2\cr 677570379=a_0+4a_1+16a_2}\) 兩式相減得\(284723222\equiv a_1+7a_2\pmod{1234567907}\) \(a_1,a_2\)為隨機整數,知道\(a_1\)和\(a_2\)的關係式對於求\(a_0=S\)沒有幫助。 | 若已知2個子秘密\((3,590),(4,1280)\) 代入\(f(x)=a_0+a_1x+a_2x^2\pmod{p}\)得 \(\cases{590=a_0+3a_1+9a_2\cr 1280=a_0+4a_1+16a_2}\) 兩式相減得\(690\equiv a_1+7a_2\pmod{1613}\) \(a_1,a_2\)本身就是祕密的一部分,知道\(a_1\)和\(a_2\)的關係式對於秘密空間的複雜度被大大降低。 |
| 歡迎光臨 Math Pro 數學補給站 (https://math.pro/db/) | 論壇程式使用 Discuz! 6.1.0 |