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

Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

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 (1.14 MB, 31 trang )

MỤC LỤC
TỔNG QUAN VỀ ĐỀ TÀI.....................................................................................4
1. Bối cảnh và lý do thực hiện đề tài..................................................................4
2. Mục tiêu của đề tài..........................................................................................4
3. Phương pháp triển khai đề tài.........................................................................4
4. Kết cấu của đồ án............................................................................................4
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT........................................................................6
1. Giới thiệu.........................................................................................................6
2. Các thuộc tính yêu cầu....................................................................................6
3. Kĩ thuật mã hoá chung....................................................................................6
4. Các giải thuật mã hóa:.....................................................................................8
i. Giải thuật MD5..............................................................................................8
ii. Giải thuật Triple-DES (3DES)...................................................................20
THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH................................................27
1. Mô tả chức năng............................................................................................27
2. Phân tích các chức năng................................................................................27
3. Mô hình hệ thống...........................................................................................27
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ..........................................................28
1. Môi trường triển khai....................................................................................28
2. Kết quả các chức năng của chương trình......................................................28
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN.............................................................30

DANH MỤC HÌNH VẼ
Hình 1. Quá trình chứng thực của một User với Webserver..................................9
Hình 2. Quá trình mã hóa......................................................................................10
Hình 3. Thực hiện nối dài các thông điệp mã hóa................................................11
Hình 4. Mã hóa Md5 vòng 1..................................................................................13
Hình 5. Thao tác mã hóa Md5...............................................................................13
Hình 6. Mã hóa Md5 vòng 2.................................................................................14
Hình 7. Mã hóa Md5 vòng 3..................................................................................14
Hình 8. Mã hóa Md5 vòng 4.................................................................................15




Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

2

Hình 9. Sơ đồ tạo khóa con của DES....................................................................22
Hình 10. Bảng trật tự khóa PC-1...........................................................................23
Hình 11. Khóa yếu.................................................................................................24
Hình 12. Các bước mã hóa 3DES..........................................................................25
Hình 13. Chương trình mã hóa, giải mã, crack Md5............................................28
Hình 14. Chương trình mã hóa, giải mã, crack 3DES..........................................29


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

3

LỜI MỞ ĐẦU
Ngày nay, nhu cầu bảo mật thông tin trên mạng là một nhu cầu cấp thiết.
Cùng với sự phát triển của Internet, việc xâm nhập bất hợp pháp các thông tin mật,
các chương trình và dữ liệu quan trọng, và phá hoại thông qua Internet cũng gia
tăng về số lượng, loại hình và kỹ thuật. Do đó, song song với việc phát triển và
khai thác các dịch vụ trên Internet, vấn đề đảm bảo an ninh trên mạng là một vấn
đề rất quan trọng.
Các nội dung thông tin lưu trữ và lưu truyền trên mạng luôn là đối tượng để
tấn công, do người sử dụng luôn truy nhập từ xa, thông tin xác thực người sử dụng
như mật khẩu, bí danh luôn phải truyền đi trên mạng. Những kẻ xâm nhập tìm mọi
cách giành được những thông tin này và từ xa truy cập vào hệ thống. Càng truy cập
với tư cách người dùng có quyền điều hành càng cao thì khả năng phá hoại càng

lớn.
Để tránh những rủi ro có thể xảy ra và đảm bảo việc truyền dữ liệu được an
toàn hơn, vừa đảm bảo thông tin luôn kết nối, vừa đảm bảo yếu tố bảo mật của
thông tin thì phương pháp tốt nhất là mã hoá thông tin.
Báo cáo sau đây trình bày về đề tài: “Tìm hiểu và xây dựng chương trình
thực hiện các giải thuật mã hóa trên mạng”. Trong khuôn khổ báo cáo, chúng em
thực hiện tìm hiểu về các giải thuật mã hóa được ứng dụng phổ biến trên Internet
hiện nay, và xây dựng được một ứng dụng mã hóa minh họa.


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

4

TỔNG QUAN VỀ ĐỀ TÀI
1. Bối cảnh và lý do thực hiện đề tài
Với sự phát triển của Internet như hiện nay, thông tin trên mạng mang nhiều
nguy cơ bị tấn công, xâm nhập bất hợp pháp. Việc bảo mật thông tin trên môi
trường Internet là rất cấp thiết. Để vừa đảm bảo thông tin luôn kết nối, vừa đảm
bảo yếu tố bảo mật của thông tin thì phương pháp tốt nhất là mã hoá thông tin. Mã
hóa giúp đảm bảo thông tin không thể bị truy cập bởi đối tượng thứ ba, loại trừ
việc nghe trộm những thông tin “nhạy cảm” khi nó được truyền qua Internet, dữ
liệu phải được mã hoá để không thể bị đọc được bởi những người khác ngoài người
gửi và người nhận.
Chính sự quan trọng của mã hóa, nên chúng em chọn đề tài này để tìm hiểu
rõ hơn về các giải thuật mã hóa hiện nay và cơ chế của việc mã hóa thông tin trên
mạng.

2. Mục tiêu của đề tài
Đề tài nhằm tìm hiểu được các giải thuật mã hóa MD5, 3DES,… Qua đó, xây

dựng chương trình ứng dụng lập trình socket cho phép người dùng chọn một
phương pháp mã hóa, gửi nội dung đã mã hóa qua môi trường mạng đến máy
server, tùy phương pháp mã hóa, máy server tiến hành giải mã và hiển thị lại nội
dung đã được mã hóa ở phía client.

3. Phương pháp triển khai đề tài
-

Tìm hiểu các kỹ thuật mã hóa, giải thuật mã hóa MD5, 3DES,…

-

Lập trình socket Client - Server

-

Thiết kế và lập trình ứng dụng, xây dựng chương trình mã hóa trong mô
hình client – server

4. Kết cấu của đồ án
Đồ án gồm các phần:
-

Cơ sở lý thuyết về các giải thuật mã hóa

-

Thiết kế và xây dựng chương trình mã hóa



Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

-

Kết quả thực hiện

5


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

6

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1. Giới thiệu
Mã hoá là một tiến trình biến đổi thông tin, sử dụng các thuật toán nhằm mục
đích không cho người khác có thể nắm bắt được nếu thiếu một vốn thông số nhất
định (key) để dịch ngược. Đi kèm với mã hoá là giải mã.
Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên
theo thuật toán và có thể so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit, TripleDES, 2048-bit RSA,…
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 phé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
thức mật mã vô nghĩa (code hay ciphertext). Chỉ ai có thông tin giải mã thì mới
giải mã được và đọc được dữ liệu.

2. Các thuộc tính yêu cầu
Mật mã hóa được sử dụng phổ biến để đảm bảo an toàn cho thông tin liên lạc.
Các thuộc tính được yêu cầu là:
-


Bí mật: Chỉ có người nhận đã xác thực có thể lấy ra được nội dung của
thông tin chứa đựng trong dạng đã mật mã hóa của nó. Nói khác đi, nó
không thể cho phép thu lượm được bất kỳ thông tin đáng kể nào về nội dung
của thông điệp.

-

Nguyên vẹn: Người nhận cần có khả năng xác định được thông tin có bị
thay đổi trong quá trình truyền thông hay không.

-

Xác thực: Người nhận cần có khả năng xác định người gửi và kiểm tra xem
người gửi đó có thực sự gửi thông tin đi hay không.

3. Kĩ thuật mã hoá chung
Các kĩ thuật mã hoá đều sử dụng các khoá (key) làm tác nhân thực hiện việc
khoá mã, thông thường khoá được thể hiện bằng độ dài của khoá tính theo bit, số
bits càng lớn thì tính bảo mật của phép mã hoá càng cao. Thông thường, để an toàn


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

7

thì các khoá thường có độ dài 128bits, phương pháp tấn công vét cạn sẽ phải dò là
2128 trường hợp.
Có 3 kĩ thuật mã hoá chính:
- Symmetric Encryption (Mã hóa đối xứng): Là phương pháp sử dụng cùng

một khóa để bảo mật dữ liệu, khóa này vừa dùng để mã hoá và giải mã dữ liệu
luôn. Vì vậy khóa này phải được chuyển một an toàn giữa hai đối tượng giao tiếp,
vì ai có được khóa này thì hoàn toàn có thể giài mã được thông tin. Khóa có thể
được cấu hình trong software hoặc hardware.
Thuật toán mã hóa đối xứng nhìn chung thực hiện nhanh nhưng an toàn chưa
cao vì có thể bị lộ khóa. Nên thuật toán này thường dùng cho việc mã hóa dữ liệu.
Ngày nay có 3 thuật toán mã hóa đối xứng được sử dụng nhiều: DES, 3DES, AES.
- Asymmetric Encryption (Mã hóa bất đối xứng): Là phương pháp sử dụng
hai khóa: public key và private key. Trong đó public key được cho tất cả thiết bị
khác, còn private key thì giữ bí mật cho riêng mỗi thiết bị. Hai khóa này là một
cặp, vì chỉ có private key mới giải mã được thông tin do public key mã hóa. Thuật
toán mã hóa bất đối xứng rất an toàn nhưng xử lý chậm, do đó thuật toán này
thường dùng cho chứng nhận số và quản lý khóa.
Sử dụng 2 thuật toán chính đó là: RSA và Diffiel-Hellman(DH), khi thiết lập
một IPsec tunnel mới thì các thiết bị Cisco sử dụng hai thuật toán này. RSA dùng
để chứng thực thiết bị ở xa, còn DH dùng để trao đổi khóa để phục vụ cho việc mã
hóa.
- Mã hóa một chiều (hàm băm): là phương pháp mà chuỗi mã hoá không
thể bị dịch ngược lại, mỗi chuỗi đã mã hoá chỉ có thể là ánh xạ của duy nhất một
chuỗi chưa mã hoá nhập vào. Các thuật toán mã hoá một chiều được dùng nhiều
trong quá trình xác thực, lưu mật khẩu, thông tin thẻ tín dụng… Nền tảng của loại
này có thể xếp vào cùng loại với mã hoá đối xứng.
Các thuật toán nổi tiếng được sử dụng nhiều nhất là MD-5 (Message-Digest
algorithm 5) và các thuật toán SHA (SHA-1, SHA-2). Mọi ứng dụng từ các forum
như IPB, VBB cho đến Yahoo! đều ứng dụng trong việc mã hoá mật khẩu của
users.


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng


8

4. Các giải thuật mã hóa:
i. Giải thuật MD5
1. Giới thiệu giải thuật MD5
MD5 (viết tắt của tiếng Anh Message-Digest algorithm 5, giải thuật phân loại
tin nhắn 5) là một hàm băm mật mã được sử dụng
phổ biến với giá trị băm dài 128-bit. Là một chuẩn
Internet (RFC 1321), MD5 đã được dùng trong
nhiều ứng dụng bảo mật, và cũng được dùng phổ
biến để kiểm tra tính toàn vẹn của tập tin. Một
bảng băm MD5 thường được diễn tả bằng một số
hệ thập lục phân 32 ký tự.
MD5 được thiết kế bởi Ronald Rivest vào
năm 1991 để thay thế cho hàm băm trước đó, MD4. Vào năm 1996, người ta phát
hiện ra một lỗ hổng trong MD5; trong khi vẫn chưa biết nó có phải là lỗi nghiêm
trọng hay không, những chuyên gia mã hóa bắt đầu đề nghị sử dụng những giải
thuật khác, như SHA-1 (khi đó cũng bị xem là không an toàn). Trong năm 2004,
nhiều lỗ hổng hơn bị khám phá khiến cho việc sử dụng giải thuật này cho mục đích
bảo mật đang bị đặt nghi vấn.
Đặc điểm của MD5
1/ Việc tính MD5 đơn giản, có khả năng xác định được file có kích thước
nhiều Gb.
2/ Không có khả năng tính ngược khi có mã MD5.
3/ Do bản chất ngẫu nhiên của hàm băm và số lượng cực lớn các giá trị hash
có thể, nên hầu như không có khả năng hai bản tin phân biệt có cùng giá trị hash.
4/ Giá trị MD5 phụ thuộc vào bản tin tương ứng.
5/ Mỗi chuỗi chỉ có một hash tương ứng.
6/ Giá trị MD5 phụ thuộc vào tất cả các bit của bản tin tương ứng.
Ví dụ:

dam+binh => e1aaaf6ff7131870015e95127619e5c9


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

9

Dam+Binh => 43562b831e42930f2864b3bd591290ec
MD5 có 2 ứng dụng quan trọng:
1/ MD5 được sử dụng rộng rãi trong thế giới phần mềm để đảm bảo rằng tập
tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra phần
mềm bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng MD5.
Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói mà nó phân phối, trong khi hệ
điều hành Windows sử dụng phần mềm của hãng thứ ba.
2/ MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là
biến đổi một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó
không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải
mất một khoãng thời gian vô tận (đủ để làm nản lòng các hacker).
Mục đích của MD5
Mục đích của việc mã hóa này là biến đổi một chuổi mật khẩu thành một
đoạn mã khác, sao cho từ đoạn mã đó không thể nào lần trở lại mật khẩu. Có nghĩa
là việc giải mã là không thể hoặc phải mất một khoảng thời gian vô tận (đủ để làm
nản lòng các hacker).

Hình 1.

Quá trình chứng thực của một User với Webserver


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng


10

2. Thuật toán mã hóa MD5
MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích
thước cố định 128 bits. Thông điệp đưa vào sẽ được cắt thành các khối 512 bits.
Thông điệp được đưa vào bộ đệm để chiều dài của nó chia hết cho 512. Bộ đệm
hoạt động như sau:
- Trước tiên, chèn bit 1 vào cuối thông điệp.
- Tiếp đó là hàng loạt bit 0 cho tới khi chiều dài của nó nhỏ hơn bội số của
512 một khoảng 64 bit .
- Phần còn lại sẽ được lấp đầy bởi một số nguyên 64 bit biểu diển chiều dài
ban đầu của thông điệp.
Thuật toán chính của MD5 hoạt động trên một bộ 128 bit. Chia nhỏ nó ra
thành 4 từ 32 bit, kí hiệu là A,B,C và D. Các giá trị này là các hằng số cố định. Sau
đó thuật toán chính sẽ luân phiên hoạt động trên các khối 512 bit. Mỗi khối sẽ phối
hợp với một bộ. Quá trình xử lý một khối thông điệp bao gồm 4 bước tương tự
nhau, gọi là vòng (“round”). Mỗi vòng lại gồm 16 quá trình tương tự nhau dựa
trên hàm một chiều F, phép cộng module và phép xoay trái,…

Hình 2.

Quá trình mã hóa


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

11

 Chi tiết các bước thực hiện

Bước 1: Thêm cái bit vào chuỗi
Thực hiện nối dài các thông điệp

Hình 3.

Thực hiện nối dài các thông điệp mã hóa

-

Thêm bit 1 vào để đánh dấu thông điệp.

-

Thêm vào k bit ‘0’ sao cho (b bit + bit 1 + k bit 0)mod 512=448
64 bit tiếp theo sẽ được thêm vào biểu thị chiều dài của chuổi bit ban
đầu.
(B bit + bit ‘1’ + k bit ‘0’ + 64 bit chiều dài) mod 512 = 0

Ví dụ: Ta có chuỗi 384bit

Bước 2: Khởi tạo bộ đệm
Một bộ đệm 4 word (A,B,C,D) được dùng để tính mã số thông điệp. Ở đây
mỗi A,B,C,D là một thanh ghi 32 bit. Những thanh ghi này được khởi tạo theo
những giá trị hex sau ( các byte thấp trước ) :
word A : 01 23 45 67
word B : 89 ab cd ef
word C : fe dc ba 98


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng


12

word D : 76 54 32 10
Bước 3: Xử lý thông điệp theo từng khối 16 word
Trước hết ta định nghĩa các hàm phụ, các hàm này nhận đầu vào là 3 word 32
bit và tạo ra một word 32 bit.

Với

lần lượt là XOR, AND, OR, NOT

Quá trình thực hiện xử lý của 4 hàm F ở trên:
Quá trình này sử dụng một bảng có 64 giá trị T[1 .. 64] được tạo ra từ hàm
sin. Gọi T[i] là phần tử thứ i của bảng, thì T[i]là phần nguyên của 4294967296*|
sin(i)| , i được tính theo radian.
Thực hiện:
/* Xử lý mỗi khối 16 word */
For (i = 0 to N/16-1) do
/* Copy block i into X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* of loop on j */
/* Lưu A vào AA, B vào BB, C vào CC, D và DD . Làm buffer */
AA = A
BB = B
CC = C
DD = D
Quá trình thực hiện các vòng



Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

Hình 4.

Hình 5.

Mã hóa Md5 vòng 1

Thao tác mã hóa Md5

13


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

Hình 6.

Mã hóa Md5 vòng 2

Hình 7.

Mã hóa Md5 vòng 3

14


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

Hình 8.


15

Mã hóa Md5 vòng 4

/*Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị
của nó trước khi vào vòng lặp )*/
A = A + AA
B = B + BB
C = C + CC
D = D + DD
Bước 4: In ra
Mã số thông điệp được tạo ra là A, B, C, D. Nghĩa là chúng bắt đầu từ byte
thấp của A và kết thúc là byte cao của D.
Mã giả cho giải thuật MD5.
//Chú ý: Tất cả các biến đều là biến không dấu 32 bit và bao phủ mô đun
2^32 khi tính toán
var int[64] r, k
//r xác định số dịch chuyển mỗi vòng
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22,
22}

7, 12, 17, 22,

7, 12, 17,


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

r[16..31] := {5, 9, 14, 20,

20}
r[32..47] := {4, 11, 16, 23,
23}
r[48..63] := {6, 10, 15, 21,
21}

5,

9, 14, 20,

5,

9, 14, 20,

16

5,

9, 14,

4, 11, 16, 23,

4, 11, 16, 23,

4, 11, 16,

6, 10, 15, 21,

6, 10, 15, 21,


6, 10, 15,

//Sử dụng phần nguyên nhị phân của sin của số nguyên làm hằng số:
for i from 0 to 63
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
//Khởi tạo
var int h0
var int h1
var int h2
var int h3
//Tiền
append
append
append
endian

biến:
:= 0x67452301
:= 0xEFCDAB89
:= 0x98BADCFE
:= 0x10325476

xử lý:
"1" bit to message
"0" bits until message length in bits ≡ 448 (mod 512)
bit (bit, not byte) length of unpadded message as 64-bit littleinteger to message

//Xử lý mẩu tin trong đoạn 512-bit tiếp theo:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w[i], 0 ≤ i ≤ 15

//Khởi tạo giá trị băm cho đoạn này:
var int a := h0
var int b := h1
var int c := h2
var int d := h3
//Vòng lặp chính:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 ≤ i ≤ 31
f := (d and b) or ((not d) and c)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
f := b xor c xor d
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f := c xor (b or (not d))
g := (7×i) mod 16
temp
d :=
c :=
b :=

:= d
c
b
b + leftrotate((a + f + k[i] + w[g]) , r[i])



Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

17

a := temp
//Thêm bảng băm của đoạn vào kết quả:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
var int digest := h0 append h1 append h2 append h3 //(expressed as
little-endian)
//định nghĩa hàm dịch trái
leftrotate (x, c)
return (x << c) or (x >> (32-c));

Ghi chú: Thay vì hàm hóa RFC 1321 gốc như trên, phần sau có thể được dùng để tăng độ hiệu
quả (hữu ích nếu ngôn ngữ assembly được dùng - còn không, chương trình dịch sẽ tự động tối ưu
hóa đoạn mã ở trên):
(0 ≤ i ≤ 15): f := d xor (b and (c xor d))
(16 ≤ i ≤ 31): f := c xor (d and (b xor c))

3. Các phương pháp crack MD5
MD5 là giải thuật mã hóa một chiều nên việc giải mã chỉ có thể dựa vào việc
dò tìm từ cơ sở dữ liệu.
Crack MD5 có các phương pháp sau:
• Dictionary: là một kỹ thuật tấn công bằng cách thử nghiệm những trường
hợp mật khẩu có thể người khác đã sử dụng. Hoạt động theo phương thức
thử nghiệm với tất cả các key trong danh sách cho sẵn: sử dụng một danh
sách (được sắp xếp) các mật khẩu (hoặc hash password) có sẵn rồi thử

đăng nhập (hoặc so mẫu với mật khẩu cần crack). Với phương pháp này,
dữ liệu thử được chia sẻ rất nhiều, không tốn quá nhiều thời gian và công
sức nhưng đôi khi đem lại hiệu quả khả quan. Một số trang sử dụng
phương pháp dictionary để crack md5: /> />• Brute Force: được sử dụng để crack plaintext hash password luôn thành
công, chủ yếu dựa vào sức mạnh tính toán của máy tính: thử mọi trường
hợp xảy ra (brute force) bằng cách duyệt qua tất cả các hash password có


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

18

thể có được tạo nên từ bảng ký tự. Hoạt động theo phương thức: tạo ra tất
cả các key có thể có và so sánh với key input. Có rất nhiều công cụ thực
hiện crack md5 bằng phương pháp brute force như md5brute, cain&able,
BarsWF,…
• Rainbow table: là một bảng tính toán được sử dụng trong việc đảo chiều
các hàm băm mật mã, thường được sử dụng rộng rải trong việc crack các
mật mã đã được băm. Thường được sử dụng để khôi phục các mật khẩu
bằng các ký tự thô (plaintext) với một độ dài nhất định và có thể chứa
thêm một số các ký tự đặc biệt. Đó là một hình thức cân bằng thời gian
bộ nhớ, sử dụng CPU ít hơn nhưng chi phí lưu trữ nhiều hơn và ngược lại.
Có nhiều công cụ sử dụng rainbow table để crack MD5, nên sử dụng
phần mềm rainbowcrack.
Trong khuôn khổ bài báo cáo này chúng em xin trình bày về phương pháp
Dictionary và phương pháp Brute Force.
• Dictionary
Xây dựng 1 cơ sở dữ liệu ThongTin có bảng INFO bao gồm các trường
MD5(là mã MD5) và PASS (là mật khẩu người dùng nhập vào).


Thuật toán
-

Từ Client: nhập chuỗi MD5 cần được crack.

-

Server: kết nối cơ sở dữ liệu. So sánh mã MD5 nhận được từ Client
với các bản ghi ở trường MD5 cho đến khi nào giống nhau thì dừng lại
và đưa ra kết quả.


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

19

Bằng cách này ta có thể tìm được Pass nhanh chóng, tiết kiệm thời gian.
Nhưng phải mất nhiều công sức để nhập dữ liệu cho cơ sở dữ liệu.
• Brute Force
Thực chất là giải thuật vét cạn, kiểm tra từng trường hợp của Pass cho đến
khi nào đúng thì dừng lại.
Thuật toán
-

Từ Client: nhập chuỗi MD5 cần được crack.

-

Server:


Duyệt tất cả các trường hợp a b .... z aa bb ... zz aaa bbb ..... và các ký tự đặc
biệt
public static String CrackMd5(String md5) {
k = 1;
Mamd5 = md5;
while (dem == 0) {
tinh(1);
k++;
}
dem=0;
return maCrack;
}
public static int tinh(int i) {
int j;
for (j = 0; j <= 95; j++) {
s[i] = j;
if (i == k) {
KiemTra();
} else {
tinh(i + 1);
}
}
return 0;
}

Chuyển từng chuỗi trên sang mã MD5 và so sánh với mã MD5 nhận từ
Client cho đến khi giống nhau thì dùng lại.
public static void KiemTra() {
String str = "";



Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

20

String magiai = "";
for (int i = 1; i <= k; i++) {
str = str + (char) (s[i] + 32);
magiai = md5.encrypt(str);
if (str.length() == k) {
if (magiai.equals(Mamd5)) {
dem = 1;
maCrack = str;
}
}
}
}

Bằng cách này chúng ta có thể nhận thấy rằng bất kỳ mã MD5 nào cũng đều
có thể crack được. Tuy nhiên đối với những mã MD5 của Pass nhiều ký tự thì thời
gian crack là rất lâu. Về vấn đề này truy cập sẽ tính
được thời gian để crack được dựa vào số ký tự của Pass, tốc độ xử lý của máy tính,
chuỗi bao gồm những ký tự như thế nào...

Thời gian crack được pass có 10 ký tự là 4274902 năm.

ii. Giải thuật Triple-DES (3DES)
a. Tìm hiểu giải thuật DES
Năm 1972, Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (National Institute
of Standards and Technology-NIST) đặt ra yêu cầu xây dựng một thuật toán mã

hoá bảo mật thông tin với yêu cầu là dễ thực hiện, sử dụng được rộng rãi trong
nhiều lĩnh vực và mức độ bảo mật cao. Năm 1974, IBM giới thiệu thuật toán
Lucifer, thuật toán này đáp ứng hầu hết các yêu cầu của NIST. Sau một số sửa đổi,


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

21

năm 1976, Lucifer được NIST công nhận là chuẩn quốc gia Hoa kỳ và được đổi tên
thành Data Encryption Standard (DES).
DES là thuật toán mã hoá bảo mật được sử dụng rộng rãi nhất trên thế giới,
thậm chí, đối với nhiều ngưòi DES và mã hoá bảo mật là đồng nghĩa với nhau. ở
thời điểm DES ra đời ngưòi ta đã tính toán rằng việc phá được khoá mã DES là rất
khó khăn, nó đòi hỏi chi phí hàng chục triệu USD và tiêu tốn khoảng thời gian rất
nhiều năm. Cùng với sự phát triển của các loại máy tính và mạng máy tính có tốc
độ tính toán rất cao, khoá mã DES có thể bị phá trong khoảng thời gian ngày càng
ngắn với chi phí ngày càng thấp. Dù vậy việc này vẫn vượt xa khả năng của các
hacker thông thường và mã hoá DES vẫn tiếp tục tồn tại trong nhiều lĩnh vực như
ngân hàng, thương mại, thông tin... nhiều năm nữa đặc biệt với sự ra đời của thế hệ
DES mới-"Triple DES".
Vậy DES hoạt động như thế nào, bài báo này sẽ giới thiệu nguyên tắc làm
việc của DES, một số ứng dụng cụ thể của bảo mật DES trong bảo mật thông tin
trên thế giới cũng như ở nước ta xin được giới thiệu trong các bài viết sau. Kể từ
khi DES ra đời, nhiều thuật toán mã hoá bảo mật khác cũng được phát triển tương
tự DES hoặc dựa trên DES, một khi nắm được các nguyên tắc của DES bạn sẽ dễ
dàng hiểu các thuật toán này.
Yêu cầu đặt ra nếu muốn bảo mật tốt hơn là phải tìm được một thuật toán sao
cho việc thực hiện không quá phức tạp nhưng xác suất tìm ra chìa khoá bằng
cách thử tất cả các trường hợp (brute-force) là rất nhỏ (số lần thử phải rất lớn).

Mô tả tổng quan
Thuật toán DES là thuật toán mở, nghĩa là mọi người đều biết thuật toán này.
Điều quan trọng nhất là chìa khoá của DES có độ dài tới 56 bit, nghĩa là số lần thử
tối đa để tìm được chìa khoá lên đến 2^56, trung bình là 2^55 =
36.028.797.018.963.968 lần, một con số rất lớn!.
DES được thực hiện nhờ các phép dịch, hoán vị và các phép toán logic trên
các bit. Mỗi ký tự trong bức thư hay bản tin cần mã hoá được biểu diễn bởi 2 số
hexa hay 8 bít. DES mã hoá từng khối 64 bít tương đương 16 số hexa. Để thực hiện
việc mã hoá DES sử dụng một chìa khoá cũng dưới dạng 16 số hexa hay 64 bít tức
8 byte, nhưng các bít thứ 8 trong các byte này bị bỏ qua trong khi mã hoá vì vậy
độ lớn thực tế của chìa khoá là 56 bit. Ví dụ, ta mã hoá một bản tin


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

22

hexa "0123456789ABCDEF" với chìa khoá là "5A5A5A5A5A5A5A5A" thì kết
quả là "72AAE3B3D6916E92". Nếu kết quả này được giải mã với cùng chìa khoá
"5A5A5A5A5A5A5A5A"

thì

ta

sẽ

thu

lại


được

đúng

bản

tin

"0123456789ABCDEF". DES bao gồm 16 vòng, nghĩa là thuật toán chính được lặp
lại 16 lần để tạo ra bản tin được mã hoá.
Thuật toán
 Chuẩn bị khóa
Bước đầu tiên là chuyển 64 bit chìa khoá qua một bảng hoán vị gọi là
Permuted Choice hay PC-1 để thu được chìa khoá mới có 56 bit.
Input: khóa 64 bit K = k1k2...k64 (bao gồm cả 8 bit kiểm tra chẵn lẻ).
Output: 16 khóa con 48 bit Ki, 1<= i <=16.

Hình 9.

Sơ đồ tạo khóa con của DES

64 bit đầu vào sẽ còn giảm xuống 56 bit bằng cách bỏ đi 8 bit (ở các vị trí
chia hết cho 8), các bit kiểm tra chẵn lẻ. Sau đó 56 bit này được trích lấy 48 bit để
sinh ra 16 khóa của DES.


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

23


Hình 10. Bảng trật tự khóa PC-1
Sau khi vệc chuẩn bị chìa khoá và dữ liệu mã hoá hoàn thành, thực hiện mã
hoá bằng thuật toán DES. Đầu tiên, khối dữ liệu đầu vào 64 bit được chia thành hai
nửa, L và R. L gồm 32 bit bên trái và R gồm 32 bit bên phải. Quá trình sau đây
được lặp lại 16 lần tạo thành 16 vòng của DES gồm 16 cặp L[0]-L[15] và R[0]R[15]:
1.

R[r-1]- ở đây r là số vòng, bắt đầu từ 1- được lấy và cho qua bảng E (E-

bit Selection Table), bảng này giống như một bảng hoán vị, có điều là một số bit
được dùng hơn một lần do vậy nó sẽ mở rộng R[r-1] từ 32 bit lên 48 bit để chuẩn bị
cho bước tiếp theo.
2.

48 bit R[r-1] được XOR với K[r] và được lưu trong bộ nhớ đệm, vì vậy

R[r-1] không thay đổi.
3.

Kết quả của bước trước lại được chia thành 8 đoạn, mỗi đoạn 6 bit, từ

B[1] đến B[8]. Những đoạn này tạo thành chỉ số cho các bảng S (Substitution) được
sử dụng ở bước tiếp theo. Các bảng S, là một bộ 8 bảng (S[1]-S[8]) 4 hàng, 16 cột.
Các số trong bảng có độ dài 4 bit vì vậy có giá trị từ 0 đến 15.
4.

Bắt đầu từ B[1], bit đầu và cuối của khối 6 bit được lấy ra và sử dụng

làm chỉ số hàng của bảng S[1], nó có giá trị từ 0 đến 3, và 4 bit giữa được dùng làm

chỉ số cột, từ 0 đến 15. Giá trị được chỉ đến trong bảng S được lấy ra và lưu lại.
Việc này được lặp lại đối với B[2] và S[2] cho đến B[8] và S[8]. Lúc này bạn có 8
số 4 bit, khi nối lại với nhau theo thứ tự thu được sẽ tạo ra một chuỗi 32 bit.
5.

Kết quả của bước trước được hoán vị bit bằng bảng hoán vị P

(Permutation).
6.

Kết quả thu được sau khi hoán vị được XOR với L[r-1] và chuyển vào

R[r]. R[r-1] được chuyển vào L[r].


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

7.

24

Lúc này bạn có L[r] và R[r] mới. Bạn tiếp tục tăng r và lặp lại các bước

trên cho đến khi r= 17, đIều đó có nghĩa là 16 vòng đã được thực hiện và các chìa
khoá phụ K[1]-K[16] đã được sử dụng.
Khi đã có L[16] và R[16], chúng được ghép lại với nhau theo cách chúng bị
tách ra (L[16] ở bên trái và R[16] ở bên phải) thành 64 bit. 64 bit này được hoán vị
để tạo ra kết quả cuối cùng là dữ liệu 64 bit đã được mã hoá.
Điểm yếu của DES
 Tính bù: /u là ký hiệu phần bù. Nghĩa là y = DES(x,k) => /y = DES(/x,/k).

Giúp loại trừ một số khóa phải thử khi tiến hành giải mã theo cách vét cạn.
 Khóa yếu là các khóa mà theo thuật toán sinh khóa con thì 16 khóa đều như
nhau k1 = k2 = .... = k16. Điều đó khiến cho việc mã hóa và giải mã với khóa yếu
là giống hệt nhau. Có 4 khóa yếu:

Hình 11. Khóa yếu
 Theo thời gian sự phát triển của máy tính, việc giải mã nhanh hơn.
Phá khóa DES
Năm 1998, một nhóm nghiên cứu đã chi phí 220.000USD để chế tạo một thiết
bị có thể thử toàn bộ số chìa khoá DES 56 bit trong trung bình 4,5 ngày. Tháng 7
năm 1998 họ thông báo đã phá chìa khoá DES trong 56 giờ. Thiết bị này gọi là
Deep Crack gồm 27 board mạch, mỗi board chứa 64 chip và có khả năng thử 90 tỷ
chìa khoá trong một giây.
Tuy nhiên, việc phá khóa Triple DES là điều rất khó khăn, một chuyên gia về
bảo mật đã cho rằng " Không có đủ silic trong giải ngân hà (để chế tạo chip-TG)
cũng như không đủ thời gian trước khi mặt trời bị phá huỷ để phá khoá Triple
DES".


Xây dựng chương trình thực hiện các giải thuật mã hóa trên mạng

25

b. Giới thiệu giải thuật 3DES
Triple Data Encryption Standard (3DES): là DES được bổ sung thêm một số
tính năng cao cấp, nó thực hiện mã hóa dữ liệu thông qua việc xử lý mỗi block 3
lần và mỗi lần với một khóa khác nhau.Trước hết nó sẽ dùng một khóa để mã hóa
plain-text thành ciphertext, sau đó lại tiếp tục dùng một khóa khác nữa để mã hóa
ciphertext, và tiếp tục mã hóa ciphertext này với khóa thứ 3, nghĩa là 3DES sử
dụng một khóa 168-bit, nên đó an toàn hơn và tất nhiên là việc xử lý sẽ chậm hơn

DES.

Hình 12. Các bước mã hóa 3DES
3. Thuật toán mã hóa 3DES
3DES thực ra là mã hóa cùng 1 thông tin qua 3 lần mã hóa DES với 3 khóa
khác nhau. Do đó, chiều dài mã khóa sẽ lớn hơn và an toàn sẽ cao hơn so với DES.


×