430 likes | 500 Views
第三章. 編碼原理. 安全性 錯誤偵測 修正錯誤 身份辨識. 3.1 同餘. 定義 n 為給定的正整數 a 與 b 為整數 若 a-b 被 n 整除,則稱 a 與 b 具有 對 n 模同餘 ( congruent modulo n ) 的關係,並記為 a b (mod n ) a b (mod n ) n| ( a-b ). Theorem. Let n >1 be fixed and a, b ,c, d be arbitrary integers, then the following properties hold.
E N D
第三章 編碼原理
安全性 • 錯誤偵測 • 修正錯誤 • 身份辨識
3.1 同餘 • 定義 • n為給定的正整數 • a與b為整數 • 若a-b被n整除,則稱a與b具有對n模同餘(congruent modulon)的關係,並記為 a b(mod n) • a b(mod n)n|(a-b).
Theorem • Let n>1 be fixed and a, b ,c, d be arbitrary integers, then the following properties hold. (a) a a(mod n) (b) If a b(mod n) ,then b a(mod n) (c) If a b(mod n) and b c(mod n), then a c(mod n) (d) If a b(mod n) and c d(mod n) ,then a+c b+d(mod n) and ac bd(mod n). (e) If a b(mod n), then a+c b+c(mod n) and ac bc(mod n) . (f) If a b(mod n), then ak bk(mod n)for any positive integer k.
3.2 歐幾里得演算法 若a,b,q,r為整數、b>0且a= qb + r,則 gcd(a,b) =gcd(b,r).
Problem 如何找出x與y使得ax +by = gcd(a,b)?
Example 找出x與y使得 gcd(12378,3054) = 12378x + 3054y 解: gcd(12378,3054)=6
3.3 RSA方法 • RSA加密演算法是一種非對稱加密演算法,在1977年由Ron Rivest、Adi Shamir與Leonard Adleman一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。 • 如果你想和別人祕密通訊,那麼你可以先選定兩個非常巨大的質數p,q作為私鑰(private key,解密用的),然後將p,q的乘積作為加密用的公鑰 (public key),你可以把公開鑰匙公佈出去。別人要傳一封密函給你,他必需要先得到你的公鑰,按照一個約定的方法將信件加密後送出。你在收到密函後,再用你的私鑰就可以解出密函原文。 • RSA演算法的可靠性基於分解極大的整數是很困難的。假如有人找到一種很快的分解因子的演算法的話,那麼用RSA加密的資訊的可靠性就肯定會極度下降。但找到這樣的演算法的可能性是非常小的。 • 今天只有短的RSA鑰匙才可能被強力方式解破。到2008年為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要其鑰匙的長度足夠長,用RSA加密的資訊實際上是不能被解破的。
公鑰和私鑰的產生 • Alice隨意選擇兩個大的相異質數p和q,並計算出n=pq。 • 任選擇一個小於(p-1)(q-1)且與(p-1)(q-1)互質的整數E,並計算出d使得Ed ≡ 1 (mod (p-1)(q-1))。 • n和E是公鑰,公開給大眾的。d是私鑰,只有Alice知道。 • 假設Bob想給Alice送一個隱密的消息M,他先將M轉換為一個小於n的整數P,比如他可以將每一個字轉換為這個字的unicode碼,然後將這些數字連在一起組成一個數字。假如他的資訊非常長的話,他可以將這個資訊分為幾段,然後將每一段轉換為P。利用公鑰N和E及PE C(mod n)這個式子將P加密為C。 • Bob算出C後就可以將它傳遞給Alice。 • Alice得到Bob的訊息C後就可以利用她的私鑰d及式子Cd P (mod n)來解碼還原成P。
Example for 加密 假設Bob想給Alice送一個隱密的消息M,他先將M轉換為一個小於n的整數P,比如他可以將每一個字轉換為這個字的unicode碼,然後將這些數字連在一起組成一個數字。假如他的資訊非常長的話,他可以將這個資訊分為幾段,然後將每一段轉換為P。利用公鑰N和E及PE C(mod n)這個式子將P加密為C。
如何產生公鑰E和私鑰d • Alice隨意選擇兩個大的相異質數p和q,並計算出n=pq。 • 任選擇一個小於(p-1)(q-1)且與(p-1)(q-1)互質的整數E,並計算出d使得Ed ≡ 1 (mod (p-1)(q-1))。 • n和E是公鑰,公開給大眾的。d是私鑰,只有Alice知道。 • 依需求找出兩相異質數 。 假設是p=47,q=59 • 則n=pq=47 * 59=2773 且 b=(p-1)(q-1)=2668 • 從與與b互質的整數中依需求找出E,假設找出的E= 157 • 求出Ex1(mod b)的解。最小正整數解即為私鑰d= 17。
加密 假設Bob想給Alice送一個隱密的消息M,他先將M轉換為一個小於n的整數P,比如他可以將每一個字轉換為這個字的unicode碼,然後將這些數字連在一起組成一個數字。假如他的資訊非常長的話,他可以將這個資訊分為幾段,然後將每一段轉換為P。利用公鑰N和E及PE C(mod n)這個式子將P加密為C。 • 假設Bob想給Alice送一個隱密的消息M=3。此時P=M=3 PE 3157 (9)78·3(mod 2773) (81)39·3(mod 2773) (6561)19·81·3(mod 2773) (1015)19·81·3(mod 2773) (1030225)9·1015·81·3(mod 2773) (1442)9·1015·81·3(mod 2773) 441(mod 2773)
解密 • Bob利用公鑰N和E及PE C(mod n)這個式子將P加密為C。 • Alice如何還原出P。 • n為兩個相異質數p和q的乘積,E為小於且互質於b=(p-1)(q-1)的整數。 • 找出Ex1(mod b)的解。最小正整數解即為私鑰d。 • 尤拉定理(Euler Theorem)告訴我們對所有與n互質的正整數a皆有ab 1 (mod n). • 所以Cd (PE)d PEd Pb+1 P (mod n)
RSA方法 • Alice隨意選擇兩個大的相異質數p和q,並計算出n=pq。 • 任選擇一個小於(p-1)(q-1)且與(p-1)(q-1)互質的整數E,並計算出d使得Ed ≡ 1 (mod (p-1)(q-1))。 • n和E是公鑰,Alice將它們公開給大眾。d是私鑰,只有Alice知道。 • Bob將隱密的消息M分為幾段使得每段皆為小於n的整數P。然後他利用PE C(mod n)這個式子將P加密為C。 • Bob算出C後就可以將它傳遞給Alice。 • Alice得到Bob的訊息C後就可以利用她的私鑰d及式子Cd P (mod n)解碼。
Example • Alice找出兩相異質數 p=29,q=41 • 則n=pq=29 * 41=1189 且 b=(p-1)(q-1)=1120 • 從與與b互質的整數中依需求找出E= 101 • 求出Ex1(mod b)的解。最小正整數解即為私鑰d= 621。
Example • Alice找出兩相異質數 p=29,q=41 • 則n=pq=29 * 41=1189 且 b=(p-1)(q-1)=1120 • 從與與b互質的整數中依需求找出E= 101 • 求出Ex1(mod b)的解。最小正整數解即為私鑰d= 621。 • 假設Bob想給Alice送一個隱密的消息M=90。此時P=M=90 • 他利用PE C(mod n)這個式子將P加密為C。
Example • 他利用PE C(mod n)這個式子將P加密為C=582。 90101 (902)50·90(mod 1189) (966)50·90(mod 1189) (9662)25·90(mod 1189) (980)25·90(mod 1189) (9802)12·980·90(mod 1189) 582 (mod 1189)
Example • Alice找出兩相異質數 p=29,q=41 • 則n=pq=29 * 41=1189 且 b=(p-1)(q-1)=1120 • 從與與b互質的整數中依需求找出E= 101 • 求出Ex1(mod b)的解。最小正整數解即為私鑰d= 621。 • 假設Bob想給Alice送一個隱密的消息M=90。此時P=M=90 • 他利用PE C(mod n)這個式子將P加密為C=582 。 • Alice得到Bob的訊息C=582後就可以利用她的私鑰d = 621及式子Cd P (mod n)解碼。
Example • Alice得到Bob的訊息C=582後就可以利用她的私鑰d = 621及式子Cd P (mod n)解碼。 582621 (5822)310·582(mod 1189) (1048)310·582(mod 1189) (10482)155·582(mod 1189) (857)155·582(mod 1189) (8572)77·857·582(mod 1189) 90 (mod 1189)
3.4 錯誤偵測及錯誤碼修正 • 電腦在傳送資料時,是以二進位法傳送資訊。 • 例如其中一種表示系統為ASCII碼將一些字母、符號及數字以8個二進位數字表示。 • 如B,A,T,C分別以 01000010, 01100010, 00110111,及01000011表示。 • 若在傳送B這字元時,有一錯誤發生在第八個數字,收到的訊息為01000011在 • 此時將被解讀成C。 • 我們如何偵測、甚而修正這種錯誤呢?
前述例子描述了一個錯誤偵測(error-detecting)系統,可以偵測到某些錯誤發生,但卻無法修正錯誤。我們先對傳輸錯誤的發生做以下的假設:前述例子描述了一個錯誤偵測(error-detecting)系統,可以偵測到某些錯誤發生,但卻無法修正錯誤。我們先對傳輸錯誤的發生做以下的假設:
(k,n)-區塊碼 • 若一個字元編碼成k個二進位數字的區塊,每個這樣的區塊稱為一個信息字元(message word)。 • 實際傳送時為了偵錯與修正,我們傳送的不止k個字元,而是更長的n個數字的字串稱為字碼(code words)。 • 這樣的編碼方式稱為(k,n)-區塊碼((k,n)-block code)。 • (k,n)-區塊碼的傳送效率為k/n。
漢明距離 • 兩個相同長度的字碼a=x1x2…xn與b=y1y2…yn,其漢明距離(Hamming distance) d(a,b)為這兩個字碼相對應位元數字不同的數目。即 d(a,b)=|{ i | xiyi}| • d(1100011,1001011,)=2 • d(1110011,0000000)=5 • 若a,b,c三字碼等長則d(a,c) d(a,b)+d(b,c)。
E([w1w2w3])=[w1w2w3]A = [w1w2w3 w1w2w3 w1+w2+w3] E([0 0 0]) = [0 0 0 0 0 0 0] E([0 0 1]) = [0 0 1 0 0 1 1] E([0 1 0]) = [0 1 0 0 1 0 1] E([1 0 0]) = [1 0 0 1 0 0 1] E([0 1 1]) = [0 1 1 0 1 1 0] E([1 0 1]) = [1 0 1 1 0 1 0] E([1 1 0]) = [1 1 0 1 1 0 0] E([1 1 1]) = [1 1 1 1 1 1 1] • 任兩字碼的漢明距離皆大於或等於3,所以這編碼可以檢查出兩個錯誤,修正一個錯誤的發生。
E([0 0 0]) = [0 0 0 0 0 0 0] E([0 0 1]) = [0 0 1 0 0 1 1] E([0 1 0]) = [0 1 0 0 1 0 1] E([1 0 0]) = [1 0 0 1 0 0 1] E([0 1 1]) = [0 1 1 0 1 1 0] E([1 0 1]) = [1 0 1 1 0 1 0] E([1 1 0]) = [1 1 0 1 1 0 0] E([1 1 1]) = [1 1 1 1 1 1 1] • E(x)的前3(k)碼即為x。
如何由收到的字碼,判斷並修正回正確的字碼?如何由收到的字碼,判斷並修正回正確的字碼?