Một lần nữa, ta lại nói đến các phương pháp kiểm tra số nguyên tố. Mỗi số nguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiên lớn, sau đó kiểm tra các số kế tiếp cho tới khi tìm được một số nguyên tố. Một phương pháp đơn giản thực hiện một phép tính trên một con số ngấu nhiên, với xác suất 1/2 sẽ chứng minh rằng số được kiểm tra không phải nguyên tố. Bước cuối cùng là tính p dựa vào thuật toán Euclid.
Như phần trên đã trình bày trong hệ mã hoá công khai thì khoá giải mã (private key) kB và các thừa số p,q là được giữ bí mật và sự thành công của phương pháp là tuỳ thuộc vào kẻ địch có khả năng tìm ra được giá trị của kB hay không nếu cho trước N và KB. Rất khó có thể tìm ra được kB từ KB cần biết về p và q, như vậy cần phân tích N ra thành thừa số để tính p và q. Nhưng việc phân tích ra thừa số là một việc làm tốn rất nhiều thời gian, với kỹ thuật hiện đại ngày nay thì cần tới hàng triệu năm để phân tích một số có 200 chữ số ra thừa số.
70 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2288 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Mã hóa dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cña protocol lµ mét ®iÒu g× ®ã xa h¬n lµ ®iÒu bÝ mËt ®¬n gi¶n.
2.3 Môc ®Ých cña Protocol.
Trong cuéc sèng hµng ngµy, cã rÊt nhiÒu nghi thøc th©n mËt cho hÇu hÕt tÊt c¶ mäi ®iÒu nh gäi ®iÖn tho¹i, ch¬i bµi, bÇu cö. Kh«ng cã g× trong sè chóng l¹i kh«ng cã protocol, chóng tiÕn triÓn theo thêi gian, mäi ngêi ®Òu biÕt sö dông chóng nh thÕ nµo vµ lµm viÖc víi chóng.
H¬n n÷a b©y giê mäi ngêi giao tiÕp víi nhau qua m¹ng m¸y tÝnh thay cho sù gÆp mÆt th«ng thêng. M¸y tÝnh cÇn thiÕt mét nghi thøc chuÈn ®Ó lµm nh÷ng viÖc gièng nhau nh con ngêi kh«ng ph¶i suy nghÜ. NÕu b¹n ®i tõ mét ®Þa ®iÓm nµy tíi ®Þa ®iÓm kh¸c, thËm chÝ tõ quèc gia nµy tíi quèc gia kh¸c, b¹n thÊy mét tr¹m ®iÖn tho¹i c«ng céng kh¸c hoµn toµn so víi c¸i b¹n ®· sö dông, b¹n dÔ dµng ®¸p øng. Nhng m¸y tÝnh th× kh«ng mÒm dÎo nh vËy.
ThËt ng©y th¬ khi b¹n tin r»ng mäi ngêi trªn m¹ng m¸y tÝnh lµ ch©n thËt, vµ còng thËt ng©y th¬ khi tin tëng r»ng ngêi qu¶n trÞ m¹ng, ngêi thiÕt kÕ m¹ng lµ ch©n thËt. HÇu hÕt sÏ lµ ch©n thËt, nhng nã sÏ lµ kh«ng ch©n khi b¹n cÇn ®Õn sù an toµn tiÕp theo. B»ng nh÷ng protocol chÝnh thøc, chóng ta cã thÓ nghiªn cøu nh÷ng c¸ch mµ nh÷ng kÎ kh«ng trung thùc cã thÓ lõa ®¶o vµ ph¸t triÓn protocol ®Ó ®¸nh b¹i nh÷ng kÎ lõa ®¶o ®ã. Protocol rÊt h÷a Ých bëi v× hä trõu tîng ho¸ tiÕn tr×nh hoµn thµnh nhiÖm vô tõ kü thuËt, nh vËy nhiÖm vô ®· ®îc hoµn thµnh.
Sù giao tiÕp gi÷a hai m¸y tÝnh gièng nh mét m¸y tÝnh lµ IBM PC, m¸y kia lµ VAX hoÆc lo¹i m¸y t¬ng tù. Kh¸i niÖm trõu tîng nµy cho phÐp chóng ta nghiªn cøu nh÷ng ®Æc tÝnh tèt cña protocol mµ kh«ng bÞ xa lÇy vµo sù thùc hiÖn chi tiÕt. Khi chóng ta tin r»ng chóng ta cã mét protocol tèt, th× chóng ta cã thÓ thùc hiÖn nã trong mäi ®iÒu tõ mét m¸y tÝnh ®Õn ®iÖn tho¹i, hay ®Õn mét lß níng b¸nh th«ng minh.
2.4 TruyÒn th«ng sö dông hÖ mËt m· ®èi xøng.
Hai m¸y thùc hiÖn viÖc truyÒn th«ng an toµn nh thÕ nµo ? Chóng sÏ m· ho¸ sù truyÒn th«ng ®ã, ®¬ng nhiªn råi. §Ó hoµn thµnh mét protocol lµ phøc t¹p h¬n viÖc truyÒn th«ng. Chóng ta h·y cïng xem xÐt ®iÒu g× sÏ x¶y ra nÕu m¸y Client muèn göi th«ng b¸o m· ho¸ tíi cho Server.
Client vµ Server ®ång ý sö dông mét hÖ m· hãa.
Client vµ Server thèng nhÊt kho¸ víi nhau.
Client lÊy b¶n râ vµ m· ho¸ sö dông thuËt to¸n m· ho¸ vµ kho¸. Sau ®ã b¶n m· ®· ®îc t¹o ra.
Client göi b¶n m· tíi cho Server.
Server gi¶i m· b¶n m· ®ã víi cïng mét thuËt to¸n vµ kho¸, sau ®ã ®äc ®îc b¶n râ.
§iÒu g× sÏ x¶y ra ®èi víi kÎ nghe trém cuéc truyÒn th«ng gi÷a Client vµ Server trong protocol trªn. NÕu nh kÎ nghe trém chØ nghe ®îc sù truyÒn ®i b¶n m· trong bíc 4, chóng sÏ cè g¾ng ph©n tÝch b¶n m·. Nh÷ng kÎ nghe trém chóng kh«ng ngu rèt, chóng biÕt r»ng nÕu cã thÓ nghe trém tõ bíc 1 ®Õn bíc 4 th× ch¾c ch¾n sÏ thµnh c«ng. Chóng sÏ biÕt ®îc thuËt to¸n vµ kho¸ nh vËy chóng sÏ biÕt ®îc nhiÒu nh Server. Khi mµ th«ng b¸o ®îc truyÒn ®i trªn kªnh truyÒn th«ng trong bíc thø 4, th× kÎ nghe trém sÏ gi¶i m· b»ng chÝnh nh÷ng ®iÒu ®· biÕt.
§©y lµ lý do t¹i sao qu¶n lý kho¸ l¹i lµ vÊn ®Ò quan träng trong hÖ thèng m· ho¸. Mét hÖ thèng m· ho¸ tèt lµ mäi sù an toµn phô thuéc vµo kho¸ vµ kh«ng phô thuéc vµo thuËt to¸n. Víi thuËt to¸n ®èi xøng, Client vµ Server cã thÓ thùc hiÖn bíc 1 lµ c«ng khai, nhng ph¶i thùc hiÖn bíc 2 bÝ mËt. Kho¸ ph¶i ®îc gi÷ bÝ mËt tríc, trong khi, vµ sau protocol, mÆt kh¸c th«ng b¸o sÏ kh«ng gi÷ an toµn trong thêi gian dµi.
Tãm l¹i, hÖ mËt m· ®èi xøng cã mét vµi vÊn ®Ò nh sau :
NÕu kho¸ bÞ tæn th¬ng (do ®¸nh c¾p, dù ®o¸n ra, kh¸m ph¸, hèi lé) th× ®èi thñ lµ ngêi cã kho¸, anh ta cã thÓ gi¶i m· tÊt c¶ th«ng b¸o víi kho¸ ®ã. Mét ®iÒu rÊt quan träng lµ thay ®æi kho¸ tuÇn tù ®Ó gi¶m thiÓu vÊn ®Ò nµy.
Nh÷ng kho¸ ph¶i ®îc th¶o luËn bÝ mËt. Chóng cã thÓ cã gi¸ trÞ h¬n bÊt kú th«ng b¸o nµo ®· ®îc m· ho¸, tõ sù hiÓu biÕt vÒ kho¸ cã nghÜa lµ hiÓu biÕt vÒ th«ng b¸o.
Sö dông kho¸ riªng biÖt cho mçi cÆp ngêi dïng trªn m¹ng vËy th× tæng sè kho¸ t¨ng lªn rÊt nhanh gièng nh sù t¨ng lªn cña sè ngêi dïng. §iÒu nµy cã thÓ gi¶i quyÕt b»ng c¸ch gi÷ sè ngêi dïng ë møc nhá, nhng ®iÒu nµy kh«ng ph¶i lµ lu«n lu«n cã thÓ.
2.5 TruyÒn th«ng sö dông hÖ mËt m· c«ng khai.
Hµm mét phÝa (one way function)
Kh¸i niÖm hµm mét phÝa lµ trung t©m cña hÖ m· ho¸ c«ng khai. Kh«ng cã mét Protocol cho chÝnh nã, hµm mét phÝa lµ khèi x©y dùng c¬ b¶n cho hÇu hÕt c¸c m« t¶ protocol.
Mét hµm mét phÝa lµ hµm mµ dÔ dµng tÝnh to¸n ra quan hÖ mét chiÒu nhng rÊt khã ®Ó tÝnh ngîc l¹i. VÝ nh : biÕt gi¶ thiÕt x th× cã thÓ dÔ dµng tÝnh ra f(x), nhng nÕu biÕt f(x) th× rÊt khã tÝnh ra ®îc x. Trong trêng hîp nµy “khã” cã nghÜa lµ ®Ó tÝnh ra ®îc kÕt qu¶ th× ph¶i mÊt hµng triÖu n¨m ®Ó tÝnh to¸n, thËm chÝ tÊt c¶ m¸y tÝnh trªn thÕ giíi nµy ®Òu tÝnh to¸n c«ng viÖc ®ã.
VËy th× hµm mét phÝa tèt ë nh÷ng g× ? Chóng ta kh«ng thÓ sö dông chóng cho sù m· ho¸. Mét th«ng b¸o m· ho¸ víi hµm mét phÝa lµ kh«ng h÷u Ých, bÊt kú ai còng kh«ng gi¶i m· ®îc. §èi víi m· ho¸ chóng ta cÇn mét vµi ®iÒu gäi lµ cöa sËp hµm mét phÝa.
Cöa sËp hµm mét phÝa lµ mét kiÓu ®Æc biÖt cña hµm mét phÝa víi cöa sËp bÝ mËt. Nã dÔ dµng tÝnh to¸n tõ mét ®iÒu kiÖn nµy nhng khã kh¨n ®Ó tÝnh to¸n tõ mét ®iÒu kiÖn kh¸c. Nhng nÕu b¹n biÕt ®iÒu bÝ mËt, b¹n cã thÓ dÔ dµng tÝnh to¸n ra hµm tõ ®iÒu kiÖn kh¸c. VÝ dô : tÝnh f(x) dÔ dµng tõ x, rÊt khã kh¨n ®Ó tÝnh to¸n x ra f(x). H¬n n÷a cã mét vµi th«ng tin bÝ mËt, y gièng nh f(x) vµ y nã cã thÓ tÝnh to¸n dÔ dµng ra x. Nh vËy vÊn ®Ò cã thÓ ®· ®îc gi¶i quyÕt.
Hép th lµ mét vÝ dô rÊt tuyÖt vÒ cöa sËp hµm mét phÝa. BÊt kú ai còng cã thÓ bá th vµo thïng. Bá th vµo thïng lµ mét hµnh ®éng c«ng céng. Më thïng th kh«ng ph¶i lµ hµnh ®éng c«ng céng. Nã lµ khã kh¨n, b¹n sÏ cÇn ®Õn má hµn ®Ó ph¸ hoÆc nh÷ng c«ng cô kh¸c. H¬n n÷a nÕu b¹n cã ®iÒu bÝ mËt (ch×a kho¸), nã thËt dÔ dµng më hép th. HÖ m· ho¸ c«ng khai cã rÊt nhiÒu ®iÒu gièng nh vËy.
Hµm b¨m mét phÝa.
Hµm b¨m mét phÝa lµ mét khèi x©y dùng kh¸c cho nhiÒu lo¹i protocol. Hµm b¨m mét phÝa ®· tõng ®îc sö dông cho khoa häc tÝnh to¸n trong mét thêi gian dµi. Hµm b¨m lµ mét hµm to¸n häc hoÆc lo¹i kh¸c, nã lÊy chuçi ®Çu vµo vµ chuyÓn ®æi thµnh kÝch thíc cè ®Þnh cho chuçi ®Çu ra.
Hµm b¨m mét phÝa lµ mét hµm b¨m nã sö dông hµm mét phÝa. Nã rÊt dÔ dµng tÝnh to¸n gi¸ trÞ b¨m tõ x©u ký tù vµo, nhng rÊt khã tÝnh ra mét chuçi tõ gi¸ trÞ ®¬n lÎ ®a vµo.
Cã hai kiÓu chÝnh cña hµm b¨m mét phÝa, hµm b¨m víi kho¸ vµ kh«ng kho¸. Hµm b¨m mét phÝa kh«ng kho¸ cã thÓ tÝnh to¸n bëi mäi ngêi gi¸ trÞ b¨m lµ hµm chØ cã ®¬n ®éc chuçi ®a vµo. Hµm b¨m mét phÝa víi kho¸ lµ hµm c¶ hai thø chuçi vµo vµ kho¸, chØ mét vµi ngêi cã kho¸ míi cã thÓ tÝnh to¸n gi¸ trÞ b¨m.
HÖ m· ho¸ sö dông kho¸ c«ng khai.
Víi nh÷ng sù m« t¶ ë trªn cã thÓ nghÜ r»ng thuËt to¸n ®èi xøng lµ an toµn. Kho¸ lµ sù kÕt hîp, mét vµi ngêi nµo ®ã víi sù kÕt hîp cã thÓ më sù an toµn nµy, ®a thªm tµi liÖu vµo, vµ ®ãng nã l¹i. Mét ngêi nµo ®ã kh¸c víi sù kÕt hîp cã thÓ më ®îc vµ lÊy ®i tµi liÖu ®ã.
N¨m 1976 Whitfied vµ Martin Hellman ®· thay ®æi vÜnh viÔn m« h×nh cña hÖ thèng m· ho¸. Chóng ®îc m« t¶ lµ hÖ m· ho¸ sö dông kho¸ c«ng khai. Thay cho mét kho¸ nh tríc, hÖ bao gåm hai kho¸ kh¸c nhau, mét kho¸ lµ c«ng khai vµ mét kho¸ kia lµ kho¸ bÝ mËt. BÊt kú ai víi kho¸ c«ng khai còng cã thÓ m· ho¸ th«ng b¸o nhng kh«ng thÓ gi¶i m· nã. ChØ mét ngêi víi kho¸ bÝ mËt míi cã thÓ gi¶i m· ®îc.
Trªn c¬ së to¸n häc, tiÕn tr×nh nµy phô thuéc vµo cöa sËp hµm mét phÝa ®· ®îc tr×nh bµy ë trªn. Sù m· ho¸ lµ chØ thÞ dÔ dµng. Lêi chØ dÉn cho sù m· ho¸ lµ kho¸ c«ng khai, bÊt kú ai còng cã thÓ m· ho¸. Sù gi¶i m· lµ mét chØ thÞ khã kh¨n. Nã t¹o ra khã kh¨n ®ñ ®Ó mét ngêi sö dông m¸y tÝnh Cray ph¶i mÊt hµng ngµn n¨m míi cã thÓ gi¶i m·. Sù bÝ mËt hay cöa sËp chÝnh lµ kho¸ riªng. Víi sù bÝ mËt, sù gi¶i m· sÏ dÔ dµng nh sù m· ho¸.
Chóng ta h·y cïng xem xÐt khi m¸y Client göi th«ng b¸o tíi Server sö dông hÖ m· ho¸ c«ng khai.
Client vµ Server nhÊt trÝ sö dông hÖ m· hãa c«ng khai.
Server göi cho Client kho¸ c«ng khai cña Server.
Client lÊy b¶n râ vµ m· ho¸ sö dông kho¸ c«ng khai cña Server. Sau ®ã göi b¶n m· tíi cho Server.
Server gi¶i m· b¶n m· ®ã sö dông kho¸ riªng cña m×nh.
Chó ý r»ng hÖ thèng m· ho¸ c«ng khai gi¶i quyÕt vÊn ®Ò chÝnh cña hÖ m· ho¸ ®èi xøng, b»ng c¸ch ph©n phèi kho¸. Víi hÖ thèng m· ho¸ ®èi xøng ®· qui íc, Client vµ Server ph¶i nhÊt trÝ víi cïng mét kho¸. Client cã thÓ chän ngÉu nhiªn mét kho¸, nhng nã vÉn ph¶i th«ng b¸o kho¸ ®ã tíi Server, ®iÒu nµy g©y l·ng phÝ thêi gian. §èi víi hÖ thèng m· ho¸ c«ng khai, th× ®©y kh«ng ph¶i lµ vÊn ®Ò.
3. Kho¸
3.1 §é dµi kho¸.
§é an toµn cña thuËt to¸n m· ho¸ cæ ®iÓn phô thuéc vµo hai ®iÒu ®ã lµ ®é dµi cña thuËt to¸n vµ ®é dµi cña kho¸. Nhng ®é dµi cña kho¸ dÔ bÞ lé h¬n.
Gi¶ sö r»ng ®é dµi cña thuËt to¸n lµ lý tëng, khã kh¨n lín lao nµy cã thÓ ®¹t ®îc trong thùc hµnh. Hoµn toµn cã nghÜa lµ kh«ng cã c¸ch nµo bÎ g·y ®îc hÖ thèng m· ho¸ trõ khi cè g¾ng thö víi mçi kho¸. NÕu kho¸ dµi 8 bits th× cã 28 = 256 kho¸ cã thÓ. NÕu kho¸ dµi 56 bits, th× cã 256 kho¸ cã thÓ. Gi¶ sö r»ng siªu m¸y tÝnh cã thÓ thùc hiÖn 1 triÖu phÐp tÝnh mét gi©y, nã còng sÏ cÇn tíi 2000 n¨m ®Ó t×m ra kho¸ thÝch hîp. NÕu kho¸ dµi 64 bits, th× víi m¸y tÝnh t¬ng tù còng cÇn tíi xÊp xØ 600,000 n¨m ®Ó t×m ra kho¸ trong sè 264 kho¸ cã thÓ. NÕu kho¸ dµi 128 bits, nã cÇn tíi 1025 n¨m , trong khi vò trô cña chóng ta chØ tån t¹i cì 1010 n¨m. Nh vËy víi 1025 n¨m cã thÓ lµ ®ñ dµi.
Tríc khi b¹n göi ®i ph¸t minh hÖ m· ho¸ víi 8 Kbyte ®é dµi kho¸, b¹n nªn nhí r»ng mét nöa kh¸c còng kh«ng kÐm phÇn quan träng ®ã lµ thuËt to¸n ph¶i an toµn nghÜa lµ kh«ng cã c¸ch nµo bÎ g·y trõ khi t×m ®îc kho¸ thÝch hîp. §iÒu nµy kh«ng dÔ dµng nh×n thÊy ®îc, hÖ thèng m· ho¸ nã nh mét nghÖ thuËt huyÒn ¶o.
Mét ®iÓm quan träng kh¸c lµ ®é an toµn cña hÖ thèng m· ho¸ nªn phô thuéc vµo kho¸, kh«ng nªn phô thuéc vµo chi tiÕt cña thuËt to¸n. NÕu ®é dµi cña hÖ thèng m· ho¸ míi tin r»ng trong thùc tÕ kÎ tÊn c«ng kh«ng thÓ biÕt néi dung bªn trong cña thuËt to¸n. NÕu b¹n tin r»ng gi÷ bÝ mËt néi dung cña thuËt to¸n, tËn dông ®é an toµn cña hÖ thèng h¬n lµ ph©n tÝch nh÷ng lý thuyÕt së h÷u chung th× b¹n ®· nhÇm. Vµ thËt ng©y th¬ h¬n khi nghÜ r»ng mét ai ®ã kh«ng thÓ gì tung m· nguån cña b¹n hoÆc ®¶o ngîc l¹i thuËt to¸n.
Gi¶ sö r»ng mét vµi kÎ th¸m m· cã thÓ biÕt hÕt tÊt c¶ chi tiÕt vÒ thuËt to¸n cña b¹n. Gi¶ sö r»ng hä cã rÊt nhiÒu b¶n m·, nh hä mong muèn. Gi¶ sö hä cã mét khèi lîng b¶n râ tÊn c«ng víi rÊt nhiÒu d÷ liÖu cÇn thiÕt. ThËm chÝ gi¶ sö r»ng hä cã thÓ lùa chän b¶n râ tÊn c«ng. NÕu nh hÖ thèng m· ho¸ cña cã thÓ d thõa ®é an toµn trong tÊt c¶ mäi mÆt, th× b¹n ®· cã ®ñ ®é an toµn b¹n cÇn.
Tãm l¹i c©u hái ®Æt ra trong môc nµy lµ : Kho¸ nªn dµi bao nhiªu.
Tr¶ lêi c©u hái nµy phô thuéc vµo chÝnh nh÷ng øng dông cô thÓ cña b¹n. D÷ liÖu cÇn an toµn cña b¹n dµi bao nhiªu ? D÷ liÖu cña b¹n trÞ gi¸ bao nhiªu ? ... ThËm chÝ b¹n cã thÓ chØ chØ râ nh÷ng an toµn cÇn thiÕt theo c¸ch sau.
§é dµi kho¸ ph¶i lµ mét trong 232 kho¸ ®Ó t¬ng øng víi nã lµ kÎ tÊn c«ng ph¶i tr¶ 100.000.000 $ ®Ó bÎ g·y hÖ thèng.
3.2 Qu¶n lý kho¸ c«ng khai.
Trong thùc tÕ, qu¶n lý kho¸ lµ vÊn ®Ò khã nhÊt cña an toµn hÖ m· ho¸. §Ó thiÕt kÕ an toµn thuËt to¸n m· ho¸ vµ protocol lµ mét viÖc lµ kh«ng ph¶i lµ dÔ dµng nhng ®Ó t¹o vµ lu tr÷ kho¸ bÝ mËt lµ mét ®iÒu khã h¬n. KÎ th¸m m· thêng tÊn c«ng c¶ hai hÖ m· ho¸ ®èi xøng vµ c«ng khai th«ng qua hÖ qu¶n lý kho¸ cña chóng.
§èi víi hÖ m· ho¸ c«ng khai viÖc qu¶n lý kho¸ dÔ h¬n ®èi víi hÖ m· ho¸ ®èi xøng, nhng nã cã mét vÊn ®Ò riªng duy nhÊt. Mèi ngêi chØ cã mét kho¸ c«ng khai, bÊt kÓ sè ngêi ë trªn m¹ng lµ bao nhiªu. NÕu Eva muèn göi th«ng b¸o ®Õn cho Bob, th× c« Êy cÇn cã kho¸ c«ng khai cña Bob. Cã mét vµi ph¬ng ph¸p mµ Eva cã thÓ lÊy kho¸ c«ng khai cña Bob :
Eva cã thÓ lÊy nã tõ Bob.
Eva cã thÓ lÊy tõ trung t©m c¬ së d÷ liÖu.
Eva cã thÓ lÊy tõ c¬ së d÷ liÖu riªng cña c« Êy.
Chøng nhËn kho¸ c«ng khai :
Chøng nhËn kho¸ c«ng khai lµ x¸c ®Þnh kho¸ thuéc vÒ mét ai ®ã, ®îc qu¶n lý bëi mét ngêi ®¸ng tin cËy. Chøng nhËn ®Ó sö dông vµo viÖc c¶n trë sù cèng g¾ng thay thÕ mét kho¸ nµy b»ng mét kho¸ kh¸c. Chøng nhËn cña Bob, trong s¬ së d÷ liÖu kho¸ c«ng khai, lu tr÷ nhiÒu th«ng tin h¬n chø kh«ng chØ lµ kho¸ c«ng khai. Nã lu tr÷ th«ng tin vÒ Bob nh tªn, ®Þa chØ, ... vµ nã ®îc viÕt bëi ai ®ã mµ Eva tin tëng, ngêi ®ã thêng gäi lµ CA(certifying authority). B»ng c¸ch x¸c nhËn c¶ kho¸ vµ th«ng tin vÒ Bob. CA x¸c nhËn th«ng tin vÒ Bob lµ ®óng vµ kho¸ c«ng khai thuéc quyÒn së h÷u cña Bob. Eva kiÓm tra l¹i c¸c dÊu hiÖu vµ sau ®ã c« Êy cã thÓ sö dông kho¸ c«ng khai, sù an toµn cho Bob vµ kh«ng mét ai kh¸c biÕt. Chøng nhËn ®ãng mét vai trß rÊt quan träng trong protocol cña kho¸ c«ng khai.
Qu¶n lý kho¸ ph©n phèi :
Trong mét vµi trêng hîp, trung t©m qu¶n lý kho¸ cã thÓ kh«ng lµm viÖc. Cã lÏ kh«ng cã mét CA (certifying authority) nµo mµ Eva vµ Bob tin tëng. Cã lÏ hä chØ tin tëng b¹n bÌ th©n thiÕt hoÆc hä kh«ng tin tëng bÊt cø ai.
Qu¶n lý kho¸ ph©n phèi, sö dông trong nh÷ng ch¬ng tr×nh miÒn c«ng khai, gi¶i quyÕt vÊn ®Ò nµy víi ngêi giíi thiÖu (introducers). Ngêi giíi thiÖu lµ mét trong nh÷ng ngêi dïng kh¸c cña hÖ thèng anh ta lµ ngêi nhËn ra kho¸ c«ng khai cña b¹n anh ta.
VÝ dô :
Khi Bob sinh ra kho¸ c«ng khai, anh ta ®a b¶n copy cho b¹n anh Êy lµ Bin vµ Dave. Hä ®Òu biÕt Bob, v× vËy hä cã kho¸ cña Bob vµ ®a cho c¸c dÊu hiÖu cña anh ta. B©y giê Bob ®a ra kho¸ c«ng khai cña anh ta cho ngêi l¹, gi¶ sö ®ã lµ Eva, Bob ®a ra kho¸ cïng víi c¸c dÊu hiÖu cña hai ngêi giíi thiÖu. MÆt kh¸c nÕu Eva ®· biÕt Bin hoÆc Dave, khi ®ã c« ta cã lý do tin r»ng kho¸ cña Bob lµ ®óng. NÕu Eva kh«ng biÕt Bin hoÆc Dave th× c« Êy kh«ng cã lý do tin tëng kho¸ cña Bob lµ ®óng.
Theo thêi gian, Bob sÏ tËp hîp ®îc nhiÒu ngêi giíi thiÖu nh vËy kho¸ cña anh ta sÏ ®îc biÕt ®Õn réng r·i h¬n. Lîi Ých cña kü thuËt nµy lµ kh«ng cÇn tíi trung t©m ph©n phèi kho¸, mäi ngêi ®Òu cã sù tÝn nhiÖm, khi mµ Eva nhËn kho¸ c«ng khai cña Bob, sÏ kh«ng cã sù b¶o ®¶m nµo r»ng c« Êy sÏ biÕt bÊt kú ®iÒu g× cña ngêi giíi thiÖu vµ h¬n n÷a kh«ng cã sù ®¶m b¶o nµo lµ c« Êy sÏ tin vµo sù ®óng ®¾n cña kho¸.
4. M· dßng, m· khèi (CFB, CBC)
4.1 M« h×nh m· ho¸ khèi.
M· ho¸ sö dông c¸c thuËt to¸n khèi gäi ®ã lµ m· ho¸ khèi, th«ng thêng kÝch thíc cña khèi lµ 64 bits. Mét sè thuËt to¸n m· ho¸ khèi sÏ ®îc tr×nh bµy sau ®©y.
4.1.1 M« h×nh d©y truyÒn khèi m· ho¸.
D©y truyÒn sö dông kü thuËt th«ng tin ph¶n håi, bëi v× kÕt qu¶ cña khèi m· ho¸ tríc l¹i ®a vµo khèi m· ho¸ hiÖn thêi. Nãi mét c¸ch kh¸c khèi tríc ®ã sö dông ®Ó söa ®æi sù m· ho¸ cña khèi tiÕp theo. Mçi khèi m· ho¸ kh«ng phô thuéc hoµn toµn vµo khèi cña b¶n râ.
Trong d©y truyÒn khèi m· ho¸ (Cipher Block Chaining Mode), b¶n râ ®· ®îc XOR víi khèi m· ho¸ kÕ tríc ®ã tríc khi nã ®îc m· ho¸. H×nh
4.1.1 thÓ hiÖn c¸c bíc trong d©y truyÒn khèi m· ho¸.
Sau khi khèi b¶n râ ®îc m· ho¸, kÕt qu¶ cña sù m· ho¸ ®îc lu tr÷ trong thanh ghi th«ng tin ph¶n håi. Tríc khi khèi tiÕp theo cña b¶n râ ®îc m· ho¸, nã sÏ XOR víi thanh ghi th«ng tin ph¶n håi ®Ó trë thµnh ®Çu vµo cho tuyÕn m· ho¸ tiÕp theo. KÕt qu¶ cña sù m· ho¸ tiÕp tôc ®îc lu tr÷ trong thanh ghi th«ng tin ph¶n håi, vµ tiÕp tôc XOR víi khèi b¶n râ tiÕp theo, tiÕp tôc nh vËy cho tíi kÕt thóc th«ng b¸o. Sù m· ho¸ cña mçi khèi phô thuéc vµo tÊt c¶ c¸c khèi tríc ®ã.
P1
P2
P3
C21
C1
C31
M· ho¸
M· ho¸
M· ho¸
E(P1 Å I0)
E(P2 Å C1)
E(P3 Å C2)
=
=
=
K
K
K
IO
H×nh 4.1.1 S¬ ®å m« h×nh d©y chuyÒn khèi m· ho¸ .
Sù gi¶i m· lµ c©n ®èi râ rµng. Mét khèi m· ho¸ gi¶i m· b×nh thêng vµ mÆt kh¸c ®îc cÊt gi÷ trong thanh ghi th«ng tin ph¶n håi. Sau khi khèi tiÕp theo ®îc gi¶i m· nã XOR víi kÕt qu¶ cña thanh ghi ph¶n håi. Nh vËy khèi m· ho¸ tiÕp theo ®îc la tr÷ trong thanh ghi th«ng tin ph¶n håi, tiÕp tôc nh vËy cho tíi khi kÕt thóc th«ng b¸o.
C«ng thøc to¸n häc cña qu¸ tr×nh trªn nh sau :
Ci = EK(Pi XOR Ci-1)
Pi = Ci-1 XOR DK(Ci)
4.1.2 M« h×nh m· ho¸ víi th«ng tin ph¶n håi.
Trong m« h×nh d©y truyÒn khèi m· ho¸(CBC_Cipher Block Chaining Mode), sù m· hãa kh«ng thÓ b¾t ®Çu cho tíi khi hoµn thµnh nhËn ®îc mét khèi d÷ liÖu. §©y thùc sù lµ vÊn ®Ò trong mét vµi m¹ng øng dông. VÝ dô, trong m«i trêng m¹ng an toµn, mét thiÕt bÞ ®Çu cuèi ph¶i truyÒn mçi ký tù tíi m¸y tr¹m nh nã ®· ®îc ®a vµo. Khi d÷ liÖu ph¶i xö lý nh mét khóc kÝch thíc byte, th× m« h×nh d©y truyÒn khèi m· ho¸ lµ kh«ng tho¶ ®¸ng.
T¹i m« h×nh CFB d÷ liÖu lµ ®îc m· hãa trong mét ®¬n vÞ nhá h¬n lµ kÝch thíc cña khèi. VÝ dô sÏ m· ho¸ mét ký tù ASCII t¹i mét thêi ®iÓm (cßn gäi lµ m« h×nh 8 bits CFB) nhng kh«ng cã g× lµ bÊt kh¶ kh¸ng vÒ sè 8. B¹n cã thÓ m· ho¸ 1 bit d÷ liÖu t¹i mét thêi ®iÓm, sö dông thuËt to¸n 1 bit CFB.
4.2 M« h×nh m· ho¸ dßng.
M· hãa dßng lµ thuËt to¸n, chuyÓn ®æi b¶n râ sang b¶n m· lµ 1 bit t¹i mçi thêi ®iÓm. Sù thùc hiÖn ®¬n gi¶n nhÊt cña m· ho¸ dßng ®îc thÓ hiÖn trong h×nh 4.2
Bé sinh kho¸ dßng
Bé sinh kho¸ dßng
Kho¸ dßng
Kho¸ dßng
Ki
Pi
B¶n m·
B¶n râ gèc
Ci
M· ho¸
Gi¶i m·
B¶n râ
Bé sinh kho¸ dßng
Bé sinh kho¸ dßng
Kho¸ dßng
Kho¸ dßng
Ki
Pi
B¶n m·
B¶n râ gèc
Ci
M· ho¸
Gi¶i m·
B¶n râ
Ki
Pi
H×nh 4.2 M· ho¸ dßng.
Bé sinh kho¸ dßng lµ ®Çu ra mét dßng c¸c bits : k1, k2, k3, . . . ki. §©y lµ kho¸ dßng ®· ®îc XOR víi mét dßng bits cña b¶n râ, p1, p2, p3, . . pi, ®Ó ®a ra dßng bits m· ho¸.
ci = pi XOR ki
T¹i ®iÓm kÕt thóc cña sù gi¶i m·, c¸c bits m· ho¸ ®îc XOR víi kho¸ dßng ®Ó tr¶ l¹i c¸c bits b¶n râ.
pi = ci XOR ki
Tõ lóc pi XOR ki XOR ki = pi lµ mét c«ng viÖc tØ mØ.
§é an toµn cña hÖ thèng phô thuéc hoµn toµn vµo bªn trong bé sinh kho¸ dßng. NÕu ®Çu ra bé sinh kho¸ dßng v« tËn b»ng 0, th× khi ®ã b¶n râ b»ng b¶n m· vµ c¶ qu¸ tr×nh ho¹t ®éng sÏ lµ v« dông. NÕu bé sinh kho¸ dßng sinh ra sù lÆp l¹i 16 bits mÉu, th× thuËt to¸n sÏ lµ ®¬n gi¶n víi ®é an toµn kh«ng ®¸ng kÓ.
NÕu bé sinh kho¸ dßng lµ v« tËn cña dßng ngÉu nhiªn c¸c bits, b¹n sÏ cã mét vïng ®Öm (one time-pad) vµ ®é an toµn tuyÖt ®èi.
Thùc tÕ m· ho¸ dßng nã n»m ®©u ®ã gi÷a XOR ®¬n gi¶n vµ mét vïng ®Öm. Bé sinh kho¸ dßng sinh ra mét dßng bits ngÉu nhiªn, thùc tÕ ®iÒu nµy quyÕt ®Þnh thuËt to¸n cã thÓ hoµn thiÖn t¹i thêi ®iÓm gi¶i m·. §Çu ra cña bé sinh kho¸ dßng lµ ngÉu nhiªn, nh vËy ngêi ph©n tÝch m· sÏ khã kh¨n h¬n khi bÎ g·y kho¸. Nh b¹n ®· ®o¸n ra ®îc r»ng, t¹o mét bé sinh kho¸ dßng mµ s¶n phÈm ®Çu ra ngÉu nhiªn lµ mét vÊn ®Ò kh«ng dÔ dµng.
5. C¸c hÖ mËt m· ®èi xøng vµ c«ng khai
5.1 HÖ mËt m· ®èi xøng
ThuËt to¸n ®èi xøng hay cßn gäi thuËt to¸n m· ho¸ cæ ®iÓn lµ thuËt to¸n mµ t¹i ®ã kho¸ m· ho¸ cã thÓ tÝnh to¸n ra ®îc tõ kho¸ gi¶i m·. Trong rÊt nhiÒu trêng hîp, kho¸ m· ho¸ vµ kho¸ gi¶i m· lµ gièng nhau. ThuËt to¸n nµy cßn cã nhiÒu tªn gäi kh¸c nh thuËt to¸n kho¸ bÝ mËt, thuËt to¸n kho¸ ®¬n gi¶n, thuËt to¸n mét kho¸. ThuËt to¸n nµy yªu cÇu ngêi göi vµ ngêi nhËn ph¶i tho¶ thuËn mét kho¸ tríc khi th«ng b¸o ®îc göi ®i, vµ kho¸ nµy ph¶i ®îc cÊt gi÷ bÝ mËt. §é an toµn cña thuËt to¸n nµy vÉn phô thuéc vµ kho¸, nÕu ®Ó lé ra kho¸ nµy nghÜa lµ bÊt kú ngêi nµo còng cã thÓ m· ho¸ vµ gi¶i m· th«ng b¸o trong hÖ thèng m· ho¸.
Sù m· ho¸ vµ gi¶i m· cña thuËt to¸n ®èi xøng biÓu thÞ bëi :
EK( P ) = C
M· ho¸
M· ho¸
B¶n râ
B¶n m·
B¶n râ gèc
K1
K2
DK( C ) = P
H×nh 5.1 M· ho¸ vµ gi¶i m· víi kho¸ ®èi xøng .
Trong h×nh vÏ trªn th× :
K1cã thÓ trïng K2, hoÆc
K1 cã thÓ tÝnh to¸n tõ K2, hoÆc
K2 cã thÓ tÝnh to¸n tõ K1.
Mét sè nhîc ®iÓm cña hÖ m· ho¸ cæ ®iÓn
C¸c ph¬ng m· ho¸ cæ ®iÓn ®ßi hái ngêi m· ho¸ vµ ngêi gi¶i m· ph¶i cïng chung mét kho¸. Khi ®ã kho¸ ph¶i ®îc gi÷ bÝ mËt tuyÖt ®èi, do vËy ta dÔ dµng x¸c ®Þnh mét kho¸ nÕu biÕt kho¸ kia.
HÖ m· ho¸ ®èi xøng kh«ng b¶o vÖ ®îc sù an toµn nÕu cã x¸c suÊt cao kho¸ ngêi göi bÞ lé. Trong hÖ kho¸ ph¶i ®îc göi ®i trªn kªnh an toµn nÕu kÎ ®Þch tÊn c«ng trªn kªnh nµy cã thÓ ph¸t hiÖn ra kho¸.
VÊn ®Ò qu¶n lý vµ ph©n phèi kho¸ lµ khã kh¨n vµ phøc t¹p khi sö dông hÖ m· ho¸ cæ ®iÓn. Ngêi göi vµ ngêi nhËn lu«n lu«n th«ng nhÊt víi nhau vÒ vÊn ®Ò kho¸. ViÖc thay ®æi kho¸ lµ rÊt khã vµ dÔ bÞ lé.
Khuynh híng cung cÊp kho¸ dµi mµ nã ph¶i ®îc thay ®æi thêng xuyªn cho mäi ngêi trong khi vÉn duy tr× c¶ tÝnh an toµn lÉn hiÖu qu¶ chi phÝ sÏ c¶n trë rÊt nhiÒu tíi viÖc ph¸t triÓn hÖ mËt m· cæ ®iÓn.
5.2 HÖ mËt m· c«ng khai
Vµo nh÷ng n¨m 1970 Diffie vµ Hellman ®· ph¸t minh ra mét hÖ m· ho¸ míi ®îc gäi lµ hÖ m· ho¸ c«ng khai hay hÖ m· ho¸ phi ®èi xøng.
ThuËt to¸n m· ho¸ c«ng khai lµ kh¸c biÖt so víi thuËt to¸n ®èi xøng. Chóng ®îc thiÕt kÕ sao cho kho¸ sö dông vµo viÖc m· ho¸ lµ kh¸c so víi kho¸ gi¶i m·. H¬n n÷a kho¸ gi¶i m· kh«ng thÓ tÝnh to¸n ®îc tõ kho¸ m· ho¸. Chóng ®îc gäi víi tªn hÖ thèng m· ho¸ c«ng khai bëi v× kho¸ ®Ó m· ho¸ cã thÓ c«ng khai, mét ngêi bÊt kú cã thÓ sö dông kho¸ c«ng khai ®Ó m· ho¸ th«ng b¸o, nhng chØ mét vµi ngêi cã ®óng kho¸ gi¶i m· th× míi cã kh¶ n¨ng gi¶i m·. Trong nhiÒu hÖ thèng, kho¸ m· ho¸ gäi lµ kho¸ c«ng khai (public key), kho¸ gi¶i m· thêng ®îc gäi lµ kho¸ riªng (private M· ho¸
Gi¶i m·
B¶n râ
B¶n m·
B¶n râ gèc
K1
K2
key).
H×nh 5.2 M· ho¸ vµ gi¶i m· víi hai kho¸ .
Trong h×nh vÏ trªn th× :
K1 kh«ng thÓ trïng K2, hoÆc
K2 kh«ng thÓ tÝnh to¸n tõ K1.
§Æc trng næi bËt cña hÖ m· ho¸ c«ng khai lµ c¶ kho¸ c«ng khai(public key) vµ b¶n tin m· ho¸ (ciphertext) ®Òu cã thÓ göi ®i trªn mét kªnh th«ng tin kh«ng an toµn.
Diffie vµ Hellman ®· x¸c ®inh râ c¸c ®iÒu kiÖn cña mét hÖ m· ho¸ c«ng khai nh sau :
ViÖc tÝnh to¸n ra cÆp kho¸ c«ng khai KB vµ bÝ mËt kB dùa trªn c¬ së c¸c ®iÒu kiÖn ban ®Çu ph¶i ®îc thùc hiÖn mét c¸ch dÔ dµng, nghÜa lµ thùc hiÖn trong thêi gian ®a thøc.
Ngêi göi A cã ®îc kho¸ c«ng khai cña ngêi nhËn B vµ cã b¶n tin P cÇn göi ®i th× cã thÓ dÔ dµng t¹o ra ®îc b¶n m· C.
C = EKB (P) = EB (P)
C«ng viÖc nµy còng trong thêi gian ®a thøc.
Ngêi nhËn B khi nhËn ®îc b¶n tin m· hãa C víi kho¸ bÝ mËt kB th× cã thÓ gi¶i m· b¶n tin trong thêi gian ®a thøc.
P = DkB (C) = DB[EB(M)]
NÕu kÎ ®Þch biÕt kho¸ c«ng khai KB cè g¾ng tÝnh to¸n kho¸ bÝ mËt th× khi ®ã chóng ph¶i ®¬ng ®Çu víi trêng hîp nan gi¶i, trêng hîp nµy ®ßi hái nhiÒu yªu cÇu kh«ng kh¶ thi vÒ thêi gian.
NÕu kÎ ®Þch biÕt ®îc cÆp (KB,C) vµ cè g¾ng tÝnh to¸n ra b¶n râ P th× gi¶i quyÕt bµi to¸n khã víi sè phÐp thö lµ v« cïng lín, do ®ã kh«ng kh¶ thi.
6. C¸c c¸ch th¸m m·
Cã s¸u ph¬ng ph¸p chung ®Ó ph©n tÝch tÊn c«ng, díi ®©y lµ danh s¸ch theo thø tù kh¶ n¨ng cña tõng ph¬ng ph¸p. Mçi ph¬ng ph¸p trong sè chóng gi¶ sö r»ng kÎ th¸m m· hoµn toµn cã hiÓu biÕt vÒ thuËt to¸n m· ho¸ ®îc sö dông.
ChØ cã b¶n m·. Trong trêng hîp nµy, ngêi ph©n tÝch chØ cã mét vµi b¶n tin cña b¶n m·, tÊt c¶ trong sè chóng ®Òu ®· ®îc m· ho¸ vµ cïng sö dông chung mét thuËt to¸n. C«ng viÖc cña ngêi ph©n tÝch lµ t×m l¹i ®îc b¶n râ cña nhiÒu b¶n m· cã thÓ hoÆc tèt h¬n n÷a lµ suy luËn ra ®îc kho¸ sö dông m· ho¸, vµ sö dông ®Ó gi¶i m· nh÷ng b¶n m· kh¸c víi cïng kho¸ nµy.
Gi¶ thiÕt : C1 = Ek(P1), C2= Ek(P2), . . .Ci = Ek(Pi)
Suy luËn : Mçi P1,P2, . . Pi, k hoÆc thuËt to¸n kÕt luËn Pi+1 tõ
Ci+1 = Ek(Pi+1)
BiÕt b¶n râ. Ngêi ph©n tÝch kh«ng chØ truy cËp ®îc mét vµi b¶n m· mÆt kh¸c cßn biÕt ®îc b¶n râ. C«ng viÖc lµ suy luËn ra kho¸ ®Ó sö dông gi¶i m· hoÆc thuËt to¸n gi¶i m· ®Ó gi¶i m· cho bÊt kú b¶n m· nµo kh¸c víi cïng kho¸ nh vËy.
Gi¶ thiÕt : P1, C1 = Ek(P1), P2, C2= Ek(P2), . . . Pi, Ci = Ek(Pi)
Suy luËn : Mçi k hoÆc thuËt to¸n kÕt luËn Pi+1 tõ Ci+1 = Ek(Pi+1)
Lùa chän b¶n râ. Ngêi ph©n tÝch kh«ng chØ truy cËp ®îc b¶n m· vµ kÕt hîp b¶n râ cho mét vµi b¶n tin, nhng mÆt kh¸c lùa chän b¶n râ ®· m· ho¸. Ph¬ng ph¸p nµy tá ra cã kh¶ n¨ng h¬n ph¬ng ph¸p biÕt b¶n râ bëi v× ngêi ph©n tÝch cã thÓ chän cô thÓ khèi b¶n râ cho m· ho¸, mét ®iÒu kh¸c cã thÓ lµ s¶n lîng th«ng tin vÒ kho¸ nhiÒu h¬n.
Gi¶ thiÕt : P1, C1 = Ek(P1), P2, C2= Ek(P2), . . . Pi, Ci = Ek(Pi) t¹i ®©y ngêi ph©n tÝch chän P1, P2,. . . Pi
Suy luËn : Mçi k hoÆc thuËt to¸n kÕt luËn Pi+1 tõ Ci+1 = Ek(Pi+1)
M« pháng lùa chän b¶n râ. §©y lµ trêng hîp ®Æc biÖt cña lùa chän b¶n râ. Kh«ng chØ cã thÓ lùa chän b¶n râ ®· m· ho¸, nhng hä cßn cã thÓ söa ®æi sù lùa chän c¬ b¶n kÕt qu¶ cña sù m· ho¸ lÇn tríc. Trong trêng lùa chän b¶n m· ngêi ph©n tÝch cã thÓ ®· chän mét khèi lín b¶n râ ®· m· ho¸, nhng trong trêng hîp nµy cã thÓ chän mét khèi nhá h¬n vµ chän c¨n cø kh¸c trªn kÕt qu¶ cña lÇn ®Çu tiªn.
Lùa chän b¶n m·. Ngêi ph©n tÝch cã thÓ chän b¶n m· kh¸c nhau ®· ®îc m· ho¸ vµ truy cËp b¶n râ ®· gi¶i m·. Trong vÝ dô khi mét ngêi ph©n tÝch cã mét hép chøng cí x¸o chén kh«ng thÓ tù ®éng gi¶i m·, c«ng viÖc lµ suy luËn ra kho¸.
Gi¶ thiÕt : C1, P1 = Dk(C1), C2, P2= Dk(C2), . . . Ci, Pi = Dk(Ci) t¹i Suy luËn : k
6. Lùa chän kho¸. §©y kh«ng ph¶i lµ mét c¸ch tÊn c«ng khi mµ b¹n ®· cã kho¸. Nã kh«ng ph¶i lµ thùc hµnh th¸m m· mµ chØ lµ sù gi¶i m· th«ng thêng, b¹n chØ cÇn lùa chän kho¸ cho phï hîp víi b¶n m·.
Mét ®iÓm ®¸ng chó ý kh¸c lµ ®a sè c¸c kü thuËt th¸m m· ®Òu dïng ph¬ng ph¸p thèng kª tÇn suÊt xuÊt hiÖn cña c¸c tõ, c¸c ký tù trong b¶n m·. Sau ®ã thùc hiÖn viÖc thö thay thÕ víi c¸c ch÷ c¸i cã tÇn suÊt xuÊt hiÖn t¬ng ®ång trong ng«n ng÷ tù nhiªn. T¹i ®©y chóng ta chØ xem xÐt ®èi víi ng«n ng÷ th«ng dông nhÊt hiÖn nay ®ã lµ tiÕng Anh. ViÖc thèng kª tÇn suÊt xuÊt hiÖn cña c¸c ký tù trong trêng hîp nµy ®îc tiÕn hµnh dùa trªn c¸c bµi b¸o, s¸ch, t¹p chÝ vµ c¸c v¨n b¶n cïng víi mét sè lo¹i kh¸c ...
Sau ®©y lµ b¶ng thèng kª tÇn suÊt xuÊt hiÖn cña 26 ch÷ c¸i trong b¶ng ch÷ c¸i tiÕng Anh theo tµi liÖu cña Beker vµ Piper.
Ký tù
X¸c SuÊt
Ký tù
X¸c suÊt
Ký tù
X¸c suÊt
A
0.082
J
0.002
S
0.063
B
0.015
K
0.008
T
0.091
C
0.028
L
0.040
U
0.028
D
0.043
M
0.024
V
0.010
E
0.127
N
0.067
W
0.023
F
0.022
O
0.075
X
0.001
G
0.020
P
0.019
Y
0.020
H
0.061
Q
0.001
Z
0.001
I
0.070
R
0.060
Cïng víi viÖc thèng kª c¸c tÇn xuÊt cña c¸c ký tù trong tiÕng Anh, viÖc thèng kª tÇn suÊt xuÊt hiÖn thêng xuyªn cña c¸c d·y gåm 2 hoÆc 3 ký tù liªn tiÕp nhau còng cã mét vai trß quan träng trong c«ng viÖc th¸m m·. Sysu Deck ®a ra 30 bé ®«i xuÊt hiÖn thêng xuyªn cña tiÕng Anh ®îc s¾p theo thø tù gi¶m dÇn nh sau :
TÝnh h÷u dông cña c¸c phÐp thèng kª ký tù vµ c¸c d·y ký tù ®îc ngêi ph©n tÝch m· khai th¸c triÖt ®Ó trong nh÷ng lÇn th¸m m·. Khi thùc hiÖn viÖc th¸m m· ngêi ph©n tÝch thèng kª c¸c ký tù trong b¶n m·, tõ ®ã so s¸nh víi b¶n thèng kª mÉu vµ ®a ra c¸c ký tù pháng ®o¸n t¬ng tù. Ph¬ng ph¸p nµy ®îc sö dông thêng xuyªn vµ ®em l¹i hiÖu qu¶ kh¸ cao.
CÆp ch÷
TÇn suÊt
CÆp ch÷
TÇn suÊt
CÆp ch÷
TÇn suÊt
TH
10.00
ED
4.12
OF
3.38
HE
9.50
TE
4.04
IT
3.26
IN
7.17
TI
4.00
AL
3.15
ER
6.65
OR
3.98
AS
3.00
RE
5.92
ST
3.81
HA
3.00
ON
5.70
AR
3.54
NG
2.92
AN
5.63
ND
3.52
CO
2.80
EN
4.76
TO
3.50
SE
2.75
AT
4.72
NT
3.44
ME
2.65
ES
4.24
IS
3.43
DE
2.65
Ch¬ng III HÖ m· ho¸ RSA.
Víi ®Ò tµi x©y dùng th viÖn c¸c hµm m· ho¸ dïng cho viÖc b¶o mËt th«ng tin trao ®æi trong m« h×nh Client/Server, th× cÇn thiÕt mét ph¬ng ph¸p m· ho¸ ®Ó ¸p dông, thuËt to¸n m· ho¸ c«ng khai RSA ®· ®îc lùa chän cho gi¶i ph¸p nµy. Ph¬ng ph¸p nµy cã nh÷ng u ®iÓm, nhîc ®iÓm, ®Æc tÝnh g× ®ã lµ phÇn sÏ tr×nh bµy trong ch¬ng nµy
Kh¸i niÖm hÖ mËt m· RSA
Ph©n phèi kho¸ c«ng kkai trong RSA
§é an toµn cña hÖ RSA
Mét sè tÝnh chÊt cña hÖ RSA
1. Kh¸i niÖm hÖ mËt m· RSA
Kh¸i niÖm hÖ mËt m· RSA ®· ®îc ra ®êi n¨m 1976 bëi c¸c t¸c gi¶ R.Rivets, A.Shamir, vµ L.Adleman. HÖ m· ho¸ nµy dùa trªn c¬ së cña hai bµi to¸n :
+ Bµi to¸n Logarithm rêi r¹c (Discrete logarith)
+ Bµi to¸n ph©n tÝch thµnh thõa sè.
Trong hÖ m· ho¸ RSA c¸c b¶n râ, c¸c b¶n m· vµ c¸c kho¸ (public key vµ private key) lµ thuéc tËp sè nguyªn ZN = {1, . . . , N-1}. Trong ®ã tËp ZN víi N=p´q lµ c¸c sè nguyªn tè kh¸c nhau cïng víi phÐp céng vµ phÐp nh©n Modulo N t¹o ra modulo sè häc N.
Kho¸ m· ho¸ EKB lµ cÆp sè nguyªn (N,KB) vµ kho¸ gi¶i m· Dkb lµ cÆp sè nguyªn (N,kB), c¸c sè lµ rÊt lín, sè N cã thÓ lªn tíi hµng tr¨m ch÷ sè.
C¸c ph¬ng ph¸p m· ho¸ vµ gi¶i m· lµ rÊt dÔ dµng.
C«ng viÖc m· ho¸ lµ sù biÕn ®æi b¶n râ P (Plaintext) thµnh b¶n m· C (Ciphertext) dùa trªn cÆp kho¸ c«ng khai KB vµ b¶n râ P theo c«ng thøc sau ®©y :
C = EKB(P) = EB(P) = PKB (mod N) . (1)
C«ng viÖc gi¶i m· lµ sù biÕn ®æi ngîc l¹i b¶n m· C thµnh b¶n râ P dùa trªn cÆp kho¸ bÝ mËt kB , modulo N theo c«ng thøc sau :
P = DkB(C) = DB(C) = CkB (mod N) . (2)
DÔ thÊy r»ng, b¶n râ ban ®Çu cÇn ®îc biÕn ®æi mét c¸ch thÝch hîp thµnh b¶n m·, sau ®ã ®Ó cã thÓ t¸i t¹o l¹i b¶n râ ban ®Çu tõ chÝnh b¶n m· ®ã :
P = DB(EB(P)) (3)
Thay thÕ (1) vµo (2) ta cã :
(PKB)kB = P (mod N ) (4)
Trong to¸n häc ®· chøng minh ®îc r»ng, nÕu N lµ sè nguyªn tè th× c«ng thøc (4) sÏ cã lêi gi¶i khi vµ chØ khi KB.kB = 1 (mod N-1), ¸p dông thuËt to¸n ta thÊy N=p´q víi p, q lµ sè nguyªn tè, do vËy (4) sÏ cã lêi gi¶i khi vµ chØ khi :
KB.kB º 1 (mod g(N)) (5)
trong ®ã g(N) = LCM(p-1,q-1) .
LCM (Lest Common Multiple) lµ béi sè chung nhá nhÊt.
Nãi mét c¸ch kh¸c, ®Çu tiªn ngêi nhËn B lùa chän mét kho¸ c«ng khai KB mét c¸ch ngÉu nhiªn. Khi ®ã kho¸ bÝ mËt kB ®îc tÝnh ra b»ng c«ng thøc (5). §iÒu nµy hoµn toµn tÝnh ®îc v× khi B biÕt ®îc cÆp sè nguyªn tè (p,q) th× sÏ tÝnh ®îc g(N).
Chän p vµ q
TÝnh N=p´q
TÝnh g(N)
Chän kho¸ KB
C = PKB (mod N)
P = CkB ( mod N )
Chän kho¸ KB
KB
kB
B¶n râ P
B¶n m· C
B¶n râ gèc P
H×nh 1.1 S¬ ®å c¸c bíc thùc hiÖn m· ho¸ theo thuËt to¸n RSA.
2. §é an toµn cña hÖ RSA
Mét nhËn ®Þnh chung lµ tÊt c¶ c¸c cuéc tÊn c«ng gi¶i m· ®Òu mang môc ®Ých kh«ng tèt. Trong phÇn ®é an toµn cña hÖ m· ho¸ RSA sÏ ®Ò cËp ®Õn mét vµi ph¬ng thøc tÊn c«ng ®iÓn h×nh cña kÎ ®Þch nh»m gi¶i m· trong thuËt to¸n nµy.
Chóng ta xÐt ®Õn trêng hîp khi kÎ ®Þch nµo ®ã biÕt ®îc modulo N, kho¸ c«ng khai KB vµ b¶n tin m· ho¸ C, khi ®ã kÎ ®Þch sÏ t×m ra b¶n tin gèc (Plaintext) nh thÕ nµo. §Ó lµm ®îc ®iÒu ®ã kÎ ®Þch thêng tÊn vµo hÖ thèng mËt m· b»ng hai ph¬ng thøc sau ®©y:
Ph¬ng thøc thø nhÊt :
Tríc tiªn dùa vµo ph©n tÝch thõa sè modulo N. TiÕp theo sau chóng sÏ t×m c¸ch tÝnh to¸n ra hai sè nguyªn tè p vµ q, vµ cã kh¶ n¨ng thµnh c«ng khi ®ã sÏ tÝnh ®îc l(N) vµ kho¸ bÝ mËt kB. Ta thÊy N cÇn ph¶i lµ tÝch cña hai sè nguyªn tè, v× nÕu N lµ tÝch cña hai sè nguyªn tè th× thuËt to¸n ph©n tÝch thõa sè ®¬n gi¶n cÇn tèi ®a bíc, bëi v× cã mét sè nguyªn tè nhá h¬n . MÆt kh¸c, nÕu N lµ tÝch cña n sè nguyªn tè, th× thuËt to¸n ph©n tÝch thõa sè ®¬n gi¶n cÇn tèi ®a N1/n bíc.
Mét thuËt to¸n ph©n tÝch thõa sè cã thÓ thµnh phøc t¹p h¬n, cho phÐp ph©n tÝch mét sè N ra thµnh thõa sè trong O() bíc, trong ®ã p lµ sè chia nhá nhÊt cña N, viÖc chän hai sè nguyªn tè lµ cho thuËt to¸n t¨ng hiÖu qu¶.
Ph¬ng thøc thø hai :
Ph¬ng thøc tÊn c«ng thø hai vµo hÖ m· ho¸ RSA lµ cã thÓ khëi ®Çu b»ng c¸ch gi¶i quyÕt trêng hîp thÝch hîp cña bµi to¸n logarit rêi r¹c. Trêng hîp nµy kÎ ®Þch ®· cã trong tay b¶n m· C vµ kho¸ c«ng khai KB tøc lµ cã cÆp (KB,C)
C¶ hai ph¬ng thøc tÊn c«ng ®Òu cÇn mét sè bíc c¬ b¶n, ®ã lµ :
O(exp ), trong ®ã N lµ sè modulo.
3. Mét sè tÝnh chÊt cña hÖ RSA
Trong c¸c hÖ mËt m· RSA, mét b¶n tin cã thÓ ®îc m· ho¸ trong thêi gian tuyÕn tÝnh.
§èi víi c¸c b¶n tin dµi, ®é dµi cña c¸c sè ®îc dïng cho c¸c kho¸ cã thÓ ®îc coi nh lµ h»ng. T¬ng tù nh vËy, n©ng mét sè lªn luü thõa ®îc thùc hiÖn trong thêi gian h»ng, c¸c sè kh«ng ®îc phÐp dµi h¬n mét ®é dµi h»ng. Thùc ra tham sè nµy che dÊu nhiÒu chi tiÕt cµi ®Æt cã liªn quan ®Õn viÖc tÝnh to¸n víi c¸c con sè dµi, chi phÝ cña c¸c phÐp to¸n thùc sù lµ mét yÕu tè ng¨n c¶n sù phæ biÕn øng dông cña ph¬ng ph¸p nµy. PhÇn quan träng nhÊt cña viÖc tÝnh to¸n cã liªn quan ®Õn viÖc m· ho¸ b¶n tin. Nhng ch¾c ch¾n lµ sÏ kh«ng cã hÖ m· ho¸ nµo hÕt nÕu kh«ng tÝnh ra ®îc c¸c kho¸ cña chóng lµ c¸c sè lín.
C¸c kho¸ cho hÖ m· ho¸ RSA cã thÓ ®îc t¹o ra mµ kh«ng ph¶i tÝnh to¸n qu¸ nhiÒu.
Mét lÇn n÷a, ta l¹i nãi ®Õn c¸c ph¬ng ph¸p kiÓm tra sè nguyªn tè. Mçi sè nguyªn tè lín cã thÓ ®îc ph¸t sinh b»ng c¸ch ®Çu tiªn t¹o ra mét sè ngÉu nhiªn lín, sau ®ã kiÓm tra c¸c sè kÕ tiÕp cho tíi khi t×m ®îc mét sè nguyªn tè. Mét ph¬ng ph¸p ®¬n gi¶n thùc hiÖn mét phÐp tÝnh trªn mét con sè ngÊu nhiªn, víi x¸c suÊt 1/2 sÏ chøng minh r»ng sè ®îc kiÓm tra kh«ng ph¶i nguyªn tè. Bíc cuèi cïng lµ tÝnh p dùa vµo thuËt to¸n Euclid.
Nh phÇn trªn ®· tr×nh bµy trong hÖ m· ho¸ c«ng khai th× kho¸ gi¶i m· (private key) kB vµ c¸c thõa sè p,q lµ ®îc gi÷ bÝ mËt vµ sù thµnh c«ng cña ph¬ng ph¸p lµ tuú thuéc vµo kÎ ®Þch cã kh¶ n¨ng t×m ra ®îc gi¸ trÞ cña kB hay kh«ng nÕu cho tríc N vµ KB. RÊt khã cã thÓ t×m ra ®îc kB tõ KB cÇn biÕt vÒ p vµ q, nh vËy cÇn ph©n tÝch N ra thµnh thõa sè ®Ó tÝnh p vµ q. Nhng viÖc ph©n tÝch ra thõa sè lµ mét viÖc lµm tèn rÊt nhiÒu thêi gian, víi kü thuËt hiÖn ®¹i ngµy nay th× cÇn tíi hµng triÖu n¨m ®Ó ph©n tÝch mét sè cã 200 ch÷ sè ra thõa sè.
§é an toµn cña thuËt to¸n RSA dùa trªn c¬ së nh÷ng khã kh¨n cña viÖc x¸c ®Þnh c¸c thõa sè nguyªn tè cña mét sè lín. B¶ng díi ®©y cho biÕt c¸c thêi gian dù ®o¸n, gi¶ sö r»ng mçi phÐp to¸n thùc hiÖn trong mét micro gi©y.
Sè c¸c ch÷ sè trong
sè ®îc ph©n tÝch
Thêi gian ph©n tÝch
50
4 giê
75
104 giê
100
74 n¨m
200
4.000.000 n¨m
300
5´1015 n¨m
500
4´1025 n¨m
Ch¬ng IV M« h×nh Client/Server
Trong thùc tÕ, m« h×nh Client/Server ®· trë nªn rÊt phæ biÕn trong hÖ thèng m¹ng ®iÓm tíi ®iÓm, vµ chóng ®îc ¸p dông hÇu hÕt cho nh÷ng m¸y tÝnh truyÒn th«ng ngµy nay. KiÕn tróc m« h×nh Client/Server vµ khi nµo cÇn m· ho¸ th«ng tin truyÒn trong Client/Server lµ chñ ®Ò sÏ ®îc tr×nh bµy trong ch¬ng nµy.
1.M« h×nh Client/Server
Nãi chung, mét øng dông khëi t¹o truyÒn th«ng tõ ®iÓm tíi ®iÓm ®îc gäi lµ client. Ngêi dïng cuèi thêng xuyªn gäi phÇn mÒm client khi hä cÇn tíi nh÷ng dÞch vô trªn m¹ng. M« h×nh Client/Server cè g¾ng tæ chøc l¹i c¸c m¸y PC, trªn m¹ng cô bé, ®Ó thÝch hîp víi c¸c m¸y tÝnh lín mainframe, t¨ng tÝnh thÝch øng, tÝnh hiÖu qu¶ cña hÖ thèng. MÆc dï cã sù thay ®æi rÊt lín c¸c quan ®iÓm vÒ m« h×nh Client/Server, nhng chóng cã mét vµi ®Æc tÝnh díi ®©y.
M¸y Client lµ c¸c m¸y PC hay lµ c¸c workstations, truy cËp vµo m¹ng vµ sö dông c¸c tµi nguyªn trªn m¹ng.
Giao diÖn ngêi sö dông víi Client, nãi chung sö dông giao diÖn ngêi dïng ®å ho¹ (GUI), vÝ nh Microsoft Windowns
Trong hÖ thèng Client/Server cã mét vµi Client, víi mçi Client sö dông giao diÖn riªng cña m×nh. C¸c Client sö dông c¸c tµi nguyªn ®îc chia sÎ bëi Server.
Server cã thÓ lµ mét workstation lín, nh mainframe, minicomputer, hoÆc c¸c thiÕt bÞ m¹ng LAN.
Client cã thÓ göi c¸c truy vÊn hoÆc c¸c lÖnh tíi Server, nhng thùc hiÖn tiÕn tr×nh nµy kh«ng ph¶i lµ Client.
Server tr¶ l¹i kÕt qu¶ trªn mµn h×nh cña Client.
C¸c lo¹i Server th«ng thêng lµ : database server, file server, print server, image-processing server, computing server vµ communication server.
Server kh«ng thÓ khëi t¹o bÊt kú c«ng viÖc nµo, nhng nã thùc hiÖn c¸c yªu cÇu to lín cña Client.
NhiÖm vô chia lµ hai phÇn : phÇn mÆt tríc thùc hiÖn bëi client, vµ phÇn mÆt sau thùc hiÖn bëi Server.
Server thùc hiÖn viÖc chia sÎ File, lu tr÷ vµ t×m ra c¸c th«ng tin, m¹ng vµ qu¶n lý tµi liÖu, qu¶n lý th ®iÖn tö, b¶ng th«ng b¸o vµ v¨n b¶n video.
2. M· ho¸ trong m« h×nh Client/Server.
Trong m« h×nh Client/Server viÖc trao ®æi th«ng tin diÔn ra thêng xuyªn nªn rÊt dÔ bÞ kÎ xÊu lîi dông, bëi vËy b¶o vÖ th«ng tin trªn ®êng truyÒn lµ v« cïng quan träng, chóng ®¶m b¶o th«ng tin trªn ®êng truyÒn lµ ®óng ®¾n. T¹i m« h×nh nµy mçi khi nh÷ng yªu cÇu ®îc göi tõ Client ®Õn Server hoÆc khi Server göi tr¶ l¹i kÕt qu¶ cho Client th× nh÷ng th«ng tin nµy ®Òu ®îc m· ho¸ trong khi truyÒn.
Ch¬ng V X©y dùng hµm th viÖn
Xu híng trªn thÕ giíi hiÖn nay lµ phÇn mÒm ®îc b¸n vµ ph©n phèi ë d¹ng c¸c modul phÇn mÒm. C¸c h×nh thøc cña modul phô thuéc vµo c¸c gãi phÇn mÒm cô thÓ vµ c¸c ng«n ng÷ mµ ngêi sö dông dïng. VÝ dô b¹n cã thÓ t¹o c¸c th viÖn tÜnh víi c¸c file cã phÇn më réng .LIB hoÆc b¹n cã thÓ t¹o mét ®iÒu khiÓn ActiveX víi phÇn më réng OCX, hoÆc h¬n n÷a b¹n cã thÓ t¹o c¸c th viÖn liªn kÕt ®éng víi c¸c file .DLL .
C¸c ng«n ng÷ lËp tr×nh hiÖn nay cã tÝnh modul ®éc lËp rÊt cao, nghÜa lµ b¹n cã thÓ t¹o ra c¸c øng dông b»ng c¸ch kÕt hîp nhiÒu modul phÇn mÒm ®éc lËp nhau thµnh mét øng dông cô thÓ. Th«ng thêng khi thiÕt kÕ mét phÇn mÒm øng dông thuéc lo¹i phøc t¹p, b¹n sÏ t×m kiÕm c¸c modul cã thÓ sö dông ®îc ®Ó gi¶m chi phÝ, gi¶m thêi gian thiÕt kÕ vµ tËp chung nhiÒu h¬n cho nh÷ng phÇn øng dông tù b¹n viÕt ra.
Mét c©u hái ®Æt ra t¹i ®©y lµ v× sao chóng ta l¹i kh«ng t¹o ra c¸c hµm thùc hiÖn c¸c c«ng viÖc chuyªn biÖt vµ ph©n phèi nã cho ngêi sö dông, cã mét vµi lý do sau ®©y kh«ng cho phÐp thùc hiÖn ®iÒu nµy :
Ngêi dïng cã thÓ v« t×nh thay ®æi lµm x¸o trén c¸c lÖnh trong ch¬ng tr×nh.
B¹n kh«ng muèn ngêi dïng biÕt "bÝ quyÕt" cña b¹n mµ chØ muèn hä sö dông kÕt qu¶ b¹n t¹o ra.
Trong ch¬ng nµy cña cuèn luËn v¨n tr×nh bµy th viÖn liªn kÕt ®éng lµ g×, vµ chóng thùc hiÖn nh thÕ nµo. Th viÖn liªn kÕt ®éng DLL (Dynamic Link Library) lµ mét tËp tin th viÖn chøa c¸c hµm. Ngêi lËp tr×nh cã thÓ gäi mét tËp tin DLL vµo trong ch¬ng tr×nh cña hä vµ sö dông c¸c hµm trong DLL ®ã.
DLL lµ mét th viÖn liªn kÕt ®éng víi c¸c ch¬ng tr×nh sö dông nã, nghÜa lµ khi b¹n t¹o ra tËp tin EXE cña ch¬ng tr×nh mµ kh«ng cÇn liªn kÕt tËp tin DLL víi ch¬ng tr×nh cña b¹n. TËp tin DLL sÏ ®îc liªn kÕt ®éng víi ch¬ng tr×nh trong thêi gian thi hµnh ch¬ng tr×nh. Bëi vËy khi viÕt mét øng dông cã sö dông DLL, b¹n ph¶i ph©n phèi tËp tin DLL cïng víi tËp tin EXE cña ch¬ng tr×nh b¹n viÕt.
1.X©y dùng th viÖn liªn kÕt ®éng CRYPTO.DLL
Th viÖn crypto.dll ®îc x©y dùng díi ®©y cung cÊp cho c¸c b¹n c¸c hµm cÇn thiÕt phôc vô cho viÖc m· ho¸ th«ng tin, chóng bao gåm
int enciph(char *, char *) : hµm m· ho¸.
int deciph(char *, char *) : hµm gi¶i m·.
Hµm Enciph.c
C¸c b¹n cã thÓ sö dông hµm nµy ®Ó thùc hiÖn c¸c thao t¸c m· ho¸ víi x©u kÝ tù, b»ng c¸ch ®a vµo mét x©u ký tù (b¶n râ) ë ®Çu ra b¹n sÏ nhËn ®îc mét x©u ký tù ®· ®îc m· ho¸ (b¶n m·). Víi b¶n m· nµy c¸c b¹n cã thÓ yªn t©m vÒ néi dông th«ng tin sÏ rÊt khã bÞ lé. Hµm thùc hiÖn cã sö dông kho¸ c«ng khai lÊy vµo tõ File PUBLIC.KEY.
//=============================
// Ham Enciph.c
#include
#include
#include
#include
#include
/*
#define RSA
*/
int enciph(char *sin,char *sout)
{ /* encipher using public key */
big x,ke;
FILE *ifile;
int ch,i,leng;
long seed;
miracl *mip=mirsys(100,0);
x=mirvar(0);
ke=mirvar(0);
mip->IOBASE=60;
if ((ifile=fopen("public.key","r"))==NULL)
{
return 1;
}
cinnum(ke,ifile);
fclose(ifile);
seed=123456789;
irand(seed);
bigrand(ke,x);
leng=strlen(sin);
for(i=0; i <= (leng-1); i++)
{ /* encipher character by character */
#ifdef RSA
power(x,3,ke,x);
#else
mad(x,x,x,ke,ke,x);
#endif
ch=*(sin+i);
ch^=x[1]; /* XOR with last byte of x */
sout[i]=ch;
}
return 0;
}
//=============================
miracl *mirsys(int nd,mr_small nb)
{ /* Initialize MIRACL system to *
* use numbers to base nb, and *
* nd digits or (-nd) bytes long */
int i;
mr_small b;
mr_mip=(miracl *)mr_alloc(1,sizeof(miracl));
mr_mip->depth=0;
mr_mip->trace[0]=0;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=25;
if (MIRACL>=MR_IBITS) mr_mip->TOOBIG =(1<<(MR_IBITS-2));
else
mr_mip->TOOBIG =(1<<(MIRACL-1));
#ifdef MR_FLASH
mr_mip->BTS=MIRACL/2;
if (mr_mip->BTS==MR_IBITS) mr_mip->MSK=(-1);
else mr_mip->MSK=(1BTS))-1;
#endif
#ifdef MR_NO_STANDARD_IO
mr_mip->ERCON=TRUE;
#else
mr_mip->ERCON=FALSE;
#endif
mr_mip->N=0;
mr_mip->MSBIT=((mr_small)1<<(MIRACL-1));
mr_mip->OBITS=mr_mip->MSBIT-1;
mr_mip->user=NULL;
mr_set_align(0);
#ifdef MR_NOFULLWIDTH
if (nb==0)
{
mr_berror(MR_ERR_BAD_BASE);
mr_mip->depth--;
return mr_mip;
}
#endif
if (nb==1 || nb>MAXBASE)
{
mr_berror(MR_ERR_BAD_BASE);
mr_mip->depth--;
return mr_mip;
}
mr_setbase(nb);
b=mr_mip->base;
mr_mip->lg2b=0;
mr_mip->base2=1;
if (b==0)
{
mr_mip->lg2b=MIRACL;
mr_mip->base2=0;
}
else while (b>1)
{
b/=2;
mr_mip->lg2b++;
mr_mip->base2*=2;
}
if (nd>0)
mr_mip->nib=(nd-1)/mr_mip->pack+1;
else
mr_mip->nib=(mr_mip->lg2b-8*nd-1)/mr_mip->lg2b;
if (mr_mip->nibnib=2;
#ifdef MR_FLASH
mr_mip->workprec=mr_mip->nib;
mr_mip->stprec=mr_mip->nib;
while(mr_mip->stprec>2 && mr_mip->stprec> MR_FLASH/ mr_mip->lg2b)
mr_mip->stprec=(mr_mip->stprec+1)/2;
if (mr_mip->stprecstprec=2;
mr_mip->pi=NULL;
#endif
mr_mip->check=ON;
mr_mip->IOBASE=10; mr_mip->ERNUM=0;
mr_mip->RPOINT=OFF;
mr_mip->NTRY=6;
mr_mip->EXACT=TRUE;
mr_mip->TRACER=OFF;
mr_mip->INPLEN=0;
mr_mip->PRIMES=NULL;
mr_mip->IOBUFF=mr_alloc(MR_IOBSIZ+1,1);
for (i=0;iira[i]=0L;
irand(0L);
mr_mip->nib=2*mr_mip->nib+1;
#ifdef MR_FLASH
if (mr_mip->nib!=(mr_mip->nib&(mr_mip->MSK)) || mr_mip->nib > mr_mip->TOOBIG)
#else
if(mr_mip->nib!=(mr_mip->nib&(mr_mip->OBITS)) || mr_mip->nib>mr_mip->TOOBIG)
#endif
{
mr_berror(MR_ERR_TOO_BIG);
mr_mip->nib=(mr_mip->nib-1)/2;
mr_mip->depth--;
return mr_mip;
}
mr_mip->modulus=NULL;
mr_mip->A=NULL;
mr_mip->B=NULL;
mr_mip->fin=FALSE;
mr_mip->fout=FALSE;
mr_mip->active=ON;
mr_mip->w0=mirvar(0); /* w0 is double length */
mr_mip->nib=(mr_mip->nib-1)/2;
#ifdef MR_KCM
mr_mip->big_ndash=NULL;
mr_mip->ws=mirvar(0);
#endif
mr_mip->w1=mirvar(0); /* initialize workspace */
mr_mip->w2=mirvar(0);
mr_mip->w3=mirvar(0);
mr_mip->w4=mirvar(0);
mr_mip->nib=2*mr_mip->nib+1;
mr_mip->w5=mirvar(0);
mr_mip->w6=mirvar(0);
mr_mip->w7=mirvar(0);
mr_mip->nib=(mr_mip->nib-1)/2;
mr_mip->w5d=&(mr_mip->w5[mr_mip->nib+1]);
mr_mip->w6d=&(mr_mip->w6[mr_mip->nib+1]);
mr_mip->w7d=&(mr_mip->w7[mr_mip->nib+1]);
mr_mip->w8=mirvar(0);
mr_mip->w9=mirvar(0);
mr_mip->w10=mirvar(0);
mr_mip->w11=mirvar(0);
mr_mip->w12=mirvar(0);
mr_mip->w13=mirvar(0);
mr_mip->w14=mirvar(0);
mr_mip->w15=mirvar(0);
mr_mip->depth--;
return mr_mip;
}
//=============================
flash mirvar(int iv)
{ /* initialize big/flash number */
flash x;
if (mr_mip->ERNUM) return NULL;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=23;
if (mr_mip->TRACER) mr_track();
if (!(mr_mip->active))
{
mr_berror(MR_ERR_NO_MIRSYS);
mr_mip->depth--;
return NULL;
}
x=(mr_small *)mr_alloc(mr_mip->nib+1,sizeof(mr_small));
if (x==NULL)
{
mr_berror(MR_ERR_OUT_OF_MEMORY);
mr_mip->depth--;
return x;
}
convert(iv,x);
mr_mip->depth--;
return x;
}
//=============================
int cinnum(flash x,FILE *filep)
{ /* convert from string to flash x */
int n;
if (mr_mip->ERNUM) return 0;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=14;
if (mr_mip->TRACER) mr_track();
mr_mip->infile=filep;
mr_mip->fin=TRUE;
n=cinstr(x,NULL);
mr_mip->fin=FALSE;
mr_mip->depth--;
return n;
}
//=============================
void power(flash x,int n,flash w)
{
copy(x,mr_mip->w8);
zero(w);
if (mr_mip->ERNUM || size(mr_mip->w8)==0) return;
convert(1,w);
if (n==0) return;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=51;
if (mr_mip->TRACER) mr_track();
if (n<0)
{
n=(-n);
frecip(mr_mip->w8,mr_mip->w8);
}
if (n==1)
{
copy(mr_mip->w8,w);
mr_mip->depth--;
return;
}
forever
{
if (n%2!=0) fmul(w,mr_mip->w8,w);
n/=2;
if (mr_mip->ERNUM || n==0) break;
fmul(mr_mip->w8,mr_mip->w8,mr_mip->w8);
}
mr_mip->depth--;
}
//=============================
void mad(big x,big y,big z,big w,big q,big r)
{
if (mr_mip->ERNUM) return;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=24;
if (mr_mip->TRACER) mr_track();
mr_mip->check=OFF;
if (w==r)
{
mr_berror(MR_ERR_BAD_PARAMETERS);
mr_mip->depth--;
return;
}
multiply(x,y,mr_mip->w0);
if (x!=z && y!=z)add(mr_mip->w0,z,mr_mip->w0);
divide(mr_mip->w0,w,q);
if (q!=r) copy(mr_mip->w0,r);
mr_mip->check=ON;
mr_mip->depth--;
}
//=============================
Hµm Deciph.c
Hµm sö dông ®Ó thùc hiÖn c¸c thao t¸c gi¶i m· ho¸ víi x©u kÝ tù ®· ®îc m· ho¸ b»ng hµm enciph.c ë trªn, b»ng c¸ch ®a vµo mét x©u ký tù ®· m· ho¸ (b¶n m·) ë ®Çu ra b¹n sÏ nhËn l¹i mét x©u ký tù ban ®Çu (b¶n râ gèc). Hµm thùc hiÖn cã sö dông kho¸ bÝ mËt lÊy vµo tõ File PRIVATE.KEY. Hai File PUBLIC.KEY vµ PRIVATE.KEY chóng cïng ®îc sinh ra do ch¬ng tr×nh genkey, chóng cã quan hÖ mËt thiÕt víi nhau vµ kh«ng thÓ t¸ch rêi, nÕu cã kho¸ c«ng khai mµ kh«ng cã kho¸ bÝ mËt th× còng kh«ng thÓ gi¶i m· ®îc, cßn nÕu cã kho¸ bÝ mËt mµ kh«ng cã kho¸ c«ng khai th× còng ch¼ng Ých lîi g×.
//=============================
//Deciph.c
#include
#include
#include
#include
int deciph(char *strinputde, char *stroutputde)
{
/* decipher using private key */
big x,y,ke,p,q,n,a,b,alpha,beta,t;
FILE *ifile;
int ch,i,leng;
long ipt;
miracl *mip=mirsys(100,0);
x=mirvar(0);
ke=mirvar(0);
p=mirvar(0);
q=mirvar(0);
n=mirvar(0);
y=mirvar(0);
alpha=mirvar(0);
beta=mirvar(0);
a=mirvar(0);
b=mirvar(0);
t=mirvar(0);
mip->IOBASE=60;
if ((ifile=fopen("private.key","r"))==NULL)
{
return 1;
}
cinnum(p,ifile);
cinnum(q,ifile);
fclose(ifile);
multiply(p,q,ke);
leng=strlen(strinputde);
cinstr(x,strinputde);
xgcd(p,q,a,b,t);
lgconv(leng,n); /* first recover "one-time pad" */
#ifdef RSA
decr(p,1,alpha);
premult(alpha,2,alpha);
incr(alpha,1,alpha);
subdiv(alpha,3,alpha);
#else
incr(p,1,alpha);
subdiv(alpha,4,alpha);
#endif
decr(p,1,y);
powmod(alpha,n,y,alpha);
#ifdef RSA
decr(q,1,beta);
premult(beta,2,beta);
incr(beta,1,beta);
subdiv(beta,3,beta);
#else
incr(q,1,beta);
subdiv(beta,4,beta);
#endif
decr(q,1,y);
powmod(beta,n,y,beta);
copy(x,y);
divide(x,p,p);
divide(y,q,q);
powmod(x,alpha,p,x);
powmod(y,beta,q,y);
mad(x,q,q,ke,ke,t);
mad(t,b,b,ke,ke,t);
mad(y,p,p,ke,ke,x);
mad(x,a,a,ke,ke,x);
add(x,t,x);
divide(x,ke,ke);
if (size(x)<0) add(x,ke,x);
for (i=0;i<leng;i++)
{ /* decipher character by character */
ch=*(strinputde+i);
ch^=x[1]; /* XOR with last byte of x */
stroutputde[i]=ch;
#ifdef RSA
power(x,3,ke,x);
#else
mad(x,x,x,ke,ke,x);
#endif
}
return 0;
}
//=============================
void multiply(big x,big y,big z)
{ /* multiply two big numbers: z=x.y */
int i,xl,yl,j,ti;
mr_small carry,sz;
big w0;
#ifdef MR_NOASM
mr_large dble;
#endif
if (mr_mip->ERNUM) return;
if (y[0]==0 || x[0]==0)
{
zero(z);
return;
}
w0=mr_mip->w0; /* local pointer */
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=5;
if (mr_mip->TRACER) mr_track();
#ifdef MR_FLASH
if (mr_notint(x) || mr_notint(y))
{
mr_berror(MR_ERR_INT_OP);
mr_mip->depth--;
return;
}
#endif
sz=((x[0]&mr_mip->MSBIT)^(y[0]&mr_mip->MSBIT));
xl=(int)(x[0]&mr_mip->OBITS);
yl=(int)(y[0]&mr_mip->OBITS);
zero(w0);
if (mr_mip->check && xl+yl>mr_mip->nib)
{
mr_berror(MR_ERR_OVERFLOW);
mr_mip->depth--;
return;
}
//=============================
void mad(big x,big y,big z,big w,big q,big r)
{
if (mr_mip->ERNUM) return;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=24;
if (mr_mip->TRACER) mr_track();
mr_mip->check=OFF;
if (w==r)
{
mr_berror(MR_ERR_BAD_PARAMETERS);
mr_mip->depth--;
return;
}
multiply(x,y,mr_mip->w0);
if (x!=z && y!=z)add(mr_mip->w0,z,mr_mip->w0);
divide(mr_mip->w0,w,q);
if (q!=r) copy(mr_mip->w0,r);
mr_mip->check=ON;
mr_mip->depth--;
}
//=============================
int cinstr(flash x,unsigned char *string)
{ /* input big number in base IOBASE */
mr_small newb,oldb,b,lx;
int ipt;
if (mr_mip->ERNUM) return 0;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=78;
if (mr_mip->TRACER) mr_track();
newb=mr_mip->IOBASE;
oldb=mr_mip->apbase;
mr_setbase(newb); /* temporarily change base ... */
b=mr_mip->base;
mr_mip->check=OFF;
ipt=instr(mr_mip->w5,string); /* ... and get number */
mr_mip->check=ON;
lx=(mr_mip->w5[0]&mr_mip->OBITS);
#ifdef MR_FLASH
if ((int)(lx&mr_mip->MSK)>mr_mip->nib || (int)((lx>>mr_mip->BTS)&mr_mip->MSK)>mr_mip->nib)
#else
if ((int)lx>mr_mip->nib)
#endif
{ /* numerator or denominator too big */
mr_berror(MR_ERR_OVERFLOW);
mr_mip->depth--;
return 0;
}
mr_setbase(oldb); /* restore original base */
cbase(mr_mip->w5,b,x);
mr_mip->depth--;
return ipt;
}
//=============================
void incr(big x,int n,big z)
{ /* add int to big number: z=x+n */
if (mr_mip->ERNUM) return;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=7;
if (mr_mip->TRACER) mr_track();
convert(n,mr_mip->w0);
select(x,PLUS,mr_mip->w0,z);
mr_mip->depth--;
}
//=============================
void decr(big x,int n,big z)
{ /* subtract int from big number: z=x-n */
if (mr_mip->ERNUM) return;
mr_mip->depth++;
mr_mip->trace[mr_mip->depth]=8;
if (mr_mip->TRACER) mr_track();
convert(n,mr_mip->w0);
select(x,MINUS,mr_mip->w0,z);
mr_mip->depth--;
}
2.Ch¬ng tr×nh Demo th viÖn CRYPTO.DLL
PhÇn nµy x©y dùng mét øng dông ®¬n gi¶n ®Ó Demo th viÖn CRYPTO.DLL, ch¬ng tr×nh x©y dùng nhËp vµo mét x©u råi m· ho¸, gi¶i m· vµ tr¶ l¹i kÕt qu¶ ban ®Çu.
Tµi liÖu tham kh¶o :
BRASSARD, Modern Cryptology. Lecture Notes in Computer Science, Vol. 325. Springer-Verlag 1988.
BRUCE SCHNEIER, APPLIED CRYPTOGRAPHY, Protocol, Algorithms, and Source Code in C, John Wiley & Sons 1994
COMBA, Exponentiation Cryptosystems on the IBM PC. IBM
Ph¹m V¨n Êt, Kü thuËt lËp tr×nh C, c¬ së vµ n©ng cao
Nhµ xuÊt b¶n gi¸o dôc 1997.
Xu©n NguyÖt vµ Phïng Kim Hoµng, häc Visual C++ 5 trong 21 ngµy.
Nhµ xuÊt b¶n Mòi cµ mau 1998.
Các file đính kèm theo tài liệu này:
- Mã hóa dữ liệu.doc