Tiểu luận MẬT MÃ VÀ AN TOÀN THÔNG TIN Hàm băm MD4 Hàm băm (Hash function) là một hàm toán học chuyển đổi một thông điệp đầu vào có độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vào thuật toán băm). Dãy bit này được gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu.
Trang 1ĐẠI HỌC CÔNG NGHỆ ĐẠI HỌC QUỐC GIA HÀ NỘI
-BÁO CÁO MÔN HỌC
MẬT MÃ VÀ AN TOÀN THÔNG TIN
Giảng viên: PGS.TS Trịnh Nhật Tiến Học viên: Phan Thị Thơm
HÀ NỘI – 2013
Trang 2Mục Lục
Trang 3I Giới thiệu về hàm băm
1 Giới thiệu
Hàm băm (Hash function) là một hàm toán học chuyển đổi một thông điệp đầu vào có
độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vào thuật toán băm) Dãy bit này được gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu
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
2 Tính chất cơ bản của hàm băm
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự
như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của
Trang 4• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai
thông điệp khác nhau có cùng một kết quả hash là cực kỳ nhỏ
3 Ứng dụng của hàm băm
• Xác thực mật khẩu
Mật khẩu thường không được lưu dưới dạng văn bản rõ (clear text), mà ở dạng tóm tắt Để xác thực một người dùng, mật khẩu do người đó nhập vào được băm ra bằng hàm Hash và so sánh với kết quả băm được lưu trữ
• Xác thực thông điệp (Message authentication – Thông điệp tóm tắt -message digests)
Giá trị đầu vào(tin nhắn, dữ liệu ) bị thay đổi tương ứng giá trị băm cũng bị thay đổi Do vậy nếu 1 kẻ tấn công phá hoại, chỉnh sửa dữ liệu thì server có thể biết ngay lập tức
• Bảo vệ tính toàn vẹn của tập tin, thông điệp được gửi qua mạng
Hàm băm mật mã có tính chất là hàm 1 chiều Từ khối dữ liệu hay giá trị đầu vào chỉ có thể đưa ra 1 giá trị băm duy nhất Như chúng ta đã biết đối với tính chất của hàm 1 chiều Một người nào đó dù bắt được giá trị băm họ cũng không thể suy ngược lại giá trị, đoạn tin nhắn băm khởi điểm
Ví dụ: việc xác định xem một file hay 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 tóm tắt được tính trước và sau khi gửi (hoặc một sự kiện bất kỳ nào đó) Còn có thể dùng tóm tắt thông điệp làm một phương tiện đáng tin cậy cho việc nhận dạng file
Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi tìm một khối dữ liệu trong một tập hợp Giá trị băm đóng vai trò gần như một khóa để phân biệt các khối dữ liệu
• Tạo chữ ký điện tử (Digital signatures)
Chữ ký số có được bằng cách đem mã hoá bản tóm tắt của thông điệp bằng khoá
bí mật của người ký
Trang 5• Chứng thực bằng chữ ký số
Nếu kết quả băm giống nhau, Thông điệp được xác thực Đây là một ứng dụng cực
kỳ quan trọng của hàm Hash, đặc biệt là trong thương mại điện tử
Trang 6II Hàm băm MD4
1 Giới thiệu
Hàm hash MD4 được Rivest đề xuất năm 1990 Hàm băm MD4 được mô tả như sau:
Đầu vào: Bản tin M có chiều dài nhỏ hơn 264
Mở rộng bản tin: Thêm các bít vào bản tin để bản tin có chiều dài là bội của 512 Quá trình thêm diễn ra như sau Thêm bít 1 vào cuối bản tin, sau đó thêm vào một số bít 0
để nhận bản tin có chiều dài là đồng dư với 448 modulo 512, và cuối cùng thêm vào 64 bít, 64bít này biểu diễn chiều dài của bản tin ban đầu Bản tin được thêm vào bao gồm các khối M1, M2, … , Mn, chiều dài mỗi khối là 32 bít
Đầu ra: 128 bít là liên kết của 4 từ 32 bít:A|B|C|D.
Hàm băm MD4 chủ yếu thực hiện nhờ các phép toán logic và một phép cộng theo modulo 232 nên thuật toán chạy rất nhanh, thích ứng với việc sử lý bản tin có độ lớn Tuy nhiên thuật toán MD4 tồn tại một số hạn chế Cụ thể là có thể tìm thấy va chạm nếu sử dụng 2 vòng Vì điểm yếu này mà MD5 ra đời thay thế cho MD4
2 Nội dung thuật toán
“Thông điệp đệm” (Messege Padding) là xâu bit có độ dài chia hết cho 512
“Thông điệp đệm” được lưu trong mảng M = M[0] M[1] … M[N-1] Trong đó M[i]
là xâu bit có độ dài 32 bit, gọi là word
N ≡ 0 mod 16 (32 bit x 16 đoạn = 512 bit)
M được xây dựng từ Bản tin gốc a bằng thuật toán:
1/ d = 447 – ( |a| mod 512) ≥ 0 (d = 512 nếu 447< |a| mod 512).
2/ Kí hiệu l là biểu diễn nhị phân của |a| mod 264, tl: | l | = 64.
3/ M = a || 1 || 0 d || l, d là số bit 0 ghép thêm vào M cho đủ độ dài 512.
Trang 7* Độ dài của xâu a || 1 || 0 d là |a| + 1 + d = 448 mod 512.
* Độ dài của “Thông điệp đệm” M là
(|a| + 1 + d) +| l | = 448 mod 512 + 64 = 512 mod 512.
Chú ý: Vì M = a || 1 || 0 d || l nên d = |M| - ( |a| + 1 + | l | ) =
d = 512 - ( |a| + 1 + 64 ) = 512 - (|a| +65) = 447 – ( |a| mod 512)
Ví dụ: Xâu đầu vào là a = “ABC”, xây dựng M như sau:
a: = “ABC” = "01000001 01000010 01000011"
(Chú ý theo bảng mã: ‘A’ =65, ‘B’ =66, ‘C’ =67= 26 + 21 + 20)
* Độ dài tính theo bit của xâu a: |a| = 24 bit
=> d = 447 – (|a| mod 512) = 447 – 24 = 423.
|a| + 1 + d = 24 + 1 + 423 = 448 mod 512.
* Biểu diễn nhị phân của độ dài xâu a là l:
l = |a| mod 264 = 24 mod 264 = 24 = 24 + 23 = (11000 )2 = (
so
59 00
00
11000 )2
=> Độ dài của l là |l| = |
so
59 00
00
11000| = 59 + 5 = 64.
M = a || 1 || 0d || l
=> M = 01000001 01000010 01000011 || 1 ||
so
423
00
00
||
so
59 00
00
11000
Trang 8M[0] = 01000001 01000010 01000011 10000000
M[1] = M[2] = … = M[13] = M[14] =
so
32
00
00
M[15] = 00000000 00000000 00000000 00011000
Trong việc xây dựng M, ta gắn số 1 đơn lẻ vào sau a, sau đó thêm tiếp các số 0
vào đủ để độ dài của M đồng dư với 448 modulo 512 Cuối cùng nối thêm 64 bit (chính
là |l|) chứa biểu diễn nhị phân về độ dài ban đầu của a (được rút gọn theo modulo 264 nếu cần)
Xâu M có độ dài chia hết cho 512, vì thế khi chặt M thành các word 32 bit, số
word nhận được là N, sẽ chia hết cho 16
Mục đích việc tạo ra “thông điệp đệm” M là để các hàm băm xử lý trên từng
khối (block) 512 bit (16 word) cùng một lúc.
Trang 9III Chương trình hàm băm MD4
1 Môi trường và công cụ làm thử nghiệm
Bảng 3.1 Cấu hình hệ thống thử nghiệm
Bảng 3.2 Các phần mềm sử dụng
1 NetBeans IDE
7.0
Môi trường phát triển
https://netbeans.org/c ommunity/releases/
2 Tiến hành thực thi và kết quả
• Chương trình được xây dựng gồm các file sau:
Md4.java: File chương trình chính bao gồm thuật toán MD4
HamBamDongMD4AboutBox.java : File giao diện About của chương trình
HamBamDongMD4App.java và HamBamDongMD4View.java: File giao diện chính của chương trình
• Giao diên chương trình như sau: