You are on page 1of 81

Môc Lôc

Më ®Çu.......................................................................3
Ch¬ng i C¬ së to¸n häc...............................................5
1.Lý thuyÕt th«ng tin................................ ......................5
1.1 Entropy.................................................. ................5
1.2 Tèc ®é cña ng«n ng÷. (Rate of Language)............6
1.3 An toµn cña hÖ thèng m· ho¸................................7
2.Lý thuyÕt ®é phøc t¹p...................... ...........................9
3.Lý thuyÕt to¸n häc.................................... .................11
3.1 Modular sè häc...................................................11
3.2 Sè nguyªn tè........................................... .............13
3.3 ¦íc sè chung lín nhÊt. ..........................................13
3.4 Sè nghÞch ®¶o Modulo.......................................14
3.5 Ký hiÖu La gr¨ng (Legendre Symboy)..................16
3.6 Ký hiÖu Jacobi (Jacobi Symboy).......................... ..17
3.7 §Þnh lý phÇn d trung hoa............................. ........19
3.8 §Þnh lý Fermat............................... ......................20
4. C¸c phÐp kiÓm tra sè nguyªn tè...............................20
4.1 Soloway-Strassen................................................21
4.2 Rabin-Miller....................................................... ...22
4.3 Lehmann............................................................. .22
4.4 Strong Primes...................... ................................23
Ch¬ng II MËt m·.......................................... ...............25
1. Kh¸i niÖm c¬ b¶n.......................... ...........................25
2. Protocol ................................................................... .27
2.1 Giíi thiÖu Protocol........................... .....................27
2.2 Protocol mËt m·...................................................28
2.3 Môc ®Ých cña Protocol....................... .................28
2.4 TruyÒn th«ng sö dông hÖ mËt m· ®èi xøng........30
2.5 TruyÒn th«ng sö dông hÖ mËt m· c«ng khai........31
3. Kho¸...................................................................... ....35
3.1 §é dµi kho¸..........................................................35
3.2 Qu¶n lý kho¸ c«ng khai................................... .....37
4. M· dßng, m· khèi (CFB, CBC) ....................................39
4.1 M« h×nh m· ho¸ khèi. ...................... ...................39
4.1.1 M« h×nh d©y truyÒn khèi m· ho¸.................39
4.1.2 M« h×nh m· ho¸ víi th«ng tin ph¶n håi..........42
4.2 M« h×nh m· ho¸ dßng. .................................... ....42
Khoa C«ng NghÖ Th«ng Tin

5. C¸c hÖ mËt m· ®èi xøng vµ c«ng khai .....................44


5.1 HÖ mËt m· ®èi xøng ..........................................44
5.2 HÖ mËt m· c«ng khai ........................ ..................46
6. C¸c c¸ch th¸m m· .................................. ...................48
Ch¬ng III HÖ m· ho¸ RSA..........................................53
1. Kh¸i niÖm hÖ mËt m· RSA ......................................53
2. §é an toµn cña hÖ RSA ............................................56
3. Mét sè tÝnh chÊt cña hÖ RSA ............................... ..58
Ch¬ng IV M« h×nh Client/Server..............................60
1.M« h×nh Client/Server...................................... .........60
2. M· ho¸ trong m« h×nh Client/Server.........................61
Ch¬ng V X©y dùng hµm th viÖn...............................62
1.X©y dùng th viÖn liªn kÕt ®éng CRYPTO.DLL...........63
2.Ch¬ng tr×nh Demo th viÖn CRYPTO.DLL...................79

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Më ®Çu
ThÕ kû XXI thÕ kû c«ng nghÖ th«ng tin, th«ng tin ®· vµ
®ang t¸c ®éng trùc tiÕp ®Õn mäi mÆt ho¹t ®éng kinh tÕ
x· héi cña hÇu hÕt c¸c quèc gia trªn thÕ giíi. Th«ng tin cã
mét vai trß hÕt søc quan träng, bëi vËy chóng ta ph¶i lµm
sao ®¶m b¶o ®îc tÝnh trong suèt cña th«ng tin nghÜa lµ
th«ng tin kh«ng bÞ sai lÖch, bÞ thay ®æi, bÞ lé trong qu¸
tr×nh truyÒn tõ n¬i göi ®Õn n¬i nhËn.
Víi sù ph¸t triÓn rÊt nhanh cña c«ng nghÖ m¹ng m¸y tÝnh
®Æc biÖt lµ m¹ng INTERNET th× khèi lîng th«ng tin ngµy
cµng chuyÓn t¶i nhiÒu h¬n. Nh÷ng tËp ®oµn c«ng
nghiÖp, nh÷ng c«ng ty ®a quèc gia, thÞ trêng chøng
kho¸n tiÕn hµnh xö lý vµ truyÒn nhËn nh÷ng th«ng tin
®¾t gi¸, nh÷ng phiªn giao dÞch hay mua b¸n cæ phiÕu,
tr¸i phiÕu ®Òu ®îc tiÕn hµnh qua m¹ng. Giê ®©y víi sù
t¨ng trëng nhanh cña c¸c siªu thÞ ®iÖn tö, th¬ng m¹i
®iÖn tö th× hµng ngµy cã mét khèi lîng tiÒn rÊt lín ®îc lu
chuyÓn trªn m¹ng toµn cÇu INTERNET, vÊn ®Ò khã kh¨n
®Æt ra lµ lµm sao gi÷ ®îc th«ng tin bÝ mËt vµ gi÷ cho
tiÒn ®Õn ®óng ®îc ®Þa chØ cÇn ®Õn.
B¹n sÏ ra sao nÕu nh b¹n göi th cho mét ngêi b¹n nhng l¹i
bÞ mét kÎ l¹ mÆt nµo ®ã xem trém vµ söa ®æi néi dung
bøc th tr¸i víi chñ ý cña b¹n, tÖ h¹i h¬n n÷a lµ khi b¹n ký
mét hîp ®ång, göi th«ng qua m¹ng vµ l¹i bÞ kÎ xÊu söa
®æi nh÷ng ®iÒu kho¶n trong ®ã, vµ sÏ cßn nhiÒu ®iÒu
t¬ng tù nh vËy n÷a ... HËu qu¶ sÏ nh thÕ nµo nhØ ? B¹n bÞ
ngêi kh¸c hiÓu nhÇm v× néi dung bøc th bÞ thay ®æi, cßn
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

hîp ®ång bÞ ph¸ vì bëi nh÷ng ®iÒu kho¶n ®· kh«ng cßn


nguyªn vÑn. Nh vËy lµ c¶ t×nh c¶m, tiÒn b¹c cña b¹n vµ
nãi réng h¬n lµ c¶ sù nghiÖp cña b¹n ®Òu bÞ ®e däa nÕu
nh nh÷ng th«ng tin mµ b¹n göi ®i kh«ng ®¶m b¶o ®îc
tÝnh nguyªn vÑn cña chóng. M· ho¸ th«ng tin lµ mét
trong c¸c ph¬ng ph¸p ®¶m b¶o ®îc tÝnh trong suèt cña
th«ng tin. Nã cã thÓ gi¶i quyÕt c¸c vÊn r¾c rèi ë trªn gióp
b¹n, mét khi th«ng tin ®· ®îc m· ho¸ vµ göi ®i th× kÎ xÊu
rÊt khã hoÆc kh«ng thÓ gi¶i m· ®îc.
Mét sè kh¸i niÖm c¬ b¶n vÒ m· ho¸ th«ng tin, ph¬ng
ph¸p m· ho¸ th«ng tin RSA vµ x©y dùng mét th viÖn c¸c
hµm m· ho¸ phôc vô trao ®æi th«ng tin trong m« h×nh
Client/Server.
Ch¬ng I C¬ së to¸n häc
Ch¬ng II MËt m·
Ch¬ng III HÖ m· ho¸ RSA.
Ch¬ng IV M« h×nh Client/Server
Ch¬ng V X©y dùng hµm th viÖn

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Ch¬ng i C¬ së to¸n häc


§Ó cã nh÷ng thuËt to¸n m· ho¸ tèt, chóng ta ph¶i cã
nh÷ng kiÕn thøc c¬ b¶n vÒ to¸n häc ®¸p øng cho yªu
cÇu, ch¬ng nµy m« t¶ nh÷ng kh¸i niÖm c¬ b¶n vÒ lý
thuyÕt th«ng tin nh Entropy, tèc ®é cña ng«n ng÷, hiÓu
biÕt vÒ ®é phøc t¹p cña thuËt to¸n, ®é an toµn cña thuËt
to¸n, cïng víi nh÷ng kiÕn thøc to¸n häc: modulo sè häc, sè
nguyªn tè, ®Þnh lý phÇn d trung hoa, ®Þnh lý Fermat . . .
vµ c¸c ph¬ng ph¸p kiÓm tra xem mét sè cã ph¶i lµ nguyªn
tè hay kh«ng. Nh÷ng vÊn ®Ò chÝnh sÏ ®îc tr×nh bµy
trong ch¬ng nµy gåm :
♦ Lý thuyÕt th«ng tin
♦ Lý thuyÕt ®é phøc t¹p
♦ Lý thuyÕt sè häc.

1.Lý thuyÕt th«ng tin


M« h×nh lý thuyÕt th«ng tin ®îc ®Þnh nghÜa lÇn ®Çu
tiªn vµo n¨m 1948 bëi Claude Elmwood Shannon. Trong
phÇn nµy chóng ta chØ ®Ò cËp tíi mét sè chñ ®Ò quan
träng cña lý thuyÕt th«ng tin.

1.1 Entropy
Lý thuyÕt th«ng tin ®îc ®Þnh nghÜa lµ khèi lîng th«ng tin
trong mét th«ng b¸o nh lµ sè bÝt nhá nhÊt cÇn thiÕt ®Ó
m· ho¸ tÊt c¶ nh÷ng nghÜa cã thÓ cña th«ng b¸o ®ã.
VÝ dô, trêng ngay_thang trong mét c¬ së d÷ liÖu
chøa kh«ng qu¸ 3 bÝt th«ng tin, bëi v× th«ng tin t¹i ®©y
cã thÓ m· ho¸ víi 3 bÝt.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

000 = Sunday
001 = Monday
010 = Tuesday
011 = Wednesday
100 = Thursday
101 = Friday
110 = Saturday
111 is unused
NÕu th«ng tin nµy ®îc biÓu diÔn bëi chuçi ký tù ASCII t-
¬ng øng, nã sÏ chiÕm nhiÒu kh«ng gian nhí h¬n, nhng
còng kh«ng chøa nhiÒu th«ng tin h¬n. T¬ng tù nh trêng
gioi_tinh cña mét c¬ së d÷ liÖu chøa chØ 1 bÝt th«ng tin,
nã cã thÓ lu tr÷ nh mét trong hai x©u ký tù ASCII : Nam,
N÷.
Khèi lîng th«ng tin trong mét th«ng b¸o M lµ ®o bëi
Entropy cña th«ng b¸o ®ã, ký hiÖu bëi H(M). Entropy cña
th«ng b¸o gioi_tinh chØ ra lµ 1 bÝt, ký hiÖu H(gioi_tinh) =
1, Entropy cña th«ng b¸o sè ngµy trong tuÇn lµ nhá h¬n
3bits.
Trong trêng hîp tæng qu¸t, Entropy cña mét th«ng b¸o lµ
log2n, víi n lµ sè kh¶ n¨ng cã thÓ.

H(M) = log2n

1.2 Tèc ®é cña ng«n ng÷. (Rate of Language)


§èi víi mét ng«n ng÷, tèc ®é cña ng«n ng÷ lµ
r = H(M)/N
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

trong trêng hîp nµy N lµ ®é dµi cña th«ng b¸o. Tèc ®é cña
tiÕng Anh b×nh thêng cã mét vµi gi¸ trÞ gi÷a 1.0 bits/ch÷
c¸i vµ 1.5 bits/ch÷ c¸i, ¸p dông víi gi¸ trÞ N rÊt lín.
Tèc ®é tuyÖt ®èi cña ng«n ng÷ lµ sè bits lín nhÊt, chóng
cã thÓ m· ho¸ trong mçi ký tù. NÕu cã L ký tù trong mét
ng«n ng÷, th× tèc ®é tuyÖt ®èi
lµ :
R = log2L
§©y lµ sè Entropy lín nhÊt cña mçi ký tù ®¬n lÎ. §èi víi
tiÕng Anh gåm 26 ch÷ c¸i, tèc ®é tuyÖt ®èi lµ log 226 =
4.7bits/ch÷ c¸i. SÏ kh«ng cã ®iÒu g× lµ ng¹c nhiªn ®èi víi
tÊt c¶ mäi ngêi r»ng thùc tÕ tèc ®é cña tiÕng Anh nhá
h¬n nhiÒu so víi tèc ®é tuyÖt ®èi.

1.3 An toµn cña hÖ thèng m· ho¸


Shannon ®Þnh nghÜa rÊt râ rµng, tØ mØ c¸c m« h×nh
to¸n häc, ®iÒu ®ã cã nghÜa lµ hÖ thèng m· ho¸ lµ an
toµn. Môc ®Ých cña ngêi ph©n tÝch lµ ph¸t hiÖn ra kho¸
k, b¶n râ p, hoÆc c¶ hai thø ®ã. H¬n n÷a hä cã thÓ hµi
lßng víi mét vµi th«ng tin cã kh¶ n¨ng vÒ b¶n râ p nÕu ®ã
lµ ©m thanh sè, nÕu nã lµ v¨n b¶n tiÕng §øc, nÕu nã lµ
b¶ng tÝnh d÷ liÖu, v. v . . .
Trong hÇu hÕt c¸c lÇn ph©n tÝch m·, ngêi ph©n tÝch cã
mét vµi th«ng tin cã kh¶ n¨ng vÒ b¶n râ p tríc khi b¾t
®Çu ph©n tÝch. Hä cã thÓ biÕt ng«n ng÷ ®· ®îc m· ho¸.
Ng«n ng÷ nµy ch¾c ch¾n cã sù d thõa kÕt hîp víi chÝnh
ng«n ng÷ ®ã. NÕu nã lµ mét th«ng b¸o göi tíi Bob, nã cã
thÓ b¾t ®Çu víi "Dear Bob". Ch¾c ch¾n lµ "Dear Bob " sÏ
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

lµ mét kh¶ n¨ng cã thÓ h¬n lµ chuçi kh«ng mang ý nghÜa


g× ch¼ng h¹n "tm*h&rf". Môc ®Ých cña viÖc th¸m m· lµ
söa nh÷ng tËp hîp kh¶ n¨ng cã thÓ cã cña b¶n m· víi mçi
kh¶ n¨ng cã thÓ cña b¶n râ.
Cã mét ®iÒu gièng nh hÖ thèng m· ho¸, chóng ®¹t ®îc sù
bÝ mËt tuyÖt ®èi. HÖ thèng m· ho¸ nµy trong ®ã b¶n m·
kh«ng mang l¹i th«ng tin cã thÓ ®Ó t×m l¹i b¶n râ.
Shannon ph¸t triÓn lý thuyÕt cho r»ng, hÖ thèng m· ho¸
chØ an toµn tuyÖt ®èi nÕu nÕu sè kho¸ cã thÓ Ýt nhÊt lµ
nhiÒu b»ng sè th«ng b¸o cã thÓ. HiÓu theo mét nghÜa
kh¸c, kho¸ tèi thiÓu dµi b»ng th«ng b¸o cña chÝnh nã.
Ngo¹i trõ an toµn tuyÖt ®èi, b¶n m· mang l¹i mét vµi
th«ng tin ®óng víi b¶n râ, ®iÒu nµy lµ kh«ng thÓ tr¸nh ®-
îc. Mét thuËt to¸n mËt m· tèt gi÷ cho th«ng tin ë møc nhá
nhÊt, mét ngêi th¸m m· tèt khai th¸c nh÷ng th«ng tin nµy
®Ó ph¸t hiÖn ra b¶n râ.
Ngêi ph©n tÝch m· sö dông sù d thõa tù nhiªn cña ng«n
ng÷ ®Ó lµm gi¶m sè kh¶ n¨ng cã thÓ cña b¶n râ. NhiÒu
th«ng tin d thõa cña ng«n ng÷, sÏ dÔ dµng h¬n cho sù
ph©n tÝch mËt m·. ChÝnh v× lý do nµy mµ nhiÒu sù thùc
hiÖn m· ho¸ sö dông ch¬ng tr×nh nÐn b¶n râ ®Ó gi¶m
kÝch thíc v¨n b¶n tríc khi m· ho¸ chóng. Bëi vËy qu¸ tr×nh
nÐn lµm gi¶m sù d thõa cña th«ng b¸o.
Entropy cña hÖ thèng m· ho¸ lµ ®o kÝch thíc cña kh«ng
gian kho¸ (keyspace).
H(K) = log2(number of keys )
1.4 Sù lén xén vµ sù rêm rµ. (Confusion and Diffusion)

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Theo nhµ khoa häc Shannon, cã hai kü thuËt c¬ b¶n ®Ó


che dÊu sù d thõa th«ng tin trong th«ng b¸o gèc ®ã lµ : sù
lén xén vµ sù rêm rµ.
Kü thuËt lén xén (Confusion) che dÊu mèi quan hÖ
gi÷a b¶n râ vµ b¶n gèc. Kü thuËt nµy lµm thÊt b¹i sù cè
g¾ng nghiªn cøu b¶n m· t×m kiÕm th«ng tin d thõa vµ
thèng kª mÉu. Ph¬ng ph¸p dÔ nhÊt ®Ó thùc hiÖn ®iÒu
nµy lµ th«ng qua kü thuËt thay thÕ. Mét hÖ m· ho¸ thay
thÕ ®¬n gi¶n, ch¼ng h¹n hÖ m· dÞch vßng Caesar, dùa
trªn nÒn t¶ng cña sù thay thÕ c¸c ch÷ c¸i, nghÜa lµ ch÷
c¸i nµy ®îc thay thÕ b»ng ch÷ c¸i kh¸c. Sù tån t¹i cña mét
ch÷ c¸i trong b¶n m·, lµ do viÖc dÞch chuyÓn ®i k vÞ trÝ
cña ch÷ c¸i trong b¶n râ.
Kü thuËt rêm rµ (Diffusion) lµm mÊt ®i sù d thõa cña
b¶n râ b»ng bÒ réng cña nã vît qu¸ b¶n m· (nghÜa lµ b¶n
m· kÝch thíc nhá h¬n b¶n râ). Mét ngêi ph©n tÝch t×m
kiÕm sù d thõa ®ã sÏ cã mét thêi gian rÊt khã kh¨n ®Ó
t×m ra chóng. C¸ch ®¬n gi¶n nhÊt t¹o ra sù rêm rµ lµ
th«ng qua viÖc ®æi chç (hay cßn gäi lµ ho¸n vÞ).

2.Lý thuyÕt ®é phøc t¹p.


Lý thuyÕt ®é phøc t¹p cung cÊp mét ph¬ng ph¸p ®Ó
ph©n tÝch ®é phøc t¹p tÝnh to¸n cña thuËt to¸n vµ c¸c kü
thuËt m· ho¸ kh¸c nhau. Nã so s¸nh c¸c thuËt to¸n m· ho¸,
kü thuËt vµ ph¸t hiÖn ra ®é an toµn cña c¸c thuËt to¸n
®ã. Lý thuyÕt th«ng tin ®· cho chóng ta biÕt r»ng mét
thuËt to¸n m· ho¸ cã thÓ bÞ b¹i lé. Cßn lý thuyÕt ®é phøc

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

t¹p cho biÕt nÕu liÖu chóng cã thÓ bÞ b¹i lé tríc khi vò trô
xôp ®æ hay kh«ng.
§é phøc t¹p thêi gian cña thuËt to¸n lµ hµm sè víi ®é dµi
®Çu vµo. ThuËt to¸n cã ®é phøc t¹p thêi gian f(n) ®èi víi
mäi n vµ ®é dµi ®Çu vµo n, nghÜa lµ sù thùc hiÖn cña
thuËt to¸n lín h¬n f(n) bíc.
§é phøc t¹p thêi gian thuËt to¸n phô thuéc vµo m« h×nh
cña c¸c thuËt to¸n, sè c¸c bíc nhá h¬n nÕu c¸c ho¹t ®éng
®îc tËp chung nhiÒu trong mét bíc.
C¸c líp cña thuËt to¸n, thêi gian ch¹y ®îc chØ râ nh hµm sè
mò cña ®Çu vµo lµ "kh«ng cã kh¶ n¨ng thùc hiÖn ®îc".
C¸c thuËt to¸n cã ®é phøc t¹p gièng nhau ®îc ph©n lo¹i
vµo trong c¸c líp t¬ng ®¬ng. VÝ dô tÊt c¶ c¸c thuËt to¸n
cã ®é phøc t¹p lµ n3 ®îc ph©n vµo trong líp n3 vµ ký hiÖu
bëi O(n3). Cã hai líp tæng qu¸t sÏ ®îc chØ dÉn lµ líp P vµ líp
NP.
C¸c thuËt to¸n thuéc líp P cã ®é phøc t¹p lµ hµm ®a thøc
cña ®Çu vµo. NÕu mçi bíc tiÕp theo cña thuËt to¸n lµ duy
nhÊt th× thuËt to¸n gäi lµ ®¬n ®Þnh. TÊt c¶ thuËt to¸n
thuéc líp P ®¬n ®Þnh cã thêi gian giíi h¹n lµ P_time, ®iÒu
nµy cho biÕt chóng sÏ thùc hiÖn trong thêi gian ®a thøc, t-
¬ng ®¬ng víi ®é phøc t¹p ®a thøc trong ®é dµi ®Çu vµo.
ThuËt to¸n mµ ë bíc tiÕp theo sù tÝnh to¸n ph¶i lùa chän
gi¶i ph¸p tõ nh÷ng giíi h¹n gi¸ trÞ cña ho¹t ®éng gäi lµ
kh«ng ®¬n ®Þnh. Lý thuyÕt ®é phøc t¹p sö dông c¸c m¸y
®Æc biÖt m« t¶ ®Æc ®iÓm b»ng c¸ch ®a ra kÕt luËn bëi
c¸c chuÈn. M¸y Turinglµ mét m¸y ®Æc biÖt, m¸y ho¹t

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

®éng trong thêi gian rêi r¹c, t¹i mét thêi ®iÓm nã n»m
trong kho¶ng tr¹ng th¸i ®Çy ®ñ sè cña tÊt c¶ c¸c tr¹ng
th¸i cã thÓ lµ h÷u h¹n. Chóng ta cã thÓ ®Þnh nghÜa hµm
®é phøc t¹p thêi gian kÕt hîp víi m¸y Turing A.
fA(n) = max{m/A kÕt thóc sau m bíc víi ®Çu vµo w =
n3 }

Chóng ta gi¶ sö r»ng A lµ tr¹ng th¸i kÕt thóc ®èi víi tÊt c¶
c¸c ®Çu vµo, vÊn ®Ò sÏ trë nªn khã kh¨n h¬n nÕu c¸c
tr¹ng th¸i kh«ng n»m trong P . M¸y Turing kh«ng ®¬n
®Þnh ho¹t ®éng trong thuËt to¸n NP. M¸y Turing kh«ng
®¬n ®Þnh cã thÓ cã mét vµi tr¹ng th¸i chÝnh x¸c. S(w) lµ
tr¹ng th¸i ®o sù thµnh c«ng ng¾n nhÊt cña thuËt to¸n,
(NghÜa lµ sù tÝnh to¸n dÉn ®Õn tr¹ng th¸i cuèi cïng)
Hµm sè ®é phøc t¹p thêi gian cña m¸y Turing kh«ng ®¬n
®Þnh A ®îc ®Þnh nghÜa :
fA(n)=max{1,m/s(w) cã m bíc ®èi víi w/w=n},
ë mçi bíc m¸y Turing kh«ng ®¬n ®Þnh bè trÝ nhiÒu b¶n
sao cña chÝnh nã nh cã mét vµi gi¶i ph¸p vµ tÝnh to¸n
®éc lËp víi mäi lêi gi¶i.
C¸c thuËt to¸n thuéc líp NP lµ kh«ng ®¬n ®Þnh vµ cã thÓ
tÝnh to¸n trªn m¸y Turing kh«ng ®¬n ®Þnh trong thêi
gian P.

3.Lý thuyÕt to¸n häc.

3.1 Modular sè häc.


VÒ c¬ b¶n a ≡ b(mod n) nÕu a = b+kn trong ®ã k lµ mét
sè nguyªn. NÕu a vµ b d¬ng vµ a nhá h¬n n, b¹n cã thÓ
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

nghÜ r»ng a lµ phÇn d cña b khi chia cho n. Nãi chung a


vµ b ®Òu lµ phÇn d khi chia cho n. §«i khi b gäi lµ thÆng
d cña a, modulo n, ®«i khi a gäi lµ ®ång d cña b, modulo
n.
TËp hîp c¸c sè nguyªn tõ 0 ®Õn n-1 cßn ®îc gäi lµ tËp hîp
thÆng d hoµn toµn modulo n. §iÒu nµy cã nghÜa lµ, víi
mçi sè nguyªn a, th× thÆng d modulo n lµ mét sè tõ 0
®Õn n-1.
Modulo sè häc còng gièng nh sè häc b×nh thêng, bao gåm
c¸c phÐp giao ho¸n, kÕt hîp vµ ph©n phèi. MÆt kh¸c gi¶m
mçi gi¸ trÞ trung gian trong suèt qu¸ tr×nh tÝnh to¸n.
(a+b) mod n = ((a mod n) + (b mod n)) mod n
(a- b) mod n = ((a mod n) - (b mod n)) mod n
(a×b) mod n = ((a mod n) × (b mod n)) mod n
(a×(b + c)) mod n = (((a × b) mod n) + ((a × c) mod
n)) mod n
HÖ thèng m· ho¸ sù dông nhiÒu sù tÝnh to¸n modulo n, bëi
v× vÊn ®Ò nµy gièng nh tÝnh to¸n logarithm rêi r¹c vµ
diÖn tÝch h×nh vu«ng lµ khã kh¨n. MÆt kh¸c nã lµm viÖc
dÔ h¬n, bëi v× nã bÞ giíi h¹n trong tÊt c¶ gi¸ trÞ trung
gian vµ kÕt qu¶. VÝ dô : a lµ mét sè k bits, n lµ kÕt qu¶
trung gian cña phÐp céng, trõ, nh©n sÏ kh«ng vît qu¸ 24
bits. Nh vËy chóng ta cã thÓ thùc hiÖn hµm mò trong
modulo sè häc mµ kh«ng cÇn sinh ra kÕt qu¶ trung gian
®å sé.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

3.2 Sè nguyªn tè.


Sè nguyªn tè lµ mét sè lín h¬n 1, nhng chØ chia hÕt cho 1
vµ chÝnh nã, ngoµi ra kh«ng cßn sè nµo nã cã thÓ chia
hÕt n÷a. Sè 2 lµ mét sè nguyªn tè. Do vËy 7, 17, 53, 73,
2521, 2365347734339 còng lµ sè nguyªn tè. Sè lîng sè
nguyªn tè lµ v« tËn. HÖ mËt m· thêng sö dông sè nguyªn
tè lín cì 512 bits vµ thËm chÝ lín h¬n nh vËy.

3.3 ¦íc sè chung lín nhÊt.


Hai sè gäi lµ cÆp sè nguyªn tè khi mµ chóng kh«ng cã
thõa sè chung nµo kh¸c 1, hay nãi mét c¸ch kh¸c, nÕu íc
sè chung lín nhÊt cña a vµ n lµ b»ng 1. Chóng ta cã thÓ
viÕt nh sau :
gcd(a,n)=1
Sè 15 vµ 28 lµ mét cÆp sè nguyªn tè, nhng 15 vµ 27 th×
kh«ng ph¶i cÆp sè nguyªn tè do cã íc sè chung lµ 1 vµ 3,
dÔ dµng thÊy 13 vµ 500 còng lµ mét cÆp sè nguyªn tè.
Mét sè nguyªn tè lµ mét cÆp sè nguyªn tè víi tÊt c¶ nh÷ng
sè kh¸c lo¹i trõ nh÷ng sè lµ béi sè.
Mét c¸ch dÔ nhÊt ®Ó tÝnh to¸n ra íc sè chung lín nhÊt cña
hai sè lµ nhê vµo thuËt to¸n Euclid. Knuth m« t¶ thuËt to¸n
vµ mét vµi m« h×nh cña thuËt to¸n ®· ®îc söa ®æi.
Díi ®©y lµ ®o¹n m· nguån trong ng«n ng÷ C.
/* ThuËt to¸n t×m íc sè chung lín nhÊt cña x vµ y, gi¶ sö
x,y>0 */
int gcd(int x, int y)
{
int g;
if(x<0)
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

x=-x;
if(y<0)
y=-y ;
g=y;
while(x>0){
g=x;
x=y%x;
y=g;
}
return g;
}

ThuËt to¸n sau ®©y cã thÓ sinh ra vµ tr¶ l¹i íc sè chung


lín nhÊt cña mét m¶ng m sè.
int multiple gcd ( int m, int *x)
{
size t, i ;
int g;
if(m<1)
return(0);
g = x[0];
for(i=1;i<m;++i){
g=gcd(g,x[i]);
if(g==1)
return 1;
}
return g;
}

3.4 Sè nghÞch ®¶o Modulo.


Sè nghÞch ®¶o cña 10 lµ 1/10, bëi v× 10 × 1/10=1. Trong
sè häc modulo th× vÊn ®Ò nghÞch ®¶o phøc t¹p h¬n.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

4 × x ≡ 1 mod 7
Ph¬ng tr×nh trªn t¬ng ®¬ng víi t×m x vµ k sao cho
4x = 7k+1
víi ®iÒu kiÖn lµ c¶ x vµ k ®Òu lµ sè nguyªn.
VÊn ®Ò chung ®Æt ra t¹i ®©y lµ t×m x sao cho
1 = (a × x) mod n
cã thÓ viÕt l¹i nh sau :
a-1 ≡ x(mod n )
Sù thu nhá vÊn ®Ò Modulo lµ rÊt khã gi¶i quyÕt. §«i khi nã
lµ mét vÊn ®Ò, nhng ®«i khi l¹i kh«ng ph¶i vËy.
VÝ dô : nghÞch ®¶o cña 5 modulo 14 lµ 3 bëi
5 × 3 = 15 ≡ 1 (mod 14).
Trong trêng hîp chung a-1 ≡ x (mod n) chØ cã duy nhÊt mét
gi¶i ph¸p nÕu a vµ n lµ mét cÆp sè nguyªn tè. NÕu a vµ n
kh«ng ph¶i lµ cÆp sè nguyªn tè, th× a-1 ≡ x (mod n) kh«ng
cã gi¶i ph¸p nµo. ThuËt to¸n Euclid cã thÓ tÝnh ra ®îc sè
nghÞch ®¶o cña sè Modulo n, ®«i khi thuËt to¸n nµy cßn
gäi lµ thuËt to¸n Euclid më réng. Sau ®©y thuËt to¸n ®îc
m« t¶ trong ng«n ng÷ C.

static void Update(int *un,int *vn, int q)


{
int tn;

tn = *un-vn*q;
*un = *vn;
*vn = tn;
}

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

int extended euclidian(int u,int v,int u1_out,int u2_out)


{
int u1=1;
int u3=u;
int v1=0;
int v3=v;
int q;

while(v3>0){
q=u3/v3;
Update(&u1,&v1,q);
Update(&u3,&v,q);
}
*u1_out=u1;
*u2_out=(u3-u1*u)/v;
return u3;
}

3.5 Ký hiÖu La gr¨ng (Legendre Symboy)


Ký hiÖu L(a,p) ®îc ®Þnh nghÜa khi a lµ mét sè nguyªn vµ
p lµ mét sè nguyªn tè lín h¬n 2. Nã nhËn ba gi¸ trÞ 0, 1, -1
:
L(a,p) = 0 nÕu a chia hÕt cho p.
L(a,p) = 1 nÕu a lµ thÆng d bËc 2 mod p.
L(a,p) = -1 nÕu a kh«ng thÆng d mod p.
Mét ph¬ng ph¸p dÔ dµng ®Ó tÝnh to¸n ra L(a,p) lµ :
(p-1)/2
L(a,p) = a mod p

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

3.6 Ký hiÖu Jacobi (Jacobi Symboy)


Ký hiÖu Jacobi ®îc viÕt J(a,n), nã lµ sù kh¸i qu¸t ho¸ cña
ký hiÖu Lagr¨ng, nã ®Þnh nghÜa cho bÊt kú cÆp sè
nguyªn a vµ n. Ký hiÖu Jacobi lµ mét chøc n¨ng trªn tËp
hîp sè thÆng d thÊp cña íc sè n vµ cã thÓ tÝnh to¸n theo
c«ng thøc sau:
• NÕu n lµ sè nguyªn tè, th× J(a,n) = 1 víi ®iÒu kiÖn a lµ
thÆng d bËc hai modulo n .
• NÕu n lµ sè nguyªn tè, th× J(a,n) = -1 víi ®iÒu kiÖn a
kh«ng lµ thÆng d bËc hai modulo n .
• NÕu n kh«ng ph¶i lµ sè nguyªn tè th× Jacobi
J(a,n)=J(h,p1) × J(h,p2) ×. . . × J(h,pm)
víi p1,p2. . .,pm lµ c¸c thõa sè lín nhÊt cña n.

ThuËt to¸n nµy tÝnh ra sè Jacobi tuÇn hoµn theo c«ng thøc
sau :
1. J(1,k) = 1
2. J(a×b,k) = J(a,k) × J(b,k)
3. J(2,k) =1 NÕu (k2-1)/8 lµ chia hÕt
J(2,k) =-1 trong c¸c trêng hîp kh¸c.
4. J(b,a) = J((b mod a),a)
5. NÕu GCD(a,b)=1 :
a. J(a,b) × J(b,a) = 1 nÕu (a-1)(b-1)/4 lµ chia hÕt.
b. J(a,b) × J(b,a) = -1 nÕu (a-1)(b-1)/4 lµ cßn d.
Sau ®©y lµ thuËt to¸n trong ng«n ng÷ C :
int jacobi(int a,int b)
{

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

int a1,a2;
if(a>=b)
a%=b;
if(a==0)
return 0;
if(a==1)
return 1;
if(a==2)
if(((b*b-1)/8)%2==0)
return 1;
else
return -1;
if(a&b&1) (c¶ a vµ b ®Òu lµ sè d)
if(((a-1)*(b-1)/4)%2==0)
return +jacobi(b,a);
else
return -jacobi(b,a);
if(gcd(a,b)==1)
if(((a-1)*(b-1)/4)%2==0)
return +jacobi(b,a);
else
return -jacobi(b,a);
factor2(a,&a1,&a2);
return jacobi(a1,b) * jacobi(a2,b);
}
NÕu p lµ sè nguyªn tè cã c¸ch tèt h¬n ®Ó tÝnh sè Jacobi
nh díi ®©y :
1. NÕu a=1 th× J(a/p)=1
2. NÕu a lµ sè chai hÕt, th× J(a,p)=J(a/2,p) × (-1)(p^2 –
1)/8

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

3. NÕu a lµ sè d kh¸c 1 th× J(a,p)=J(p mod a, a) ×


(-1)(a-1)×(p-1)/4

3.7 §Þnh lý phÇn d trung hoa.


NÕu b¹n biÕt c¸ch t×m thõa sè nguyªn tè cña mét sè n,
th× b¹n cã thÓ ®· sö dông, mét sè ®iÒu gäi lµ ®Þnh lý
phÇn d trung hoa ®Ó gi¶i quyÕt trong suèt hÖ ph¬ng
tr×nh. B¶n dÞch c¬ b¶n cña ®inh lý nµy ®îc kh¸m ph¸ bëi
to¸n häc Trung Hoa vµo thÕ kû thø nhÊt.
Gi¶ sö, sù ph©n tÝch thõa sè cña n=p1×p2×. . .×pt th× hÖ
ph¬ng tr×nh
(X mod pi) = ai , víi i=1,2,. . .t
cã duy nhÊt mét c¸ch gi¶i, t¹i ®ã x nhá h¬n n.
Bëi vËy, víi a,b tuú ý sao cho a < p vµ b < q (p,q lµ sè
nguyªn tè) th× tån t¹i duy nhÊt a,x ,khi x nhá h¬n p×q th×
x ≡ a (mod p), vµ x ≡ b (mod q)
§Ó t×m ra x ®Çu tiªn sö dông thuËt to¸n Euclid ®Ó t×m
u, vÝ dô :
u × q ≡ 1 (mod p)
Khi ®ã cÇn tÝnh to¸n :
x=((( a-b)×u) mod p ) × q + b
Díi ®©y lµ ®o¹n m· ®Þnh lý phÇn d trung hoa trong ng«n
ng÷ C :

Int chinese remainder(size t r, int *m, int *u)


{
size t i;
int modulus;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

int n;
modulus = 1;
for ( i=0; i<r:++i )
modulus *=m[i];
n=0;
for ( i=0; i<r:++i )
{
n+=u[i]*modexp(modulus/m[i],totient(m[i]),m[i]);
n%=modulus;
}
return n;
}

3.8 §Þnh lý Fermat.


NÕu m lµ sè nguyªn tè, vµ a kh«ng ph¶i lµ béi sè cña m
th× ®Þnh lý Fermat ph¸t biÓu :
am-1 ≡ 1(mod m)

4. C¸c phÐp kiÓm tra sè nguyªn tè.


Hµm mét phÝa lµ mét kh¸i niÖm c¬ b¶n cña m· ho¸ c«ng
khai, viÖc nh©n hai sè nguyªn tè ®îc pháng ®o¸n nh lµ
hµm mét phÝa, nã rÊt dÔ dµng nh©n c¸c sè ®Ó t¹o ra mét
sè lín, nhng rÊt khã kh¨n ®Ó ph©n tÝch sè lín ®ã ra thµnh
c¸c thõa sè lµ hai sè nguyªn tè lín.
ThuËt to¸n m· ho¸ c«ng khai cÇn thiÕt tíi nh÷ng sè nguyªn
tè. BÊt kú m¹ng kÝch thíc thÕ nµo còng cÇn mét sè lîng lín
sè nguyªn tè. Cã mét vµi ph¬ng ph¸p ®Ó sinh ra sè
nguyªn tè. Tuy nhiªn cã mét sè vÊn ®Ò ®îc ®Æt ra ®èi víi
sè nguyªn tè nh sau :
• NÕu mäi ngêi cÇn ®Õn nh÷ng sè nguyªn tè kh¸c nhau,
chóng ta sÏ kh«ng ®¹t ®îc ®iÒu ®ã ®óng kh«ng.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

Kh«ng ®óng, bëi v× trong thùc tÕ cã tíi 10150 sè nguyªn


tè cã ®é dµi 512 bits hoÆc nhá h¬n.
• §iÒu g× sÏ x¶y ra nÕu cã hai ngêi ngÉu nhiªn chän cïng
mét sè nguyªn tè?. Víi sù chän lùa tõ sè lîng 10150 sè
nguyªn tè, ®iÒu kú quÆc nµy x¶y ra lµ x¸c xuÊt nhá
h¬n so víi sù tù bèc ch¸y cña m¸y tÝnh. VËy nã kh«ng
cã g× lµ ®¸ng lo ng¹i cho b¹n hÕt.

4.1 Soloway-Strassen
Soloway vµ Strassen ®· ph¸t triÓn thuËt to¸n cã thÓ kiÓm
tra sè nguyªn tè. ThuËt to¸n nµy sö dông hµm Jacobi.
ThuËt to¸n kiÓm tra sè p lµ sè nguyªn tè :
1. Chän ngÉu nhiªn mét sè a nhá h¬n p.
2. NÕu íc sè chung lín nhÊt gcd(a,p) ≠ 1 th× p lµ hîp
sè.
3. TÝnh j = a(p-1)/2 mod p.
4. TÝnh sè Jacobi J(a,p).
5. NÕu j ≠ J(a,p), th× p kh«ng ph¶i lµ sè nguyªn tè.
6. NÕu j = J(a,p) th× nãi p cã thÓ lµ sè nguyªn tè víi
ch¾c ch¾n 50%.
LÆp l¹i c¸c bíc nµy n lÇn, víi nh÷ng n lµ gi¸ trÞ ngÉu nhiªn
kh¸c nhau cña a. PhÇn d cña hîp sè víi n phÐp thö lµ kh«ng
qu¸ 2n.
Thùc tÕ khi thùc hiÖn ch¬ng tr×nh, thuËt to¸n ch¹y víi tèc
®é nhanh.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

4.2 Rabin-Miller
ThuËt to¸n nµy ®îc ph¸t triÓn bëi Rabin, dùa trªn mét
phÇn ý tëng cña Miller. Thùc tÕ nh÷ng phiªn b¶n cña thuËt
to¸n ®· ®îc giíi thiÖu t¹i NIST. (National Institute of
Standards and Technology).
§Çu tiªn lµ chän ngÉu nhiªn mét sè p ®Ó kiÓm tra. TÝnh b,
víi b lµ sè mò cña 2 chia cho p-1. TiÕp theo tÝnh m t¬ng
tù nh n = 1+2bm.
Sau ®©y lµ thuËt to¸n :
1. Chän mét s« ngÉu nhiªn a, vµ gi¶ sö a nhá h¬n p.
2. §Æt j=0 vµ z=am mod p.
3. NÕu z=1, hoÆc z=p-1 th× p ®· qua bíc kiÓm tra
vµ cã thÓ lµ sè nguyªn tè.
4. NÕu j > 0 vµ z=1 th× p kh«ng ph¶i lµ sè nguyªn
tè.
5. §Æt j = j+1. NÕu j < b vµ z ≠ p-1 th× ®Æt z=z2
mod p vµ trë l¹i bíc 4.
6. NÕu j = b vµ z ≠ p-1, th× p kh«ng ph¶i lµ sè
nguyªn tè.

4.3 Lehmann.
Mét ph¬ng ph¸p ®¬n gi¶n h¬n kiÓm tra sè nguyªn tè ®îc
ph¸t triÓn ®éc lËp bëi Lehmann. Sau ®©y lµ thuËt to¸n víi
sè bíc lÆp lµ 100.
1. Chän ngÉu nhiªn mét sè n ®Ó kiÓm tra.
2. Ch¾c ch¾n r»ng n kh«ng chia hÕt cho c¸c sè
nguyªn tè nhá nh 2,3,5,7 vµ 11.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

3. Chän ngÉu nhiªn 100 sè a1, a2, . . . , a100 gi÷a 1 vµ


n-1.
4. TÝnh ai(n-1)/2 (mod n) cho tÊt c¶ ai = a1. . . a100 .
Dõng l¹i nÕu b¹n t×m thÊy ai sao cho phÐp kiÓm
tra lµ sai.
5. NÕu ai(n-1)/2 = 1 (mod n) víi mäi i, th× n cã thÓ lµ
hîp sè.
NÕu ai(n-1)/2 ≠ 1 hoÆc -1 (mod n) víi i bÊt kú, th×
n lµ hîp sè.
NÕu ai(n-1)/2 = 1 hoÆc -1 (mod n) víi mäi i ≠ 1,
th× n lµ sè nguyªn tè.

4.4 Strong Primes.


Strong Primes thêng ®îc sö dông cho hai sè p vµ q, chóng
lµ hai sè nguyªn tè víi c¸c thuéc tÝnh ch¾c ch¾n r»ng cã
thÓ t×m ®îc thõa sè b»ng ph¬ng ph¸p ph©n tÝch thõa
sè. Trong sè c¸c thuéc tÝnh ®¹t ®îc bao gåm
+ ¦íc sè chung lín nhÊt cña p-1 vµ q-1 lµ nhá.
+ Hai sè p-1 vµ q-1 nªn cã thõa sè nguyªn tè lín, ®¹o
hµm riªng p' vµ q'
+ Hai sè p'-1 vµ q'-1 nªn cã thõa sè nguyªn tè lín,
®¹o hµm riªng p'' vµ q''
+ C¶ (p-1)/2 vµ (q-1)/2 nªn lµ sè nguyªn tè.
Trong bÊt cø trêng hîp nµo Strong Primes rÊt cÇn thiÕt lµ
®èi tîng trong c¸c buæi tranh luËn. Nh÷ng thuéc tÝnh ®·
®îc thiÕt kÕ c¶n trë mét vµi thuËt to¸n ph©n tÝch thõa
sè. H¬n n÷a, nh÷ng thuËt to¸n ph©n tÝch thõa sè nhanh
nhÊt cã c¬ héi tèt ®Ó ®¹t c¸c tiªu chuÈn.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Ch¬ng II MËt m·
Trong ch¬ng tríc chóng ta ®· nªu ra c¸c kh¸i niÖm c¬ b¶n
vÒ lý thuyÕt th«ng tin, vÒ ®é phøc t¹p cña thuËt to¸n, vµ
nh÷ng kh¸i niÖm c¬ b¶n vÒ to¸n häc cÇn thiÕt. Ch¬ng
nµy sÏ m« t¶ mét c¸ch tæng quan vÒ m· ho¸, bao gåm
nh÷ng kh¸i niÖm vÒ m· ho¸ th«ng tin, mét hÖ thèng m·
ho¸ bao gåm nh÷ng thµnh phÇn nµo, kh¸i niÖm protocol,
c¸c lo¹i protocol. M· ho¸ dßng lµ g×, m· ho¸ khèi lµ g×, thÕ
nµo lµ hÖ thèng m· ho¸ cæ ®iÓn, thÕ nµo lµ hÖ thèng m·
ho¸ c«ng khai. Vµ cuèi cïng lµ b»ng nh÷ng c¸ch nµo kÎ
®Þch tÊn c«ng hÖ thèng m· ho¸. Nh÷ng vÊn ®Ò sÏ ®îc
®Ò cËp trong ch¬ng nµy:
♦ Kh¸i niÖm c¬ b¶n cña m· ho¸.
♦ Protocol
♦ M· dßng , m· khèi (CFB, CBC)
♦ C¸c hÖ mËt m· ®èi xøng vµ c«ng khai
♦ C¸c c¸ch th¸m m·

1. Kh¸i niÖm c¬ b¶n.


-B¶n râ (plaintext or cleartext)
Chøa c¸c x©u ký tù gèc, th«ng tin trong b¶n râ lµ
th«ng tin cÇn m· ho¸ ®Ó gi÷ bÝ mËt.
-B¶n m· (ciphertext)
Chøa c¸c ký tù sau khi ®· ®îc m· ho¸, mµ néi
dung ®îc gi÷ bÝ mËt.
-MËt m· häc (Crytography)

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Lµ nghÖ thuËt vµ khoa häc ®Ó gi÷ th«ng tin ®-


îc an toµn.
-Sù m· ho¸ (Encryption)
Qu¸ tr×nh che dÊu th«ng tin b»ng ph¬ng ph¸p nµo
®ã ®Ó lµm Èn néi dung bªn trong gäi lµ sù m· ho¸.
-Sù gi¶i m· (Decryption)
Qu¸ tr×nh biÕn ®æi tr¶ l¹i b¶n m· b¶n thµnh b¶n râ
gäi lµ gi¶i m·.

Qu¸ tr×nh m· ho¸ vµ gi¶i m· ®îc thÓ hiÖn trong s¬

B¶n B¶n B¶n râ


M· ho¸ Gi¶i m·

®å sau:

-HÖ mËt m· : lµ mét hÖ bao gåm 5 thµnh phÇn (P, C, K, E,


D) tho¶ m·n c¸c tÝnh chÊt sau
P (Plaintext) lµ tËp hîp h÷u h¹n c¸c b¶n râ cã thÓ.
C (Ciphertext) lµ tËp hîp h÷u h¹n c¸c b¶n m· cã thÓ.
K (Key) lµ tËp hîp c¸c b¶n kho¸ cã thÓ.
E (Encrytion) lµ tËp hîp c¸c qui t¾c m· ho¸ cã thÓ.
D (Decrytion) lµ tËp hîp c¸c qui t¾c gi¶i m· cã thÓ.
Chóng ta ®· biÕt mét th«ng b¸o thêng ®îc tæ chøc díi
d¹ng b¶n râ. Ngêi göi sÏ lµm nhiÖm vô m· ho¸ b¶n râ, kÕt
qu¶ thu ®îc gäi lµ b¶n m·. B¶n m· nµy ®îc göi ®i trªn mét

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

®êng truyÒn tíi ngêi nhËn sau khi nhËn ®îc b¶n m· ngêi
nhËn gi¶i m· nã ®Ó t×m hiÓu néi dung.
DÔ dµng thÊy ®îc c«ng viÖc trªn khi sö dông ®Þnh nghÜa
hÖ mËt m· :

EK( P) = C vµ DK( C )
=P

2. Protocol

2.1 Giíi thiÖu Protocol


Trong suèt c¶ qu¸ tr×nh cña hÖ thèng mËt m· lµ gi¶i
quyÕt c¸c vÊn ®Ò, nh÷ng vÊn ®Ò cña hÖ bao gåm: gi¶i
quyÕt c«ng viÖc xung quanh sù bÝ mËt, tÝnh kh«ng tin
cËy vµ nh÷ng kÎ bÊt l¬ng. B¹n cã thÓ häc mäi ®iÒu vÒ
thuËt to¸n còng nh c¸c kü thuËt, nhng cã mét ®iÒu rÊt
®¸ng quan t©m ®ã lµ Protocol. Protocol lµ mét lo¹t c¸c
bíc, bao gåm hai hoÆc nhiÒu ngêi, thiÕt kÕ ®Ó
hoµn thµnh nhiÖm vô . “Mét lo¹t c¸c bíc” nghÜa lµ
Protocol thùc hiÖn theo mét tuÇn tù, tõ khi b¾t ®Çu cho
tíi lóc kÕt thóc. Mçi bíc ph¶i ®îc thùc hiÖn tuÇn tù vµ
kh«ng cã bíc nµo ®îc thùc hiÖn tríc khi bíc tríc ®ã ®·
hoµn thµnh. “Bao gåm hai hay nhiÒu ngêi” nghÜa lµ cÇn
Ýt nhÊt hai ngêi hoµn thµnh protocol, mét ngêi kh«ng thÓ
t¹o ra ®îc mét Protocol. Vµ ch¾c ch¾n r»ng mét ngêi cã
thÓ thùc hiÖn mét lo¹t c¸c bíc ®Ó hoµn thµnh nhiÖm vô,
nhng ®ã kh«ng ph¶i lµ Protocol. Cuèi cïng “thiÕt kÕ ®Ó
hoµn thµnh nhiÖm vô” nghÜa lµ mçi Protocol ph¶i lµm mét
vµi ®iÒu g× ®ã.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

Protocol cã mét vµi thuéc tÝnh kh¸c nh sau :


1. Mäi ngêi cÇn ph¶i trong mét Protocol, ph¶i biÕt
protocol ®ã vµ tu©n theo tÊt c¶ mäi bíc trong sù
ph¸t triÓn.
2. Mäi ngêi cÇn ph¶i trong mét Protocol, vµ ph¶i
®ång ý tu©n theo nã.
3. Mét Protocol ph¶i râ rµng, mçi bíc ph¶i ®îc ®Þnh
nghÜa tèt vµ ph¶i kh«ng cã c¬ héi hiÓu nhÇm.
4. Protocol ph¶i ®îc hoµn thµnh, ph¶i cã nh÷ng
hµnh ®éng chØ râ cho mçi trêng hîp cã thÓ.

2.2 Protocol mËt m·.


Protocol mËt m· lµ protocol sö dông cho hÖ thèng mËt m·.
Mét nhãm cã thÓ gåm nh÷ng ngêi b¹n bÌ vµ nh÷ng ngêi
hoµn toµn tin cËy kh¸c hoÆc hä cã thÓ lµ ®Þch thñ hoÆc
nh÷ng ngêi kh«ng tin cËy mét chót nµo hÕt. Mét ®iÒu
hiÓn nhiªn lµ protocol m· ho¸ ph¶i bao gåm mét sè thuËt
to¸n m· ho¸, nhng môc ®Ých chung 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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.
1. Client vµ Server ®ång ý sö dông mét hÖ m· hãa.
2. Client vµ Server thèng nhÊt kho¸ víi nhau.
3. 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.
4. Client göi b¶n m· tíi cho Server.
5. 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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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µ

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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.
1. Client vµ Server nhÊt trÝ sö dông hÖ m· hãa
c«ng khai.
2. Server göi cho Client kho¸ c«ng khai cña Server.
3. 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.
4. 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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ì 10 10
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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

§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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

§é 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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¸.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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
®ã.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

IO

P1 M· ho¸ E(P1 ⊕ I0) = C1

P2 M· ho¸ E(P2 ⊕ = C2
C1)
K

P3 M· ho¸ E(P3 ⊕ = C3
C2)
K

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)

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Bé sinh Bé sinh
Bé sinh
kho¸ Bé sinh
kho¸
kho¸ kho¸

Kho¸ Ki Kho¸
Kho¸
dßng Ki Kho¸
dßng Ki
dßng
B¶n râ B¶n m· dßng
B¶n râ
B¶n râ B¶n m· B¶n râ
gèc
Ci gèc P
Pi M· ho¸ Ci Gi¶i Pii
M· ho¸ Gi¶i

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

DK( C ) = P

K1 K2

B¶n B¶n B¶n râ


M· ho¸ M· ho¸

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é.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

• 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

K1 K2

B¶n B¶n B¶n râ


M· ho¸ Gi¶i m·

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 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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 :
1. 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.
2. 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.


3. 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)]

4. 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.
5. 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.
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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.

1. 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)
2. 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)
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

3. 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)
4. 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¸, 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.
5. 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¸.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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 Ký tù X¸c suÊt Ký tù X¸c


SuÊt 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

CÆp TÇn suÊt CÆp TÇn CÆp TÇn


ch÷ ch÷ suÊt ch÷ 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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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 Z N = {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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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 γ(N)) (5)
trong ®ã γ(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Ý

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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 γ(N).

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

Chän p vµ
q

TÝnh N=p
×q

TÝnh γ(N) B¶n râ


P
KB
Chän kho¸ C = PKB (mod
KB N)
B¶n m·
kB
Chän kho¸ P = CkB ( mod
KB N)

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 K B 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
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

®î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 λ(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 N b-

íc, bëi v× cã mét sè nguyªn tè nhá h¬n 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( P ) 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 lnNln(lnN) ), trong ®ã N lµ sè modulo.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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è Thêi gian ph©n tÝch


trong
sè ®îc 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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

♦ 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, 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, 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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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 <stdio.h>
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

#include <conio.h>
#include <miracl.h>
#include <stdlib.h>
#include <string.h>

/*
#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);
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

#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=(1<<(mr_mip->BTS))-1;
#endif

#ifdef MR_NO_STANDARD_IO
mr_mip->ERCON=TRUE;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

#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)
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

{
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->nib<2) mr_mip->nib=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->stprec<2) mr_mip->stprec=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;i<NK;i++) mr_mip->ira[i]=0L;
irand(0L);
mr_mip->nib=2*mr_mip->nib+1;
#ifdef MR_FLASH

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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);
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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();
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

}
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 <stdio.h>
#include <miracl.h>
#include <stdlib.h>
#include <string.h>

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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" */
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

#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);
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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++;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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--;
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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)
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

#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--;
}
X©y dùng th viÖn c¸c hµm m· ho¸.
Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

X©y dùng th viÖn c¸c hµm m· ho¸.


Khoa C«ng NghÖ Th«ng Tin

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.

X©y dùng th viÖn c¸c hµm m· ho¸.

You might also like