Giới thiệu: Hàm băm (Hash) là giải thuật nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu (chuỗi ký tự, một đối tượng lập trình trong lập trình hướng đối tượng…) 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. 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. Hàm băm mật mã học (Cryptographic hash) là một hàm băm với một số tính chất bảo mật nhất định để phù hợp 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, kiểm tra tính nguyên vẹn của thông tin. Một hàm băm nhận đầu vào là một xâu ký tự dài có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ dài cố định, được gói là tóm tắt thông điệp hoặc chữ ký số.
Trang 1Môn học An ninh Cơ sở dữ liệu
Bài tập lớn: HÀM BĂM
Thầy giáo: Trịnh Nhật Tiến
Học viên: Bùi Trung Hiếu Khóa: K20 – Hệ thống thông tin
Mã số học viên: 13025006
Trang 2Hàm Băm
1 Giới thiệu:
- Hàm băm (Hash) là giải thuật nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu (chuỗi ký tự, một đối tượng lập trình trong lập trình hướng đối tượng…)
- 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
- 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.
- Hàm băm mật mã học (Cryptographic hash) là một hàm băm với một số tính chất bảo mật nhất định để phù hợp 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, kiểm tra tính nguyên vẹn của thông tin Một hàm băm nhận đầu vào là một xâu ký tự dài có độ dài tùy ý và tạo
ra kết quả là một xâu ký tự có độ dài cố định, được gói là tóm tắt thông điệp hoặc chữ ký số.
Trang 3Giới thiệu (tiếp)
- Một hàm băm tốt phải thỏa mãn các điều kiện sau:
+ Tính toán nhanh + Các khóa được phân bổ đều trong bảng + Ít xảy ra đụng độ
+ Xử lý được các loại khóa có kiểu dữ liệu khác nhau
- Một số lĩnh vực sử dụng hàm băm:
+ Mật mã học + Bảng băm + Phát hiện và sửa lỗi dữ liệu + Nhận dạng âm thanh
- Tính chất cơ bản của hàm băm mật mã học:
+ Tính một chiều: không thể từ giá trị băm suy ra giá trị đầu vào ban đầu.
+ Tính duy nhất: xác suất để hai giá trị đầu vào sau khi băm cho giá trị giống nhau là cực kỳ khó xảy ra.
Trang 4Giới thiệu (tiếp)
- Một số hàm băm:
+ Hàm cắt bỏ: Cho khóa là số nguyên, bỏ bớt một phần nào đó của khóa.
Ví dụ: khóa là một số nguyên có 6 chữ số x = 596438 Ta
có thể quy ước là bỏ bớt các chữ số hàng lẻ (hàng 1, 3, 5…), số còn lại sẽ là 563
Vậy H(x) = H(596438) = 563 Hàm cắt bỏ thỏa mãn điều kiện tính toán nhanh, nhưng khó đảm
bảo điều kiện các khóa được phân bố đều + Hàm phần dư: Khóa có giá trị nguyên và bảng băm B có m
phần tử, lấy phần dư của phép chia x/m làm giá trị hàm băm Để đảm bảo điều kiện các khóa được phân bố đều nên chọn m là số nguyên tố
+ Hàm gấp: Khóa là số nguyên, chia số đó thành một số đoạn
tùy chọn, sau đó kết hợp các phần đó lại theo một quy ước nào đó
Ví dụ: Số các hàng lẻ là 352 và số các hàng chẵn là 684 vậy H(x) = 352 + 684 = 1036
Trang 5Giới thiệu (tiếp)
- Hầu hết các trường hợp trên đều có thể xảy ra xung đột, nên
có 2 phương pháp để loại bỏ xung đột là phương pháp dò tuyến tính và phương pháp dây chuyền Phương pháp dò tuyến tính là tìm vị trí trống tiếp theo rồi chèn phần tử đụng độ vào đó Phương pháp dây chuyền là liên kết các khóa khác nhau, nhưng có cùng một giá trị băm thành một danh sách
- Các loại hàm băm mật mã:
+ Sử dụng khóa: Message Authentication Codes (MAC) + Không sử dụng khóa: Manipulation Detection Codes (MDC): One-Way Hash Functions (OWHF), Collision Resistant Hash Functions (CRHF)
- Ví dụ hàm băm mật mã học: MD2, MD4, MD5, SHA-0, SHA-1…
Trang 62 Ứng dụng của hàm băm mật mã
+ Xác thực mật khẩu: Mật khẩu không được lưu dạng văn bản rõ (clear text) mà ở dạng tóm tắt, tức là người dùng nhập mật khẩu vào, mật khẩu đó được băm ra, sau đó so sánh với kết quả băm ở trong dữ liệu lưu trữ.
+ Xác thực thông điệp: Khi giá trị đầu vào thay đổi thì tương ứng giá trị băm cũng thay đổi, từ đó xác định được thông điệp đã bị sửa đổi hay chưa.
+ Bảo vệ tính toàn vẹn của thông tin gửi trên mạng: Dựa vào tính chất một chiều của hàm băm, khi gửi một gói tin trên mạng, người ta so sánh kết quả băm của gói tin trước khi gửi với kết quả băm của gói tin khi nhận được
Nếu kết quả trùng nhau thì gói tin không thay đổi.
+ Tạo chữ ký điện tử: Chữ ký số được tạo ra bằng cách
mã hóa bản tóm tắt (kết quả băm) của thông điệp bằng khóa bí mật của người ký.
Trang 72 Ứng dụng của hàm băm mật mã
Tạo chữ ký điện tử:
Trang 82 Ứng dụng của hàm băm mật mã
Xác thực chữ ký điện tử
Trang 93 Phương pháp thực hiện hàm băm
Thuật toán SHA-1
Thuật toán SHA-1 do Cục An ninh Trung ương Hoa Kỳ (NSA) xây dựng dựa trên thuật toán MD4 Thuật toán SHA-1 tạo ra chuỗi mã băm có chiều dài cố định 160 bit từ chuỗi bit dữ liệu đầu vào tùy ý với độ dài tối đa 264 bits
Giải thuật gồm 5 bước trên khối 512 bits
+ 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 đồng dư là 448
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 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 cuối chuỗi nhị phân mà ta thu được
ở bước 1
Độ 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à một khối dữ liệu có độ dài là bội số của 512
Trang 103 Phương pháp thực hiện hàm băm
Thuật toán SHA-1
+ Bước 3: Khởi tạo bộ nhớ đệm MD Một bộ đệm 160 bits đượ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-endian (byte có trọng số lớn nhất trong từ, nằm ở địa chỉ thấp nhất) và có 2 bộ đệm 5 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ứ 2 là H0, H1, H2, H3, H4, H5 Giá trị các thanh ghi (theo dạng HEX) như sau:
= 67452301
= EFCDAB89
= 98BADCFE
= 10325476
= C3D2E1F0 + Bước 4: Xử lý các khối dữ liệu 512 bit
Trang 113 Phương pháp thực hiện hàm băm
Thuật toán SHA-1
Trang 123 Phương pháp thực hiện hàm băm
Thuật toán SHA-1
Thuật toán gồm 4 vòng lặp, tất cả 80 bước Các vòng lặp có cấu trúc như nhau, chỉ khác nhau ở hàm logic F(t)
Trang 133 Phương pháp thực hiện hàm băm
Thuật toán MD5
- MD5 chuyển một đoạn thông tin chiều dài thay đổi thành một kết quả chiều dài không đổi 128 bit Mẩu tin đầu vào được chia thành từng đoạn 512 bit; mẩu tin sau đó được độn sao cho chiều dài của nó chia chẵn cho 512 Công việc độn vào như sau: đầu tiên một bit đơn, 1, được gắn vào cuối mẩu tin
Tiếp theo là một dãy các số zero sao cho chiều dài của mẩu tin lên tới 64 bit ít hơn so với bội số của 512 Những bit còn lại được lấp đầy bằng một số nguyên 64-bit đại diện cho chiều dài của mẩu tin gốc
- 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 mô đun, và dịch trái Hình 1 mô tả một tác vụ trong một vòng Có 4 khả năng cho hàm F; mỗi cái được dùng khác nhau cho mỗi vòng:
Trang 143 Phương pháp thực hiện hàm băm
Thuật toán MD5
Đây là quá trình thực hiện xử lý của 4 hàm F, G, H, I ở trên:
- Vòng 1 (Round 1): Ký hiệu [abcd k s t] là bước thực hiện của phép toán
a = b + ((a + F(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước sau:
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
- Vòng 2 (Round 2): Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b
+ ((a + G(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
Nhận xét: Vòng 2 dùng hàm G, với t từ 17 -> 32 và k = 1 + 5k mod 16
Trang 153 Phương pháp thực hiện hàm băm
Thuật toán MD5
- Vòng 3 (Round 3):
Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b + ((a + H(b, c,
d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]
Nhận xét: Vòng 3 dùng hàm H, với t từ 33 -> 48 và k =5 + 3k mod 16
- Vòng (Round 4):
Tương tự, ký hiệu [abcd k s t] là của biểu thức:
a = b + ((a + I(b,c,d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
Trang 163 Phương pháp thực hiện hàm băm
Thuật toán MD5
/* 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 5: Tính kết quả message digest Sau khi thực hiện xong bước
4, thông điệp thu gọn nhận được từ 4 thanh ghi A, B, C, D, bắt đầu từ byte thấp của thanh ghi A và kết thúc với byte cao của thanh ghi D bằng phép nối như sau: Message Digest = A
|| B || C || D (|| phép toán nối) ///////////////////////////////////////////////////////////////////////
lần lượt chỉ phép XOR, AND, OR và NOT