Tải bản đầy đủ (.docx) (25 trang)

Bài tập lớn Thuật toán SHA1

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 (338.18 KB, 25 trang )

MỤC LỤC

1


DANH MỤC TỪ VIẾT TẮT
CRHFs

Collosion Resistant Hash Functions

FIPS

Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ

IPSEC

Internet Protocol Security

MAC

Message Authentication Code

NIST

National Institute of Standards and Technology

OWHFs

One Way Hash Functions

PGP



Pretty Good Privacy

SHA

Secure Hash Algorithm

SSH

Secure Shell

SSL

Secure Socket Layer

TLS

Transport Layer Security

2


DANH MỤC HÌNH VẼ

Hình 3- 1: Đoạn text sau khi sử dụng thuật toán SHA1..................................20
Hình
32:
Crack
bằng
giải

thuật
Brute-Force
Attack....................................... 20

3


LỜI MỞ ĐẦU
Ngày nay với sự phát triển nhanh chóng của công nghệ thông tin,
đa số các hoạt động đều thực hiện qua mạng internet thì vấn đề bảo mật
và an toàn thông tin ngày càng trở nên quan trọng hơn bao giờ hết.
Trong lĩnh vực an toàn thông tin thì các thuật toán mật mã có một
vai trò hết sức quan trọng, và trong các thuật toán mật mã không thể
không nhắc tới các thuật toán hàm băm mật mã. Hàm băm mật mã là
thành phần quan trọng trong nhiều ứng dụng bảo mật thông tin như bảo
vệ tính toàn vẹn dữ liệu, thành phần trong cấu trúc hàm dẫn xuất khóa.
Tuy nhiên, cùng với sự phát triển của khoa học công nghệ thì các họ hàm
băm mật mã đang được dùng phổ biến như MD5, SHA đã không còn đảm
bảo được tính an toàn của chúng.
Chính vì những lý do trên mà nhóm chúng em đã lựa chọn nghiên
cứu đề tài: “Thuật toán SHA-1”. Nội dung đề tài bao gồm:
Chương 1. Tổng quan về hàm băm mật mã.
Chương 2. Hàm băm SHA-1.
Chương 3. Triển khai hàm băm SHA-1 và crack bằng giải thuật
Brute-Force Attack.
Do thời gian có hạn nên đề tài của chúng em còn nhiều thiếu sót.
Chúng em rất mong nhận được sự góp ý, chỉ bảo của thầy để đề tài của
chúng em được hoàn thiện hơn. Chúng em xin chân thành cảm ơn!

4



CHƯƠNG 1. TỔNG QUAN VỀ HÀM BĂM MẬT MÃ
1.1.

Giới thiệu

Trong ngành mật mã học, hàm băm mật mã là hàm băm với một số tính
chất bảo mật nhất định để phù hợp với việc sử dụng trong nhiều ứng dụng bảo
mật thông tin đa dạng như chứng thực (authentication) và kiểm tra tính toàn vẹn
của thông điệp (message intergrity). Một hàm băm nhận đầu vào là một xâu ký
tự dài (hay thông điệp) có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ
dài cố định, đôi khi được gọi là tóm tắt thông điệp hoặc chữ ký số.
Hàm băm (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.
Hàm h được gọi là hàm băm nếu nó có ít nhất hai tính chất sau:
• Tính chất nén: h sẽ ánh xạ một đầu vào x có độ dài bit hữu hạn tùy ý tới một đầu
ra h(x) có độ dài bit n hữu hạn.
• Tính chất dễ dàng tính toán: Với h cho trước và một đầu vào x, có thể dẽ hàng
tính được h(x).
Tính an toàn hàm băm và hiện tượng đụng độ:
• Hàm băm được xem là an toàn đối với hiện tượng đụng độ khi rất khó tìm được
2 thông điệp có cùng giá trị băm.
• Trong một tập hợp mà phần tử mang một trong N giá trị cho trước với xác suất
bằng nhau, cần khoảng N phép thử ngẫu nhiên để tìm ra một phần tử có cùng giá
trị.
Phương pháp tấn công dựa vào đụng độ:
• Tìm ra hai thông điệp có nội dung khác nhau nhưng cùng giá trị băm.
• Ký tên trên một thông điệp nhưng sau đó người ký sẽ không thừa nhận đây là
chữ ký của mình mà nói rằng mình đã ký trên một thông điệp khác. Như vậy,

cần phải chọn hai thông điệp đụng độ với nhau trước khi ký.
• Tính một chiều:
- Hàm băm được xem là hàm một chiều khi cho trước giá trị băm, không thể tái
tạo lại thông điệp ban đầu, còn gọi là “tiền ảnh”. Như vậy, trong trường hợp lý
5


tưởng, cần phải thực hiện hàm băm cho khoảng 2 n thông điệp để tìm ra được
“tiền ảnh” tương ứng của một giá trị băm.
- Nếu tìm ra được một phương pháp tấn công cho phép xác định được “tiền ảnh”
tương ứng của một giá trị băm cho trước thì thuật toán băm sẽ không còn an
toàn nữa. Cách tấn công nhằm tạo ra một thông điệp khác với thông điệp ban
đầu nhưng có cùng giá trị băm gọi là tấn công “tiền ảnh thứ hai” (Second
Preimage Attack).
1.2. Các tính chất của hàm băm mật mã
Hầu hết các hàm băm mật mã được thiết kế với xâu đầu vào có độ dài tùy ý
và kết quả đầu ra là một giá trị băm có độ dài cố định. Hàm băm mật mã phải có
thể chống lại được tất cả các kiểu tấn công phân tích. Ba tính chất quan trọng
của hàm băm mật mã là:
• Tính kháng tiền ảnh:
Với mọi đầu ra y cho trước, không thể tìm thấy được bất kỳ dữ liệu
đầu vào x sao cho h(x)= y. Các hàm thiếu tính chất này sẽ bị tổn thương bởi các
tấn công tiền ảnh.

Tính kháng tiền ảnh thứ hai:
Với mọi dữ liệu đầu vào x cho trước và y=h(x), không thể tính toán
để tìm ra được giá trị x’ ≠ x sao cho h(x’) = h(x). Các hàm thiếu tính chất này sẽ
bị tổn thương bởi các tấn tiền ảnh thứ hai.

Tính kháng va chạm:

Không thể tính toán để tìm được hai dữ liệu đầu vào x và x ’ phân
biệt sao cho chúng có cùng giá trị băm h(x)= h(x’). Tính chất này yêu cầu rằng
một giá trị băm tối thiểu cũng mạnh hơn yêu cầu kháng tiền ảnh, hơn nữa các va
chạm có thể tìm được bởi tấn công nghịch lý ngày sinh.

6


1.3. Phân loại hàm băm mật mã
1.3.1. Hàm băm có khóa
Các hàm băm có khóa được sử dụng để xác thực thông báo và thường được
gọi là các thuật toán tạo mã xác thực thông báo (MAC). MAC dựa trên các mật
mã khối.



MAC nhận hai giá trị đầu vào:
Thông điệp cần tính giá trị băm.
Khóa bí mật để băm văn bản theo đúng chuẩn quy định.

MAC có những yêu cầu bảo mật khác nhau, nó khá giống với các hàm mã
hóa MAC, phải có khả năng chống lại sự giả mạo, tức là ngay cả khi kẻ tấn công
truy cập vào cả khóa thì cũng không thể phát sinh ra được MAC giống như
MAC bên gửi tính toán.
MAC khác chữ ký sỗ vì MAC được sinh ra và kiểm định bằng việc sử dụng
cùng một khóa. Điều đó có nghĩa là bên gửi và bên nhận phải thống nhất một
khóa chung trước khi thực hiện việc trao đổi thông tin. Như vậy thì MAC khác
với chữ ký số vì MAC không đảm bảo được tính chất chống chối bỏ vì bên nhận
cũng có thể sinh ra MAC bằng thông tin đã nhận được kết hợp với khóa chia sẻ.
1.3.2. Hàm băm không có khóa

Hàm băm không có khóa nhận duy nhất một giá trị đầu vào là thông điệp.
Trong lớp các hàm băm không sử dụng khóa thì MDCs (mã nhận diện sự thay
đổi) là lớp con của lớp này. Lớp hàm này lại tiếp tục phân thành các lớp con nhỏ
hơn sau:
• Hàm băm một chiều (One-Way Hash Functions – OWHFs): Các hàm trong lớp
này đều thỏa mãn tính chất là với mọi mã băm biết trước, không thể tính toán để
tìm được chuỗi bit đầu vào có mã băm bằng với mã băm đã cho.
• Hàm băm kháng xung đột (Collosion Resistant Hash Functions – CRHFs): Các
hàm trong lớp này thỏa mãn tính chất không thể tính toán để tìm ra hai chuỗi bit
có cùng giá trị băm.

7


1.4. Các ứng dụng của hàm băm mật mã
 Bảo vệ tính toàn vẹn
Một ứng dụng quan trọng của các hàm băm mật mã là sự kiểm tra tính
toàn vẹn của thông điệp. Chẳng hạn như việc xác định xem một thông điệp có bị
sửa đổi hay không có thể thực hiện bằng cách so sánh giá trị băm được tính
trước và sau khi gửi. Còn có thể dùng bản tóm lược làm một phương tiện đáng
tin cậy cho việc nhận dạng tập tin.
Một thông điệp kích thước tùy ý sau khi băm sẽ được thu gọn thành
những bản băm- được gọi là các giá trị băm có kích thước cố định. Với mỗi
thông điệp đầu vào chỉ có thể tính ra được một văn bản đại diện có giá trị băm
tương ứng duy nhất. Hai thông điệp khác nhau chắc chắn có hai văn bản đại diện
khác nhau. Khi đã có văn bản đại diện duy nhất cho bức thông điệp, kết luận
được trên đường truyền đi thông điệp có còn được toàn vẹn hay không.
 Xác thực
Một ứng dụng tiêu biểu của hàm băm mật mã sẽ như sau: Alice đặt ra
một bài toán khó cho Bob, và tuyên bố rằng cô ta đã giải được. Bob sẽ phải cố

gắng tự thực hiện, nhưng chưa dám chắc rằng Alice không giải sai. Do đó, Alice
viết ra lời giải của mình, gắn thêm một giá trị nonce ngẫu nhiên, tính giá trị băm
của nó và cho Bob biết giá trị băm đó (giữ bí mật lời giải và giá trị nonce). Bằng
cách này, khi Bob tìm ra lời giải của mình vài ngày sau đó, Alice có thể chứng
minh rằng cô ta có lời giải sớm hơn bằng cách tiết lộ giá trị nonce cho Bob.
• Giả sử Alice muốn gửi cho Bob thông điệp x. Alice thực hiện các bước sau:
- Alice băm thông điệp x, thu được bản đại diện z= h(x) có kích
thước cố định.
- Alice ký số lên bản đại diện z bằng khóa bí mật của mình thu
được bản ký số y= sign(z).
- Alice gửi (x,y) cho Bob.

8




Khi Bob nhận được (x,y). Bob thực hiện các bước sau:
- Bob kiểm tra chữ ký số để xác minh xem thông điệp mà mình
nhận được có phải được gửi từ Alice không bằng cách giải mã
chữ ký số y bằng khóa công khai của Alice thu được z.
- Bob dùng thuật toán băm tương ứng với thuật toán băm mà Alice
dùng để băm thông điệp x đi kèm nhận được h(x).
- Bob so sánh 2 giá trị băm z và h(x), nếu giống nhau thì chắc chắn
rằng thông điệp x mà Alice muốn gửi cho Bob còn nguyên vẹn,
bên cạnh đó cũng xác thực được người gửi thông tin là ai.
 Lưu trữ mật khẩu
Khi người sử dụng đăng kí mật khẩu, giá trị băm của mật khẩu được tính
bằng một hàm băm nào đó. Giá trị băm được lưu trữ vào tập tin hay cơ sở dữ
liệu. Vì hàm băm là một chiều không thể suy ra được mật khẩu. Khi người sử

dụng đăng nhập, mật khẩu đăng nhập được tính toán giá trị băm và so sánh với
giá trị băm đang được lưu trữ. Do tính kháng va chạm, chỉ có một mật khẩu duy
nhất có giá trị băm tương ứng, nên không ai khác ngoài người sử dụng có mật
khẩu đó mới có thể đăng nhập ứng dụng.
 Ứng dụng chữ ký số
1.5. Một số hàm băm mật mã
Kích
thước
khối
(Block
size)

Độ dài
(Length
size)

Kích
thước
word
(Word
size)

Xung đột
(Collision)

Thuật toán

Kích thước đầu
ra (output size)


Kích thướ trạng
thái trong
(Internal state
size)

HAVAL

256/224/192/16
0/128

256

1024

64

32



MD2

128

384

128

Không


8

khả năng
lớn

MD4
MD5

128
128

128
128

512
512

64
64

32
32




PANAMA

256


8736

256

No

32

Có lỗi

RIPEMD

128

128

512

64

32



RIPEMD128/256

128/256

128/256


512

64

32

Không

RIPEMD160/320

160/320

160/320

512

64

32

Không

9


SHA-0
SHA-1

160
160


160
160

512
512

64
64

32
32

Không
Có lỗi

SHA256/224

256/224

256

512

64

32

Không


SHA512/384

512/384

512

1024

128

64

Không

Tiger(2)192/160/12
8

192/160/128

192

512

64

64

Không

VEST-4/8

(hash
mode)

160/256

256/384

8

80/128

1

Không

VEST-16/32
(hash
mode)

320/512

512/768

8

160/256

1

Không


WHIRLPOO
L

512

512

512

256

8

Không

10


CHƯƠNG 2. HÀM BĂM SHA-1
2.1. Giới thiệu
2.1.1. Lịch sử phát triển
Vào năm 1990, Ron Rivest đã sáng tạo ra hàm băm MD4. Vào năm 1992,
ông đã cải tiến MD4 và phát triển một hàm băm khác: MD5. Vào năm 1993,
NSA đã công bố một hàm băm rất giống với MD5, nó được gọi là SHA.
SHA(Secure Hash Algorithm) được phát triển bởi cục quốc gia an ninh Hoa
Kỳ gọi tắt là NSA và được xuất bản thành chuẩn của chính phủ Hoa Kỳ bởi viện
công nghệ và chuẩn quốc gia Hoa Kỳ (NIST) vào năm 1993 và được gọi tắt là
SHA-0. Các thuật toán của SHA bao gồm: SHA-0, SHA-1, SHA-224, SHA-384,
SHA-512, SHA-256.

Vào năm 1995, có một sự thay đổi nhỏ của SHA-0 dẫn đến sự ra đời của
SHA-1, và SHA-1 được công bố trong FIPS PUB 180-1. SHA-1 gần tương tự
như SHA-0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm
SHA dẫn đến những điểm yếu quan trọng. Các thuật toán SHA-0 đã không được
sử dụng trong nhiều ứng dụng.







2.1.2. Ứng dụng
SHA-1 là 1 phần trong các ứng dụng bảo mật được sử dụng rộng rãi trong các
giao thức như: TLS và SSL, PGP, SSH và IPSEC…
Các SHA-1 có thể được sử dụng với các DSA trong thư điện tử, chuyển tiền
điện tử, phân phối phần mềm, lưu trữ dữ liệu, và các ứng dụng khác cần đảm
bảo tính toàn vẹn dữ liệu và xác thực nguồn gốc dữ liệu. Các SHA-1 cũng có thể
sử dụng bất cứ khi nào nó là cần thiết để tạo ra 1 phiên bản đặc của tin nhắn.
Hàm SHA-1 còn được sử dụng trên Wii của Nintendo để xác minh chữ ký thời
gian khởi động.
SHA-1 và SHA-2 là những thuật toán băm an toàn theo yêu cầu của pháp luật để
sử dụng trong một số ứng dụng của Chính Phủ Hoa Kỳ, bao gồm cả sử dụng
trong các thuật toán mã hóa khác và các giao thức, để bảo vệ thông tin mật nhạy
cảm. Nhưng hiện nay thì Chính Phủ không còn sử dụng SHA-1 nữa mà thay vào
đó là SHA-2.
11





Các hàm băm SHA được dùng làm cơ sở cho mã khối SHACAL.

2.1.3. Vấn đề bảo mật SHA-1
Hiện nay thì vấn đề bảo mật của SHA-1 không còn được tin tưởng sử dụng
như trước nữa vì:







Đầu năm 2005, Rijmen và Oswald đã công bố 1 cuộc tấn công vào phiên bản rút
gọn của SHA-1 bằng cách tìm đụng độ thông qua việc tính ít hơn 280 phép tính.
Tháng 2-2005, một cuộc tấn công bởi 3 nhà mật mã học thuộc đại học Shandong
(Trung Quốc) đã tìm ra được sự đụng độ trong phiên bản SHA-1 đầy đủ với chỉ
với 269 phép tính nhanh hơn khoảng 2000 lần so với cách tấn công Brute-Force.
8-2005, tại hội nghị Mật Mã, họ đã công bố và thuyết trình về việc tấn công này
và chỉ ra 1 vụ va chạm tại vòng 58 của SHA-1 chỉ với 233 phép tính băm.
18-12-2007, các báo cáo chi tiết kết quả này được giải thích và xác nhận bởi
Martin Cochran.
Ngoài ra còn nhiều cuộc nghiên cứu tấn công khác nữa. Nhưng nhìn chung là
SHA-1 không có được sự bảo mật tốt nhất như khi nó được công bố năm 2004
bởi NIST tại hội nghị Mật Mã 2004.
2.2. Thuật toán SHA-1
2.2.1. Thuật toán
 Đầu vào: thông điệp với độ dài tối đa 264 bit.
 Đầu ra: giá trị băm (message digest) có độ dài 160 bit.
 Giải thuật gồm 5 bước thao tác trên các khối 512 bit:

Bước 1. Nhồi dữ liệu:





Thông điệp được nhồi thêm các bit sao cho độ dài L mod 512 luôn
được đồng dư là 448.
Thông điệp luôn được nhồi thêm các bit.
Số bit nhồi thêm phải nằm trong khoảng [1-512].
Phần thêm vào cuối dữ liệu gồm 1 bit “1” và theo sau là các bit “0”.

Bước 2. Thêm độ dài:


Độ dài của các khối dữ liệu ban đầu sẽ được biểu diễn dưới dạng nhị
phân 64 bit và được thêm vào cuối chuỗi nhị phân mà ta thu được ở
bước 1.
12





Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu.
Kết quả thu được từ 2 bước là 1 khối dữ liệu có độ dài là bội số của
512 (với cứ 512 bit là 1 khối dữ liệu).

Bước 3. Khởi tạo bộ đệm MD (MD Buffer):
Một bộ đệm 160 bit được dùng để lưu trữ các giá trị băm trung gian và

kết quả. Bộ đệm được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi
tạo ở dạng big-eadian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp
nhất) và có 2 bộ đệm. Năm thanh ghi của bộ đệm đầu tiên được đặt tên là A,
B, C, D, E và tương tự cho bộ đệm thứ hai là H0, H1, H2, H3, H4. Có giá trị
như sau (theo dạng Hex):
H0 = 67452301
H1 = EFCDAB89
H2 = 98BADCFE
H3 = 103258476
H4 = C3D2E1F0
Bước 4. Xử lý các khối dữ liệu 512 bit:



Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước.
4 vòng lặp có cấu trúc giống nhau, chỉ khác nhau ở hàm logic ft:

Bước

Hàm

Giá trị

0 ≤ t ≤ 19

ft = f(B,C,D)

(B AND C) OR ((NOT B) AND D)

20 ≤ t ≤ 39


ft = f(B,C,D)

B XOR C XOR D

40 ≤ t ≤ 59

ft = f(B,C,D)

(B AND C) OR (B AND D) OR (C AND D)

60 ≤ t ≤ 79

ft = f(B,C,D)

B XOR C XOR D



Mỗi vòng có đầu vào là gồm khối 512 bit hiện thời và một bộ đệm
160 bit A, B, C, D, E. Các thao tác sẽ cập nhật bộ đệm.

13




Chia khối dữ liệu đã nhồi thêm (cuối bước 2) thành 16 nhóm (mỗi
nhóm gồm 32 bit) và đặt theo thứ tự là: W0, W1, W2,…, W15.
Hình 2- : Xử lý khối đơn 512 bit




Mở rộng từ 16 nhóm 32 bit lên 80 nhóm 32 bit bằng vòng lặp sau:
For t = 16 to 79 let
Wt = S1(Wt-3 XOR Wt-8 XOR Wt-14 XOR Wt-16)




Gán A = H0, B = H1, C = H2, D = H3, E = H4.
Mỗi vòng lặp sử dụng theo công thức chung với một hằng số
Kt(0≤t≤79) như sau:

14


Hình 2- : Cách tính các bộ đệm A, B, C, D, E
For t = 0 to 79 do
TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt ;
E = D;
D = C;
C = S30(B);
B = A;
A = TEMP;
Với : Kt = 5A827999 (0 ≤ t ≤ 19);

Kt = 6ED9EBA1(20 ≤ t ≤ 39);
Kt = 8F1BBCDC(40 ≤ t ≤ 59);
Kt = CA62C1D6(60 ≤ t ≤ 79);



Đầu ra của 4 vòng ( bước 80) được cộng với giá trị của bộ đệm để tạo
ra 1 chuỗi kết quả dài 160 bit:
H0 = H0 + A
H1 = H1 + B
15


H2 = H2 + C
H3 = H3 + D
H4 = H4 + E
Bước 5. Xuất kết quả:
Sau khi thao tác trên toàn bộ N khối dữ liệu (blocks). Kết quả của khối
thứ N là chuỗi băm 160 bit:
H = H0H1H2H3H4
2.2.2. Ví dụ cụ thể (lấy trong FIPS PUB 180-1)
Cho chuỗi : 01100001 01100010 01100011.
Chiều dài chuỗi là: l =24.
Tiếp theo, thêm bit “1” và 423 bit “0” theo như bước 1. Kế tiếp thêm 64 bit
cuối thể hiện độ dài của chuỗi vào cuối bước nhồi dữ liệu là: 00000000
00000018 (Hex), 2 số dạng Hex cuối dãy 64 bit đại diện cho chiều dài l=24. Vì
đã hoàn thành bước nhồi dữ liệu => số block n = 1.
Khởi tạo bộ đệm MD:

H0 = 67452301
H1 = EFCDAB89
H2 = 98 BADCFE
H3 = 103258476
H4 = C3D2E1F0


Bắt đầu tiến trình nén dữ liệu của Block 1:
W[0] = 61626380
W[1] = 00000000
W[2] = 00000000
W[3] = 00000000
W[4] = 00000000
W[5] = 00000000
W[6] = 00000000
16


W[7] = 00000000
W[8] = 00000000
W[9] = 00000000
W[10] = 00000000
W[11] = 00000000
W[12] = 00000000
W[13] = 00000000
W[14] = 00000000
W[15] = 00000018.
Gán A = H0, B = H1, C = H2, D = H3, E = H4.
Giá trị Hex của A, B, C, D, E sau khi cho t chạy theo vòng lặp "for t = 0 to
79" là:
A
t
t
t
t
t

t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t

=
=
=
=
=
=
=
=

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

0116FC33
8990536D
A1390F08
CDD8E11B
CFD499DE
3FC7CA40
993E30C1
9E8C07D4
4B6AE328
8351F929
FBDA9E89
63188FE4
4607B664
9128F695

196BEE77
20BDD62F
4E925823
82AA6728
DC64901D
FD9E1D7D
1A37B0CA
33A23BFC
21283486
D541F12D
C7567DC6
48413BA4

B
67452301
0116FC33
8990536D
A1390F08
CDD8E11B
CFD499DE
3FC7CA40
993E30C1
9E8C07D4
4B6AE328
8351F929
FBDA9E89
63188FE4
4607B664
9128F695
196BEE77

20BDD62F
4E925823
82AA6728
DC64901D
FD9E1D7D
1A37B0CA
33A23BFC
21283486
D541F12D
C7567DC6

C
7BF36AE2
59D148C0
C045BF0C
626414DB
284E43C2
F3763846
B3F52677
0FF1F290
664F8C30
27A301F5
12DAB8CA
60D47E4A
7EF6A7A2
18C623F9
1181ED99
644A3DA5
C65AFB9D
C82F758B

D3A49608
20AA99CA
77192407
7F67875F
868DEC32
0CE88EFF
884A0D21
75507C4B

17

D
98BADCFE
7BF36AE2
59D148C0
C045BF0C
626414DB
284E43C2
F3763846
B3F52677
0FF1F290
664F8C30
27A301F5
12DAB8CA
60D47E4A
7EF6A7A2
18C623F9
1181ED99
644A3DA5
C65AFB9D

C82F758B
D3A49608
20AA99CA
77192407
7F67875F
868DEC32
0CE88EFF
884A0D21

E
10325476
98BADCFE
7BF36AE2
59D148C0
C045BF0C
626414DB
284E43C2
F3763846
B3F52677
0FF1F290
664F8C30
27A301F5
12DAB8CA
60D47E4A
7EF6A7A2
18C623F9
1181ED99
644A3DA5
C65AFB9D
C82F758B

D3A49608
20AA99CA
77192407
7F67875F
868DEC32
0CE88EFF


t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t

t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t

=
=
=
=

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

=
=
=
=
=
=
=
=
=
=
=
=
=

26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:

42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:

72:

BE35FBD5
4AA84D97
8370B52E
C5FBAF5D
1267B407
3B845D33
046FAA0A
2C0EBC11
21796AD4
DCBBB0CB
0F511FD8
DC63973F
4C986405
32DE1CBA
FC87DEDF
970A0D5C
7F193DC5
EE1B1AAF
40F28E09
1C51E1F2
A01B846C
BEAD02CA
BAF39337
120731C5
641DB2CE
3847AD66
E490436D
27E9F1D8

7B71F76D
5E6456AF
C846093F
D262FF50
09D785FD
3F52DE5A
D756C147
548C9CB2
B66C020B
6B61C9E1
19DFA7AC
101655F9
0C3DF2B4
78DD4D2B
497093C0
3F2588C2
C199F8C7
39859DE7
EDB42DE4

48413BA4
BE35FBD5
4AA84D97
8370B52E
C5FBAF5D
1267B407
3B845D33
046FAA0A
2C0EBC11
21796AD4

DCBBB0CB
0F511FD8
DC63973F
4C986405
32DE1CBA
FC87DEDF
970A0D5C
7F193DC5
EE1B1AAF
40F28E09
1C51E1F2
A01B846C
BEAD02CA
BAF39337
120731C5
641DB2CE
3847AD66
E490436D
27E9F1D8
7B71F76D
5E6456AF
C846093F
D262FF50
09D785FD
3F52DE5A
D756C147
548C9CB2
B66C020B
6B61C9E1
19DFA7AC

101655F9
0C3DF2B4
78DD4D2B
497093C0
3F2588C2
C199F8C7
39859DE7

B1D59F71
12104EE9
6F8D7EF5
D2AA1365
A0DC2D4B
717EEBD7
C499ED01
CEE1174C
811BEA82
4B03AF04
085E5AB5
F72EEC32
03D447F6
F718E5CF
53261901
8CB7872E
FF21F7B7
25C28357
5FC64F71
FB86C6AB
503CA382
8714787C

2806E11B
AFAB40B2
EEBCE4CD
4481CC71
99076CB3
8E11EB59
792410DB
09FA7C76
5EDC7DDB
D79915AB
F211824F
3498BFD4
4275E17F
8FD4B796
F5D5B051
9523272C
ED9B0082
5AD87278
0677E9EB
4405957E
030F7CAD
DE37534A
125C24F0
8FC96230
F0667E31

18

75507C4B
B1D59F71

12104EE9
6F8D7EF5
D2AA1365
A0DC2D4B
717EEBD7
C499ED01
CEE1174C
811BEA82
4B03AF04
085E5AB5
F72EEC32
03D447F6
F718E5CF
53261901
8CB7872E
FF21F7B7
25C28357
5FC64F71
FB86C6AB
503CA382
8714787C
2806E11B
AFAB40B2
EEBCE4CD
4481CC71
99076CB3
8E11EB59
792410DB
09FA7C76
5EDC7DDB

D79915AB
F211824F
3498BFD4
4275E17F
8FD4B796
F5D5B051
9523272C
ED9B0082
5AD87278
0677E9EB
4405957E
030F7CAD
DE37534A
125C24F0
8FC96230

884A0D21
75507C4B
B1D59F71
12104EE9
6F8D7EF5
D2AA1365
A0DC2D4B
717EEBD7
C499ED01
CEE1174C
811BEA82
4B03AF04
085E5AB5
F72EEC32

03D447F6
F718E5CF
53261901
8CB7872E
FF21F7B7
25C28357
5FC64F71
FB86C6AB
503CA382
8714787C
2806E11B
AFAB40B2
EEBCE4CD
4481CC71
99076CB3
8E11EB59
792410DB
09FA7C76
5EDC7DDB
D79915AB
F211824F
3498BFD4
4275E17F
8FD4B796
F5D5B051
9523272C
ED9B0082
5AD87278
0677E9EB
4405957E

030F7CAD
DE37534A
125C24F0


t
t
t
t
t
t
t

=
=
=
=
=
=
=

73:
74:
75:
76:
77:
78:
79:

11793F6F

5EE76897
63F7DAB7
A079B7D9
860D21CC
5738D5E1
42541B35

EDB42DE4
11793F6F
5EE76897
63F7DAB7
A079B7D9
860D21CC
5738D5E1

CE616779
3B6D0B79
C45E4FDB
D7B9DA25
D8FDF6AD
681E6DF6
21834873

F0667E31
CE616779
3B6D0B79
C45E4FDB
D7B9DA25
D8FDF6AD
681E6DF6


8FC96230
F0667E31
CE616779
3B6D0B79
C45E4FDB
D7B9DA25
D8FDF6AD.

Sau khi đã tính xong khối dữ liệu (Block). Giá trị các thanh ghi của bộ đệm
lúc này là:
H0 = 67452301 + 42541B35 = A9993E36
H1 = EFCDAB89 + 5738D5E1 = 4706816A
H2 = 98BADCFE + 21834873 = BA3E2571
H3 = 10325476 + 681E6DF6 = 7850C26C
H4 = C3D2E1F0 + D8FDF6AD = 9CD0D89D
Kết quả thu được: A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D.

19


CHƯƠNG 3. TRIỂN KHAI HÀM BĂM SHA-1 VÀ CRACK BẰNG GIẢI
THUẬT BRUTE- FORCE ATTACK
3.1. Chương trình thuật toán SHA-1(Code)
 Nhồi dữ liệu và thêm độ dài cho đoạn text cần băm:
public static String padding(String message)
{
int dodai = message.length();
int tg = dodai;
String KetQua = "";

String t;
for (int i = 0;i < dodai;i++)
{
int k = (int) message.charAt(i);
t = Integer.toBinaryString(k);
while (t.length()<8)
{
t = "0"+t;
}
KetQua = KetQua+t;
}
KetQua = KetQua+"1";
dodai = KetQua.length();
int mod = dodai %512;
if(mod < 448)
{
mod = 448-mod;
for(int i = 0;i < mod;i++)
{
KetQua = KetQua+"0";
}
}
if(mod > 448)
{
mod = 512+448-mod;
for(int i = 0;i < mod;i++)
{
}

KetQua = KetQua+"0";


}
tg = tg*8;
t = Integer.toBinaryString(tg);
tg = 64-t.length();
for(int i = 0;i < tg;i++)
{
t = "0"+t;

20


}
KetQua = KetQua+t;
String text = "";
for(int i = 0; i < KetQua.length()/4;i++)
{
String subtest = KetQua.substring(i*4, (i+1)*4);
int m = Integer.parseInt(subtest, 2);
subtest = Integer.toHexString(m);
text = text+subtest;
}
}

return text;



Khởi tạo bộ đệm:


String[] H = {"67452301","EFCDAB89","98BADCFE","10325476","C3D2E1F0"};
BigInteger a = convert(H[0]);
BigInteger b = convert(H[1]);
BigInteger c = convert(H[2]);
BigInteger d = convert(H[3]);
BigInteger e = convert(H[4]);

21




Tính Wt :

for (int k = 0;k <= 15;k++)
{
W[k]=chuoi.substring(64*i+8*k, 64*i+8*(k+1));
}
for (int k = 16;k <= 79;k++)
{
BigInteger tg = new BigInteger(W[k-3],16);
BigInteger tg1 = new BigInteger(W[k-8],16);
BigInteger tg2 = new BigInteger(W[k-14],16);
BigInteger tg3 = new BigInteger(W[k-16],16);
W[k] = Dich_Trai(tg.xor(tg1).xor(tg2).xor(tg3), 1).toString(16);



Tính hàm ft và hằng số Kt:


for (int m = 0;m <= 79;m++)
{
if (m >= 0 && m <= 19)
{
f= (b.and(c)).or(b.not().and(d));
k = "5A827999";
}
else if (m >= 20 && m <= 39)
{
f= b.xor(c).xor(d);
k = "6ED9EBA1";
}
else if (m >= 40 && m <= 59)
{
f= (b.and(c)).or(b.and(d)).or(c.and(d));
k = "8F1BBCDC";
}
else if (m >= 60 && m <= 79)
{
f= b.xor(c).xor(d);
k = "CA62C1D6"}



Tính các thanh ghi bộ đệm A, B, C, D, E:

BigInteger temp1 = new BigInteger(Cong(Dich_Trai(a,5),f), 16);
BigInteger temp2 = new BigInteger(Cong(e,new BigInteger(k, 16)), 16);
BigInteger temp = new BigInteger(Cong(new BigInteger(Cong(temp1,temp2), 16), new
BigInteger(W[m], 16)),16);

e = d;
d = c;

22


c = Dich_Trai(b, 30);
b = a;
a = temp;



Kết quả cuối cùng:

H[0] = Cong(new BigInteger(H[0], 16),a);
H[1] = Cong(new BigInteger(H[1], 16),b);
H[2] = Cong(new BigInteger(H[2], 16),c);
H[3] = Cong(new BigInteger(H[3], 16),d);
H[4] = Cong(new BigInteger(H[4], 16),e);
String KetQua = H[0]+H[1]+H[2]+H[3]+H[4];

23


3.2. Triển khai chương trình


Sử dụng thuật toán SHA-1 để băm đoạn text: “happy”

Hình 3- 1: Đoạn text sau khi sử dụng thuật toán SHA-1



Sử dụng công cụ Cain and abel để crack chuỗi vừa băm bằng giải thuật
Brute-force Attack:

Hình 3- 2: Crack bằng giải thuật Brute-Force Attack

24


KẾT LUẬN
Sau khi thực hiện tìm hiểu về đề tài này, nhóm chúng em đã thu được kết
quả sau:
Có được cái nhìn tổng quan nhất về hàm băm mật mã, cụ thể là về
khái niệm, các tính chất, cấu trúc cũng như ứng dụng của hàm băm mật
mã và một số hàm băm mật mã phổ biến.
 Hiểu được hàm băm SHA-1, một số vẫn đề bảo mật của SHA-1 và
hiểu được thuật toán SHA-1.
 Xây dựng được chương trình sử dụng thuật toán SHA-1 để băm dữ
liệu và kiểm chứng được thuật toán không an toàn bằng Brute-Force
Attack.


Trong quá trình thức hiện đề tài do hạn chế về kiến thức và hiểu biết nên
nhóm chúng em chỉ đi xâu vào việc nghiên cứu và thực hiện một số công việc
trong phạm vi hiểu biết. Chúng em kính mong được thầy nhận xét và đóng góp
ý kiến để đề tài của chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!

25



×