Tải bản đầy đủ (.doc) (34 trang)

báo cáo luận văn các thuật mã hóa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (414.16 KB, 34 trang )

LỜI NÓI ĐẦU
Như các bạn đã biết ngay từ xa xưa con người chúng ta đã biết truyền thông
.Trong một thời đại không có điện thoại cũng chẳng có thư điện tử , bất kỳ ai
muốn truyền thông tin riêng của mình đến một người nào khác ở nơi xa chỉ có
một cách là viết nó lên mặt giấy rồi giao phó cho một người mang thư đi .Nếu
chẳng may người mang thư đó ngờ là trong thư có những thông tin quý giá ,anh
ta có thể bán đứng cho kẻ thù để kiếm được nhiều tiền hơn là đưa nó đến đúng
địa chỉ .Nhiều bộ óc trong lịch sử đã phát minh ra các phương pháp sử dụng mật
mã để giải quyết những thách thức trong việc bảo vệ dữ liệu . Jujius Caesar phát
minh ra cách viết mật mã được gọi là hộp Caesar ; Mary , Nữ hoàng Scotland đã
tạo ra mật mã thay thế và gởi đi những thông báo bí mật từ nhà tù ; nhà khoa
học xuất sắc người Arập Abu Yusuf Ismail al-Kindi đã bảo vệ được những bí
mật của mình bằng một mật mã thay thế tài tình sử dụng nhiều chữ cái khác
nhau …
Ngày nay , khi khoa học phát triển , mật mã cũng được sử dụng trong những hệ
thống cần độ bảo mật cao như : Ngân hàng , bưu chính ,…. Những thuật toán mã
hóa được phát triển ngày nhiều và có độ bảo mật cao hơn.
Giới thiệu
Mã hóa với mục đích làm cho dữ liệu không thể đọc được bởi bất cứ ai,
ngoại trừ những ai được cho chép đọc. Mã hóa sử dụng thuật toán và khóa để
biến đổi dữ liệu từ hình thức đơn giản rõ ràng (plain hay cleartext), làm biến dữ
liệu sang hình tức mật mã vô nghĩa (code hay ciphertext). Chỉ có những ai có
thông tin giải mã thì mới giải mã được và đọc được dữ liệu.
I. Một số khái niệm :
1) Khái niệm về mã hóa
1.1.Khái niệm:
Cryptography , được dịch là "mật mã học", là một ngành 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
Cryptography (hay crypto) - mật mã học – ngành khoa học nghiên cứu về
việc giấu thông tin. Cụ thể hơn, mật mã học là ngành học nghiên cứu về những


cách chuyển đổi thông tin từ dạng "có thể hiểu được" thành dạng "không thể hiểu
được" và ngược lại.
1.2.Đặc điểm:
Cryptography giúp đảm bảo những tính chất sau cho thông tin:
 Tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai
được phép.
 Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không bị
phát hiện .
 Tính xác thực (authentication): người gửi (hoặc người nhận) có thể
chứng minh đúng họ.
 Tính không chối bỏ (non-repudiation): người gửi hoặc nhận sau này
không thể chối bỏ việc đã gửi hoặc nhận thông tin.
Mật mã có rất nhiều ứng dụng trong thực tế như bảo vệ giao dịch tài chính
(rút tiền ngân hàng, mua bán qua mạng), bảo vệ bí mật cá nhân Nếu kẻ tấn công
đã vượt qua tường lửa và các hệ thống bảo vệ khác thì mật mã chính là hàng
phòng thủ cuối cùng cho dữ liệu của bạn.
Cần phân biệt khái niệm cryptography với khái niệm steganography (tạm
dịch là giấu thông tin). Điểm khác nhau căn bản nhất giữa hai khái niệm này là:
cryptography là việc giấu nội dung của thông tin, trong khi steganography là việc
giấu sự tồn tại của thông tin đó.
1.3.Các thuật ngữ cần biết khi nghiên cứu mã hóa thông tin:
 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 hay đơn giản là một thuật toán như DES.
 Encrypt (encipher): mã hóa – 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): giải mã – 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.
 Plaintext (cleartext): dữ liệu gốc (chưa được mã hóa).

 Ciphertext: dữ liệu đã được mã hóa.
Lưu ý: Từ text (hay message) ở đây được dùng theo quy ước, được hiểu là
tất cả những dữ liệu được mã hóa (hay giải mã) chứ không chỉ là văn bản
chữ như nghĩa thông thường. Khi dịch ra tiếng Việt, từ "văn bản" và từ
"thông điệp" cũng tuân theo quy ước tương tự.
 Cipher (hay cypher): thuật toán dùng để thực hiện quá trình mã hóa hay
giải mã. Trong bài này gọi tắt là thuật toán
 Key: chìa khóa – thông tin dùng cho qui trình mã hóa và giải mã.
 Code: cần phân biệt code trong mật mã học với code trong lập trình hay
code trong Zip code Trong cryptography, code (mã) có ý nghĩa gần như là
cipher (thuật toán). Chúng chỉ khác nhau ở chỗ: code biến đổi thông tin ở
tầng nghĩa (từ, cụm từ) còn cipher biến đổi thông tin ở tầng thấp hơn, ví dụ
chữ cái (hoặc cụm chữ cái) đối với các thuật toán cổ điển hay từng bit (hoặc
nhóm bit) đối với các thuật toán hiện đại.
 Cryptanalysis: nếu coi mật mã học là việc cất dữ liệu của bạn vào một cái
hộp sau đó dùng chìa khóa khóa lại, thì cryptanalysis là ngành nghiên cứu
những phương pháp mở hộp để xem dữ liệu khi không có chìa khóa.
2) Khái niệm về chìa khóa :
2.1. Password: mật khẩu, là một hay nhiều từ mà người dùng phải biết để được
cấp quyền truy cập.
Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ an toàn
để được dùng trực tiếp trong thuật toán. Vì vậy, trong bất cứ hệ thống mã hóa dữ
liệu nghiêm túc nào cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa
khóa có độ an toàn thích hợp. Bước tạo chìa khóa này thường được gọi là key
derivation, key stretching hay key initialization .
2.2. Key Derivation Function: là một hàm hash đượ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).
2.3. 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.
II. THUẬT TOÁN MÃ HÓA
Ở đây ta dùng hai đối tượng Alice và Bod để mô tả cho các đối tượng gởi và nhận
1) Cổ điển :
1.1. 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.
1.2 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.
2) Hiện đại :
2.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.
Ví dụ:
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ả năng bị người thứ
ba xem trộm chìa khóa và có thể giải mã được thông điệp Alice mã hóa gửi cho
Bob.
Mã hóa đối xứng có thể phân thành hai nhóm phụ:
- Block ciphers: thuật toán khối – trong đó từng khối dữ liệu trong văn bản ban
đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Độ dài mỗi khối gọi
là block size, thường được tính bằng đơn vị bit. Ví dụ thuật toán 3-Way có kích
thước khối bằng 96 bit.
Ví dụ: 3DES, RC5, RC6, 3-Way, CAST, Camelia, Blowfish, MARS, Serpent,
Twofish, GOST
- Stream ciphers: thuật toán dòng – trong đó dữ liệu đầu vào được mã hóa từng bit
một. Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được dùng khi
khối lượng dữ liệu cần mã hóa chưa được biết trước ( ví dụ trong kết nối không
dây). Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi khối là 1
bit.
Ví dụ: RC4, A5/1, A5/2, Chameleon
2.2. Asymmetric cryptography:
Mã hóa bất đối xứng, sử dụng một cặp chìa khóa có liên quan với nhau về
mặt toán học, một chìa công khai dùng để mã hoá (public key) và một chìa bí mật
dùng để giải mã (private key). Một thông điệp sau khi được mã hóa bởi chìa công
khai sẽ chỉ có thể được giải mã với chìa bí mật tương ứng. Do các thuật toán loại
này sử dụng một chìa khóa công khai (không bí mật) nên còn có tên gọi khác là
public-key cryptography (thuật toán mã hóa dùng chìa khóa công khai).
Quay lại với Alice và Bob, nếu Alice muốn gửi một thông điệp bí mật tới
Bob, cô ta sẽ tìm chìa công khai của Bob. Sau khi kiểm tra chắc chắn chìa khóa đó
chính là của Bob chứ không của ai khác (thông qua chứng chỉ điện tử – digital
certificate), Alice dùng nó để mã hóa thông điệp của mình và gửi tới Bob. Khi
Bob nhận được bức thông điệp đã mã hóa anh ta sẽ dùng chìa bí mật của mình để

giải mã nó. Nếu giải mã thành công thì bức thông điệp đó đúng là dành cho Bob.
Alice và Bob trong trường hợp này có thể là hai người chưa từng quen biết. Một
hệ thống như vậy cho phép hai người thực hiện được giao dịch trong khi không
chia sẻ trước một thông tin bí mật nào cả.
Một trong những hạn chế của các thuật toán mã hóa bất đối xứng là tốc độ
chậm, do đó trong thực tế người ta thường sử dụng một hệ thống lai tạp trong đó
dữ liệu được mã hóa bởi một thuật toán đối xứng, chỉ có chìa dùng để thực hiện
việc mã hóa này mới được mã hóa bằng thuật toán bất đối xứng.
3) So sánh đối xứng và bất đối xứng:
Mã hóa đối xứng
Khóa:
Mã hóa bất đối xứng
Giải mã và mã hóa với cùng một chìa
hoặc có quan hệ rõ ràng với nhau (có
thể suy ra một chìa nếu biết chìa còn
lại)
Mã hóa bằng một chìa công khai
(Public key), giải mã bằng chìa bí
mật (Private key)
Tốc độ:
Các thuật toán đối xứng nói chung
đòi hỏi công suất tính toán ít hơn các
thuật toán khóa bất đối xứng
(asymmetric key algorithms).
Một thuật toán khóa bất đối xứng có
khối lượng tính toán nhiều hơn gấp
hằng trăm, hằng ngàn lần một thuật
toán khóa đối xứng có độ an toàn
tương đương.
An toàn:

Cả hai thuật toán đều đảm bảo an toàn dữ liệu. Tuy nhiên khi cần truyền dữ
liệu trên diện rộng ( qua mạng internet) thì thuật toán mã hóa bất đối xứng khó bị
lộ chìa khóa hơn. Tuy nhiên khi mã hóa thông tin người ta thường sử dụng phương
pháp lai tạp, nghĩa là kết hợp giữa đối xứng và bất đối xứng ( dùng đối xứng để
mã hóa dữ liệu và dùng bất đối xứng để mã hóa key của phép đối xứng và gởi kèm
theo dữ liệu)
4) Hàm hash :
Hashing là một phương thức mật mã nhưng nó không phải là một thuật toán
mã hoá .Đúng như vậy, hashing chỉ sử dụng một chứng chỉ số duy nhất được biết
đến với tên như “hash value – giá trị hash”, “hash – băm”, Message
Authentication Code (MAC), fingerprint – vân tay, hay một đoạn message.
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.
Dữ liệu đầu vào của bạn có thể là một file, một ổ đĩa một quá trình truyền
thông tin trên mạng, hay một bức thư điện tử. Thông số hash value được sử dụng
để phát hiện khi có sự thay đổi của dữ liệu đầu vào. Nói cách khác, hashing sử
dụng nó để phát hiện ra dữ liệu có toàn vẹn trong quá trình lưu trữ hay trong khi
truyền hay không.
Không như các phương thức mật mã khác (chúng sẽ làm thay đổi dữ liệu thành
một dạng mật mã), quá trình hashing chỉ tính toán và đưa ra thông số hash value
của dữ liệu và không thay đổi dữ liệu ban đầu.
Hai tính chất quan trọng của hàm này là:
o 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.

o 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.
Ví dụ: thông số hash value được tính toán để so sánh với thông số hash value
được tạo ra trước đó một tuần. Nếu hai thông số giống nhau thì dữ liệu chưa có
sự thay đổi. Nếu hai thông số có sự khác nhau, thì dữ liệu đã bị thay đổi. Trong
hình dưới đây thể hiện cơ bản về hash hay thông số MAC.
Thông số MAC value được tính toán bởi người gửi (sender) và người nhận
(receive) với cùng một thuật toán.

• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
Thuật toán hashing thường được sử dụng:
 Secure Hash Algorithm (SHA-1) với – 160-bit hash value
 Message Digest 5 (MD5) với —128-bit hash value
 Message Digest 4 (MD4) với —128-bit hash value
 Message Digest 2 (MD2) với —128-bit hash value
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).

Ngườ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.
III. MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG HỆ THỐNG THÔNG TIN
MÃ HÓA
Bất cứ ai cũng có thể tạo ra một hệ thống thông tin mã hóa cho riêng mình.
Nhưng để có một hệ thống an toàn và hiệu quả đòi hỏi người thiết kế phải có
kiến thức toán học sâu sắc, có kinh nghiệm về bảo mật và am hiểu các phương
pháp tấn công.
1) 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 hàng triệu, thậm chí hàng tỉ năm. 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.
Ví dụ: Thuật toán DES có độ dài chìa khóa là 56 bit . Nếu ai đó muốn "bẻ
khoá” DES bằng cách thử hàng loạt chìa (brute-force attack) thì sẽ phải thử
khoảng hơn 70 triệu tỉ lần .
2) Frequency analysis: thống kê tần suất, chỉ có thể áp dụng được đối với
các thuật toán cổ điển dùng phương pháp thay thế, ví dụ phương pháp Caesar.
Để thực hiện phương pháp này ta cần một lượng văn bản đã mã hóa đủ lớn để
phép thống kê được chính xác. Ngoài ra còn phải biết ngôn ngữ sử dụng trong
văn bản ban đầu, nếu văn bản ban đầu là tiếng Anh thì nhiều khả năng kí tự xuất
hiện nhiều nhất trong văn bản đã mã hóa là do chữ e mã hóa thành, kí tự nhiều
thứ nhì bắt nguồn từ chữ a
3) Differential cryptanalysis: Eli Biham và Adi Shamir tìm ra phương
pháp này vào khoảng cuối những năm 1980; nó thường được sử dụng để tấn

công các thuật toán khối (block cipher - sẽ nói rõ hơn ở phần sau). Phương pháp
này dựa trên việc phân tích những biến đổi của hai văn bản gốc có liên quan khi
được mã hóa bởi cùng một chìa.
Còn rất nhiều phương pháp khác như Mod-n cryptanalysis, Linear
cryptanalysis, Birthday attack, Algebraic attack mà bất cứ ai thiết kế hệ thống
mã hóa cũng phải chú ý tới.
IV. MỘT SỐ THUẬT TOÁN NỔI TIẾNG :
1) One-time Pad (OTP):
Xuất hiện từ đầu thế kỉ 20 và còn có tên gọi khác là Vernam Cipher, OTP được
mệnh danh là cái chén thánh của ngành mã hóa dữ liệu. OTP là thuật toán duy
nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tài nguyên
vô tận (tức là có thể chống lại kiểu tấn công brute-force). Để có thể đạt được mức
độ bảo mật của OTP, tất cả những điều kiện sau phải được thỏa mãn:
- Độ dài của chìa khóa phải đúng bằng độ dài văn bản cần mã hóa.
- Chìa khóa chỉ được dùng một lần.
- Chìa khóa phải là một số ngẫu nhiên thực.
Mới nghe qua có vẻ đơn giản nhưng trong thực tế những điều kiện này khó
có thể thỏa mãn được. Giả sử Alice muốn mã hóa chỉ 10MB dữ liệu bằng OTP, cô
ta phải cần một chìa khóa có độ dài 10MB. Để tạo ra một số ngẫu nhiên lớn như
vậy Alice cần một bộ tạo số ngẫu nhiên thực (TRNG - True Random Number
Generator). Các thiết bị này sử dụng nguồn ngẫu nhiên vật lý như sự phân rã hạt
nhân hay bức xạ nền vũ trụ. Hơn nữa việc lưu trữ, chuyển giao và bảo vệ một chìa
khóa như vậy cũng hết sức khó khăn.
Dễ 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.
2) DES :

DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa
Dữ liệu) là một phương pháp mật mã hóa được FIPS (Tiêu chuẩn Xử lý Thông tin
Liên bang Hoa Kỳ) chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này
được sử dụng rộng rãi trên phạm vi thế giới. Ngay từ đầu, thuật toán của nó đã gây
ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa
tương đối ngắn, và các nghi ngờ về cửa sau để Cơ quan An ninh quốc gia Hoa Kỳ
(NSA) có thể bẻ khóa. Do đó, DES đã được giới nghiên cứu xem xét rất kỹ lưỡng,
việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher) và các
phương pháp thám mã tương ứng.
Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng. Nguyên
nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong
vòng chưa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu
về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi
trong thực tiễn. Thuật toán được tin tưởng là an toàn trong thực tiễn có dạng Triple
DES (thực hiện DES ba lần), mặc dù trên lý thuyết phương pháp này vẫn có thể bị
phá. Gần đây DES đã được thay thế bằng AES (Advanced Encryption Standard,
hay Tiêu chuẩn Mã hóa Tiên tiến).
Trong một số tài liệu, người ta phân biệt giữa DES (là một tiêu chuẩn) và
thuật toán DEA (Data Encryption Algorithm, hay Thuật toán Mã hóa Dữ liệu) -
thuật toán dùng trong chuẩn DES.
a) Lịch sử phát triển :
Khởi nguyên của thuật toán đã có từ đầu thập niên 1970. Vào năm 1972,
sau khi tiến hành nghiên cứu về nhu cầu an toàn máy tính của chính phủ Hoa Kỳ,
Cục Tiêu chuẩn Liên bang Hoa Kỳ (National Bureau of Standard - NBS), hiện
nay đã đổi tên thành Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (National
Institute of Standards and Technology - NIST), đã nhận ra nhu cầu về một tiêu
chuẩn của chính phủ dùng để mật mã hóa các thông tin mật/nhạy cảm. Vào ngày
15 tháng 5 năm 1973, sau khi tham khảo với NSA, NBS đưa ra kêu gọi thiết kế
một thuật toán mã hóa có thể đáp ứng được các tiêu chuẩn nghiêm ngặt. Tuy nhiên
không có đề xuất nào đáp ứng được yêu cầu đề ra. Ngày 27 tháng 8 năm 1974,

NBS đưa ra kêu gọi lần thứ hai. Lần này công ty IBM đã đưa ra một đề xuất có thể
chấp nhận được. Đề xuất này được phát triển trong những năm 1973-1974 dựa
trên một thuật toán đã có từ trước - thuật toán mật mã Lucifer của Horst Feistel.
Đội ngũ tại công ty IBM liên quan tới quá trình thiết kế bao gồm: Feistel, Walter
Tuchman, Don Coppersmith, Alan Konheim, Carl Meyer, Mike Matyas, Roy
Adler, Edna Grossman, Bill Notz, Lynn Smith và Bryant Tuckerman.
 Sự tham gia của Cơ quan An ninh quốc gia Hoa Kỳ trong quá trình thiết kế:
Ngày 17 tháng 3 năm 1975, đề xuất về DES được công bố trên công báo
liên bang Hoa kỳ (Federal Register) để công chúng tham gia ý kiến. Trong năm
tiếp theo, hai hội thảo mở rộng được tổ chức để xem xét đề xuất này. Đã có rất
nhiều ý kiến chỉ trích được nêu ra, trong đó bao gồm ý kiến của các nhà khoa học
tiên phong về mật mã khóa công khai (public-key cryptography) là Martin
Hellman và Whitfield Diffie về các vấn đề như độ dài khóa và thành phần của
thuật toán không được công khai: S-box. Điều sau được xem như là sự can thiệp
(không hợp lý) của NSA làm giảm độ an toàn của thuật toán và cho phép NSA (và
không ai khác) có thể dễ dàng đọc được thông tin đã được mã hóa. Alan Konheim,
một trong những thành viên thiết kế DES, nói rằng: "Chúng tôi đã gửi thiết kế của
S-box tới Washington. Khi trở lại thì mọi thứ đã được thay đổi." Trong một báo
cáo mật của ủy ban của Thượng viện Hoa Kỳ được cử để điều tra những sửa đổi
của NSA công bố năm 1978 đã viết:
"Trong quá trình phát triển DES, NSA thuyết phục IBM rằng độ dài (56 bit)
của khóa là đủ an toàn; gián tiếp hỗ trợ sự phát triển cấu trúc của S-box; và chứng
nhận rằng thuật toán DES không có điểm yếu về mặt thống kê và toán học."
Tuy nhiên, báo cáo cũng viết:
"NSA không can thiệp vào quá trình thiết kế thuật toán dưới bất kỳ hình
thức nào. IBM đã phát minh và thiết kế ra thuật toán, đưa ra các quyết định, và cho
rằng độ dài của khóa là nhiều hơn cần thiết cho các ứng dụng thương mại (mục
tiêu của DES)."
Một thành viên khác tham gia phát triển DES là Walter Tuchman được cho
là đã phát biểu: "Chúng tôi phát triển DES hoàn toàn bên trong IBM và chỉ sử

dụng các nhân viên của IBM. NSA đã không ép buộc bất kỳ điều gì!"
Những nghi ngờ về điểm yếu được giấu của S-box được giảm bớt trong
thập niên 1990 khi Eli Biham và Adi Shamir công bố những nghiên cứu độc lập
về thám mã vi sai (differential cryptanalysis, một trong những phương pháp phổ
biến để thám mã các dạng mật mã khối). S-box trong cấu trúc của DES có khả
năng chống lại dạng tấn công này hiệu quả hơn so với khi nó được chọn một cách
ngẫu nhiên. Điều này có thể là do IBM đã biết về dạng tấn công này từ thập niên
1970. Khả năng này một lần nữa được chứng tỏ vào năm 1994 khi Don
Coppersmith công bố những tiêu chuẩn ban đầu của việc thiết kế S-box. Sau khi
đảm bảo DES có khả năng chống lại đã được kỹ thuật thám mã vi sai, IBM đã giữ
bí mật về nó theo yêu cầu của NSA. Coppersmith cũng giải thích thêm: "Nguyên
nhân là vì thám mã vi sai là một kỹ thuật rất hiệu quả và công bố thông tin về nó
điều này có thể gây nguy hại cho an ninh quốc gia." Ngay cả Shamir cũng nhìn
nhận rằng: "Tôi có thể nói rằng, trái với suy nghĩ của nhiều người, không có bằng
chứng về sự can thiệp vào thiết kế làm giảm độ an toàn của DES."
Lý do mà NSA đưa ra để giải thích về việc giảm độ dài khóa từ 64 bit
xuống 56 bit là để dành 8 bit cho việc kiểm tra lỗi (parity checking). Những ý kiến
chỉ trích cho rằng đây chỉ là nguyên cớ chứ không phải là nguyên nhân thực sự.
Nhiều người tin rằng quyết định giảm độ dài khóa xuống 56 bit là để NSA có thể
thực hiện thám mã bằng phương pháp duyệt toàn bộ (brute force attack) trước vài
năm so với phần còn lại của thế giới.
 DES với vai trò là một tiêu chuẩn :
Bất chấp những chỉ trích, DES được chọn làm tiêu chuẩn liên bang (Hoa
kỳ) vào tháng 11 năm 1976 và được công bố tại tài liệu có tên là FIPS PUB 46 vào
ngày 15 tháng 1 năm 1977 cho phép sử dụng chính thức đối với thông tin không
mật. DES tiếp tục được khẳng định là tiêu chuẩn vào các năm 1983, 1988 (với tên
FIPS-46-1), 1993 (FIPS-46-2) và 1998 (FIPS-46-3). Lần cuối cùng quy định dùng
"Triple DES" (xem thêm ở phần sau). Ngày 26 tháng 5 năm 2002, DES được thay
thế bằng AES sau một cuộc thi rộng rãi (xem thêm Quá trình AES). Tuy nhiên, tại
thời điểm năm 2004, DES vẫn còn được sử dụng khá phổ biến.

Năm 1994, thêm một phương pháp tấn công khác (trên lý thuyết) được
công bố là thám mã tuyến tính. Tuy nhiên thời điểm nhu cầu thay thế DES trở nên
thực sự cấp thiết là vào năm 1998 khi một cuộc tấn công kiểu duyệt toàn bộ chứng
tỏ rằng DES có thể bị phá vỡ trên thực tế. Các phương pháp thám mã này sẽ được
miêu tả kỹ hơn ở phần sau.
Sự xuất hiện của DES đã tạo nên một làn sóng nghiên cứu trong giới khoa
học về lĩnh vực mật mã học, đặc biệt là các phương pháp thám mã mã khối. Về
điều này, Bruce Schneier viết:
"NSA coi DES là một trong những sai lầm lớn nhất. Nếu họ biết trước rằng
chi tiết của thuật toán sẽ được công bố để mọi người có thể viết chương
trình phần mềm, họ sẽ không bao giờ đồng ý. DES đã tạo nên nguồn cảm
hứng nghiên cứu trong lĩnh vực thám mã hơn bất kỳ điều gì khác: Giới
khoa học đã có một thuật toán để nghiên cứu - thuật toán mà NSA khẳng
định là an toàn."
 Quá trình :
15/5/1973: NBS đưa ra lời kêu gọi đầu tiên về một thuật toán mã hóa tiêu chuẩn
27/8/1974: NBS đưa ra lời kêu gọi thứ hai
17/3/1975: DES công bố trên báo liên bang Hoa Kỳ để công chúng góp ý kiến
8/1976: Hội thảo lần đầu tiên về DES
9/1976: Hội thảo lần hai ,bàn về nề tảng toán học của DES
11/1976: DES được phê chuẩn làm tiêu chuẩn chính thức
15/1/1977: DES xác nhận làm tiêu chuẩn của FIPS(FIPS PUB 46)
1983 : DES được công bố lại lần đầu .
1986 : HBO phát sóng chương trình Videocipher II , một kênh TV mã hóa
dựa trên DES
22/1/1988: DES được xác nhận lần hai với tên FIPS 46-1, thay thế FIPS PUB 46
1992: Biham và Shamir công bố kiểu tấn công thám mã vi sai (trên lý
thuyết) với độ phức tạp thấp hơn tấn công duyệt toàn bộ. Tuy nhiên,
kiểu tấn công này đòi hỏi người tấn công lựa chọn 2
47

văn bản rõ (một
điều kiện không thực tế)
30/12/1993: DES được xác nhận lần ba với tên FIPS 46-2.
1994 : Thực nghiệm thám mã DES lần đầu tiên được thực hiện với kỹ thuật
thám mã tuyến tính
6/1997: Dự án DESCHALL đã phá vỡ được một bản tin mã hóa bằng DES
(lần đầu tiên trước công chúng).
7/1998 : Thiết bị thám mã Deep Crack của tổ chức Electronic Frontier
Foundation phá được một khóa của DES trong vòng 56 giờ.
1/1999 : Deep Crack cùng với distributed.net phá được một khóa của DES
trong vòng 22 giờ và 15 phút.
25/10/1999: DES được xác nhận lần thứ tư với tên FIPS 46-3. Lần này phương
pháp Triple DES được khuyến cáo sử dụng còn DES chỉ được dùng
cho các hệ thống ít quan trọng.
26/11/2001: AES được công bố trong FIPS 197
26/5/2002: AES trở thành tiêu chuẩn
26/7/2004: Việc bãi bỏ FIPS 46-3 (cùng với một số tiêu chuẩn liên quan khác)
được đăng trên công báo liên bang Hoa kỳ
19/5/2005: NIST bãi bỏ FIPS 46-3
 Quá trình thay thế DES :
Từ cuối thập niên 1980, đầu thập niên 1990, xuất phát từ những lo ngại về
độ an toàn và tốc độ thấp khi áp dụng bằng phần mềm, giới nghiên cứu đã đề xuất
khá nhiều thuật toán mã hóa khối để thay thế DES. Những ví dụ tiêu biểu bao
gồm: RC5, Blowfish, IDEA (International Data Encryption Algorithm, hay Thuật
toán mã hóa dữ liệu quốc tế), NewDES, SAFER, CAST5 và FEAL. Hầu hết
những thuật toán này có thể sử dụng từ khóa 64 bit của DES mặc dù chúng thường
được thiết kế hoạt động với từ khóa 64 bit hay 128 bit.
Ngay bản thân DES cũng có thể được sử dụng một cách an toàn hơn.
Những người sử dụng DES trước đây có thể dùng Triple DES (hay TDES). Đây là
phương pháp được một trong những người phát minh ra DES miêu tả và kiểm tra .

Triple DES sử dụng DES ba lần cho một văn bản với những khóa khác nhau. Hiện
nay Triple DES được xem là an toàn mặc dù tốc độ thực hiện khá chậm. Một
phương pháp khác ít đòi hỏi khả năng tính toán hơn là DES-X với việc tăng độ dài
từ khóa bằng cách thực hiện phép XOR từ khóa với phần thêm trước và sau khi
thực hiện DES. Một phương pháp nữa là GDES được đề xuất làm tăng tốc độ mã
hóa nhưng nó được chứng tỏ là không an toàn trước tấn công vi sai (differential
cryptanalysis).
Năm 2001, sau một cuộc thi quốc tế, NIST đã chọn ra một thuật toán mới,
AES, để thay thế cho DES. Tác giả của thuật toán được biết dưới tên là Rijndael.
Những thuật toán khác có tên trong danh sách cuối cùng của cuộc thi AES bao
gồm: RC6, Serpent, MARS và Twofish.
b) Mô tả thuật toán :
Hình 1 – Cấu trúc thuật toán Feistel dùng trong DES
DES là thuật toán mã hóa khối: nó xử lý từng khối thông tin của bản rõ có
độ dài xác định và biến đổi theo những quá trình phức tạp để trở thành khối thông
tin của bản mã có độ dài không thay đổi. Trong trường hợp của DES, độ dài mỗi
khối là 64 bit. DES cũng sử dụng khóa để cá biệt hóa quá trình chuyển đổi. Nhờ
vậy, chỉ khi biết khóa mới có thể giải mã được văn bản mã. Khóa dùng trong DES
có độ dài toàn bộ là 64 bit. Tuy nhiên chỉ có 56 bit thực sự được sử dụng; 8 bit còn
lại chỉ dùng cho việc kiểm tra. Vì thế, độ dài thực tế của khóa chỉ là 56 bit.
Giống như các thuật toán mã hóa khối khác, khi áp dụng cho các văn bản
dài hơn 64 bit, DES phải được dùng theo một phương pháp nào đó. Trong tài liệu
FIPS-81 đã chỉ ra một số phương pháp, trong đó có một phương pháp dùng cho
quá trình nhận thực. Một số thông tin thêm về những cách sử dụng DES được
miêu tả trong tài liệu FIPS-74 .
 Tổng thể :
Cấu trúc tổng thể của thuật toán được thể hiện ở Hình 1: có 16 chu trình giống
nhau trong quá trình xử lý. Ngoài ra còn có hai lần hoán vị đầu và cuối (Initial and
final permutation - IP & EP). Hai quá trình này có tính chất đối nhau (Trong quá
trình mã hóa thì IP trước EP, khi giải mã thì ngược lại). IP và EP không có vai trò

xét về mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp ứng cho quá trình đưa
thông tin vào và lấy thông tin ra từ các khối phần cứng có từ thập niên 1970.
Trước khi đi vào 16 chu trình chính, khối thông tin 64 bit được tách làm hai phần
32 bit và mỗi phần sẽ được xử lý tuần tự (quá trình này còn được gọi là mạng
Feistel).
Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã
diễn ra tương tự. Điểm khác nhau chỉ ở chỗ các khóa con được sử dụng theo trình
tự ngược nhau. Điều này giúp cho việc thực hiện thuật toán trở nên đơn giản, đặc
biệt là khi thực hiện bằng phần cứng.
Ký hiệu sau: thể hiện phép toán XOR. Hàm F làm biến đổi một nửa của
khối đang xử lý với một khóa con. Đầu ra sau hàm F được kết hợp với nửa còn lại
của khối và hai phần được tráo đổi để xử lý trong chu trình kế tiếp. Sau chu trình
cuối cùng thì 2 nửa không bị tráo đổi; đây là đặc điểm của cấu trúc Feistel khiến
cho quá trình mã hóa và giải mã trở nên giống nhau.
 Hàm Feistel (F) :
Hàm F, như được miêu tả ở Hình 2, hoạt động trên khối 32 bit và bao gồm bốn
giai đoạn:
Hình 2 – Hàm F (F-function) dùng trong DES
Mở rộng: 32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán
hoán vị mở rộng (expansion permutation) với việc nhân đôi một số bit. Giai
đoạn này được ký hiệu là E trong sơ đồ.
Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con.
Mười sáu khóa con 48 bit được tạo ra từ khóa chính 56 bit theo một chu
trình tạo khóa con (key schedule) miêu tả ở phần sau.
Thay thế: 48 bit sau khi trộn được chia làm 8 khối con 6 bit và được xử lý
qua hộp thay thế S-box. Đầu ra của mỗi khối 6 bit là một khối 4 bit theo
một chuyển đổi phi tuyến được thực hiện bẳng một bảng tra. Khối S-box
đảm bảo phần quan trọng cho độ an toàn của DES. Nếu không có S-box thì
quá trình sẽ là tuyến tính và việc thám mã sẽ rất đơn giản.
Hoán vị: Cuối cùng, 32 bit thu được sau S-box sẽ được sắp xếp lại theo một

thứ tự cho trước (còn gọi là P-box).
Quá trình luân phiên sử dụng S-box và sự hoán vị các bít cũng như quá
trình mở rộng đã thực hiện được tính chất gọi là sự xáo trộn và khuyếch tán
(confusion and diffusion). Đây là yêu cầu cần có của một thuật toán mã hoá được
Claude Shannon phát hiện trong những năm 1940.
 Quá trình tạo khóa con :
Hình 3 – Quá trình tạo khóa con trong DES
Hình 3 mô tả thuật toán tạo khóa con cho các chu trình. Đầu tiên, từ 64 bit
ban đầu của khóa, 56 bit được chọn (Permuted Choice 1, hay PC-1); 8 bit còn lại
bị loại bỏ. 56 bit thu được được chia làm hai phần bằng nhau, mỗi phần được xử lý
độc lập. Sau mỗi chu trình, mỗi phần được dịch đi 1 hoặc 2 bit (tùy thuộc từng chu
trình). Các khóa con 48 bit được tạo thành bởi thuật toán lựa chọn 2 (Permuted
Choice 2, hay PC-2) gồm 24 bit từ mỗi phần. Quá trình dịch bit (được ký hiệu là
"<<<" trong sơ đồ) khiến cho các khóa con sử dụng các bit khác nhau của khóa
chính; mỗi bit được sử dụng trung bình ở 14 trong tổng số 16 khóa con.
Quá trình tạo khóa con khi thực hiện giải mã cũng diễn ra tương tự nhưng
các khóa con được tạo theo thứ tự ngược lại. Ngoài ra sau mỗi chu trình, khóa sẽ
được dịch phải thay vì dịch trái như khi mã hóa
c) An toàn và sự giải mã :
Mặc dù đã có nhiều nghiên cứu về phá mã DES hơn bất kỳ phương pháp
mã hóa khối nào khác nhưng phương pháp phá mã thực tế nhất hiện nay vẫn là tấn
công kiểu duyệt toàn bộ. Nhiều đặc tính mật mã hóa của DES đã được xác định và
từ đó ba phương pháp phá mã khác được xác định với mức độ phức tạp nhỏ hơn
tấn công duyệt toàn bộ. Tuy nhiên các phương pháp này đòi hỏi một số lượng bản
rõ quá lớn (để tấn công lựa chọn bản rõ) nên hầu như không thể thực hiện được
trong thực tế.
 Tấn công kiểu duyệt toàn bộ :
Đối với bất cứ phương pháp mã hóa nào, kiểu tấn công cơ bản và đơn giản
nhất là tấn công kiểu duyệt toàn bộ: thử lần lượt tất cả các khóa có thể cho đến khi
tìm ra khóa đúng. Độ dài của khóa sẽ xác định số lượng phép thử tối đa cần thực

hiện và do đó thể hiện tính khả thi của phương pháp. Trong trường hợp của DES,
nghi ngờ về độ an toàn của nó đã được đặt ra ngay từ khi nó chưa trở thành tiêu
chuẩn. Người ta cho rằng chính NSA đã ủng hộ (nếu không muốn nói là thuyết
phục) IBM giảm độ dài khóa từ 128 bit xuống 64 bit và tiếp tục xuống 56 bit. Điều
này dẫn đến suy đoán rằng NSA đã có hệ thống tính toán đủ mạnh để phá vỡ khóa
56 bit ngay từ những năm 1970.
Hệ thống phá mã DES của Hiệp hội EFF được xây dựng với ngân sách
250000 đô la Mỹ. Hệ thống bao gồm 1536 bộ vi xử lý thiết kế riêng và có khả
năng tấn công kiểu duyệt toàn bộ khóa DES trong vòng vài ngày. Hình ảnh thể
hiện một phần bảng mạch của hệ thống chứa một vài bộ vi xử lý.
Trong giới nghiên cứu, nhiều đề xuất về các hệ thống phá mã DES được đề
ra. Năm 1977, Diffie và Hellman dự thảo một hệ thống có giá khoảng 20 triệu đô
la Mỹ và có khả năng phá khóa DES trong 1 ngày. Năm 1993, Wiener dự thảo một
hệ thống khác có khả năng phá mã trong vòng 7 giờ với giá 1 triệu đô la Mỹ.
Những điểm yếu của DES được thực sự chứng minh vào cuối những năm 1990.
Vào năm 1997, công ty bảo mật RSA đã tài trợ một chuỗi cuộc thi với giải
thưởng 10.000 đô la Mỹ cho đội đầu tiên phá mã được một bản tin mã hóa bằng
DES. Đội chiến thắng trong cuộc thi này là dự án DESCHALL với những người
dẫn đầu bao gồm Rocke Verser, Matt Curtin và Justin Dolske. Họ đã sử dụng hàng
nghìn máy tính nối mạng để phá mã. Khả năng phá mã DES được chứng minh
thêm lần nữa vào năm 1998 khi tổ chức Electronic Frontier Foundation (EFF), một
tổ chức hoạt động cho quyền công dân trên Internet, xây dựng một hệ thống
chuyên biệt để phá mã với giá thành 250000 đô la Mỹ . Động cơ thúc đẩy EFF
trong hành động này là nhằm chứng minh DES có thể bị phá vỡ trên lý thuyết
cũng như trên thực tế: "Nhiều người không tin vào chân lý cho đến khi họ nhìn
thấy sự việc bằng chính mắt mình. Xây dựng một bộ máy có thể phá khóa DES
trong vòng vài ngày là cách duy nhất chứng tỏ với mọi người rằng họ không thể
đảm bảo an ninh thông tin dựa vào DES." Hệ thống này đã tìm được khóa DES
bằng phương pháp duyệt toàn bộ trong thời gian hơn 2 ngày; trong khi vào khoảng
thời gian đó, một chưởng lý của Bộ Tư pháp Hoa Kỳ (DOJ) vẫn tuyên bố rằng

DES là không thể bị phá vỡ.
 Các kiểu tấn công khác hiệu quả hơn duyệt toàn bộ :
Hiện nay có 3 kiểu tấn công có khả năng phá vỡ DES (với đủ 16 chu trình)
với độ phức tạp thấp hơn duyệt toàn bộ: phá mã vi sai (differential cryptanalysis -
DC), phá mã tuyến tính (linear cryptanalysis - LC) và phá mã Davies (Davies'
attack). Tuy nhiên các dạng tấn công này chưa thực hiện được trong thực tế.
Phá mã vi sai : được Eli Biham và Adi Shamir tìm ra vào cuối những năm
1980 mặc dù nó đã được IBM và NSA biết đến trước đó. Để phá mã DES
với đủ 16 chu trình, phá mã vi sai cần đến 2
47
văn bản rõ. DES đã được
thiết kế để chống lại tấn công dạng này.
Phá mã tuyến tính : được tìm ra bởi Mitsuru Matsui và nó đòi hỏi 2
43
văn
bản rõ (Matsui, 1993). Phương pháp này đã được Matsui thực hiện và là
thực nghiệm phá mã đầu tiên được công bố. Không có bằng chứng chứng
tỏ DES có khả năng chống lại tấn công dạng này. Một phương pháp tổng
quát hơn, phá mã tuyến tính đa chiều (multiple linear cryptanalysis), được
Kaliski và Robshaw nêu ra vào năm 1994, Biryukov và cộng sự tiếp tục
cải tiến vào năm 2004. Nghiên cứu của họ cho thấy mô phỏng tuyến tính
đa chiều có thể sử dụng để giảm độ phức tạp của quá trình phá mã tới 4
lần (chỉ còn 2
41
văn bản rõ). Kết quả tương tự cũng có thể đạt được với
kiểu tấn công tuyến tính kết hợp với lựa chọn bản rõ (Knudsen and
Mathiassen, 2000). Junod (2001) đã thực hiện một số thực nghiệm để tìm
ra độ phức tạp thực tế của phá mã tuyến tính và thấy rằng quá trình thực
tế nhanh hơn dự đoán: 2
39

×2
41
.
Phá mã Davies: trong khi phá mã vi sai và phá mã tuyến tính là các kỹ
thuật phá mã tổng quát, có thể áp dụng cho các thuật toán khác nhau, phá
mã Davies là một kỹ thuật dành riêng cho DES. Dạng tấn công này được
đề xuất lần đầu bởi Davies vào cuối những năm 1980 và cải tiến bởi
Biham và Biryukov (1997). Dạng tấn công mạnh nhất đòi hỏi 2
50
văn bản
rõ, độ phức tạp là 2
50
và có tỷ lệ thành công là 51%.
Ngoài ra còn có những kiểu tấn công dựa trên bản thu gọn của DES - DES với ít
hơn 16 chu trình. Những nghiên cứu này cho chúng ta biết số lượng chu trình cần
có và ranh giới an toàn của hệ thống. Năm 1994, Langford và Hellman đề xuất phá
mã vi sai - tuyến tính (differential-linear cryptanalysis) kết hợp giữa phá mã vi sai
và tuyến tính. Một dạng cải tiến của phương pháp này có thể phá vỡ DES 9 chu
trình với 2
15.8
văn bản rõ và có độ phức tạp là 2
29.2
(Biham et al, 2002).
 Một vài đặc điểm về cách giải mã :
DES có tính chất bù:
trong đó là phần bù của x theo từng bít (1 thay bằng 0 và ngược lại). E
K

bản mã hóa của E với khóa K. P và C là văn bản rõ (trước khi mã hóa) và văn bản
mã (sau khi mã hóa). Do tính bù, ta có thể giảm độ phức tạp của tấn công duyệt

toàn bộ xuống 2 lần (tương ứng với 1 bít) với điều kiện là ta có thể lựa chọn bản
rõ.
Ngoài ra DES còn có 4 khóa yếu (weak keys). Khi sử dụng khóa yếu thì mã
hóa (E) và giải mã (D) sẽ cho ra cùng kết quả:
E
K
(E
K
(P)) = P or equivalently , E
K
= D
K

Bên cạnh đó, còn có 6 cặp khóa nửa yếu (semi-weak keys). Mã hóa với một
khóa trong cặp, K
1
, tương đương với giải mã với khóa còn lại, K
2
:
or equivalently,
Tuy nhiên có thể dễ dàng tránh được những khóa này khi thực hiện thuật
toán, có thể bằng cách thử hoặc chọn khóa một cách ngẫu nhiên. Khi đó khả năng
chọn phải khóa yếu là rất nhỏ.
DES đã được chứng minh là không tạo thành nhóm. Nói một cách khác, tập
hợp {E
K
} (cho tất cả các khóa có thể) theo phép hợp thành không tạo thành một
nhóm hay gần với một nhóm (Campbell and Wiener, 1992). Vấn đề này vẫn còn
để mở và nếu như không có tính chất này thì DES có thể bị phá vỡ dễ dàng hơn và
việc áp dụng DES nhiều lần (ví dụ như trong Triple DES) sẽ không làm tăng thêm

độ an toàn của DES.
3) AES: viết tắt của 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.
4) RSA:
Trong mật mã học , RSA là một thuật toán mã hóa khóa công khai .Đây là
thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã
hóa .Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử
dụng khóa công cộng .RSA đang được sử dụng phổ biến trong thương mại điện tử
và được cho là đảm bảo an toàn với diiều kiện độ dài khóa đủ lớn .
a) Lịch sử phát triển :
Thuật toán được Ron Rivest , Adi Shamir và Len Adleman mô tả lần đầu
tiên vào năm 1977 tại học viện Công nghệ Massachusetts ( MIT) . Tên của thuật
toán lấy từ 3 chữ cái đầu tiên của 3 tác giả .
Trước đó , vào năm 1973 ,Clifford Cocks , một nhà toán học người Anh
làm việc tại GCHQ đã mô tả một thuật toán tương tự . Với khả năng tính toán tại
thời điểm đó thì thuật toán này không khả thi và chưa bao giờ được thực
nghiệm .Tuy nhiên , phát minh này chỉ được công bố vào năm 1997 vì được xếp
vào loại tuyệt mật .
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm
1983 .Tuy nhiên , do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên
sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ .Ngoài ra , nếu như công
trình của Clifford Cocks đã công bố trước đó thì bằng sáng chế RSA đã không thể

được đăng ký .
b) Nguyên tắc hoạt động :
 Mô tả sơ lược :
Thuật toán RSA có hai khóa :khóa công khai ( hau khóa công cộng ) và
khóa bí mật ( hay khóa cá nhân ) . Mỗi khóa là những khoá cố định sử dụng trong
quá trình mã hóa và giải mã . Khóa công khai được công bố rộng rãi cho mọi
người và được dùng để mã hóa. Những thông tin được mã hóa bằng khóa công
khai chỉ có thể được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi
người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể
giải mã được.
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau : Bob
muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc
được. Để làm được điều này, Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn
và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình
thường và khóa lại (như loại khoá thông thường chỉ cần sập chốt lại, sau khi sập
chốt khóa ngay cả Bob cũng không thể mở lại được-không đọc lại hay sửa thông
tin trong thư được nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với
chìa khóa của mình và đọc thông tin trong thư. Trong ví dụ này, chiếc hộp với
khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.
 Tạo khóa :
Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không
an toàn (ví dụ như Internet ). Với thuật toán RSA, Alice đầu tiên cần tạo ra cho
mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:
1. Chọn 2 số nguyên tố lớn và với , lựa chọn ngẫu nhiên và độc
lập.
2. Tính: .
3. Tính: giá trị hàm số Ơle .
4. Chọn một số tự nhiên e sao cho và là số nguyên tố cùng
nhau với .
5. Tính: d sao cho .

• Một số lưu ý:
- Các số nguyên tố thường được chọn bằng phương pháp thử xác suất.
- Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng
- Bước 5 có thể viết cách khác: Tìm số tự nhiên sao cho
cũng là số tự nhiên.
Khi đó sử dụng giá trị .
- Từ bước 3, PKCS#1 v2.1 sử dụng thay cho
.
• Khóa công khai bao gồm:
n, môđun, và
e, số mũ công khai (cũng gọi là số mũ mã hóa).
• Khóa bí mật bao gồm:
n, môđun, xuất hiện cả trong khóa công khai và khóa bí mật, và
d, số mũ bí mật (cũng gọi là số mũ giải mã).
Một dạng khác của khóa bí mật bao gồm:
p and q, hai số nguyên tố chọn ban đầu,
d mod (p-1) và d mod (q-1) (thường được gọi là dmp1 và dmq1),
(1/q) mod p (thường được gọi là iqmp)
Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng
định lý số dư Trung Quốc (tiếng Anh: Chinese Remainder Theorem - CRT). Ở
dạng này, tất cả thành phần của khóa bí mật phải được giữ bí mật.
Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình. Ở
đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính
d khi biết e. Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q
sẽ được xóa ngay sau khi thực hiện xong quá trình tạo khóa.
 Mã hóa :
Giả sử Bob muốn gửi đoạn thông tin M cho Alice. Đầu tiên Bob chuyển M
thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M)
được thỏa thuận trước.
Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã

hóa của m theo công thức:
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ ( theo môđun)
bằng ( thuật toán bình phương và nhân ) Cuối cùng Bob gửi c cho Alice.
 Giải mã :
Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo
công thức sau:
Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải mã
hoạt động vì ta có
.
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (
theo Định lý Fermat nhỏ ) nên:

×