Báo cáo mã hóa và cracking md5
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
TRƯỜNG ĐH KỸ THUẬT CÔNG NGHỆ TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
*************************
MÔN: BẢO
MẬT MẠNG
BÁO CÁO MÃ HÓA VÀ
CRACKING MD5
GVHD: NGUYỄN ĐỨC QUANG
SINH VIÊN MẠNG KHÁO 2008 THỰC HIỆN
GVHD: NGUYỄN ĐỨC QUANG
Page 1
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
THỰC HIỆN BỞI CÁC NHÓM SINH VIÊN
08DTHM:
1.
LÊ GIA TỰ
0851020220
2.
NGUYỄN MINH QUANG
0851020161
3.
NUYỄN VĂN THÀNH
0851020187
4.
TRẦN MINH TÂN
0851020197
5.
HỒ SĨ QUANG
0851020162
6.
PHẠM ANH QUANG
0851020157
GVHD: NGUYỄN ĐỨC QUANG
Page 2
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
MÃ HÓA MD5
I. GIỚI THIỆU VỀ MÃ HÓA VÀ THUẬT TOÁN MD5:
1. MÃ HÓA LÀ GÌ?
Mã hóa là phương pháp để biến thông tin từ định dạng bình thường sang
dạng thông tin không thể hiểu được nếu không có phương tiện giải mã.
VD: Từ ngàn xưa ông cha ta đã biết dùng các cách mã hóa để truyền thông
tin cơ mật như ghi chữ ngược, đọc chữ thông qua gương,dịch chuyển chữ cái…
Vì sao chúng ta cần phải mã hóa?
- Nhu cầu riêng tư, tính bảo mật
- Toàn vẹn của thông tin
Mã hóa cũng là nền tảng của chữ ký điện tử, hệ thống PKI…
Chữ ký điện tử là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh,
video...) nhằm mục đích xác định người chủ của dữ liệu đó.
Khóa công khai (PKI) thường được dùng để chỉ toàn bộ hệ thống
bao gồm nhà cung cấp chứng thực số (CA) cùng các cơ chế liên quan
đồng thời với toàn bộ việc sử dụng các thuật toán mật mã hóa khóa công
khai trong trao đổi thông tin.
2. MD 5 LÀ GÌ?
MD5 (Message - Digest - algorithm 5)
giải thuật tiêu hóa tập tin là một
chuẩn Internet (RFC 1321). Có khả năng băm
mã hóa tập tin bất kỳ thành chuỗi HEX 32 ký
tự, tương đương 128-bit (mỗi ký tự hex 4-bit
x 32 ký tự = 128 bit).
Hoặc có thể định nghĩa theo cách khác.
MD5 là cách căn bản để lấy chùm ký tự ( là
digest, alphabeic hay gì khác ), được gọi là
string nhập vào và cho ra là 32 ký tự hexa.
(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f).
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
GVHD: NGUYỄN ĐỨC QUANG
Page 3
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
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.
3. ĐẶC ĐIỂM MD5
• Việc tính MD đơn giản, có khả năng xác định được file có kích thước nhiều
Gb.
• Không có khả năng tính ngược, khi tìm ra MD.
• 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.
• Giá trị MD phụ thuộc vào bản tin tương ứng.
• Một chuổi chỉ có duy nhất một hash.
• Giá trị MD phụ thuộc vào tất cả các bit của bản tin tương ứng.
Ví dụ :
love is blue 03d4ad6e7fee3f54eb46b5ccde58249c
love is Blue 82b76f8eeb4a91aa640f9a23016c7b1c
II. ỨNG DỤNG
1. BẢO TOÀN THÔNG TIN
MD5 được dùng rộng rãi trong các phần mềm trên toàn thế giới để đảm bảo
việc truyền tập tin được nguyên vẹn. Các nhà phát triển ứng dụng thường dùng
MD5 trong việc cho phép download file. Họ sẽ cho “xuất bản” một tín hiệu MD
của file download. Khi chúng ta tải file về , thì file chúng ta vừa download sẽ có
một chuỗi MD:
• Nếu tín hiệu này khớp với tín hiệu các nhà phát triển ứng dụng đã “xuất
bản” ở trên. Thì OK, ko có vấn đề.
• Nếu hai tín hiệu này khác nhau, có thể có trong file download có virut hay
tập tin đó đã bị thay đổi.
GVHD: NGUYỄN ĐỨC QUANG
Page 4
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Để tăng tính bảo mật, ta có thể thêm key vào mật khẩu trước khi băm
chúng. Băm nhiều lần hơn, .
Tuy nhiên, hiện nay dễ dàng tạo ra xung đột MD5, một người có thể tạo ra
một tập tin để tạo ra tập tin thứ hai với cùng một checksum, do đó kỹ thuật này
không thể chống lại một vài dạng giả mạo nguy hiểm. Ngoài ra, trong một số
trường hợp checksum không thể tin tưởng được (ví dụ, nếu nó được lấy từ một
lệnh như tập tin đã tải về), trong trường hợp đó MD5 chỉ có thể có chức năng kiểm
tra lỗi: nó sẽ nhận ra một lỗi hoặc tải về chưa xong, rất dễ xảy ra khi tải tập tin lớn.
2. BẢO MẬT
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).
GVHD: NGUYỄN ĐỨC QUANG
Page 5
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Quá trình chứng thực của một User với Webserver
GVHD: NGUYỄN ĐỨC QUANG
Page 6
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
III. THUẬT TOÁN
Giải thuật MD5 chính hoạt động trên trạng thái 128-bit, được chia thành 4 từ 32-bit,
với ký hiệu A, B, C và D. Chúng được khởi tạo với những hằng số cố định. Giải thuật
chính sau đó sẽ xử lý các khối tin 512-bit, mỗi khối xác định một trạng thái. Quá trình xử
lý khối tin bao gômg bốn giai đoạn giống nhau, gọi là vòng; mỗi vòng gồm có 16 tác vụ
giống nhau dựa trên hàm phi tuyến F, cộng Module, và dịch trái.
Thực hiện qua các bước sau:
Bước 1: Thêm các bit vào chuổi
Thực hiện nối dài thông điệp. (theo hình vẽ thông điệp là B) để chi nhỏ thành các module 512.
• Thêm bit ‘1’ vào cuối thông điệp để đánh dấu.
• Thêm vào k bit ‘0’ sao cho (b bit + bit 1 + k bit 0)mod 512=448
GVHD: NGUYỄN ĐỨC QUANG
Page 7
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
• 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
Quá trình thêm bit
Bước 2: Khởi tạo bộ đệm MD
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
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.
GVHD: NGUYỄN ĐỨC QUANG
Page 8
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Với
lần lượt là XOR, AND, OR, NOT
Đây là 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
GVHD: NGUYỄN ĐỨC QUANG
Page 9
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Quá trình thực hiện qua các vòng
GVHD: NGUYỄN ĐỨC QUANG
Page 10
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
GVHD: NGUYỄN ĐỨC QUANG
Page 11
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
/* Then perform the following additions. (That is increment each
of the four registers by the value it had before this block was started.) */
/* 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
end /* of loop on i */
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 ta bắt đầu từ byte
thấp của A, kết thúc với byte cao của D.
GVHD: NGUYỄN ĐỨC QUANG
Page 12
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
MÃ GIẢ
Mã giả cho giải thuật MD5 như sau.
//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
r[ 0..15] :=
r[16..31] :=
r[32..47] :=
r[48..63] :=
số dịch
{7, 12,
{5, 9,
{4, 11,
{6, 10,
chuyển mỗi vòng
17, 22, 7, 12,
14, 20, 5, 9,
16, 23, 4, 11,
15, 21, 6, 10,
17,
14,
16,
15,
22,
20,
23,
21,
7, 12, 17, 22,
5, 9, 14, 20,
4, 11, 16, 23,
6, 10, 15, 21,
7, 12, 17, 22}
5, 9, 14, 20}
4, 11, 16, 23}
6, 10, 15, 21}
//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
biến:
:= 0x67452301
:= 0xEFCDAB89
:= 0x98BADCFE
:= 0x10325476
//Tiền xử lý:
append "1" bit to message
append "0" bits until message length in bits ≡ 448 (mod 512)
append bit (bit, not byte) length of unpadded message as 64-bit little-endian
integer 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
GVHD: NGUYỄN ĐỨC QUANG
Page 13
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
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 :=
a :=
:= d
c
b
b + leftrotate((a + f + k[i] + w[g]) , r[i])
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 littleendian)
//đị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))
IV. CÁC GIẢI PHÁP THAY THẾ TƯƠNG TỰ
Bất cứ thuật toán mã hóa nào rồi cũng bị giải mã. Với MD5, ngay từ năm
1996, người ta đã tìm thấy lỗ hổng của nó. Mặc dù lúc đó còn chưa rõ ràng lắm nhưng
các chuyên gia mã hóa đã nghĩ đến việc phải đưa ra một thuật giải khác, như là SHA1…
GVHD: NGUYỄN ĐỨC QUANG
Page 14
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
SHA-1 được coi là chuẩn mực "vàng" về thuật toán. Nó được tích hợp bên
trong rất nhiều chương trình thông dụng như PGP và SSL, được chứng thực bởi Viện
Chuẩn Công nghệ Quốc gia và là thuật toán chữ ký điện tử duy nhất được Cơ quan
Chuẩn Chữ ký Số của chính phủ Mỹ phê chuẩn.
V. KẾT LUẬN
Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một dạng
“vân tay“ hay mã số của thông điệp với độ dài tùy ý.
Người ta cho rằng độ khó để tìm được 2 thông điệp có cùng mã số là khoảng 2^64
bước tính, và độ khó để tim được một thông điệp với mã số cho trước là 2^128 bước
tính.
- Với bất kỳ giá trị x, không thể tính được y ≠ x sao cho H(y) = H(x).
- Không thể tính được một cặp (x, y) sao cho H(x) = H(y).
Do đó MD5 được sử dụng rộng rãy trong các ứng dụng, web, bảo mật, và chứng
thực…
Tuy nhiên ở một mức độ nào đó thì md 5 vẫn có thể crack được.
VI. DEMO SNIFF & CRACK MD5:
Tuy mức độ bảo mật của MD5 được đánh giá là khá tốt và không thể dịch ngược. Nhưng
còn việc crack Đoạn Hash MD5 là có thể thực hiện được. Trong bài demo này tôi sẽ thực
hiện việc bắc gói tin login đăng nhập của diễn đàn http://ithutech.net với thông tin
password đã được mã hóa bằng MD5.
GVHD: NGUYỄN ĐỨC QUANG
Page 15
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Đồ nghề cần chuẩn bị:
• Trình duyệt internet…
• Wireshark để bắt lưu lượng login.
• Cain & Abel
GVHD: NGUYỄN ĐỨC QUANG
Page 16
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Các bước thực hiện:
B1:
Dùng trình duyệt mở trang web cần tấn công.
B2: Mở wireshark và chọn card mạng đang sử dụng
B3: Trở lại trang diễn đàn và tiến hành login
B4: Lọc gói tin http login.php
GVHD: NGUYỄN ĐỨC QUANG
Page 17
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Xem nội dung bắt được
B4: Tiến hành cracking đoạn password MD5 vừa bắt được bằng cain & Abell dựa
vào giải thuật Brute-force attack
GVHD: NGUYỄN ĐỨC QUANG
Page 18
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Cho đoạn hash MD5 vào
Định dạng pass cần tiềm
Giới hạn chiều dài pass
Định dạng pass có thể là a-z, A-Z, 0-9, !@#...
GVHD: NGUYỄN ĐỨC QUANG
Page 19
BÁO CÁO MÃ HÓA VÀ CRACKING MD5
Và kết quả
Kết quả tiềm được là: 0989612220
Thử nghiệm thành công với một số kiểu password kiểu tên người, số điện thoại,
ngày tháng năm sinh…
GVHD: NGUYỄN ĐỨC QUANG
Page 20
- Xem thêm -