Mật mã hóa dữ liệu bằng phương pháp mã hóa DES
MỤC TIÊU:
- Đề tài giới thiệu về hệ thống mã hóa và đi sâu nghiên cứu phương pháp mã hóa DES,
đưa ra hướng dẫn cài đặt chương trình mã hóa văn bản, file văn bản một cách đơn giản,
hiệu quả.
PHẠM VI ĐỀ TÀI:
- Tìm hiểu mã hóa thông tin
- Tìm hiểu hệ mã chuẩn DES
- Cài đặt chương trình mã hóa và giải mã file, văn bản sử dụng hệ mã DES
BỐ CỤC ĐỀ TÀI:
Nội dung của đồ án được trình bày trong 4 chương
Chương 1: Tổng quan
Giới thiệu tổng quan các khái niệm cơ bản về mật mã học và hệ thống mã hóa, đồng
thời giới thiệu sơ lược về hệ thống mã hóa quy ước và hệ thống mã hóa công cộng.
Chương 2: Một số phương pháp mã hóa quy ước
Nội dung chương 2 sẽ giới thiệu chi tiết hơn về hệ thống mã hóa quy ước( hay còn gọi là
hệ thống mã hóa đối xứng). Một số phương pháp mã hóa quy ước kinh điển như phương
pháp dịch chuyển, phương pháp thay thế… và giới thiệu qua mã hóa theo khối DES.
Chương 3: Mật mã hóa DES
Chương này em giới thiệu chi tiết về đặc điểm cũng như thuật toán của phương pháp
mã hóa DES
Chương 4: Mô phỏng và kết quả
Nội dung chương IV sẽ phân tích chức năng của bài toán đặt ra, quá trình kiểm thử, kết
quả của chương trình Demo.
-1-
ĐỊNH NGHĨA, VIẾT TẮT :
A
AES
Advanced Encyption Standard
Chuẩn mã hóa nâng cao
Cryptography
Mật mã
Cryptosystem
Hệ thống mã hóa
Symmetric key
Khóa đối xứng
Secret key
Khóa bí mật
Substtution Cipher
Mã hóa thay thế
C
D
DES
Data Encryption Standard
Chuẩn mã hóa dữ liệu
Expansion Permutation
Hoán vị mở rộng
Initial Permutation
Hoán vị đầu
Permutation
Mã hóa hoán vị
E
EP
I
IP
P
-2-
DANH MỤC HÌNH VẼ
Hình 2.1: Mô hình hệ thống mã hóa quy ước.........................................................7
Hình 2.2: Biểu diễn dãy 64 bit thành 2 thành phần L và R....................................14
Hình 2.3: Trình phát sinh dãy Li Ri từ dãy Li-1 Ri-1 và khóa Ki..............................15
Hình 3.1: Chuẩn mã dữ liệu DES...........................................................................16
Hình 3.2: Sơ đồ khối chương trình DES ..............................................................20
Hình 3.3: Sơ đồ khối quá trình sinh khóa..............................................................21
Hình 3.4: Sơ đồ mã hóa DES................................................................................23
Hình 3.5: Sơ đồ một vòng DES.............................................................................24
Hình 3.6: Sơ đồ hàm F.........................................................................................27
Hình 3.7: Sơ đồ tạo khóa con................................................................................28
Hình 3.8: Sơ đồ của hàm mở rộng.........................................................................30
Hình 4.1: Sơ đồ chức năng của chương trình mô phỏng........................................40
Hình 4.2:Biểu đồ hoạt động của chương trình mô phỏng...........................................41
Hình 4.3: Giao diện chính của chương trình..........................................................43
DANH MỤC BẢNG
Bảng 3.1:Các khóa yếu của DES............................................................................18
Bảng 3.2:Các khóa nửa yếu của DES.....................................................................18
Bảng 3.3:Hoán vị IP..............................................................................................25
Bảng 3.4: Hoán vị IP-1..........................................................................................25
Bảng 3.5: Hoán vị PC-1........................................................................................29
Bảng 3.6: Bảng dịch bit tại các vòng lặp của DES................................................29
Bảng 3.7: Hoán vị PC-2........................................................................................30
Bảng 3.8: Hàm mở rộng E.....................................................................................31
Bảng 3.9: 8 hộp S-Box..........................................................................................33
Bảng 3.10: Bảng hoán vị P....................................................................................34
-3-
CHƯƠNG 1
TỔNG QUAN
1.1 . MẬT MÃ HỌC:
Mật mã là ngành khoa học ứng dụng toán học vào việc biến đổi thông tin thành
một dạng khác với mục đích che dấu nội dung, ý nghĩa thông tin cần mã hóa. Đây là
một ngành quan trọng và có nhiều ứng dụng trong đời sống xã hội. Ngày nay, các ứng
dụng mã hóa vào bảo mật thông tin đang được sử dụng ngày càng phổ biến hơn trong
các lĩnh vực khác nhau trên thế giới, từ các lĩnh vực an ninh, quân sự, quốc phòng…,
cho đến các lĩnh vực dân sự như trong thương mại điện tử, ngân hàng…
Cùng với sự phát triển của khoa học máy tính và internet, các nghiên cứu và ứng
dụng của khoa học mật mã ngày càng trở nên đa dạng hơn, mở ra nhiều hướng nghiên
cứu chuyên sâu vào từng lĩnh vực ứng dụng đặc thù với những đặc trưng riêng. Ứng
dụng của khoa học mật mã không chỉ đơn thuần là mã hóa và giải mã thông tin mà còn
bao gồm nhiều vấn đề khác nhau cần được nghiên cứu và giải quyết: chứng thực nguồn
gốc nội dung thông tin (kỹ thuật chữ ký điện tử), chứng nhận tính xác thực về người sở
hữu mã khóa ( chứng nhận khóa công cộng), các quy trình giúp trao đổi thông tin và
thực hiện giao dịch điện tử an toàn trên mạng… Những kết quả nghiên cứu về mật mã
cũng đã được đưa vào trong các hệ thống phức tạp hơn, kết hợp với những kỹ thuật
khác để đáp ứng yêu cầu đa dạng của các hệ thống ứng dụng khác nhau trong thực tế,
ví dụ như hệ thống bỏ phiếu bầu cử qua mạng, hệ thống đào tạo từ xa, hệ thống quản lý
an ninh của các đơn vị với hướng tiếp cận sinh trắc học, hệ thống cung cấp dịch vụ
multinedia trên mạng với yêu cầu cung cấp dịch vụ và bảo vệ bản quyền sở hữu trí tuệ
đối với thông tin số…
1. 2. HỆ THỐNG MÃ HÓA (CRYPTOSYSTEM)
Định nghĩa 1.1 : Hệ thống mã hóa (cryptosystem) là một bộ băm (P, C, K, E ,D) thỏa
mãn các điều kiện sau:
1. Tập nguồn P là tập hữu hạn tất cả các mẫu tin nguồn cần mã hóa có thể có
2. Tập đích C là tập hữu hạn tất cả các mẫu tin có thể có sau khi mã hóa
3. Tập khóa K là tập hữu hạn các khóa có thể có được sử dụng
4. E và D lần lượt là tập luật mã hóa và giải mã. Với mỗi khóa K∈ D tương ứng
Luật mã hóa ek: P → C và luật giải mã ek: C → P là hai ánh xạ thỏa mãn
d k ( ek ( x ) ) = x, ∀ x ∈ P
Tính chất 4, là chính chất chính và quan trọng của một hệ thống mã hóa. Tính chất này
đảm bảo một mẩu tin x∈P được mã hóa bằng luật mã hóa ek∈E có thể giải mã chính
xác bằng luật dk∈D.
-4-
Định nghĩa 1. 2: Zm được định là tập hợp {0, 1, ..., m-1}, được trang bị phép cộng( ký
hiệu +) và phép nhân(ký hiệu x). Phép cộng và phép nhân trong Zm được thực hiện tương
tự như trong Z, ngoại trừ kết quả tính toán theo modulo m
Ví dụ: Giả sử cần tính giá trị 11x13 trong Z16. Trong Z, ta có kết quả của phép nhân
11x13=143. Do 143≡15(mod 16) nên 11x13=15 trong Z16.
Một số tính chất của Zm
1. Phép cộng đóng trong Zm, i.e., ∀ a, b ∈ Zm, a+b ∈ Zm
2. Tính giao hoán của phép cộng trong Zm, i.e., ∀ a, b ∈ Zm, a+b =b+a
.
3. Tính kết hợp của phép cộng trong Zm, i.e., ∀ a, b, c ∈ Zm, (a+b)+c
=a+(b+c)
4. Zm có phần trung hòa là 0, i.e., ∀ a ∈ Zm, a+0 = 0+a=a
5. Mọi phần tử a trong Zm đều có phẩn tử đối là m-a
6. Phép nhân đóng trong Zm , i.e., ∀ a, b ∈ Zm, a×b∈ Zm
7. Tính giao hoán của phép cộng trong Zm, i.e., ∀ a, b ∈ Zm, a×b=b×a
.
8. Tính kết hợp của phép cộng trong Zm, i.e., ∀ a, b, c ∈ Zm, (a×b)×c
= a×(b×c)
9. Zm, có phần tử đơn vị là 1, i.e., ∀ a ∈ Zm, a×1=1×a=a
10. Tính phân phối của phép nhân đối với phép cộng, i.e., ∀ a, b, c ∈ Zm, .
(a+b)×c =(a×c)+(b×c)
.
11. Zm, có các tính chất 1, 3, -5 nên tạo thành 1 nhóm, Do Zm, có tính chất 2 nên tạo
thành nhóm Abel, Zm, có các tính chất (1) – (10) nên tạo thành 1 vành
1. 3. HỆ THỐNG MÃ HÓA QUY ƯỚC:
Trong hệ thống mã hóa quy ước, quá trình mã hóa và giải mã một thông điệp sử
dụng cùng một mã khóa gọi là KHÓA BÍ MẬT (secret key) hay KHÓA ĐỐI XỨNG
(symmetric key). Do đó vấn đề bảo mật thông tin đã mã hóa hoàn toàn phụ thuộc vào
việc giữ bí mật nội dung của mã khóa đã được sử dụng.
Với tốc độ và khả năng xử lý ngày càng được nâng cao của các bộ vi xử lý hiện
nay, phương pháp mã hóa chuẩn (Data Encyption Standard – DES) đã trở nên không an
toàn trong bảo mật thông tin. Do đó, Viện tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ
(National Institute of Standard and Technology – NIST) đã quyết định chọn một chuẩn
mã hóa mới với độ an toàn cao nhằm phục vụ nhu cầu bảo mật thông tin liên lạc của
Chính phủ Hoa Kỳ cũng như trong các ứng dụng dân sự. thuật toán Rijndael do Vincent
-5-
Rijmen và Joan Daeman đã được chính thức chọn trở thành chuẩn mã hóa nâng cao
(Advanced Encyption Standard – AES) từ 02 tháng 10 năm 2000
1.4. HỆ THỐNG MÃ HÓA CÔNG CỘNG (MÃ HÓA BẤT ĐỐI XỨNG):
Nếu như vấn đề khó khăn đặt ra đối với các phương pháp mã hóa quy ước chính
là bài toán trao đổi mã khóa thì ngược lại, các phương pháp mã hóa công cộng giúp cho
việc trao đổi mã khóa trở nên dễ dàng hơn. Nội dung của khóa công cộng (public key)
không cần giữ bí mật như đối với khóa bí mật trong các phương pháp mã hóa quy ước.
Sử dụng khóa công cộng, chúng ta có thể thiết lập một quy trình an toàn để truy đổi khóa
bí mật được sử dụng trong hệ thống mã hóa quy ước.
Những năm gần đây, các phương pháp mã hóa công cộng, đặc biệt là phương
pháp RSA [45] , được sử dụng ngày càng nhiều trong các ứng dụng mã hóa trên thế giới
và có thể xem đây là phương pháp chuẩn được sử dụng phổ biến nhất trên Internet, ứng
dụng trong việc bảo mật thông tin liên lạc cũng như trong lĩnh vực thương mại điện tử
1.5. KẾT HỢP MÃ HÓA QUY ƯỚC VÀ MÃ HÓA CÔNG CỘNG
Các phương pháp mã hóa quy ước có ưu điểm xử lý rất nhanh và khả năng bảo
mật cao so với các phương pháp mã hóa công cộng nhưng lại gặp phải vấn đề khó khăn
trong việc trao đổi mã khóa. Ngược lại, các phương pháp mã hóa khóa công cộng tuy xử
lý thông tin chậm hơn nhưng lại cho phép người sử dụng trao đổi mã khóa dễ dàng hơn.
Do đó, trong các ứng dụng thực tế, chúng ta cần phối hợp được ưu điểm của mỗi phương
pháp mã hóa để xây dựng hệ thống mã hóa và bảo mật thông tin hiệu quả và an toàn.
-6-
CHƯƠNG 2
MỘT SỐ PHƯƠNG PHÁP MÃ HÓA QUY ƯỚC
2.1. HỆ THỐNG MÃ HÓA QUY ƯỚC
Hệ thống mã hóa quy ước là hệ thống mã hóa trong đó quy trình mã hóa và giải
mã đều được sử dụng chung một khóa – khóa bí mật. Việc bảo mật thông tin phụ thuộc
vào việc bảo mật khóa
Trong hệ thống mã hóa quy ước, thông điệp nguồn được mã hóa với mã khóa k
được thống nhất trước giữa người gửi A và người nhận B. Người A sẽ sử dụng mã khóa
k để mã hóa thông điệp x thành thông điệp y và gửi y cho người B, người B sẽ sử dụng
khóa k để giải mã thông điệp y này. Vấn đề an toàn bảo mật thông tin được mã hóa phụ
thuộc vào việc giữ bí mật nội dung mã khóa k. Nếu người C biết được khóa k thì C có
thể “mở khóa” thông điệp đã được mã hóa mà người A gửi cho người B.
Hình 2.1. Mô hình hệ thống mã hóa quy ước
2.2.
PHƯƠNG PHÁP MÃ HÓA DỊCH CHUYỂN
Phương pháp mã hóa dịch chuyển là một trong những phương pháp lâu đời nhất
được sử dụng để mã hóa. Thông điệp được mã hóa bằng cách dịch chuyển xoay vòng
từng ký tự đi k vị trí trong bảng chử cái.
Trong trường hợp đặc biệt k =3, phương pháp mã hóa bằng dịch chuyển được gọi
là phương pháp mã hóa Caesar
-7-
Cho P=C=K= Zn
Với mỗi khóa k ∈ K, định nghĩa:
ek (x)=(x+k)mod n và dk (y)=(y-k)mod n với x,y ∈ Zn
E={ ek , k ∈ K} và D={ dk, k ∈ K}
Thuật toán 2.1. Phương pháp mã hóa dịch chuyển
Mã hóa dịch chuyển là một phương pháp mã hóa đơn giản, thao tác xử lý mã
hóa và giải mã được thực hiện nhanh chóng. Tuy nhiên, trên thực tế, phương pháp này
có thể dễ dàng bị phá vỡ bằng cách thử mọi khả năng khóa k ∈ K. Điều này hoàn toàn
có thể thực hiện được do không gian khóa K chỉ có n phần tử để chọn lựa
• Ví dụ : Để mã hóa một thông điệp được biểu diễn bằng các chữ cái từ A đến Z
(26 chữ cái ). Ta sử dụng P=C=K= Z 26. Khi đó, thông điệp được mã hóa sẽ không an
toàn và có thể dễ dàng bị giải mã bằng cách thử lần lượt 26 giá trị khóa k∈K. Tính trung
bình, thông điệp đã được mã hóa có thể bị giải mã sau khoảng n/2 lần thử khóa k∈K
2.3. PHƯƠNG PHÁP MÃ HÓA THAY THẾ
Phương pháp mã hóa thay thế (Substtution Cipher) là một trong những phương
pháp mã hóa nổi tiếng và đã được sử dụng từ hàng trăm năm nay. Phương pháp này thực
hiện việc mã hóa thông điệp bằng cách hoán vị các phần tử trong bảng chữ cái hay tổng
quát hơn là hoán vị các phần tử trong tập nguồn P.
Cho P=C=Z
K là tập hợp tất cả các hoán vị của n phần tử 0,1,...,n-1. Như vậy, mỗi khóa π ∈ K là một
hoán vị của n phần tử 0,1,...,n-1.
Với mỗi khóa π ∈ K, định nghĩa :
eπ (x)= π(x) và dπ(y)=π-1(y) với x,y ∈ Zn
E={eπ, π∈ K} và D={Dπ, π∈K}
Thuật toán 2.2. phương pháp mã hóa bằng thay thế
Đây là phương pháp đơn giản, thao tác mã hóa và giải mã được thực hiện nhanh
chóng. Phương pháp này khắc phục điểm hạn chế của phương pháp mã hóa bằng dịch
chuyển là có không gian khóa K nhỏ nên dễ dàng bị giải mã bằng cách thử nghiệm lần
lượt n giá trị khóa k∈K. Trong phương pháp mã hóa thay thế có không gian khóa K rất
lớn với n! phần tử nên không thể bị giải mã bằng cách ‘vét cạn’ mọi trường hợp khóa k.
Tuy nhiên, trên thực tế thông điệp được mã hóa bằng phương pháp này vẫn có thể bị giải
-8-
mã nếu như có thể thiết lập được bảng tần số xuất hiện của các ký tự trong thông điệp
hay nắm được một số từ, ngữ trong thông điệp nguồn ban đầu
2.4. PHƯƠNG PHÁP AFFINE
Nếu như phương pháp bằng dịch chuyển là một trường hợp đặc biệt của phương
pháp mã hóa bằng thay thế, trong đó chỉ sử dụng n giá trị khóa k trong số n! phần tử, thì
phương pháp Affine lại là một trường hợp đặc biệt khác của mã hóa bằng thay thế
Cho P=C=Zn
K={(a,b)∈Zn x Zn : gcd (a,b)=1}
Với mỗi khóa k=(a,b) ∈ K, định nghĩa:
ek(x)=(ax+b)mod n và dk(x)=(a-1(y-b))mod n với x,y∈Zn
E={ek,k∈K} và D={Dk, k ∈ K}
Thuật toán 2.3 Phương pháp Affine
Để có thể giải mã chính xác thông tin đã được mã hóa bằng hàm ek ∈E thì ek phải là
một song ánh. Như vậy, với mỗi giá trị y∈ Zn , phương trình ax+b≡y(mod n) phải có
nghiệm duy nhất x∈ Zn
Phương trình ax+b≡y(mod n) tương đương với ax≡(y-b)(mod n).Vậy, ta chỉ cần khảo sát
phương trình ax≡(y-b)(mod n)
Định lý 2.1 : Phương trình ax+b≡y(mod n) có nghiệm duy nhất x∈Zn với mỗi giá trị b∈
Zn , khi và chỉ khi a và n nguyên tố cùng nhau.
Vậy, điều kiện a và n nguyên tố cùng nhau bảo đảm thông tin được mã hóa bằng hàm
ek ,có thể được giải mã một cách chính xác
Gọi φ(n) Zn và nguyên tố cùng nhau với n.
Trong phương pháp mã hóa Affine, ta có n khả năng chọn giá trị b, φ(n) khả năng
chọn giá trị a. vậy không gian khóa K có tất cả nφ (n) phần tử.
-9-
Vấn đề đặt ra cho phương pháp mã hóa Affine là để có thể giải mã được thông tin đã
được mã hóa cần phải tính giá trị phần tử nghịch đảo a -1∈Zn. Thuật toán Euclide mở rộng
có thể giải quyết trọn vẹn vấn đề này.
Trước tiên cần khảo sát thuật toán Euclide (ở dạng cơ bản) sử dụng trong việc tìm
ước số chung lớn nhất của hai số nguyên dương r0 và r1 với r0 > r1. Thuật toán Euclide
bao gồm một dãy các phép chia.
r0=q1r1+r2, 0 < r2 < r1
r1=q2r2 + r3,0 < r3 < r2
...
rm-2= qm-1rm-1+rm , 0 < rm < rm-1
rm-1= qmrm
Dễ dàng nhận thấy rằng gcd( r0 , r1)= gcd( r1 , r2)=...= gcd( rm-1 , rm)= rm
Như vậy, ước số chung lớn nhất của r0 , r1 là rm
Xây dựng dãy số t0 , t1 ,... tm theo công thức truy hồi sau :
t0 =0
t1 =1
tj = (tj-2 – qj-1. tj-1 )mod r0 với j ≥ 2
Định lý 2.3 : Với mọi j, 0 ≤ j ≤ m, ta có rj ≡ tj r1 (mod 0), với qj và rj được xác định theo
thuật toán Euclide và tj được xác định theo công thức truy hồi nêu trên.
Định lý 2.4 : nếu r0 và r1 nguyên tố cùng nhau (với r1 > r1 ) thì tm là phần tử nghịch đảo
của r1 trong Zr0 .
Gcd(r0, r1 )=1=> tm = r1 -1 mod r0
Trong thuật toán Euclide, dãy số { tj } có thể được tính đồng thời với dãy số {qj } và
{rj }. Thuật toán Euclide mở rộng dưới đây được sử dụng để xác định phần tử nghịch đảo
(nếu có) của một số nguyên dương a(modulo n). trong thuật toán không cần sử dụng đến
cấu trúc dữ liệu mảng để lưu giá trị của dãy số {t j} , {qj} hay {rj} vì tại mỗi thời điểm, ta
chỉ cần quan tâm đến giá trị của hai phần tử cuối cùng mỗi dãy tại thời điểm đang xét.
- 10 -
n0= n
a0=a
t0 = 0
n0
a0
q=1
r= n0 – qa0
while r > 0 do
temp = t0 – qt
if temp ≥ 0 then
temp=temp mod n
end if
if temp < 0 then
temp = n – (( -temp)mod n)
end if
t0=t
t=temp
n0=a0
a0 =r
n0
a0
q=1
r=n0 – qa0
end while
if a0 ≠ 1 then
a không có phần tử nghịch đảo modulo n
else
a-1=t mod n
end if
- 11 -
Thuật toán 2.4 Thuật toán Euclide mở rộng xác định phần tử nghịch đảo của a(modulo n)
2.5. PHƯƠNG PHÁP VIGENERE
Trong phương pháp mã hóa bằng thay thế cũng như các trường hợp đặc biệt của
phương pháp này (mã hóa bằng dịch chuyển, mã hóa Affine…), ứng với một khóa k
được chọn, mỗi phần tử x∈P được ánh xạ vào duy nhất một phần tử y∈C. Nói cách
khác, ứng với mỗi khóa k∈K, một song ánh được thiết lập từ P vào C.
Khác với hướng tiếp cận này, phương pháp Vigenere sử dụng một từ khóa có độ dài
m. Có thể xem như phương pháp mã hóa Vigenere Cipher bao gồm m phép mã hóa bằng
dịch chuyển được áp dụng luân phiên nhau theo chu kỳ.
Không gian khóa K của phương pháp Vigenere Cipher có số phần tử là “n”, lớn hơn
hẳn phương pháp số lượng phần tử của không gian khóa K trong phương pháp mã hóa
bằng dịch chuyển.Do đó, việc tìm ra mã khóa k để giải mã thông điệp đã được mã hóa sẽ
khó khăn hơn đối với phương pháp mã hóa bằng dịch chuyển.
Chọn số nguyên dương m. Định nghĩa P=C=K =(Zn)m
K={(k0,k1,…,kr-1) ∈ (Zn)r}
Với mỗi khóa k=(k0,k1,…,kr-1)∈K, định nghĩa:
Ek(x1,x2,…,xm)=((x1+k1) mod n, (x2+k2)mod n,…,(xm + km)mod n)
Dk(y1,y2,…,ym)=((y1 –k1)mod n, (y2- k2)mod n,...,(ym – km )mod n)
Với x,y ∈ (Zn)m
Thuật toán 2.5. Phương pháp mã hóa Vigenere
2.6. PHƯƠNG PHÁP HILL
Phương pháp Hill được Lester S.Hill công bố năm 1929: Cho số nguyên dương m,
định nghĩa P=C= (Zn)m. Mỗi phần tử x ∈ P là một bộ m thành phần, mỗi thành phần
thuộc Zn . Ý tưởng chính của phương pháp này là sử dụng m tổ hợp tuyến tính của m
thành phần trong mỗi phần tử x ∈ P để phát sinh ra m thành phần tạo thành phần tử y∈C.
Chọn số nguyên dương m. Định nghĩa:
P = C = (Z26)m Và K à tập hợp các ma trận m x m khả nghịch
k1,1
k 2,1
với mỗi khóa k =
k
m ,1
k1, 2
k m,2
k1,m
k 2,m
∈ K , định nghĩa:
k m ,m
- 12 -
k1,1
k 2,1
ek ( x ) = xk = ( x1 , x 2 ,..., x m )
k
m ,1
k1, 2
k m, 2
k1,m
k 2 ,m
với x= (x1, x2, ..., xm) ∈ P
k m ,m
và dk(y) = yk–1 với y∈ C
mọi phép toán số học đều được thực hiện trên Zn
Thuật toán 2.6 . Phương pháp mã hóa Hill
2.7. PHƯƠNG PHÁP MÃ HÓA HOÁN VỊ
Những phương pháp mã hóa nêu trên đều dựa trên ý tưởng chung: thay thế mỗi ký tự
trong thông điệp nguồn bằng một ký tự khác để tạo thành thông điệp đã được mã hóa.Ý
tưởng chính của phương pháp mã hóa hoán vị (Permutation) là vẫn giữ nguyên các ký tự
trong thông điệp nguồn mà chỉ thay đổi vị trí các ký tự, nói cách khác thông điệp nguồn
được mã hóa bằng cách sắp xếp lại các ký tự trong đó
Chọn số nguyên dương m. Định nghĩa:
P = C = (Z26)m và K là tập hợp các hoán vị của m phần tử {1, 2, ..., m}
Với mỗi khóa π ∈ K, định nghĩa:
eπ ( x1 , x2 ,..., x m ) = ( xπ ( 1) , xπ ( 2 ) ,...xπ ( m ) ) và
(
d π ( y1 , y 2 ,..., y m ) = yπ −1 ( 1) , yπ −1 ( 2 ) ,... yπ −1 ( m )
)
Với π–1 hoán vị ngược của π
Thuật toán 2.7. Phương pháp mã hóa bằng hoán vị
Phương pháp mã hóa bằng hoán vị chính là một trường hợp đặc biệt của phương pháp
Hill. Với mỗi hoán vị π của tập hợp {1,2,…,m}, ta xác định ma trận k π=(ki,j) theo công
thức sau:
Ma trận kπ là ma trận mà mỗi dòng và mỗi cột có đúng một phần tử mang giá trị 1, các
phần tử còn lại trong ma trận đều bằng 0. Ma trận này có thể thu được bằng cách hoán vị
các hàng hay các cột của ma trận đơn vị I m nên kπ là ma trận khả nghịch. Rõ ràng, mã
hóa bằng phương pháp Hill với ma trận kπ hoàn toàn tương đương với mã hóa bằng
phương pháp hoán vị với hoán vị π.
- 13 -
2.8. PHƯƠNG PHÁP DES ( DATA ENCYPTION STANDARD )
2.8.1 Phương pháp DES
Khoảng những năm 1970, Tiến sĩ Horst Feistel đã đặt nền móng đầu tiên cho chuẩn
mã hóa dữ liệu DES với phương pháp mã hóa Feistel Cipher. Vào năm 1976 Cơ quan
bảo mật Quốc gia Hoa kỳ (NSA) đã công nhận DES dựa trên phương pháp Feistel là
chuẩn mã hóa dữ liệu. Kích thước khóa của DES ban đầu là 128 bit nhưng tại bản công
bố FIPS kích thước khóa được rút xuống còn 56 bit.
Trong phương pháp DES, kích thước khối là 64 bit. DES thực hiện mã hóa dữ liệu
qua 16 vòng lặp mã hóa, mỗi vòng sử dụng một khóa chu kỳ 48 bit được tạo ra từ khóa
ban đầu có độ dài 56 bit. DES sử dụng 8 bảng hằng số S-box để thao tác
Quá trình mã hóa của DES có thể tóm tắt như sau : Biểu diễn thông điệp nguồn x∈ P
bằng dãy 64 bit. Khóa k có 56 bit. Thực hiện mã hóa theo 3 giai đoạn :
1. Tạo dãy 64 bit x0 bằng cách hoán vị x theo hoán vị IP (Initial Permutation)
Biểu diễn x0 =IP(x)=L0R0, L0 gồm 32 bit bên trái của x0 .R0 gồm 32 bit bên phải của x0.
L0
R0
X0
Hình 2.2 : Biểu diễn dãy 64 bit x thành 2 thành phần L và R
2. Thực hiện 16 vòng lặp từ 64 bit thu được và 56 bit của khóa k (chỉ sử dụng 48 bit
của khóa k trong mỗi vòng lặp). 64 bit kết quả thu được qua mỗi vòng lặp sẽ là đầu vào
cho vòng lặp sau. Các cặp từ 32 bit L i, Ri (với 1 ≤ I ≤ 16 ) được xác định theo quy tắc
sau:
Li=Ri-1
Ri=Li-1⊕ f(Ri-1, Ki)
Với ⊕ biểu diễn phép toán XOR trên hai dãy bit, K 1, K2,...,K16 là các dãy 48 bit phát
sinh từ khóa K cho trước ( Trên thực tế, mỗi khóa K i được phát sinh bằng cách hoán vị
các bit trong khóa K cho trước)
3. Áp dụng hoán vị ngược IP -1 đối với dãy bit R16L16, thu được từ y gồm 64 bit. Như
vậy, y=IP-1 (R16L16)
Hàm f được sử dụng ở bước 2 là hàm số gồm 2 tham số: Tham số thứ nhất A là một dãy
32 bit , tham số thứ hai J là một dãy 48 bit. Kết quả của hàm f là một dãy 32 bit. Các
bước xử lý của hàm f (A,J) như sau:
Tham số thứ nhất A (32 bit) được mở rộng thành dãy 48 bit được phát sinh từ A bằng
cách hoán vị theo một thứ tự nhất định 32 bit của A, trong đó có 26 bit của A được lặp
lại 2 lần trong E (A).
- 14 -
Li-1
Ri-1
f
Ki
⊕
Li
Ri
Hình 2.3 : Quy trình phát sinh dãy Li Ri từ dãy Li-1 Ri-1 và khóa Ki
Thực hiện phép toán XOR cho hai dãy 48 bit E(A) và J, ta thu được một dãy 48 bit B.
Biểu diễn B thành từng nhóm 6 bit như sau: B=B 1 B2 B3 B4 B5 B6 B7 B8 Sử dụng 8 ma
trận S1, S2, ..., S8 mỗi ma trận Si có kích thước 4x16 và mỗi dòng của ma trận nhận đủ
16 giá trị từ 0 đến 15. Xét dãy gồm 6 bit Bj= b1 b2 b3 b4 b5 b6, Sj(Bj) được xác định bằng
giá trị của phần tử tại dòng r cột c của Sj, trong đó, chỉ số dòng r có biểu diễn nhị phân là
b1 b6 , chỉ số cột c có biểu diễn nhị phân là b 2 b3 b4 b5. Bằng cách này, ta xác định được
các dãy 4 bit Cj=Sj(Bj), 1 ≤ j ≤ 8.
Tập hợp các dãy 4 bit Cj lại, ta có được dãy 32 bit C= C1 C 2 C3 C4 C5 C6 C7 C8. Dãy
32 bit thu được bằng cách hoán vị C theo một quy luật P nhất định chính là kết quả của
hàm F(A,J).
Quá trình giải mã chính là thực hiện theo thứ tự đảo ngược tất cả các thao tác của quá
trình mã hóa.
- 15 -
CHƯƠNG 3
MẬT MÃ HÓA DES
3.1. LỊCH SỬ
Vào thập niên 60, hệ mã Lucifer đã được đưa ra bởi Horst Feistel. Hệ mã này
gắn liền với hãng IBM nổi tiếng. Sau đó Ủy ban tiêu chuẩn Hoa kỳ đã dàn xếp với IBM
để thuật toán mã hóa này thành miễn phí và phát triển nó thành chuẩn mã hóa dữ liệu và
công bố vào ngày 15/02/1977
3.2. PHƯƠNG PHÁP BẢO MẬT
DES là thuật toán mã hóa với input là khối 64 bit, output cũng là khối 64 bit.
Khóa mã hóa có độ dài 56 bit, thực ra chính xác hơn phải là 64 bit với các bit ở vị trí chia
hết cho 8 có thể sử dụng là các bit kiểm tra tính chẵn lẻ. Số khóa của không gian khóa K
là 256
Hình 3.1. Chuẩn mã dữ liệu DES
Thuật toán thực hiện 16 vòng. Từ khóa input K, 16 khóa con 48 bit K i sẽ được sinh ra,
mỗi khóa cho mỗi vòng thực hiện trong quá trình mã hóa. Trong mỗi vòng, 8 ánh xạ thay
thế 6 bit thành 4 bit Si ( còn gọi là hộp Si) được chọn lựa kỹ càng và cố định, ký hiệu
chung là S sẽ được sử dụng. Bản rõ 64 bit sẽ được sử dụng chia thành 2 nữa L 0 và R0.
Các vòng có chức năng giống nhau, nhận input là L i-1 và Ri-1 từ vòng truớc và sinh ra
output là các xâu 32 bit Li và Ri như sau:
Li=Ri-1;
Ri=Li-1 ⊕ f(Ri-1) trong đó f(Ri-1, Ki)=P(S(E(Ri-1)⊕Ki));
Trong đó:
- ⊕ là ký hiệu của phép tuyển loại trừ (XOR) của hai xâu bit theo modulo 2.
- Hàm f là một hàm phi tuyến
- E là hoán vị mở rộng ánh xạ R i-1 từ 32 bit thành 48 bit (đôi khi tất cả các bit sẽ được sử
dụng hoặc một bit sẽ được sử dụng hai lần)
- P là hoán vị cố định khác của 32 bit
- 16 -
Một hoán vị khởi đầu (IP) được sử dụng cho vòng đầu tiên, sau vòng cuối cùng nửa
trái và phải sẽ được đổi cho nhau và xâu cuối cùng kết quả sẽ được hoán vị lần cuối bởi
hoán vị ngược của IP (IP-1).
Quá trình giải mã diễn ra tương tự nhưng với các khóa con ứng dụng vào các vòng
theo thứ tự ngược lại
Có thể hình dung đơn giản là phần bên phải trong mỗi vòng (sau khi mở rộng input
32 bit thành 8 ký tự 6 bit – xâu 48 bit) sẽ thực hiện một tính toán thay thế phụ thuộc khóa
trên mỗi ký tự trong xâu 48 bit, và sau đó sử dụng một phép chuyển bit cố định để phân
bố lại các bit của các ký tự kết quả hình thành nên output 32 bit.
Các khóa con Ki (chứa 48 bit của K) được tính bằng cách sử dụng các bảng PC1 và
PC2 (Permutation Choice 1 và 2). Trước tiên 8 bit ( K 8, K16, …, K64) của K bị bỏ đi (áp
dụng PC1). 56 bit còn lại được hoán vị và gán cho hai biến 28 bit C và D sẽ được quay 1
hoặc 2 bit, và các khóa con 48 bit Ki được chọn từ kết quả của việc ghép hai xâu với
nhau.
Như vậy, ta có thể mô tả toàn bộ thuật toán sinh mã DES dưới dạng công thức như
sau:
Y = IP-1 • f16 • T • f15 • T • ... • f2 • T • f1 • IP(X)
Trong đó :
- T mô tả phép hoán vị của các khối Li, RI (1 ≤ i ≤ 15).
- fi mô tả việc dùng hàm f với khóa Ki (1 ≤ i≤ 16)
3.3. ƯU NHƯỢC ĐIỂM
3.3.1. Ưu điểm:
- Có tính bảo mật cao
- Công khai, dễ hiểu
- Nó có thể triển khai trên thiết bị điện tử có kích thước nhỏ
3.3.2. Các yếu điểm của DES:
3.3.2.1. Tính bù
Nếu ta ký hiệu
tính chất sau
u
y = DES (x,k) →
là phần bù của u (ví dụ : 0100101 là phần bù của 1011010) thì des có
y
= DES (
x
,k )
Cho nên nếu ta biết mã y được mã hóa từ thông tin x với khóa K thì ta suy được bản mã
y được mã hóa từ bản rõ x với khóa k . Tính chất này là một yếu điểm của DES bởi
vì qua đó đối phương có thể loại bỏ đi một số khóa phải thử khi tiến hành thử giải mã
theo kiểu vét cạn
- 17 -
3.3.2.2. khóa yếu
Khóa yếu là các khóa mà theo thuật toán sinh khóa con thì tất cả 16 khóa con đều
như nhau : K1=K2=... =K16
Điều đó khiến cho việc mã hóa và giải mã đối với khóa yếu là giống hệt nhau
Khóa yếu (Hex)
C0
D0
0101
0101
0101
0101
{0}28
{0}28
FEFE
FEFE
FEFE
FEFE
{1}28
{1}28
1F1F
1F1F
0E0E
0E0E
{0}28
{1}28
E0E0
E0E0
F1F1
F1F1
{1}28
{0}28
Bảng 3.1.Các khóa yếu của DES
Đồng thời còn có 6 cặp khóa nửa yếu (semi-weak key) khác với thuộc tính như sau :
y= DES(x,k1) và y=DES(x,k2)
Nghĩa là với 2 khóa khác nhau nhưng mã hóa cùng một bản mã từ cùng một bản rõ :
C0
D0
Semi-weak key(Hex)
C0
D0
{01}14
{01}14
01FE 01FE 01FE
FE01
{10}14
{10}14
{01}14
{10}14
1FE0 1FE0 1FE0 1FE0
E01F E01F E01F E01F
{10}14
{01}14
{01}14
{0}28
01E0 01E0 01F1 01F1
E001 E001 F101
{10}14
{0}28
{01}14
{1}28
1FFE 1FFE 0EFE 0EFE
FE1F FE1F FE0E FE0E {10}14
{1}28
{0}28
{01}14
011F 011F 010E 010E
1F01 1F01
0E01 0E01
{0}28
{10}14
{1}28
{01}14
E0FE E0FE F1FE F1FE
FEE0 FEE0 FEF1 EF1
{1}28
{10}14
01FE
FE01 FE01 FE01
F101
Bảng 3.2.Các khóa nửa yếu của DES
3.3.3.3. DES có cấu trúc đại số
Với 64 bit khối bản rõ có thể được ánh xạ lên tất cả các vị trí của khối 64 bit khối
bản mã trong 264 cách. Trong thuật toán DES, với 56 bit khóa có thể cho chúng ta 2 56
(khoảng 1017 ) vị trí ánh xạ. Với việc đa mã hóa thì không gian ánh xạ còn lớn hơn. Tuy
nhiên điều này chỉ đúng nếu việc mã hóa DES là không cấu trúc
Với DES có cấu trúc đại số thì việc đa mã hóa sẽ được xem ngang bằng với việc đơn
mã hóa. Ví dụ như có hai khóa bất kỳ K1 và K2 thì sẽ luôn được khóa K3 như sau :
EK2(EK1(X))=EK3(X)
- 18 -
Nói một cách khác, việc mã hóa DES mang tính chất “nhóm”, đầu tiên mã hóa bản rõ
bằng khóa K1 sau đó là khóa K2 sẽ giống với việc mã hóa ở khóa K 3. Điều này thực sự
quan trọng nếu sử dụng DES trong đa mã hóa. Nếu một “nhóm” được phát với cấu trúc
hàm quá nhỏ thì tính an toàn sẽ giảm.
3.3.3.4. Không gian khóa K
DES có 256 = 1017 khóa. Nếu chúng ta biết được một cặp “tin/mã” thì chúng ta có thể
thử tất cả 1017 khả năng này để tìm ra khóa cho kết quả khớp nhất. Giả sử như một phép
thử mất 10-6s, thì chúng sẽ mất 1011s, tức 7300 năm. Nhưng với các máy tính được chế
tạo theo xử lý song song. Chẳng hạn với 10 7 con chip mã DES chạy song song thì bây
giờ mỗi một con chipset chỉ phải chịu trách nhiệm tính toán với 10 10 phép thử. Chipset
mã DES ngày nay có thể xử lý tốc độ 4.5x107 bit/s tức có thể làm được hơn 105 phép mã
DES trong một giây.
Vào năm 1976 và 1977, Dieffie và Hellman đã ước lượng rằng có thể chế tạo được
một máy tính chuyên dụng để vét cạn không gian khóa DES trong ½ ngày với cái giá 20
triệu đô la. Năm 1984, chipset mã hóa DES với tốc độ mã hóa 256000 lần/giây. Năm
1987, đã tăng lên 512000 lần/giây. Vào năm 1993, Michael Wiener đã thiết kế một máy
tính chuyên dụng với giá 1 triệu đô la sử dụng phương pháp vét cạn để giải mã DES
trung bình trong vòng 3,5 giờ (và chậm nhất là 7 giờ).
Đến năm 1990, hai nhà toán học người Do Thái – Biham và Shamir – đã phát minh
ra phương pháp mã hóa vi sai (diferential cryptanalyis), đây là một kỹ thuật sử dụng
những phỏng đoán khác nhau trong bản rõ để đưa ra những thông tin trong bản mã. Với
phương pháp này, Biham và Shamir đã chứng minh rằng nó hiệu quả hơn cả phương
pháp vét cạn.
Phá mã vi sai là thuật toán xem xét những cặp mã khóa khác nhau, đây là những cặp
mã hóa mà bản mã của chúng là khác biệt. Người ta sẽ phân tích tiến trình biến đổi của
những cặp mã này thông qua các vòng của DES khi chúng được mã hóa với cùng một
khóa K. Sau đó sẽ chọn hai bản rõ khác nhau một cách ngẫu nhiên hợp lý nhất. Sử dụng sự
khác nhau của kết quả bản mã và gán cho những khóa khác nhau một cách phù hợp nhất.
Khi phân tích nhiều hơn những cặp bản mã, chúng ta sẽ tìm ra một khóa được xem là đúng nhất.
- 19 -
3.4. SƠ ĐỒ KHỐI
Hình 3.2. Sơ đồ khối chương trình DES
- 20 -
- Xem thêm -