vào chính m y nhiều từ mà ời dùng tạo ra ng bất cứ hệ ầu thành chì vation, key st ng cho qui tr h bảo mật nh chất này đ ảm bảo thôn ng tin không tin có thể bi tion như MD ửi hoặc ngườ a
Trang 1
1 Khái niệm mã hóa và giải mã
Mật mã và bảo mật trong hệ thống viễn thông là một lĩnh vực có nhiều thuật ngữ có thể làm cho nhiều người "ngơ ngác": như "hash function", "one-time pad" hay Rijndael Thread này nhằm giải thích các khái niệm thường dùng trong ngành mật mã học (cryptography) với hy vọng có thể giúp ích cho những ai mong muốn tìm hiểu về lĩnh vực này
Trước tiên mật mã học (crypto) là một nghệ thuật nhằm giấu thông tin, bằng cách chuyển đổi (encrypt) thông tin thành dạng thông tin không đọc được (cipher text) Chỉ có những người giữ chìa khóa (key) bí mật mới có thể giải mã (decrypt) thông tin thành dạng thông tin có thể hiểu được (plain text) Thông tin đôi khi bị giải mã mà không cần biết khóa bí mật Ngành học nghiên cứu về việc bẻ khóa (attack/crack/hack) này còn gọi là cryptanalysis (Xem hình 1)
Hình 1: Sơ đồ mã hóa và giải mã
Cryptosystem (viết tắt của cryptographic system): hệ thống mã hóa thông tin, có thể là phần
mềm như PGP, Ax-Crypt, Truecrypt giao thức như SSL, IPsec dùng trong Internet hay đơn giản là một thuật toán như DES
Encrypt (encipher, encryption): mã hóa – đó là quá trình biến đổi thông tin từ dạng ban đầu - có
thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí mật thông tin đó
Decrypt (decipher, decryption): giải mã – đó là quá trình ngược lại với mã hóa, khôi phục lại
thông tin ban đầu từ thông tin đã được mã hóa
Plain text/message: là dữ liệu gốc (chưa được mã hóa)
Cipher text/message: là dữ liệu đã được mã hóa
Cipher (hay cypher): là thuật toán dùng để thực hiện quá trình mã hóa hay giải mã Trong
khuôn khổ bài viết này gọi tắt là thuật toán
Trang 2Key: là c
2 Các n
• Tính bí
những ai
• Tính to
phát hiện
lén hoặc
thay đổi
bảo tính t
• Tính xá
Người ta
mật chia
hoặc hai
• Tính kh
đã gửi ho
(electron
• Tính nh
chứng m
những ch
liên quan
võng mạc
Trong bả
mật cho m
chúng ta
một mối
- Tính đố
- Tính bắ
có nghĩa
- Tính ph
)
3 Khái
Passwor
Trong thự
tiếp trong
bước chu
này thườ
chìa khóa – đ
nguyên lý c
í mật (confi
biết chìa kh
oàn vẹn (int
n Tính chất n
thay đổi thì
Các hàm m
toàn vẹn cho
ác thực (aut
a có thể dụng
sẻ giữa hai n
chiều (multu
hông chối b
oặc nhận thô
nic signature)
hận dạng (i
inh thư (iden
hức năng của
n (thường gọ
c mắt, âm th
ảo mật có mộ
một người, t
tin tưởng ho
quan hệ khô
ối xứng: Tôi
ắt cầu: Tôi ti
là tôi tin tưở
hản xạ: Tôi c
niệm về c
rd: mật khẩu
ực tế, mật kh
g thuật toán
uyển đổi mật
ờng được gọi
đó chính là t
cơ bản của
identiality/p
hóa bí mật
egrity): tính
này không đ người nhận một chiều (on
o thông tin
thentication
g một passwo người để xác ual authentic
bỏ (non-repu
ông tin Thôn )
dentificatio
ntity) như là
a người dùng
ọi chung là cr hanh
ột điều quan thì phải tin tư oàn toàn vào ông có tính c tin tưởng và
n tưởng vào ởng vào chị B
có tin tưởng
hìa khoá
u, là một hay hẩu do ngườ
Vì vậy, tron
t khẩu ban đ
i là key deriv
hông tin dùn
a quá trình
privacy): tín
h chất này đả đảm bảo thôn được thông ne-way funct
n): người gử
ord, một cha
c thực Sự xá cation)
udiation): n
ng thường đi
on): người dù
à một chìa kh
g, giới hạn c redential) Id
trọng cần lư ưởng vào kh
o đối tượng m chất đặc trưn
ào ông bác s anh A, anh
B
vào chính m
y nhiều từ mà
ời dùng tạo ra
ng bất cứ hệ
ầu thành chì
vation, key st
ng cho qui tr
h bảo mật
nh chất này đ
ảm bảo thôn
ng tin không tin có thể bi tion) như MD
ửi (hoặc ngườ allenge dựa t
ác thực này
người gửi hoặ iều này được
ùng của một hóa ban đầu cho phép của dentity có th
ưu ý đó là sự
hả năng duy
mà tạo ra khó ng:
ĩ, nhưng liệu
A tin tưởng mình không?
à người dùng
a thường kh thống mã hó
ìa khóa có độ
tretching hay
rình mã hóa
và mã hóa
đảm bảo thôn
g tin không
g bị thay đổi, iết được là th D5, SHA-1,
ời nhận) có t trên một thuậ
có thể thực h
ặc nhận sau
c thực hiện th
t hệ thống, m (primary key
a người dùng
hể là login, d
ự tin tưởng lẫ trì bí mật củ
óa riêng (pri
u ông bác sĩ vào vợ anh (không phải
g phải biết đ ông đủ độ an
óa dữ liệu ng
ộ an toàn thí
y key initiali
và giải mã
a :
ng tin chỉ đư
thể bị thay đ , nhưng một hông tin đã b MAC được
thể chứng m
ật toán mã h hiện một chi
này không t hông qua mộ
một tài nguyê y) identity n
g cũng như c dấu vân tay, A
ẫn nhau Để
ủa người đó
ivate key) S
có tin tưởng
ấy (chị B) Đ
i trong tất cả
để được cấp q
n toàn để đư ghiêm túc nà ích hợp Bướ
ization
ược hiểu bởi
đổi mà không khi nó bị ng
bị nghe lén h
c dùng để đả
minh đúng họ hóa hoặc một iều (one-way
thể chối bỏ v
ột chữ ký điệ
ên sở hữu mộ này sẽ xác đ các thuộc tín ADN, giản đ
chia sẻ bí m Chẳng hạn,
Sư tin tưởng
g tôi không? Điều đó khô
ả các lĩnh vự
quyền truy c ược dùng trực
ào cũng phải
ớc tạo chìa k
g bị ghe hoặc
ảm
t bí y)
việc
ện tử
ột ịnh
nh
đồ
một bí
là ông
ực
cập
c
i có khóa
Trang 3Key Derivation Function: là một hàm hash (sẽ giải thích rõ hơn ở phần sau) được thiết kế sao
cho chìa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển Hàm này được thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số ngẫu nhiên để tạo ra một chìa khóa có độ an
toàn cao hơn Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là iteration
Ví dụ một mật khẩu là "pandoras B0x", cùng với salt là "230391827", đi qua hàm hash SHA-1
1000 lần cho kết quả là một chìa khóa có độ dài 160 bit như sau:
3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dưới dạng số thập lục phân)
Keylength (Keysize): Độ dài (hay độ lớn) của chìa khóa Nói một chìa khóa có độ dài 128 bit có
nghĩa chìa đó là một số nhị phân có độ dài 128 chữ số Một thuật toán có chìa khóa càng dài thì càng có nhiều khả năng chống lại tấn công kiểu brute-force
Brute-force attack (exhaustive key search): phương pháp tấn công bằng cách thử tất cả những
chìa khóa có thể có Đây là phương pháp tấn công thô sơ nhất và cũng khó khăn nhất Theo lý thuyết, tất cả các thuật toán hiện đại đều có thể bị đánh bại bởi brute-force nhưng trong thực tiễn việc này chỉ có thể thực hiện được trong thời gian dài Vì thế có thể coi một thuật toán là an toàn nếu như không còn cách nào khác để tấn công nó dễ hơn là brute-force Ngoài ra để chống lại tấn công này, chìa khóa bị mật được thay đổi một cách thường xuyên hơn
4 Thuật toán mã hóa
a Cổ điển(cái này ngày nay vẫn hay dùng trong trò chơi tìm mật thư)
• Substitution: thay thế – phương pháp mã hóa trong đó từng kí tự (hoặc từng nhóm kí tự) của
văn bản ban đầu được thay thế bằng một (hay một nhóm) kí tự khác Tuy không còn được sử dụng nhưng ý tưởng của phương pháp này vẫn được tiếp tục trong những thuật toán hiện đại
• Transposition: hoán vị – phương pháp mã hóa trong đó các kí tự trong văn bản ban đầu chỉ
thay đổi vị trí cho nhau còn bản thân các kí tự không hề bị biến đổi
b.Hiện đại
b.1 Symmetric cryptography: mã hóa đối xứng, tức là cả hai quá trình mã hóa và giải mã đều
dùng một chìa khóa Để đảm bảo tính an toàn, chìa khóa này phải được giữ bí mật Vì thế các
thuật toán loại này còn có tên gọi khác là secret key cryptography (hay private key
cryptography), tức là thuật toán mã hóa dùng chìa khóa riêng (hay bí mật) Các thuật toán loại
này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với một bên thứ hai
Giả sử nếu Alice chỉ gửi thông điệp đã mã hóa cho Bob mà không hề báo trước về thuật toán sử dụng, Bob sẽ chẳng hiểu Alice muốn nói gì Vì thế bắt buộc Alice phải thông báo cho Bob về chìa khóa và thuật toán sử dụng tại một thời điểm nào đó trước đấy Alice có thể làm điều này một cách trực tiếp (mặt đối mặt) hay gián tiếp (gửi qua email, tin nhắn ) Điều này dẫn tới khả
Trang 4năng bị n
cho Bob
Bob và A
Mã hóa đ
- Block c
thế bằng
tính bằng
khối thôn
Twofish,
- Stream
thuật toán
mã hóa c
toán khối
Chamele
b.2 Asym
với nhau
dùng để g
thể được
công kha
dùng chìa
ElGamal
Quay lại
công kha
khác (thô
mình và g
của mình
Alice và
vậy cho p
mật nào c
người thứ ba
Alice có cùng
đối xứng có
ciphers: thuậ
một khối dữ
g đơn vị bit
ng dụng là: D
, GOST
m ciphers: th
n dòng có tố
chưa được bi
i với kích th
on
mmetric cry
về mặt toán
giải mã (priv
giải mã với
ai (không bí m
a khóa công
l, Diffie Hell
với Alice và
ai của Bob S
ông qua chứn
gửi tới Bob
h để giải mã
Bob trong tr
phép hai ngư
cả
a xem trộm c
Hì
g một khóa thể phân thà
ật toán khối
ữ liệu khác c
Ví dụ thuật DES, 3DES,
huật toán dòn
ốc độ nhanh iết trước, ví d hước mỗi khố
yptography
n học, một ch vate key) M chìa bí mật mật) nên còn
g khai) Một
lman
à Bob, nếu A Sau khi kiểm
ng chỉ điện t Khi Bob nh
nó Nếu giải rường hợp n ười thực hiện
chìa khóa và
ình 2: Thuật
Khó
ành hai nhóm – trong đó t
có cùng độ d toán 3-Way RC5, RC6,
ng – trong đó hơn các thuậ
dụ trong kết
ối là 1 bit M
y: mã hóa bấ
hìa công kha Một thông điệ tương ứng
n có tên gọi
số thuật toán
Alice muốn g
m tra chắc ch
tử – digital c hận được bức
i mã thành c này có thể là
n được giao
có thể giải m
t toán mã hóa
óa này được
m phụ:
từng khối dữ
ài Độ dài m
có kích thướ 3-Way, CA
ó dữ liệu đầu
ật toán khối,
t nối không d Một số thuật t
ất đối xứng,
ai dùng để m
ệp sau khi đư
Do các thuậ
khác là pub
n bất đối xứn
gửi một thôn
ắn chìa khóa certificate), A
c thông điệp công thì bức hai người ch dịch trong k
mã được thô
a đối xứng xây dựng sa
ữ liệu trong v mỗi khối gọi
ớc khối bằng AST, Camelia
u vào được m , được dùng dây Có thể c toán dòng th
, sử dụng mộ
mã hoá (publi ược mã hóa b
ật toán loại n
lic-key crypt
ng thông dụn
ng điệp bí mậ
a đó chính là Alice dùng n
p đã mã hóa a thông điệp đ hưa từng que khi không ch
ông điệp Alic
ao cho
văn bản ban
là block size
g 96 bit Mộ
a, Blowfish,
mã hóa từng khi khối lượ coi thuật toá hông dụng: R
ột cặp chìa k
ic key) và m bởi chìa côn này sử dụng m
tography (th
ng là : RSA,
ật tới Bob, c
à của Bob ch
nó để mã hóa anh ta sẽ dùn
đó đúng là d
en biết Một hia sẻ trước m
ce mã hóa gử
đầu được th
e, thường đư
ột số thuật to MARS, Ser
g bit một Cá ợng dữ liệu c
án dòng là th RC4, A5/1, A
khóa có liên một chìa bí m
ng khai sẽ ch một chìa khó
huật toán mã
, Elliptic Cur
cô ta sẽ tìm c
hứ không của
a thông điệp
ng chìa bí m dành cho Bob
hệ thống nh một thông tin
ửi
hay ược
án rpent,
c cần huật A5/2,
quan mật
hỉ có
óa
ã hóa
rve,
chìa
a ai của mật
b
hư
n bí
Trang 5Trong ví
public
Một tron
thực tế ng
toán đối x
bất đối xứ
khóa bí m
5 Một s
a One-ti
OTP xuấ
là cái ché
thuyết là
brute-for
thỏa mãn
- Độ dài
- Chìa kh
- Chìa kh
Mới nghe
được Gi
độ dài 10
(TRNG
-như sự ph
chìa khóa
dụ trên ta th
người ta k
ng những hạn
gười ta thườ
xứng, chỉ có
ứng Hay nó
mật rồi sau đ
số thuật to
ime Pad (O
ất hiện từ đầu
én thánh của
không thể p
rce) Để có th
n:
của chìa khó
hóa chỉ được
hóa phải là m
e qua có vẻ đ
ả sử Alice m
0MB Để tạo
- True Rando
hân rã hạt nh
a như vậy cũ
Hình hấy khóa pub không thể tìm
n chế của các ờng sử dụng
ó chìa dùng đ
ói một cách k
đó dùng thuậ
oán nổi tiến
TP):
u thế kỉ 20 v
a ngành mã h phá được nga
hể đạt được
óa phải đúng
c dùng một lầ một số ngẫu n đơn giản như muốn mã hóa
o ra một số n
om Number hân hay bức ũng hết sức k
h 3: Thuật to blic và khóa
m ra được kh
c thuật toán một hệ thốn
để thực hiện khác là ngườ
ật toán đối xứ
ng
và còn có tên hóa dữ liệu
ay cả với tài mức độ bảo
g bằng độ dà
ần
nhiên thực
ưng trong th
a chỉ 10MB d ngẫu nhiên lớ Generator)
xạ nền vũ tr khó khăn
oán mã hóa b private phải hóa private
mã hóa bất đ
ng lai tạp tron việc mã hóa
ời ta dùng thu ứng với chìa
n gọi khác là OTP là thuậ nguyên vô t mật của OT
ài văn bản cầ
hực tế những
dữ liệu bằng
ớn như vậy A Các thiết bị
rụ Hơn nữa
bất đối xứng
i đáp ứng
đối xứng là t
ng đó dữ liệu
a này mới đư uật toán bất
a khóa bí mậ
Vernam Cip
ật toán duy n tận (tức là có
TP, tất cả nhữ
ần mã hóa
g điều kiện n
g OTP, cô ta Alice cần mộ
ị này sử dụng việc lưu trữ
g
tốc độ chậm
u được mã h ược mã hóa b đối xứng để
ật trên để truy
pher, OTP đ nhất chứng m
ó thể chống ững điều kiệ
ày khó có th phải cần mộ
ột bộ tạo số n
g nguồn ngẫ
ữ, chuyển gia
và từ
m, do đó trong hóa bởi một t bằng thuật to
ể chia sẻ chìa yền thông tin
ược mệnh d minh được về lại kiểu tấn c
ện sau phải đ
hể thỏa mãn
ột chìa khóa ngẫu nhiên t
ẫu nhiên vật
ao và bảo vệ
khóa
g thuật oán
a
n
anh
ề lý công được
có thực
lý một
Trang 6Dễ dàng hơn, Alice cũng có thể dùng một bộ tạo số ngẫu nhiên ảo (PRNG - Pseudo Random Number Generator) nhưng khi đó mức độ bảo mật giảm xuống gần bằng zero hay cùng lắm chỉ tương đương với một thuật toán dòng như RC4 mà thôi
Do có những khó khăn như vậy nên việc sử dụng OTP trong thực tế là không khả thi
b DES (Data Encryption Standard)
DES là một thuật toán khối với kích thước khối 64 bit và kích thước chìa 56 bit Tiền thân của nó
là Lucifer, một thuật toán do IBM phát triển Cuối năm 1976, DES được chọn làm chuẩn mã hóa
dữ liệu của nước Mỹ, sau đó được sử dụng rộng rãi trên toàn thế giới DES cùng với mã hóa bất đối xứng đã mở ra một thời kì mới cho ngành mã hóa thông tin Trước DES, việc nghiên cứu và
sử dụng mã hóa dữ liệu chỉ giới hạn trong chính phủ và quân đội Từ khi có DES, các sản phẩm
sử dụng nó tràn ngập thị trường Đồng thời, việc nghiên cứu mã hóa thông tin cũng không còn là
bí mật nữa mà đã trở thành một ngành khoa học máy tính bình thường
Trong khoảng 20 năm sau đó, DES đã trải qua nhiều khảo sát, phân tích kỹ lưỡng và được công nhận là an toàn đối với các dạng tấn công (tất nhiên, ngoại trừ brute-force) Dưới đây là hình minh họa 16 bước thực hiện mã hóa DES
Trang 7Hình 4: 16 bước trong quá trình mã hóa bằng DES
c AES (Advance Encryption Standard)
Tháng 12 năm 1997, viện tiêu chuẩn và công nghệ Mỹ (NIST – National Institute of Standard and Technology) kêu gọi phát triển một thuật toán mới thay thế cho 3DES (một biến thể an toàn hơn của DES với chìa khóa dài 112 bit) Thuật toán được chọn phải là thuật toán khối có kích thước khối là 128 bit, hỗ trợ chìa khóa có kích thước 128 bit, 192 bit và 256 bit
15 thuật toán được gửi đến từ nhiều nơi trên thế giới, 5 thuật toán lọt vào vòng hai: Rijndael, Twofish, Serpent, RC6 và MARS Tháng 11 năm 2001, Rijndael đuợc chọn làm AES (một phần nhờ có tốc độ nhanh hơn so với các đối thủ), chính thức thay thế DES trong vai trò chuẩn mã hóa
dữ liệu AES ngay nay được sử dụng rộng rải ví dụ trong 802.11i (xem thêm thông tin ở luồng này)
Trang 8d RSA: là một thuật toán mã hóa bất đối xứng được sử dụng rất rộng rãi trong giao dịch điện tử
Cái tên RSA có nguồn gốc từ ba chữ cái đầu của tên ba người đồng thiết kế ra nó: Ronald Rivest, Adi Shamir và Leonard Adleman
6 Hàm hash
Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra
Ví dụ, từ "Illuminatus" đi qua hàm SHA-1 cho kết quả
E783A3AE2ACDD7DBA5E1FA0269CBC58D Ta chỉ cần đổi "Illuminatus" thành "Illuminati" (chuyển "us" thành "i") kết quả sẽ trở nên hoàn toàn khác (nhưng vẫn có độ dài cố định là 160 bit) A766F44DDEA5CACC3323CE3E7D73AE82
Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của nó được
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau
có cùng một kết quả hash, là cực kì nhỏ
Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay đổi hay không
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất
• Tạo chìa khóa từ mật khẩu
• Tạo chữ kí điện tử
SHA-1 và MD5 là hai hàm hash thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật Vào tháng 8 năm 2004, tại hội nghị Crypto 2004, người ta đã tìm thấy va chạm đối với MD5 và SHA-0, một phiên bản yếu hơn của hàm hash SHA-1 Không bao lâu sau đó, vào
khoảng giữa tháng 2 năm 2005, một nhóm ba nhà mật mã học người Trung Quốc đã phát hiện ra một phương pháp có thể tìm thấy va chạm đối với SHA-1 chỉ trong vòng 269 bước tính toán (tức
là có thể nhanh hơn brute-force vài nghìn lần)
Trang 9Người dùng bình thường cũng không cần phải hoảng sợ trước những phát hiện này bởi vì ít nhất phải một vài năm nữa người ta mới có khả năng mang những kết quả đó vào trong thực tế Tuy vậy, các chuyên gia vẫn khuyên nên bắt đầu chuyển sang các hàm hash an toàn hơn như
SHA-256, SHA-384 hay SHA-512
7 Cách tạo ra khóa public và private trong RSA
Phần này sẽ trình bày sơ qua nguyên lý tạo khóa công khai và bí mật trong cách mã hóa RSA dựa trên lý thuyết các số nguyên tố
Trước tiên xin nhắc lại các đặc tính của mã hóa công khai là (public key crypto):
- Có 2 loại khóa là khóa công khai (public) và khóa bí mật (private) Khóa công khai thì có thể công khai cho mọi người, còn khóa bí mật thì chỉ có người tạo ra nó được biết
- Thông tin được mã hoá bằng khóa công khai thì chỉ có thể giải mã bằng khoá bí mật
- Thông tin được mã hóa bằng khóa bí mật thì chỉ có thể giải mã bằng khóa công khai
Các bước tạo khóa công khai và bí mật
1 Dùng 2 số nguyên tố khác nhau (số nguyên tố lớn), ta gọi là p và q đặt N là tích của chúng N=p*q
2 Tìm bội số chung nhỏ nhất L của (p-1) và (q-1)
3 Tìm số nguyên dương bất kỳ e sao cho e và L là 2 số nguyên tố cùng nhau (ước chung của e
và L = 1)
4 Tìm số nguyên dương d sao cho e*d chia cho L có số dư là 1
Tóm lại là e và L, d và L đều là nguyên tố cùng nhau
Như vậy, ta sẽ được:
Khóa công khai: e, n
Khóa bí mật: d
Đặc điểm: từ e, n để tìm ra d thì cực kỳ khó khăn
ta gọi
Thông tin chưa mã hóa: M
Trang 10Thông tin
Mã hóa:
Giải mã:
mod là p
Ta có thể
từ 0 ->
n-n đã mã hóa
phép chia lấy
ể mã hóa các
-1
: C
y số dư
c thông tin mmang mã nhỏỏ hơn n (0~nn-1) vì khi chhia cho n, sẽ nhận được ssố dư