Mã hóa dữ liệ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. 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ố.

doc70 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2173 | Lượt tải: 0download
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. Nh­ng 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, nh­ng 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, nh­ng 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á, nh­ng ®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 nh­ng 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), nh­ng 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 nh­ng khã kh¨n ®Ó tÝnh to¸n tõ mét ®iÒu kiÖn kh¸c. Nh­ng 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, nh­ng 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 nh­ng 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¸, nh­ng 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¸. Nh­ng ®é 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 nh­ng ®Ó t¹o vµ l­u 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, nh­ng 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, l­u tr÷ nhiÒu th«ng tin h¬n chø kh«ng chØ lµ kho¸ c«ng khai. Nã l­u 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 l­u 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 l­u 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 l­a 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) nh­ng 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, nh­ng 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 tr­ng 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, nh­ng 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¸, nh­ng 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¸, nh­ng 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. Nh­ng 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. 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è. §é 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, nh­ng 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, nh­ng 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, nh­ng 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, l­u 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:

  • docMã hóa dữ liệu.doc
Tài liệu liên quan