善用尋找功能來找自己想知道的字喔~
----------------------------------------------------------------------------------------------
善用尋找功能來找自己想知道的字喔~
----------------------------------------------------------------------------------------------
我們先定義 Reed-Solomon Code 的生成矩陣 (Generator Matrix) 和奇偶檢驗矩陣 (Parity Check Matrix)。首先有一串非0而且值都不一樣的code locators a0,a1,...,an-1,以及另外一串非0的 column multipliers v0,v1,...,vn-1。奇偶檢驗矩陣定義成
我們先介紹 Product Code。已知 A 是一個 [nA,kA,dA]q code ,B 是一個 [nB,kB,dB]q code。A和B的product code就記作A ⊗ B ,是一個 [nAnB,kAkB,dAdB]q code。具體來說,我們假設 A 是一個 [8,1,8]2 的 Repetition code (簡單來說 A 會把1個數字重複8次變成密碼) 而 B 是一個 [4,3,2]2 的 Parity Check code (B會根據3個位置當中1的數量調整第4個位置讓1總共有偶數個)。照剛剛的定義,A ⊗ B 就是 [32,3,16]2。
比如說 u = (101),那麼A會把它加密成
我們在進入正題之前要先介紹Codeword跟Code的關係,我們把一些碼字 (Codeword) 的集合定義成 Code (代號C)。舉例來說 C = {000,101,111},其中000, 101, 111分別就是三組 Codeword 。其中我們把Codeword的長度定義成length n,把 Codeword 的組數取2為底的log然後定義成dimension k (也就是說 k = log2|C|)。如果 C 的每個 Codeword 都有一樣的 length 那麼 C 就是 Block Code。如果 C 的任兩個 Codeword 相加會等於 C 的另外一個 Codeword,那麼 C 就是Linear Code (因為有線性的特性)。要注意的是這裡的數字都是0跟1組成的,所以0+0=0,1+0=1,1+1=0。
舉例來說 C = {000,100,001,101} 那麼 |C| = 4 ,Codeword 的 length = 3,而 dimension k = log24 = 2。我們隨便把兩個 Codeword 相加就會發現相加完的結果依然是 Codeword。000 + 100 = 100,100 + 101 = 001,100 + 001 = 101 等等,所以這是一個Linear code。此外,因為所有 Codeword 的 Length 都是3,所以這同時也是一個 Block code。
在開始介紹McEliece的算法之前,我們要先簡單說明一點背景知識。Alice想要傳送一段訊息給Bob但是又不想被Eve知道訊息的內容,Alice就必須把她想傳送的訊息加密,Bob則把收到的訊息解密,如此一來就算Eve攔截到傳送中的訊息也只能看到加密後的版本 (加密跟解密方式晚點會介紹)。這裡Alice想傳送的訊息叫做明文(Plaintext),而加密過後的訊息則叫做密文(Ciphertext)。
McEliece的加密方法總共會有五個參數,其中三個參數 (代號S,G,P) 組成私鑰 (Private Key),另外兩個參數 (代號G',t) 則會組成公鑰 (Public Key)。首先Bob (欲接收訊息者) 會設計出公鑰以及私鑰,顧名思義Bob會將公鑰公開而將私鑰自己藏起來,這麼一來大家都知道Bob的公鑰了。Alice就可以把自己想要傳送的訊息和Bob的公鑰相乘 (在電腦的世界裡我們的資料都會被量化成0跟1,所以你可以把Alice想傳送的訊息以及公鑰想像成一串0跟1組成的數字,這兩串數字乘起來就是加密的第一步),接著Alice還會再加上一段誤差向量 (Error Vector),代號寫作 e。
舉例來說,函數是1/((R^2)*(c^2)*(s^2)+2*R*c+1),其中R=1k歐姆,c=100*10^(-9)法拉。波德圖就可以用以下的程式碼畫出來。
R = 1000;
當我們在執行Matlab的指令時有時會想知道這些複雜的運算要花多少的時間,或是我們想比較哪一種方法可以比較快產生我們想要的結果,這時候就可以用tic toc來完成這件事。可以把tic toc當成Matlab的計時器來用,舉例來說如果我們想知道畫一張圖要多少時間就可以用以下的指令。
tic