Tổng quanvềlýthuyết mậtmã
Mộtsốkhái niệm cơbản
Bản rõ: Là nội dung của thông điệp cần gửi đi và cần được bảo vệ antoàn.Nócó thểlà xâu cácbít,cácfilevănbản,các file có cấutrúc.
Mã hoá: Là quá trình biến đổi bản rõ thành những dãy ký tự không đọcđượccónghĩatrướckhigửiđếnngườinhậnđíchthực
Bản mã: Là kết quả thu được khi mã hóa bản rõ theo một thuật toán mãhóanàođó.
Giải mã: Là quá trình xử lý ngược, tiến hành giải mã bản mã để thu lạibản rõ Ví dụ: Mã hóa văn bản có nội dung là “ABC” với luật mã là tịnh tiếnvòng 1đơnvịđốivớimã ASCII củamỗikítự.
Biến đổi các kí tự thành các số theo mã ASCII của kí tự đó.A↔65,B↔66,C↔ 67
Thu được các mã mới sau khi tịnh tiến là: 666768 Biến đổi các mãmớithành kítự.
Hệ mật mã là một bộ gồm 5 thành phần (P, C, K, E, D),trong đó,P(Plaintext): là tập hợphữu hạncácbảnrõ.
C(Ciphertext):làmộttậphữuhạncácbảnmã.K(Ke y): làmột tậphữu hạn cáckhóacó thể.
E (Encrytion): là tập các hàm lập mã.D(Decrytion): làtậpcáchàmgiải mã.
Chúng ta đã biết một thông báo thường được xem là bản rõ Người gửisẽcónhiệmvụmãhóabảnrõđó bằngmột thuậttoán mãhóanàođóđểchorakết quả được gọi là bản mã Và bản mã này sẽ được gửi đi trên đường truyềnkhôngantoàntớingườinhận.Ngườinhậngiảimãbảnmãđểtìmhiểunộidungcủabảnrõ.
Vớimỗik K ,cómộthàmlậpmãe k E ,e k:PC,vàmộthàmgiảimã d k D,d k:CPsaocho:d x (e k(x))=x, x P c,Nhữngtínhnăngcủahệmậtmã
Nhận dạng nguồn gốc của một thông báo, đảm bảo rằng nó là đúng sựthực.
Kiểm tra định danh của người đang đăng nhập hệ thống, tiếp tục kiểmtrađặcđiểmcủahọtrongtrườnghợpaiđócốgắngkếtnốivàgiảdanhlàngườisửdụngh ợppháp.
Cơ sở toán họccủalýthuyếtsố
Tập hợpZlà đóng kín đối với các phép cộng, trừ và nhân, nhưng khôngđóngkínđốivớiphépchia:chiamộtsốnguyênchomộtsốnguyênkhôngphảibao giờ cũng được kết quả là một số nguyên Vì vậy, trường hợp chia hết, tứckhi chia số nguyênacho số nguyênbđược thương là một số nguyênq,a=b.q,cómộtýnghĩađặcbiệt.Khiđó,tanóiachiahếtchob,bchiahếtbởia,alàbội số củab,blàước sốcủaa, và ký hiệu làba.Dễ thấy ngay rằng số 1 làướcsốcủamọisốnguyênbấtkỳ,số0làbộisốcủamọisốnguyênbấtkỳ,mọisốnguyênalàước số,đồngthờilà bội số,của chính nó.
Cho hai số nguyên bất kỳavàb,b1 Thực hiện phép chiaachobtasẽđược haisốqvàrsaocho a=b.q+r,0 ≤r b.
Sốqđượcgọilà sốthươngcủaphépchiaachob,kýhiệuadivb,vàsố rđ ư ợ cgọi làsốdưcủa phép chiaachob,kýhiệuamodb.
Thí dụ: 25div 7=3 và 25 mod 7 =4,-25div7=-4và -25 mod7 =3.
Mộtsốnguyêndđượcgọilàướcsốchungcủahaisốnguyênavàbnếudav à db.S ố ng uyêndđ ư ợ cgọilàướcsốchunglớnnhấtcủaavàbn ế u d0,dlàướcsố chungcủaavàb,vàmọiướcsốchungc ủ aavàbđ ề ulàbếhơn hay bằngd Ta ký hiệu ước số chung lớn nhất củaavàblà gcd(a,b).Thídụgcd(12,18) =6,gcd(-18,27) =3.
Dễ thấy rằng với mọi số nguyên dươngata có gcd(a, 0) =a, ta cũng sẽquiướcxemrằnggcd(0,0) =0. Địnhlý1.1.2 :Nếub≠0vàb|a thìg c d ( a , b) =b.
Một số nguyênmđược gọi là bội số chung củaavàbnếuamvàbm.Sốmđượcgọi làbộisốchungnhỏnhất củaavàb,vàđượckýhiệulàlcm(a,b), nếumlà bội số chung củaavàbvà mọi bội số chung củaavàbđều lớnhơn hoặcbằngm.Thí dụlcm(14,21) B.
Với hai số nguyên dươngavàbbấtkỳtacó quan hệ lcm(a,b) gcd(a,b) =a.b.
INPUT: hai số nguyên không âmavàb, vớia ≥ b.OUTPUT: ướcsố chung lớnnhấtcủaavàb.
Thídụ:DùngthuậttoánEuclidetìmgcd(18,12),talầnlượtđượccácgiátrịgánchocác biếna,bvàrn h ưsau:
Thuật toán Euclide mở rộng:Thuật toán Euclide mở rộng Thuật toán nàynhằm xác định 3 số nguyênx,y,dsao cho:mx+ny=d, trong đóm,nlà haisố nguyên cho trước với giả thiếtm≥n Nội dung thuật toán như sau: Cho 3véc-tơ(a1,a2,a3),(b1,b2,b3),(c1,c2,c3); Cácbước tiến hànhnhưsau:
Bước3.Đặtq=[a3/b3];và(c1,c2,c3)←(a1,a2,a3)-q(b1,b2,b3);(a1, a2,a3)←(b1,b2,b3);(b1,b2,b3) ←(c1,c2,c3) và điđếnbước2.Trongđó
[X] là phần nguyên của sốX, nghĩa là [X] là số nguyên lớn nhất nhưng khôngvượtquáX.
Thí dụ: Dùng thuật toán Euclide mở rộng cho các sốa4864 vàb3458, talầnlượtđượccácgiátrịsauđâychocácbiếna,b,q,r,x,y,x 1 ,x 2 ,y 1 ,y 2 ( s a umỗi chutrìnhthựchiệnhailệnh3.1và 3.2): a b q r x y x 1 x 2 y 1 y 2
Ta dễ thử lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh 3.1 và3.2,cácgiátrịx,y,rt h uđượcluônthoảmãn4864x3458yr,vàdođókhikết thúc các vòng lặp (ứng với giá trịb0), thực hiện tiếp lệnh 4 ta được kếtquảd38,x32 vày-45, cặp số
Sốnguyêntốlàsố nguyêndươngchỉ chiahếtcho1vàchính nó.
Hệ mậtmãthường sửdụngcác sốnguyên tố ít nhất làlớnhơn10 150
Thídụ: 9và14 làhaisốnguyên tốcùng nhau. c,Đồngdưthức
- Choavàblàcácsốnguyênnlàsốnguyêndương.Khiđóađượcgọilàđồngdư vớibtheo modulon, ký hiệu làa b(modn), nếua,bchia choncó cùngsốdư.nđược gọilàmodulocủađồngdư.
Thídụ:11 5 (mod3)vì11và5khichia cho3đềudư sốdư là2.
Choa,a 1,b,b 1,c Z Tacócáctínhchấtsau: a b modnnếuvàchỉnếuavàbcócùngsốdư khichia chon
Tínhđối xứng:Nếua b modnthìb a modn
Tínhgiaohoán:Nếua b modnvàb c modnthìa c modn
Chon>1cốđịnh,vàa,blàhaisốnguyênchotrước.Nếua-bchiahếtcho n , thì ta ký hiệua b modn Vì vậy mỗi số nguyênalà đồng dư theomodulonvớiduynhấtmộtsốnguyêntrongkhoảngtừ0đếnn1vàđượcgọilàthặngdưn h ỏ n h ấ t củaa t h e omodulon.Cũngv ì vậy,a v à b c ù n gt h u ộ c một lớp tương đương Do đó b có thể đơn giản được sử dụng để thể hiện lớptương đươngtheomodulo (n). d,Khônggian Z nvà Z n *
Không gian các số nguyên theo modulon:Z nlàtập hợp cácsố nguyênkhôngâmnhỏhơnn.TứclàZ n={0,1,2,…n1}.TấtcảcácphéptoántrongZ nđềuđược thực hiện theomodulon.
Tức là:Zn *={p Z n|gcd(n,p) = 1},(n)làsốphầntử củaZn *Nếunlàmộtsốnguyêntốthì:Zn *= {p Z n| 1 p n –1}
Thí dụ:Z 2={0,1}thìZ 2 *= {1}vìgcd(1,2)=1. e,Phầntửnghịchđảo
Định nghĩa: Choa Z n Nghịch đảo củaatheo modulonlàsố nguyênx Z nsao choax 1(modn) Nếuxtồn tại thì đó là giá trị duy nhất x Z n, vàađược gọi là khả nghịch Nghịch đảo củaaký hiệu làa 1 ( đối với phép toánnhân)
Choa,b Z n Phép chiaachobtheo modulonlà tích củaavàbtheomodulon,và chỉ đượcxácđịnh khibcónghịch đảotheomodulon.
Giả sửd= gcd(a,n) Phương trình đồng dưax=bmodncó nghiệmxnếu vàchỉ nếudchia hết chob, trong trường hợp các nghiệmdnằm trong khoảng 0đếnn– 1thì cácnghiệmđồngdưtheomodulon/d.
Thí dụ:4 1 =7 (mod9)vì47 1(mod9) g,Hàm - Euler k
Định nghĩa:Cho n 1.(n) được định nghĩa là số tất cả các số nguyêntrongkhoảngtừ[1;n]nguyêntốcùngnhauvớinvàđượcgọilàhàmphiEuler.
Hàm phi Euler là hàm có tính nhân:Nếu(m,n)=1thì(mn)=(m)(n).
Nếun=p 1 e1 p 2 e2…p e k trong đó,p i eilàcácthừasố nguyên tốcủan với ei≥ 1,thì:
Thuật toán : Một hệ thống chặt chẽ và rõ ràng các chỉ thị nhằm xác địnhmột dãy thao tác trên dữ liệu đầu vào sao cho: Bất kể dữ liệu vào (input) nhưthế nào, sau một số hữu hạn bước thực hiện các thao tác đã chỉ ra, ta thu đượcmột kếtquả(output)mongmuốn.
Đặc trưng của thuật toán: Tính đơn giản, tính dừng, tính đúng đắn, tínhphổdụng,tínhkhảthi.
Cácthức mô tảthuật toán:Ngônngữtựnhiên,sơđồkhối,mãgiả
Thuật toán tất định (deterministic): Với hai bộ dữ liệu vào giống nhau,thuật toán tất định sẽ thi hành các mã lệnh giống nhau và cho kết quả giốngnhau.
Thuậttoánngẫunhiên(randomized):Vớihaibộdữliệuvàogiốngnhau,thuật toán ngẫu nhiên có thể thực hiện theo những mã lệnh khác nhau và chokếtquảkhácnhau.
Thídụ:Thuậttoántìmkiếmnhịphâncóthểcàiđặtdễdàngtrênmảngnhưngkhôngcài đặtđược trongdanhsáchnối đơn.
Đánhgiáthuậttoán(giảithuật)tươngđươngvớiđánhgiámôhìnhcàiđặtth uậttoánđótrênmộtcấu trúc dữliệucụ thể.
Tàinguyên:thờigian,bộnhớ,sốlượngbộvixửlý,tốcđộđườngtruyềnmạng… Đánhgiáchươngtrình Đánhgiágiải thuật
Thử chạy với một vài bộ dữ liệu cụthể,đothờigianthựchiện,lượngbộnh ớchiếmdụngtrongtrườnghợpcụ thể
Nhằm xác định tính khả thi của giảithuật, chọn thuật toán tốt nhất để càiđặt
Cónhiều chỉtiêuđểđánhgiágiải thuật nhưngphổbiếnnhấtlàđánhgiá thời gian thựchiện giảithuật.
Dữliệu cànglớn→thờigian sửlýcàng chậm.
Độc lập với phần cứng cụ thể.Độ phức tạp tínhtoán:
Thídụ:-Tìmmột đốitượng có trongdanhsáchNphần tửhaykhông?
- Đối tượng nằmởđầu danh sách.
Biểudiễn thời gian chạybởi kí hiệu O Định nghĩa : Giả sửf(n) vàg(n) là các hàm thực không âm của đối sốnguyên không âmn Ta nói ‘f(n) làO(g(n)’) và viết là :f(n) = O(g(n)) nếu tồntại các hằngsố dươngc * vàn 0saochof(n)≤c * g(n) vớimọin≥n 0.
Thídụ:Giả sửf(n) =5n 3 + 2n 2 +13n+6,ta có: f(n)=5n 3 +2n 2 +13n+6 ≤5n 3 + 2n 3 +13n 3 + 6n 3 &n 3 f(n)=O(n 3 ) Tổngquát,nếuf(n)làmột đathứcbậckcủan: f(n)=a k n k +a k1 n k1 + … +a 1 n+a 0 thìf(n)=O(n k )Bảng kíhiệuthời gianchạy:
Kí hiệu Olớn Tên gọi
Lệnh lựa chọnif(điềukiện)T 0(n) lệnh1T 1(n) else lệnh2T 2(n) Thờigian:T 0(n) +max(T 1(n) +T 2(n))
Lệnhlặp : for,while,do–while
Mậtmã truyềnthống
Mã chuyểndịch (shiftcipher)
Cáchệmậtmãdùngphépchuyểndịchnóitrongmụcnàycũngnhưnhiềuhệmậtmãtiếpsau đềucóbảngkýtựbảnrõvàbảngkýtựbảnmãlàbảngký tựcủangônngữviếtthôngthường.VìbảngkýtựtiếngViệtcódùngnhiềudấuphụlàmchocáchxác địnhkýtựkhóthốngnhất,nêntrongtàiliệunàytasẽlấybảngkýtựtiếngAnhđểminhhoạ,bảngkýt ựnàygồmcó26kýtự,đượcđánhsốtừ0đến25nhưtrìnhbàyởtiết1.2.1,tacóthểđồngnhấtnóvới tậpZ 26.Nhưvậy,sơđồcáchệmậtmãchuyểndịchđượcđịnhnghĩanhưsau:
S = (P,C,K,E,D), trong đóP=C=K=Z 26, các ánh xạEvàDđược cho bởi:với mọiK,x,y∈Z26:
Cáchệmậtmãđượcxácđịnhnhưvậylàđúngđắn,vìvớimọiK,x,yZ 26 tađều có: d K (e K (x))= (x+K)-Kmod26 =x.
Các hệ mật mã chuyển dịch đã được sử dụng từ rất sớm, theo truyềnthuyết, hệ mã đó vớiK= 3 đã được dùng bởi J Caesar từ thời đế quốc La mã,vàđược gọilàhệ mãCaesar.
Thí dụ: Cho bản rõ hengapnhauvaochieuthubay, chuyển dãy ký tự đóthành dãysốtươngứngta được: x= 7 4136015137 02021014278420197201024.
Nếudùngthuật toán lập mậtmãvới khoáK=13,tađượcbảnmãlà: y= 201701913202013781311520211776207141311. chuyểndướidạngkýtựthôngthườngtađượcbảnmậtmãlà: uratncaunhinbpuvrhguhonl. Để giải bản mật mã đó, ta chỉ cần chuyển nó lại dưới dạng số (để đượcdãyy),rồi thực hiện thuật toán giải mã, tức trừ từng số hạng với 13 (theomodulo26),đượclại dãyx,chuyển thànhdãyký tựlàđượcbảnrõbanđầu.
Các hệ mật mã chuyển dịch tuy dễ sử dụng, nhưng việc thám mã cũngkhá dễ dàng, số các khoá có thể có là 26; nhận được một bản mã, người thámmã chỉ cần thử dùng lần lượt tối đa là 26 khoá đó để giải mã, ắt sẽ phát hiện rađượckhoá đã dùngvà cả bảnrõ!
Mãthaythế(substitutioncipher)
𝑑 𝜋 (𝑦)= 𝜋 −1 (𝑦) với mọix∈P,y∈C,𝜋∈Kl à mộtphép hoán vị trênZ 26.
Ta thường đồng nhấtZ 26với bảngký tự tiếng Anh, do đó phép hoán vịtrênZ 26cũng được hiểu là một phép hoán vị trên tập hợp các ký tự tiếng Anh,thí dụmộtphéphoánvịđ ư ợ c c h o bởi bảng: a b c d e f g h i j k l m n o p q r x n y a h p o g z q w b t s f l r c s t u v w x y z v m u e k j d i
Với hệmậtmãthaythếcó khoáπ,bản rõ x=hengapnhauvaochieuthubay sẽđượcchuyểnthànhbảnmật mã y= ghsoxlsgxuexfygzhumgunxd.
SơđồhệmậtmãcósốkhoácóthểbằngsốcácphéphoánvịtrêntậpZ 26,tứclà26! khoácóthểcó.Đólàmộtsốrấtlớn(26!>4.10 26 ).Dođó,việcduyệt lần lượt tất cả các khoá có thể để thám mã là không thực tế, ngay cả dùng máytính.Tuyvậy,cónhữngphươngphápthámmãkháchiệuquảhơn,làmchocáchệmậtmãthayth ếkhôngthểđượcxemlàantoàn.Thuậttoángiảimãvớikhoácho trướcsẽbiếnythành bảnrõx.
Mãapphin
Sơđồcáchệmậtmãapphinđượcđịnhnghĩanhưsau:Hệmậtmãapphinlàmột bộ5thànhphần:(P ,C,K, E,D ) , trong đó,P=C =Z 26 ,K={ (a,b)Z 26 xZ 26 |gcd(a,26) =1},cácánhxạEvà
Dđượccho bởi: e K (X)=ax+bmod26, d K (Y) =a -1 (y-b)mod 26,với mọix∈P, y∈C,k = (a,b)∈K. Điều kiện gcd(a, 26) = 1 để bảo đảm có phần tử nghịch đảoa -1 mod 26 củaa,làm cho thuật toán giải mãd K luôn thực hiện được Có tất cảϕ(26) = 12 sốaϵZZ 26nguyêntốvới26,đólà cácsố:
Nếudùnghệmật mãapphinvớikhoák=(5,6)tasẽđượcbảnmậtmã y= 1 501910631915627624161520022315211622, chuyểnsangdòng kýtựtiếngLatinh,tađượcbản mật mãdướidạng patkgdtpgchgyqpuacxpclgw.
Vìcó12sốthuộcZ 26nguyêntốvới26,nênsốcáckhoácóthểcó(dođó,sốcáchệmậtmã apphin)làbằng 12x2612, mộtconsố không lớnlắmnếu
26 ta sử dụng máy tính để thực hiện việc thám mã bằng cách duyệt lần lượt tất cảcáckhoácóthể.Nhưvậy,mãapphincũngkhôngcònđượcxemlàmãantoàn!
MãVigenere
Sơ đồ mật mã này lấy tên của Blaise de Vigenere, sống vào thế kỉ 16.Khác với các hệ mật mã đã được trình bày ở trên,Hệ mật mã Vigenere khôngthực hiện trên từng ký tự một, mà được thực hiện trên từng bộ mk ý t ự (mlàsốnguyêndương).
Sơ đồ các hệ mật mã Vigenere được định nghĩa như sau:mật mãVigenerelà mộtbộ 5thànhphần:(P,C,K,E,D), trongđó,P=C=K=𝑍 𝑚 ,cácánhxạEvàDđượcchobởi: e K (x 1 , ,x m) =(x 1+k 1,.,x m +k m ) mod26.Hàmgiải mã được cho bởi: d K (y 1, ,y m ) =(y 1-k 1, ,y m -k m )mod 26 với mọix=(x 1, ,x m )∈P,y=(y 1, ,y m )∈C,k= (k 1, ,k m )∈K.với m≥1
Sơ đồ mã Vigenere có thể được xem là mở rộng của sơ đồ mã chuyểndịch, nếu mã chuyển dịch thực hiện việc chuyển dịch từng ký tự một thì mãVigenerethựchiệnđồngthờitừngbộm≥1kýtựliêntiếp.Thídụlấym=6vàk=(2,
8,15,7,4,17).Đểmãmãhóa bảnrõ: hengapnhauvaochieuthubay, tacũng chuyểnnó thànhdãysốvàtáchthànhtừngđoạn6sốliên tiếp: x= 7 4136015|137020210|14278420|197201024.
(nếu độ dài của x không phải là bội số của 6, ta có thể qui ước thêm vào đoạncuốicủaxmộtsốphầntửnàođó,chẳnghạnlàcácsố0,đểbaogiờcũngcóthểxem làxnhóm được thành các đoạn có 6 số liên tiếp) Cộng theo mod 26 cácsố trong từng đoạn đó với các số tương ứng trong khoákta sẽ được bản mậtmã: y= 9 1 221346 |15151512517|16102215811|21 1598415 chuyểnsangdãyký tựtađượcbản mãlà jmcnegpppbzrqkwpilvpjiep.
Từbản mãđó,dùng thuậttoángiảimãtương ứngtalại thuđượcbảnrõbanđầu.
TậpKcó tất cả là 26 m phần tử, do đó với mỗimcó tất cả là 26 m hệ mậtmãVigenere khác nhau (với m = 6 thì số đó là 308,915,776), duyệt toàn bộchừng ấy khoá để thám mã bằng tính thủ công thì khó, nhưng nếu dùng máytính đủ mạnh thì cũng không đến nỗi khó lắm! Nhưng điều quan trọng là m cóthểthayđổitănglênđểviệcthámmã bằngvét cạnlà khôngkhả thi.
MãHill
SơđồmậtmãnàyđượcđềxuấtbởiLesterS.Hillnăm1929.CũnggiốngnhưsơđồmãVigener e,cáchệmãnàyđượcthựchiệntrêntừngbộmkýtựliêntiếp, điều khác là mỗi ký tự của bản mã được xác định bởi một tổ hợp
(trênvànhZ 26)củamkýtựtrongbảnrõ.Nhưvậy,khoásẽđượcchobởimộtmatrậncấpm,tứclàmộtph ầntửcủak∈Z mm Đểphépbiếnđổituyếntínhxácđịnhbởima trậnkcó phép nghịch đảo, bản thân ma trậnkcũng phải có ma trận nghịchđảok -1 theo mod 26; mà điều kiện cần và đủ đểkcó nghịch đảo là định thứccủa nó, ký hiệu detk, nguyên tố với 26 Vậy, sơ đồ mật mã Hillđược địnhnghĩalàbộ5 thànhphần:
26 26 cácánhxạEvàDđược chobởi: e k (x 1, ,x m ) =(x 1, ,x m )kmod26, d k (y 1, ,y m )=(y 1, ,y m )k -1 mod26 với mọix=(x 1, ,x m )∈P, y=(y 1, ,y m )∈C, k∈K.
3 7Với bộhaiký tựx= (x 1,x 2)ta códãy= (y 1,y 2)Kđượctính bởi:
Ta lấylạibảnrõ y 1= 111+32 y 2=81 +72 mod 26. hengapnhauvaochieuthubay, tacũngchuyển nóthànhdãysốvàtáchthànhtừngđoạn2số liêntiếp: x= 74|136|015|137 |020|210|142|78|420|197|201|024.Lập mật mãchotừngđoạnhai sốliêntiếp,rồinốighép lạitađược y= 1 16|516|191|821|8 2|2312|422|238|016|22 19|1511|20 12.
23 11 và giải mã bằng cách nhân từng đoạn hai số liên tiếp củayvớiK -1 ta sẽ đượclạidãyx,và từ đó được lạibảnrõ.
Vớimỗisốmc h otrước,sốcáckhoácóthểcólàbằngsốcácmatrậnkc ódetknguyêntốvới26.Takh ôngcócôngthứcđểtínhs ố đó,tuybiếtrằngkhimlớnthì số đó cũng là rất lớn, và tất nhiên việc thám mã bằng cách duyệt lần lượttoànbộcáchệmãHillcócùngsốmlàkhôngkhảthi.Mặcdùvậy,từlâungườitacũngđãtìmđược nhữngphươngphápthámmãkhácđốivớihệmãHill mộtcáchkhá hiệuquả.
Mãhoánvị(chuyểnvị-Transposition)
Các hệ mã hoán vị cũng được thực hiện trên từng bộmký tự liên tiếp,nhưng bản mật mã chỉ là một hoán vị của các ký tự trong từng bộ m ký tự củabản rõ Ta ký hiệuS m là tập hợp tất cả các phép hoán vị của tập hợp {1, 2, ,m}.Sơđồ cácphépmãhoánvịđượcchobởibộ 5thànhphần:
3 trongđó,P=C=𝑍 𝑚 ,K=S 26 m ,cácánhxạEvàDđượcchobởi: e K (x 1, ,x m)=(x π(1), ,x π(m) ), d K (y 1, ,y m )=(𝑌 𝜋 −1 (1) ,…,𝑌 𝜋 −1 (𝑚) ), vớimọix= (x 1, ,x m )∈P,y=(y 1, ,y m )∈C,k=π∈S m ,π -1 là hoánvịnghịchđảocủaπ. Thídụ:Chọnm= 6 và phéphoánvịS 6được chobởi: i= 1 234 5 6 π(i) =(35164 2)
Khi đóphéphoánvịπ -1 sẽlà j= 12456 π -1 (j) =( 361 5 2 4 ). các ô của bảng theo thứ tự tự nhiên từ trái sang phải và từ trên xuống cho đếnhếtbảnthôngđiệp.Bâygiờ,đểnhậnđượcbảnmã,tachỉviệcnhặtcáckýtựtrongbảngt heothứtựtừtrênxuốngvàlầnlượttừcộtnhỏnhấtchođếncộtlớnnhất.Kếtquảlàtacóbảnmãbằn gphươngphápchuyểnvị.BảnmãnàyVớibản rõhengapnhauvaochieuthubay,tức cũngvới x= 7 4136015137 02021014278420197201024. tasẽcóbản mãtươngứng là: y= 13071564 021130207 7414 208 2 200192417 chuyểnthànhdãykýtựlà:nahpgeavnauhheouicuatybh.Dùngchotừngbộ6kýtựliêntiếpcủabảnm ậtmãnày(tứclàcủay)phépgiảimãd K t asẽthulạiđượcxvà bảnrõbanđầu.
Chú ý rằng mã hoán vị là một trường hợp riêng của mã Hill Thực vậy,cho phép hoán vị trên{1,2, ,m}, ta xác định ma trậnk π = (k ij ) vớik ij = 1 nếui=π(j),và=0nếungượclại,thìdễthấyrằngmãHillvớikhoákchocùngmộtphép mật mã như mã hoán vị với khoá k Với mỗimcho trước, số các khóa cóthểcócủa Hệ mậtmãhoánvịlàm! Để đơn giản trong thực hành, khi muốn mã hóa một thông điệp x độ dàintùy ý với khóa chuyển vịπ= (k 1,k 2, ,k m ), trong đó, k iϵ { 1, 2, 3, ,m},i=1, 2, mvàm 0.
Nhận xét rằngy j phải dịch chuyểnl=k i -k j bước (hay dịch chuyểnlkýtự trong bảng chữ cái) để đượcy i , nên nếu ký hiệu𝑦 𝑔 là dịch chuyểngbướccủay j ,thìtacóhivọngkhitínhlầnlượtcácđạilượngMI C (y i ,𝑦 𝑔 )với0≤g≤ 25,ta sẽ đạt được một giá trị xấp xỉ0,065 vớig=l, và các giá trị khác đều ởkhoảng giữa 0,031 và 0,045 Điều đó cho ta một phương pháp để ước lượngcác dịch chuyểnk i -k j , tức là được một số phương trình dạngk i -k j =l, từ đógiúp tatínhracácgiátrịk 1,k 2, ,k m
2 5 , n h ư t r o n g b ả n g ở t r a n g s a u đ â y ( t r o n g b ả n g đ ó , ởbênphảimỗicặp(i,j)làmộtngăngồmcó26giátrịcủaMI C (y i ,𝑦 𝑔 )ứngvới cácgiátrịcủag=0,1,2, ,25).
Nhìn bảng đó, ta thấy các giá trịMI C (y i ,𝑦 𝑔 )xấp xỉ 0.065 (như đã đượcin đậm và gạch dưới ở trong bảng) ứng với các bộ giá trị (i,j,g) lần lượt bằng(1,2,9), (1,5,16),(2,3,13),(2,5,7),(3,5,20)và (4,5,11). i j GiátrịMI C (y i ,𝑦 𝑔 )
Hệphươngtrìnhđóchỉcó4phươngtrìnhđộclậptuyếntính,màcó5ẩnsố,nên lờigiảiphụthuộcmộtthamsố,ta chọnlàk 1,và được
Thử với các giá trị có thể củak 1(0k 126),cuối cùng ta có thể tìm được bảnrõ nhưsauđâyvớikhoá là JANET(k 1 = 9): the almond tree was in tentative blossom the days were longer often endingwithmagnificenteveningsofcorrugatedpinkskiesthehuntingseasonwasoverwith hounds and guns put away for six months the vineyards were busy againas the well organized farmers treated their vines and the more lackadaisicalneighborshurried todothepruningtheyshouldhavedonein november.
Mậtmã khóacôngkhai
HệmậtmãcôngkhaiRSA
S=(P,C,K,E,D) (1) trong,đóPlàtậpkýtựbảnrõ,Clàtậpkýtựbảnmã,Klàtậpcáckhoák,mỗikhoákgồmcóhaiphầnk
=(k’,k''),k'làkhoácôngkhaidànhchoviệclậpmã,cònk''là khoá bí mật dành cho việc giải mã Với mỗi ký tự bản rõx∈P, thuậttoán lập mãEcho ta ký tự mã tương ứngy=E(k',x)∈C, và với ký tự mãy.Thuật toán giải mãDsẽ cho ta lại ký tự bản rõx:D(k”,y)
=D(k”,E(k',x)) =x. ĐểxâydựngmộthệmậtmãkhoácôngkhaiRSA,tachọntrướcmộtsốnguyênn=pqlà tích của hai số nguyên tố lớn và khác nhau; chọn một sốesao chogcd(e,(n)) =1,và tínhsốdsaocho e.d1(mod(n)).
Mỗicặpk=(k’,k''),vớik'=(n,e)vàk''=dsẽlàmộtcặpkhoácủamộthệmậtmãRSAcụ thể chomộtngườithamgia.
P=C=Z n ,n làmột sốnguyên Blum,tứclàtích củahai sốnguyên tố;
E(k',x)=x e modn,v ớ i m ọ ixP, D(k'',y)=y d modn,với mọiyC. Để chứng tỏ định nghĩa trên là hợp thức, ta phải chứng minh rằng với mọi cặpkhoák=(k',k''),và mọix∈P,ta đềucó
Nếuxkhôngnguyêntốvớin,thìdon=pq,hoặcxchiahếtchopvànguyêntốvớiq,hoặcxchiahết choqvànguyêntốvớip,và(n)=(p-1)(q-1),trongcảhaitrườnghợptađềucó x t (n) 1 x(modp),x t
Thí dụ:G i ả sửc h ọ nn=pq#572551`12707,t a s ẽ có(n)(p- 1)(q- 1) = 23562550 = 6007800 Chọne= 3674911, và tính đượcdB2191 sao choed 1(mod ( n)) Một người dùng A có thể chọn khoá côngkhai làk'= (n 6012707,e= 3674911) và giữ khoá bí mậtk''=d 422191.MộtđốitácBmuốngửichoAmộtthôngbáox=5234673,anhtasẽdùngkhoácông khai của A để tạo bản mật mãy=x e = 52346733674911 mod 6012707 =3650502 A nhận đượcy, giải mã sẽ được bản rõx= 3650502422191 mod6012707 R34673.
HệmậtmãkhoácôngkhaiRabin
S=(P,C,K,E,D), trong đó:P=C=Z n ,n là một số nguyên Blum,n=pq, vớipvàqlà hai sốnguyên tố có tính chấtp3(mod 4),q3(mod 4),K = {K= (K',K'') :K'= (n,B),K''=(p, q), 0Bn–
1}, cácthuật toán EvàDđượcxácđịnhbởi E(K',x) =x(x+B) modn,D(K'',y) = B odn.2
Trong một mạng truyền tin bảo mật với sơ đồ mật mã Rabin, mỗi ngườithamgiachọnchomìnhcácyếutốn,B,p,qđểlậpnênkhoácôngkhaivàkhoábí mậtcủa mình
(K'',.)khônglậpthànhmộtcặpsongánh,cụthểlàk h ô n g phảilàmộtđơnánh, vìnếuwlàmộtcănbậchaicủa1theomodnthì(w(x+ B )
(x),mà tacóđến4cănbậchaicủa1theomodn,tứclàtacó4giátrịkhácnhaucủa đốisốxchocùngmộtgiá trị e K (x).
(y)= B/2modn ,dođóđểcó d K (y),tacầntính modn,tứccầngiải phươngtrìnhz 2 Cmodn.Phươngtrìnhđótươngđươngvớihệthốnggồmhaiphươngtr ìnhsauđây:
1modp , C 2 1modq Theogiảthiết, p3(mod4)vàq3(mod4),nên p 1va`q1 là cácsốnguyên;vàtacó
Dođó, phươngtrìnhz 2 Cmodn,hayhệ phươngtrình(2),có4 nghiệmtheomodn,tươngứng với4 hệphươngtrìnhsauđây:
Cả4nghiệmcủa4hệphươngtrìnhđótheomodnđềuđượcviếtchungdưới mộtkýhiệulà modn,vàvì vậythuậttoán giảimã d K (y)thựctếsẽchota
4 giá trị khác nhau theo modnmà bản rõ là một trong 4 giá trị đó Việc chọngiátrịnàotrong4giátrịtìmđượclàmbảnrõlàtuỳthuộcvàonhữngđặctrưngkhác của bản rõ mà người giải mã nhận biết (thí dụ bản rõ dưới dạng số phảicóbiểu diễn nhị phânlàmãcủamột văn bản tiếng Anhthôngthường).
Thí dụ:Giảsửn= 77=711,B=9(ở đâyp=7,q).Ta có e K (x) =x 2 +9xmod77, d K (y) = 43mod77, vì2 -1 9mod77,9.2 -1 =9.39Cmod77,B 2 =4mod77,B 2 /4=1mod
77.Vớix= 44 ta e K ( x)D 2 +9.44#32"mod77,bảnmãtươngứng vớixlày=22.Bâygiờgiảimãvớibảnmãy=22,bằngthủtục nóitrênta có thểtìmđược4giátrịcủa 122 theomod77là10,67,32,45,từ đó4giátrịcóthểcócủa d
Bản rõnằmtrong4giá trịđó,trongtrườnghợpnàylà 44.
Hệmậtmãkhoá côngkhaiElGamal
HệmậtmãElGamalđượcT.ElGamalđềxuấtnăm1985,dựavàođộphứctạpc ủabàitoántínhlôgaritrờirạc,vàsauđóđãnhanhchóngđượcsử p p
K={K=(K',K'') :K'=(p,,),K''=a, a mod p}, ởđâyαlàmộtphầntửnguyênthuỷtheomodp,tứccủa Z Cácthuậttoánlập mã e K =E(K',.)vàgiảimã d K =D(K'',.)đượcxácđịnhnhưsau:Vớimỗix
Vớimọisốngẫunhiênkbấtkỳ,tađềuxemtoángiải mãđược xác định bởi e K (x,k)làmậtmãcủax.Vàthuật d K (y 1,y 2 ) y ( y a ) 1 modp.
Ta chú ý rằng trong một mạng truyền thông bảo mật với việc dùng sơ đồmật mãElGamal, mỗi người tham gia tự chọn cho mình các tham sốp,,a,rồitính,sauđólậpvàcôngbốkhoácôngkhaiK'=(p,,),nhưngphảigiữtuyệt mật khoá bí mậtK''=a Bài toán biết khoá công khai tìm ra khoá bí mậtchính là bài toán tính lô ga rít rời rạc, một bài toán khó cho đến nay chưa cómột thuậttoán nàolàmviệc trongthờigian đathứcgiảiđượcnó.
Thí dụ: Chọnp= 2579,= 2,a= 765, ta tính= 2 765 = 949 mod 2579 Ta cókhoácông khai(2579,2,949)vàkhoábímật 765.Giảsửđểlậpmật mãchox
Trong chương này chúng ta đã tìm hiểu về cơ sở lý thuyết toán học củacác hệ mật mã, cơ sở về mật mã truyền thống và mật mã công khai Đối vớimậtmã truyềnthốngta thấycónhữngưunhượcđiểmnhưsau:
- Mật mã khóa bí mật (mật mã cổ điển) nói chung đơn giản, tức là các yêu cầuvềphầncứngkhôngphứctạp,thờigiantínhtoánnhanh.
-Mật mã khóa bí mật có tính hiệu quả, thông thường tốc độ mã Rmã= 1 (số bitđầu ramã hóa bằngvới sốbitđầuvào).
- Vớimậtmãkhóabímậtphảidùngkênhantoàn đểtruyềnkhóa,điềunàydẫnđến chiphi sẽ caohơnvàviệc thiếtlậpkênh antoàn khókhănhơn.
- Việctạokhóavàgiữbí mậtkhóaphứctạp.Khilàmviệctrênmạngnếudùngmậtmã khóabímậtsẽ phảitạovàlưtrữsốlượngkhóanhiều.
- Nếu sử dụng mật mã khóa bí mật sẽ khó xây dựng các dịch vụ an toàn khácnhưcácdịchvụđảmbảotínhtoànvẹncủadữliệu,dịchvụxácthựcvàchữkýsố.Các dịchvụnàysẽđượcthựchiệnbởimậtmãkhóa côngkhai.
Cácbướccơbảnđểtiếnhànhthámmã
mã.Bước1: Phân loạibản mã.
Saukhinhậnđượcmộtsốbứcđiệnmã,cácnhàphântíchmậtmãcầnphânloạixe mnhữngbứcđiệnmãcócùngmộtloạimãpháphaykhông,cócùngmộtloạikhoámã haykhông,mặcdùchúngtachưabiếtđượcmãphápphương pháp mã hoá) của các bức điện đó, nhưng chúng vẫn cần được phânloại(phânlớp).Đâylàmộtbướcquantrọngquyếtđịnhsựthànhcônghaythấtbạicủamãthá m nênmấtrấtnhiềuthòigian.Nếuviệcphânloạichínhxácthìsẽthuậnlợichocácbướctiếnh ànhtiếptheo;Ngượclại,nếuphânloạithiếuchính xác thìsẽ gâykhókhănchocácbướcsauđó.
Giả sử ta nhận đượcm bản mãM 1 , M 2 ,…., M m vớim> 2 Mỗi bản mã tagọi làmột đốitượng.Tậphợpmbản mã(các đốitượng)taký hiệu làG.
VậyG= {M 1 , M 2 ,…., M m }, ứng với mỗi đối tượng ta cần tìm ra các đặc trưngtham số. Giả sử đốitượngM i, cóP iđặc trưng, ở đây ta giả thiếtp 1 =p 2= =p m =p.
𝐺 𝑖 = G vàsaochosaisóttrongphânlớplàbénhấtcóthểđược.Đểthựchiệnviệcphânlớp các đối tượng ta cần đưa ra một độ đo “khoảng cách” giữa các đối tượng.Cácđổitượngcàng “gần gũi”nhau sẽđược gán cho cùngmột lớp.
Sau khi hoàn thành việc phân lớp (phân loại mã pháp) ở bước 1, chúng tatiến hành xác định phương pháp mã dịch ứng với từng lớp cụ thể (cần chú ýrằng, thường thì chúng ta tiến hành xác định mã pháp đối với các bản mã cónhiều đặc điểm nhất theo quan điểm của các nhà thám mã) Đây là một khâurấtquantrọngcủacôngtácthámmãtruyềnthống.Tuynhiênđốivớimộtsốhệmật đối xứng hiện đại như mã DES, 3DES, AES, IDEA, PGP thì bước nàycoi như được bỏ qua bởi ngay từ đầu bản mã, người ta đã chỉ ra rằng bản mãđóthuộcloạibảnmãphápnào.Ởđâychúngtachỉtrìnhbàycáchthứcxácđịnhmãphápđốivớicácl uậtmãtruyềnthống(bướcnàyđượcbỏquađổivớinhữnghệ mật mà thuật toán mã hoá - phương pháp mã - được công khai hoàn toàn).Bướcnàybaogồmcác côngviệc sauđây: a,Tínhtầnsố
Mục đích của việc tính tần số là để phát hiện tính quy luật không ngẫunhiêntồntạitrongbảnmã.Córấtnhiềuloạitầnsốkhácnhaucầntính,màmỗimã pháp có thể tồn tại tính không ngẫu nhiên (có quy luật) đối với các loại mãpháp khác nhau Tùy thuộc vào kinh nghiệm của từng nhà phân tích, người tasẽ tiến hành tính tần số loại phù hợp nhất, thông qua đó có thể bộc lộ rõ nhấttính quy luật (không ngẫu nhiên) trong bản mã Việc tính tần số thường baogồm:
Tần số đơn là tần số từng kí tự một trong bản mã Sau khi có được kếtquả tính tần số đơn, ta tiến hành sắp xếp lại thứ tự các ký tự theo tần số từ caođến thấp. Cũng có thể lập bảng tần suất bằng cách chia tần số từng ký tự chođộdàibản mã cần tính đểxemtầnsốtương đốicủachúng.
Tần số bộ đôi móc xích là tần số bộ đôi nhưng các cặp kề đè lên nhaumột ký tự Mục đích của việc tính tần số bộ đôi móc xích là để xem quan hệphụthuộcgiữakýtựsauvớikýtựkềngaytrướcđónhưthếnào(tathườnggọilàquanhệxíchMak ovcấp1).Từđócóthểướclượngđượcxácsuấtxuấthiệnmột kýtựnàođókhibiếttrướckýtựđứngngaytrước nó.
Tần số bộ đôi thường là tần số bộ đôi rời nhau, thí dụ: cho đoạn văn: Vieetjna mthìtầnsốbộđôithườnggồm:
Vi: xuất hiện 1 lần.ee: xuất hiện 1 lần,tj: xuất hiện 1 lần.na:xuấthiện1lần.
Kýtựcuốicùngđượcbỏqua(chỉgồmcó4bộđôi).Trongkhiđó,tầnsốbộđôi móc xíchsẽđượcthểhiệnlà:Vi,ie,ee,et,tj,jn,na,amgồm8 bộđôi
Lưuý: Sốtấtcảcácbộđôi mócxíchtrongvăn bảnđộ dàinlàn-1.Cònsố tấtcảcác"bộđôithường"là
Tùy theo từng trường hợp cụ thể đôi khi chúng ta phải tính tần sô bộ 3, bộ4,bộ5 b,Tínhmãtrùnglặp ( trùngmã)
Tính trùng mã tức là tính tần số trùng lặp của các dãy ký tự liền nhau trongbản mã. Thường là tính trùng lặp 3 ký tự (bộ 3), bốn ký tự (bộ 4), năm ký tự(bộ5) cóthểxuấthiệntrong bản mãvàvị trí củachúngtrongbản mãđó.
1 Khi tínhtrùngmã(các bộ)taphảiquantâmcácthamsố sau đây:
Nhữngthamsố trên đâyrấtcóíchtrongviệcxácđịnh mãpháp c,Tần sốđịnhkỳ
Ngoài việc tính tần số đơn, bộ đôi móc xích, bộ đôi thường và trùngmã(sựtrùnglặp)trongbảnmãhoặccácbảnmã,trongnhiềutrườnghợptaphảitính tần số định kỳ Giả sử ta có bản mãMđộ dàinnào đó Thườngnkhá lớnvàcànglớncàngtốt.TalậpbảngKcột(K≥2vàthườngthìK≥3)vàn/Khàng.Sauđó,taviếtbảnmã lầnlượttráiquaphảivàviếttừtrênxuốngdướichođếnhết thì dừng Bây giờ ta tiến hành tính tần số đơn theo cột từ cột 1 đên cộtK.Nhưvậy ta thường phải tính toán tần số các "định kỳ" khác nhau lần lượtk=3,4,5, ,10 Tầnsốnhưvậyđược gọilàtầnsốđịnhkỳcấpK. d,Tần số bộđôi dọcvà bộđôi dọcđồng tự
Nếu ta viết 2 bản mã lần lượt bản mã này dưới bản mã kia Thí dụ 2 bảnmãM 1=m 11 m 12 m lnlvàM 2=m 21 m 22 m 2n2.
1 m 22 m 23 m 2n1… m 2n2. Tacắtphầnthừalàm 2n1+1,… m 2n2(giảsửn 1 =n 2 ),vàtakýhiệuđộdàihaibảnmãtrùngnhaulàn.Tatiếnhànhtínhtầnsốtừngcặp (m 1k m 2k ),vớik=1,2,
,n Ta sẽ có tần số bộ đôi và bảng này được gọi là bảng tần số bộ đôi dọc.Cácphần tửtrênđường chéo chínhlàtầnsốcủacácbộđôi dọcđồngtự. e,Phân tích kếtquảtínhcáctầnsốvàtrùngmã
Bướcnàydựavàocáckếtquảtínhcácloạitầnsố,trùngmãđểkếtluậnbảnmã(cácbản mã),đóthuộcloại mãphápnào.Đểđánhgiáđộchênhlệchtầnsốhoặc tính độc lập của các ký tự trong bản mã, người ta thường dùng các tiêuchuẩnthốngkêtoán,chẳnghạntiêuchuẩn3σ,tiêuchuẩnx 2 hoặctiêuchuẩn
MLR (The most likelihood Ratio) Nói chung việc xác định mã pháp là côngviệc rất phức tạp, nó phụ thuộc một phân vào trình độ và kinh nghiệm của cácmã thám viên Có nhiều trường hợp thoáng nhìn bản mã người ta đã dự đoánđượcphươngphápmãnhưngcũngcórấtnhiềutrườnghợpphảinghiêncứurấtcôngphumà độ rủirokhông phảilàkhông có.
Giảsử,đãxácđịnhđượcmãpháptạibướcthứ2,naychuyểnsangnghiêncứu,phântíchbản mã (thámmã) Bước nàycũng cóhai côngđoạn: a,Thámmãtrựctiếp
Nếu mã pháp thuộc loại truyền thông đã biết như các mã pháp thủ cônghoặcđượcmãbằngmộtmáymãcụthểnàođómàtađãcóthuậttoánthámmãthì có thể tiến hành thám mã trực tiếp (thực hiện thủ công và sau đó có thể tựđộng hoábằnglậptrìnhtrênmáytính). b,Xâydựngphươngphápmã hóa
Nếumãphápthuộcloạimới,côngviệcyêucầuphứctạphơn.Đólàphảixâydựngphươngp hápthámmã.Nhìnchungcóhaiphươngphápthámmã:
Phương pháp phân tích được sử dụng trong trường hợp nhà mã thám đãbiếtđượccấutrúckhoámãđãđượcsửdụnglàm‘mầmkhoá’(keyseed)đểmãhoá bản mã này Khi đó có nhiều kiểu để xác định khoá có thể, thí dụ: phươngpháp ‘thử - sai’, phương pháp ‘lượng sai’, phương pháp ‘những phần tử táchbiệt’, phương pháp ‘tuyến tính’ Tóm lại tùy theo thuật toán mã hoá của bảnmãnhưthếnào màchọnphương pháp phân tích nào chohợp lý.
Phương pháp này chủ yếu là dựa vào thông tin tiên nghiệm về khoá vàthôngtin vềbảnmã(quyluậtngônngữ)để dựđoán khoáđượcsửdụng.
Nộidungcủaphươngphápnàylàdựđoáncụmtừcóthểxuấthiệntrongbản rõ gốc ứng với bản mã, sau đó tìm cách xác định khoá đúng Nếu khoá làđúng thìcóthểdịchbảnmãđểchorabảnrõ
Ngoài một số phương pháp truyền thống trên, ngày nay nhờ tốc độ máytínhđãđượccảithiệnđángkể,trongnhữngbàitoánmàkhônggiankhoákhôngquálớnngườitacòn cóthểápdụng mộtphươngphápnữa đó là‘vét cạn’.Đốivới không gian khoá lớn, đây thật sự là phương pháp tồi nên chúng ta chỉ thựchiện‘vétcạn’mộtcáchthôngthường.Tuynhiênnếuápdụngđồngthòicáckỹthuậtbổtrợthìnóvẫ npháthuyđượchiệuquảtốt.Cáckỹthuậthỗtrợđượcnóitới ở đây là xây dựng một thư viện phục vụ việc ‘vét cạn’ bao gồm cơ sở dữliệu về khoá và các tiêu chuẩn bản rõ tốt Trên cơ sở đó tìm cách phân hoạchkhông gian khoáSthành hai tập con ròi nhau làS 1vàS 2sao cho khoá đúng sẽ‘chắcchắn’thuộcmộttronghaitậpconđó.Từđótiếnhànhsửdụngthuậttoánvétcạntrêntậpcon cóchứakhoáđúng,khiđóviệcvétcạntrongtậpconnhanhchóng thể hiện tính hiệu lực của nó Việc này cũng có thể thực hiện ngay đốivới một số phương pháp truyền thông đã có được những kết quả đáng ngạcnhiên.Khithámmãrabảnrõtachỉcầnđọcđượclỗchỗđãlàthànhcôngvìlúcđóbằngquyluật ngônngữtasẽkhôiphụcđượcbảnrõ gốcnhưmong muốn.
Chú ý: Ngày nay, người ta đã có những công cụ tính toán cực nhanh nhờcông nghệ cluster Từ đó người ta có thể xây dựng mạng tính toán song songvới tốc độ tính toán đạt tới gần 100GF (một trăm tỉ phép tính dấu phảy độngtrênmộtgiây).Nhưvậyngườitacóphânrãbàitoánđểthựchiệnviệctínhtoánsong song cực kỳ có hiệu quả, đặc biệt đối với những bài toán có độ phức tạptínhtoánlớn.
Mãthaythếđơnvàphương phápthámmã
Mãthay thếđơn
Thay thế đơn là luật mã tương đối đơn giản Nó ra đời từ trước chiến tranhthếgiớilầnthứnhất,đượcduytrìvàpháttriểnmãichođếnkhoảngnhữngnăm70 của thế kỉ XX Tuy nhiên loại mật mã này hiện nay vẫn được sử dụng lácđácđâuđóchủyếulàvìmậtmãnàyđơngiản,việcmã/giảikhôngcầnđếnmáytính, rất phù hợp cho những người không hiểu biết nhiều về mật mã thường đicôngtác lẻ nơikhôngcó điện.
Ta hiểu “thay thế đơn” nghĩa là cứ một chữ cái trong bản thông báo đượcthay thế (substitution) bởi duy nhất một ký hiệu nào đó Ký hiệu này có thể làchữ cái, chữ số, hoặc một dấu hiệu nào đó được người gửi và người nhận đíchthựcquiướcvớinhautrước.
Về phạm trù toán học, chúng ta có thể định nghĩa mật mã thay thê đơn làmộtánhxạlên1-1(tứcflàmộtsongánh):𝑓:𝘗→𝐵 trong óđó ,𝘗làkhônggianbản rõ (thường là bảng chữ cái La-tinh),𝐵là không gian bản mã tương ứng.Điều này có nghĩa là cứ mỗi𝑎∈𝘗tồn tại duy nhất b∈ 𝐵sao chof(a) =b Dođó, xét về tập hợp thì lực lượng của 2 tập hợp𝘗và𝐵là như nhau. Vì vậy𝐵làtậphợpcáckýhiệugìkhôngquantrọng.Trongphạmvinghiêncứunày,chúngtagiảthiếttập
Thớ dụbản rừ Vieetjnam-ằMNZZUKJCO
(Các ký tự mã thường được viết hoa, còn bản rõ là chữ thường) Trong đó chữV (của bản rõ) được thay bởi chữ M, chữ i trong bản rõ được thay thế bởi chữN,v.v. Ở phần này chúng ta không phân tích chi tiết kỹ thuật mã hóa và giải mã(khiđãcho trướckhóa)mà sẽnghiêncứu các phươngphápthám mã(giảibản mãkhikhôngchotrướckhóamã).Tứclàxâydựngcácphươngphápchuyểnbảnmã(khôn gđọcđược)thànhbản rõ gốckhi khôngcó khoámãtrong tay.
Phươngphápthámmã
XAVBR PEPUI TCKMPFPVS./. Độ dài bản mã làn- 79 (ký tự)Phươngphápthámmã nhưsau:
Bước1: Tínhtầnsốđơn củabản mãtrêntacóbảng tầnsốđơnsau đây:
Ta thấy có 9 ký tự cao tần nhất Đó là:S:12
ETAOINRSH TrongtiếngAnhtầnsốđặctrưngcaotầnnhấtlàchữcáie,vìvậytathaythếchữstrongbảnmã bởichữEcủabảnrõ,chữtchochữp,chữdchochữA,i thay cho X, n thay cho R và viết vào dòng dưới của các ký tự mã tương ứngtrong bảnmã,ta có:
Nhìn vào các ký tự đã được thay thế ở trên, ta thấy có điều gì đó chưa hợp lý.Vídụ,trongtiếngAnh,3nguyênâmđiliềnnhaunhưoailàrấthiếm.Ởđây,thậmchí4ng uyênâmđiliềnnhaulà oaie
Dođógiả thiếtcủa ta cóthểcókýtựta thaychưađúng.KýtựmãXcóthểlàkýtựIlàhợplý.VậyDcaotầntrongbảnmãcóthểlàttrongbảnr õ(chứ khôngphảilàP)vàchữpcóthểlàchữevàscóthểlàchữotrongbảnrõ.Tacó:
Qua đây ta thấy A = n chứ không phải R = n Do đó ta xóa ký tự n vừathay và ta thay A bởi n rõ và cứ tiếp tục thay, đọc xem có gì mâu thuẫn khôngchođến khitakhôi phụclại đượcbảnrõ vàsauđó thiếtlậpkhóa mãlàxong.
Cuốicùngtacókhóamãnhưsau(dòngtrênứngvớikýtựmã,dòngdướiứngvớikýtựrõ(viếtt hường).
Nếu sắp xếp theo thứ tự dòng trên là biểu thị ký tự rõ, dòng dưới là kýtựmã (khóa) tươngứng,ta có: a b c d e f g h i j k i m n o
Do bản mã ngắn quá nên chúng ta không thể khôi phục lại đầy đủ khóamã, còn chữ q và X trong bản rõ không biết được mã bởi ký tự gì (lần lượt cóthể là G,HnhưngcũngcóthểlàH,G).
Cómộtsốphươngphápthámmãthaythếđơnchữcái.Mỗiphươngphápcó những ưu và nhược điểm của nó, và hầu như phương pháp nào cũng khôngthể tự động hóa thám mã 100% mà phải có sự trợ giúp của con người Mộttrong những phương pháp đáng lưu ý là phương pháp dựa trên giải thuật ditruyền, chúng ta không trình bày nội dung của giải thuật di truyền (GeneticAlgorithms - GA).Ở đây, tôi chỉ trình bày ứng dụng của nó vào thám mã thaythế đơn chữ cái Nội dung của phương pháp này được tiến hành theo các bướclớn sauđây: a Biểudiễn khóa
Tabiếtrằng:mộtkhóalàmộtdãygồm26chữcái.Đểphụcvụviệcthámmãcác khóa được sắpxếptheo thứtựtầnsuấtgiảmdần.
CDEFGHIJKLMNOPQRSTUVWXYZAB chỉ ra rằng chữ cái có tần sốxuất hiện cao nhất trong bản mã (ứng với khóa đó) là chữ c, chữ cái có tần sốxuấthiệncaothứ2làchữD,caothứbalàchữE vàcuốicùngchữcáicótầnsốxuấthiệnthấpnh ấttrongbảnmãứngvớikhóađólàchữB.
Tứclà chữEtrongbảnrõsẽđược thaychochữcáictrong bảnmã Với sựbiểudiễnnàythìkhônggiankhóasẽlà:26!≈ { 26 }26√2 ∙𝜋∙26,Trong
𝑒 đó𝑒≈ 2,71828… Hay26!≈(9,6)26∙ 13và do đó công việc tìm kiếm khóangẫunhiên(vétcạn)làkhôngkhảthi.Tuynhiênthuậttoánditruyềnlạithực
1 hiệnthửvàsai(Trialanderror)theomộtcáchngẫunhiêncólựachọn.Đểthựchiệnđiềunàytrướch ếtngườitađưavào mộthàmđosựphùhợpvàđượcđịnhnghĩalà:
Công thức này do R.spillman đưa raTrong đó:
SF=(SF[1], ,SF[26])làtầnsuấtđơntiếngAnhchuẩn(tứctầnsốđơnđãtínhratỉsốphầntrăm).
DDF=(DDF[i,j]) i,j=1,2,…,26 cũng được ký hiệu và tính hoàn toàn tương tự nhưSFvàSDFở trên, chỉ cókháclàchúngđượctínhtrênbảnmãcầntính(tứclàbảnrõsaukhiđãđượcgiảibởi một“khóa”nàođó).
2 Kếtquảgiảimãởbước1,đượcđemvàophântíchtầnsốđơnvàtầnsốbộđôimóc xích (chuyểnsang tần suất)
3 Kếtquảphântíchtầnsố(tầnsuất)đượcsosánhvớitầnsốtiếngAnhchu ẩnđểxácđịnhđộ sailệchbằngcông thức (2.1).
4 khóa đúng sẽ là khóa ứng với “bản rõ” có độ sai lệch so với tần suấtchuẩntiếng Anh làbénhất, tứclàcóđộphùhợpfitnesslớn nhất. b Traođổi chéo
Một thế hệ là một tập các khóa, mỗi khóa có tương ứng với một độ phùhợp.Giảithuậtđượctiếnhànhbằngcáchchọnngẫunhiênhaikhóađểlàmtraođổi chéo Hai khóa này được gọi là khóa bố và khoá mẹ, hay gọi là cặp khóabố mẹ.
Cặpkhóabốmẹnàysẽsinhrahaikhóaconnhòviệctraođổichéo.Việctraođổichéonàyliên quanđếnviệcràquétcácthànhphầncủahaikhóatừhaiđầu vàchọn rachữcái cótần số xuất hiện cao hơnsẽđượcđưavào “con”.
ChữFxuấthiệnnhiềuhơntrong“bảnmã”sovốichữcnêncon1sẽcóchữcáiđầu tiênlà F. con 1 FD E
Kýtựthứ2củacon1bằngcáchsosánh2chữcáitiếptheocủabô,mẹlàDvàG.Giảsửc hữDcaotầnhơn,lúcđókýtựthứ2củacon1làchữD
Tiếp tục như vậy cho đên 2 chữ cuối cùng là B và E Giả sử đó là chữ E và giảsửta cóđứa con1 là: conl:FDEIJHLMKOPQRSTUVWWXYZABCDE
Quátrìnhnàyđượclặplạiđểtạorakhóathứ2(con2)bằngcáchquétngược lại từ phải qua trái Trong trường hợp này ta xét cặp B, E (bố mẹ) trướcvàcuốicùngxétcặpC,F.Giảsửtacókếtquảtạora đứacon2nhưsau:con2: CDVFGHIJKLMNOPQRSTUVWXBZAE c Quá trìnhđột biến
Sau khi thế hệ mới được tạo ra, các khóa phụ thuộc vào quá trình biếnđổi (đột biến) với tần số thấp, ở đây khi một ký tự (chữ cái) trong khóa đượcchọn để biến đổi thì ký tự đó được trao đổi với một ký tự nào đó được chọnngẫu nhiên trong dãy khóa nếu giá trị fitness của dãy khóa thuộc nửa dưới củagene pool (của họ) Nếu giá trị fitness của dãy khóa thuộc vào nửa trên của họthì kýtựđóđượctraođổivớikýtựđứngngaybênphải nó.
Thí dụ: Trong hình dưới mô tả lý luận vừa nêu: Ký tự D đứng ở nửa trên củadãy,nênnóđượcđộtbiến(biếnđổi)bằngcáchtraođổinóvớikýtựđứngngaybên phảinó(ởđâylà chữcái “E”) để sinhra dãydưới:
1 Mộthọ ngẫu nhiên củacácdãykhóađượcsinh ra.
4 Thaotáctrao đổi chéo đượcápdụng đôivới bố mẹđãđượclựachọn.
6 Mộthọmớigồmcácdãykhóađượcquétvàđượcsửdụngđểcậpnhậtthành mộtdanhsáchkhoảng 10khóatốtnhấtqua cácthế hệ.
Luậtmã CAESARvàphương phápthám
Khái quát
MãCaesarlàhệmãtruyền thống,đượccho dưới dạngsauđây:
*Mã hóa: Giả sửRlà bản thông báo cần mã (gọi là bản rõ) cònMlà văn bảnđã được mã hóa, khi đó ta có công thức mã hóa như sau:M=R®K, trong đó:phép cộng ® được thực hiệntheo mô-đun26 Cụ thể, giả sử:R=r 1 r 2 r n với:kir i∈{a,b, ,z},Klàmộtkhóamã chotrước:K∈{l,2,, 26} CònM=m 1 m 2…m n.Lúcđóta cóhệthức mã hóa:m i =r i +K(mod26),𝑖= ̅1̅̅,̅𝑛̅
Nhưvậyđểthựchiệnphépcộngthôngthườngtheomôđun26,ngườitacầnchuyển kýtựrõr i sang chữsốtừ0÷25theoquitắcsauđây:
R = coongj hoafxaxhooijchurnghiaxvieetjnamCó khóak=7.Ngườitatiến hành nhưsau
Tiến hành mã hóa bằng cách cộng theo mô đun 26 ký tự ứng với từng cột vớinhau,sauđóchuyểnvề chữcái,và có:
Muốn giải bản mã này sang bản rõ khi có khóa tương ứng là rất đơn giản:ta chỉ việc lấy bản mã sau khi đãđược chuyển sang chữ số tương ứng đem trừđikhóatheomôđun26.
Chuyển Rở dạngsốv ề c h ữ cáitươngứng,ta có:
Phươngphápthámmã
*Nhận xét: Mã Caesar thực ra là mã thay thế đặc biệt, nói cách khác nólà phương pháp chuyển dịch các ký tự của bản rõ tăng lên một hằng số khôngđổi theo mô đun 26 Nếu ta tìm được hằng số đó (tức là khóa) thì coi như bảnmã đó đã bị phá Nhìn vào bản mã ta thấy rằng nếu 2 ký tự của bản rõ bằngnhau màđứng cạnh nhau thì2 kýtựmãtương ứng cũng bằng nhau.
Thí dụ: oo→vv (nếukhóak=7)
Như vậy 2 ký tự đồng tự trong bản rõ sẽ cho ta 2 ký tự đồng tự tươngứng trong bản mã Căn cứ vào tần số bộ đôi đồng tự trong bản mã để dự đoánbộ đôi đồng tự tương ứng trong bản rõ và từ đó dự đoán được hằng số Lấyhằng số (khóa) này đem giải mã cho các ký tự khác, nếu kết quả thành đoạnvăncónghĩathìcoinhưcứgiảitiếp,nếutráilạithìtathayđổigiảthiết.Cứnhưvậysaumộtlúcnà ođóchúngtasẽ xác địnhđượckhóa mã.
Ngoàiratacũngnênđưavàocáctừ giả địnhđể dựđoánvà tìmrakhóa
K Hơn nữa, ký tự cao tần nhất trong bản rõ sẽ cho ta ký tự cao tần trong bảnmãtươngứng.KhidựđoánđượckhóaKthìtatiếnhànhgiảithửcáckýtựkháccủabảnmã xemcó chota đoạnvăncóýnghĩahaykhông.
Về nguyên lý, khóa K chỉ có giá trị từ 1 đến 26 nên với thời gian chấpnhậnđược, tasẽ tìmrakhóa mãmột cách khôngkhókhănlắm.
Từnhận xét trênđây, chúng tacóphươngphápthámmãnhưsau:
1 Giả sử trên cơ sở nào đó chúng ta nhận được bản mã:M= m1m2 mn,Trong đó:
2 Tiếnhànhtínhtầnsốđơnbảnmã,giảsửsaukhitínhtầnsốđơnbảnmã,tacókết quả:f=(f 13 f 2? ,f 26),f j ≥0là tầnsố kýtựthứicủa bảnmã(i= 1,2
3 Đánhdấu những cặp(bộđôi)đồng tựxuấthiệntrongbản mã.
4 Dựđoán ngônngũ bản rõtương ứngvớibản mã.
Thôngthườngnếutổngsốbộđôiđồngtựchiếmkhoảng0,067÷0,072thìbảnrõ tương ứng có nhiều khả năng là tiếng Anh Nếu tỷ lệ đó chiếm trên 0,08 thìrấtcó khảnăngbảnrõ làtiếng Việtcódấuđượcviếttheo lốiđiện báo(telex).
Căn cứ qui luật ngôn ngữ với biểu hình cao tần đồng tự trong bản mã để dựđoán.
7 Giải bản mã và đọcThí dụvới bản mãtrên:
Giải:tathấyrằngbảnmãnàycóđộdài37(37kítự).Dođósốlượngcácbộđôi cóthể cólà36.
Ta cũngthấyngayrằngcó3bộđôiđồngtự w (xuấthiện2lần,LL xuấthiện mộtlần)
3/36=0,0833>0,08=>bảnmãrấtcóthểlàmãCaesarvớibảnrõtiếngViệtđượcviếttheo kiểuTelex.TrongtiếngViệtbộđôiđồngtựđiliềnnhau phầnlớnlànguyênâma,e,o.Ởđâycóthểlàaa,eehoặcoo.Nhưngtrongbảngtần số bộ đôi thì ee, oo xuất hiện nhiều hơn là aa Vậy ta giả thiết coi vv = ee.Talấyv-e(mod26)= 21-4(mod26)
Bâygiờlấy J-17(Jlàkýtự đứngngaytrướcwởnhómđầutiêncủa bảnmã).Ta có:
Như vậy là nếu khóak= 17 thì 3 ký tự đầu tiên được giải ra là SED. TrongtiếngViệtchúngkhôngcónghĩa.VậygiảsửtacoiVV=OO.TacóV-O(mod26)!-
V-7(mod26)!-7=OchúngtathấyrấthợplývớitiếngViệt.Tiếptục dịch (giải mã) bởi khóaK= 7 cho toàn bộ bản mã, ta nhận được bản rõ là:“coongjhoafxaxhooijchurnghiaxvieetjnam”.
GiảsửngônngữđượcdựđoánlàtiếngAnhchẳnghạn(ngônngữnàokhôngquantr ọng nhưngphảibiết cụthểnó làloạingôn ngữgì).
Bước1.TínhtầnsốđơnbảnmãM.Giảsửtanhậnđượckếtquảtầnsốđơn của bảnmãMlà: f= (f 1,f 2, ,f 26);f i ≥0,i= 1,2,3, ,26
Bước2:Chọn10chữcáiứngvớitầnsốcaonhấtcủabảnmã.Takýhiệu10 chữcái cao tầnnhất trongbản mã đượcxếp theothứtựgiảmdần là:
Tabiết10chữcáicaotầnnhấtcủangônngữchuẩntiếngAnhđượcsắpxếp theo thứ tựgiảmdần là:
Bước3: TìmJ 0trongkhoảng 0÷25sao cho:
Bước4: Saukhixácđịnh đượcJ 0,tachỉ việcgiảibản mãbình thường:
Trong chương này chúng ta đã đi tìm hiểu về các cách tấn công hệ mãtruyềnthống,cụthểđãtìmhiểunguyênlývàcáchthámhệmãCAESAR.Nhìnchungtathấycách ệmãbảomậtđềucóchứcnăngbảovệchothôngtinkhôngbịkhaithác bất hợppháp,chốnglạicác tấncôngsau:
Phântíchmãlàkhoahọcnghiêncứucáchphácáchệmậtnhằmphụchồibản rõ ban đầu từ bản mã.
Việc tìm hiểu các thông tin về khóa và các phươngphápbiếnđổithôngtincũnglàmộtnhiệmvụquantrọngcủaphântíchmậtmã.Có ba phươngpháptấncông cơbảncủa thámmã:
- Tấn công với cácbản rõđược chọn.
HOHỆMẬTMÃTRUYỀNTHỐNG
Mụcđíchýnghĩa
Hiệntại mã chuyển vị một lần đã cóphương pháp thám bằng phươngphápthủcônghoặctựđộngtrênmáytính.Dođó,saukhitìmhiểutathấyrằngtrong thám mã, không gian khóa và độ phức tạp của thuật toán đóng vai tròquan trọng: Vì vậy bài toán đặt ra là cần tìm cách tăng lượng không gian khóavà tăng độ phức tạp của thuật toán Đối với mật mã chuyển vị đơn, người tathám mã bằng cách dự đoán độ dài khóa chuyển vị và tìm cách ghép các cộtnhờ qui luật ngôn ngữ tự nhiên Vậy nếu ta tìm cách xóa được qui luật ngônngữ thì coi như chúng ta đã thành công nhằm đối phó với khả năng “ghép cột”của loại mật mã này Để giải quyết được vấn đề này, một phương pháp đơngiảnlà mã chuyểnvịhailần(chuyển vịkép).
Đềxuấtthuậttoán
S 1 =( P ,Ci,Ki,Ei,Di) Trongđó,Plàtậpcáckýtựbảnrõ,C1làtậpcácbảnmã,Kitậptấtcảcáchoánvịcủacácsốnguyên{1,2,. ,li},Eilàthuậttoánmãhóa,Dithuậttoángiảimã.saochoC1=E(k1)(P) vớik1∈K1
Cho bản rõ P = P1P2 Pn,với độ dài là nMãhóa lần1:
Bước2.Lậpbảngvớikíchthướcl1*n1/l1nếunchiahếtchol1vàbằngl1*(n1/l1+ 1) nếunkhôngchiahếtchol1.
Bước3.NhậpcáckýtựP1,P2, ,Pntươngứngcácôtheothứtựtựnhiênchođến hếtbảnthôngbáoP. Bước4.nhặtcáckýtựcủabảngtheothứtựtừtrêncộttừtrênxuốngdướivàtừcộtcóchỉsố thấpnhấtđếncột caonhất cuốicùng,tađược:
Bước1 Chọn l2là số tự nhiên tùy ý l2≠ l1,ta có khóa k2là một hoán vị củadãysố{1,2,3, ,l2}= K2,k2= {k21, k22, ,k2l2}.
Bước 2 Lập bảng với kích thước l2* n/l2nếu n chia hết cho l2và bằngl2*(n/l2+ 1) nếunkhôngchiahếtchol2.
Bước 3 Nhập các ký tự C1,C2, ,Cntheo thứ tự tự nhiên vào các ô của bảngchoởbước2,Bước4.Nhặtcáckýtựcủabảngchoởbước3theothứtựtừtrênxuống và từ cột có chỉ số thấp nhất đến các cột có chỉ số cáo nhất,ta được bảnmãcuối cùng là:
Bâygiờcoibản mã số 1là bản rõ
N E O O GE. Đểmãhóalần hai,tachọnl2=9,tachọnkhóak2là: k2= {1, 5,3,6, 7,9,2, 4,8}.
Dosốkýtựcủachuỗilà37màtacótấtcảlàl2*(37/9+1)=9 * 5 E(8ôcuốicùng của bảng được bỏ trống ). Nhập các ký tự của P1vào bảng, ta nhận đượckếtquả:
Bảnmãsố 2vàlàbản mãcuối cùng là:
Bước 1: Lập bảng với khóa k2và n2= 5 ( n2= 37/9 + 1 )Sắp xếpcác ký tựtheocộtvớithứtựcủakhóa
Coibảnrõ P1là bảnmã để giảivớikhóak1talậpbảngtheothứtựcủakhóa:
Từ bảng ta nhặt theo thứ tự hàng thì nhận được bản rõ P, cụ thể là :P=coongjhoaf xaxhooijchurnghiaxVieetjNam
Đánhgiá độ antoàncủahệmậtmãđượcđềxuất
Như đã đề xuất ở trên thuật toán được xây dựng dựa trên hệ mã chuyểnvị, nhưng ở đây đã được cải tiến thành hai lần mã hóa tương ứng với hai lầnchuyểnvị(chuyểnvịkép)vậyvềmặtlýthuyếtđãtăngđộan toànsovớihệmãcũ lên gấp hai lần, khắcphục được sự phát hiện quy luật của bản rõ Khôngnhững thế khóa của hệ mật mã mới là một cặp mã hoàn toàn khác nhau, mỗikhóalạilàmộtsựhoánvịbấtkỳcủamộtdãysố(đủlớn).Nhưvậykhônggiankhóa đã tăng lên rất nhiều Độ dài mã một lần có số lượng khóa có thể làL 1 !,thuậttoáncảitiếncóđộdàikhóalàL 1!L 2!.TrongđóL!
=1.2.3 L.Đểthámmã sử dụng phương pháp vét cạn với các độ dài khóa L1và L2đủ lớn thì khócóthểthựchiệnđược,kểcả sửdụngcôngcụ tínhtoánhiệnđại.
Cài đặt kiểmthử
3.4.1 Giới thiệu thuật toána,Thuật toánmãhóa Đầuvào:
- File Key.dat chứa hai khóa k1, k2, l1, l2, n1, n2Các bướcthựchiện:
+ Chuyển đổi chuỗi ở kết quả mã hóa lần 1 thày mảng hai chiều có kích thước[l2,n2]
- LưuKey.dat chứakhóak1,k2,l1,l2,n1,n2 b,Thuậttoángiải mã Đầuvào:
- FileKey.dat chứahai khóak1,k2,l1,l2,n1,n2 Đầura:
+Lập bảng theo cột theo thứtựcủakhóak1
Cácsựkiệnphươngthức trongFromchính: privatevoidencryptionToolStripMenuItem_Click(objectsender,EventArgse) { frmEncryption frmEn = new frmEncryption();frmEn.MdiParent =this; frmEn.WindowState =
} private void decryptionToolStripMenuItem_Click(object sender,EventArgs e) { frmDeCryption frmDe = new frmDeCryption();frmDe.MdiParent =this; frmDe.WindowState =
Lớp Keychứa thuộctíchđểsửdụng khighi fileKey.dat:
{ private int n1, n2, l1, l2;private List k1, k2;publicintL1
- LớpUtlitieschứacácphươngthứcđọcghikey,tạokey,mã hóa,giảimã classUtlities
{ private const string KEY_FILE =
"KEY.DAT";publicstatic KeyobjKey =newKey();
//Phương thứcđểghikey publicstaticboolSaveKey(KeyobjKey,stringsPath) { string sFileName;FileStre am fs = null;try
{ sFileName= sPath+"\\"+ KEY_FILE; fs = new FileStream(sFileName,
FileMode.OpenOrCreate);BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs,objKey); fs.Close();
{ string sFileName;FileStre am fs = null;try
{ sFileName= sPath+"\\"+ KEY_FILE; fs = new FileStream(sFileName,
FileMode.OpenOrCreate);BinaryFormatterbf=newBinaryFormat ter(); objKey =
(Key)bf.Deserialize(fs);fs.Close();
//Tạokeyrandom publicstaticListGenneraKey(intl)
MessageBox.Show("call1");List< int> k = new
List(l);Random rd = new
{ inta =rd.Next(l); while(k.IndexOf(a) >= 0)
} publicstaticstringencryption(stringP,Listkey,intn) { stringstr="";intl= key.Count; char[] PChar = new char[P.Length];PChar
=P.ToCharArray(); char[,]strArr=newchar[n,l];//khaibáobảng
Lậpb ả n g in tcount=0; for(inti =0;i