Ngày này, với sự phát triển nhanh chóng của Internet và các ứng dụng giao dịch điện tử trên mạng, nhu cầu bảo vệ thông tin đi kèm cũng ngày càng được quan tâm và có ý nghĩa quan trọng. Một trong những công việc quan trọng của giao dịch điện tử chính là quá trình chứng thực nguồn gốc nội dung thông tin (chữ ký điện tử) và xác thực tính toàn vẹn dữ liệu. Để làm được điều này, chúng ta cần phải áp dụng ứng dụng chuẩn mật mã nâng cao, trong đó ứng dụng xây dựng các hàm băm mật mã là một trong những vấn đề cần được nghiên cứu và giải quyết. Tìm hiểu và nghiên cứu về hàm băm mật mã là đề tài rất thiết thực. Trong phần tài liệu này có kèm sản phẩm demo chạy bằng Java
Trang 11
BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
BÀI TẬP LỚN
Môn học: Mật mã ứng dụng trong an toàn thông tin
Đề tài: Tìm hiểu và nghiên cứu về hàm băm mật mã
Giáo viên hướng dẫn: Hoàng Đức Thọ Sinh viên thực hiện: 1 Trần Minh Đức
Trang 22
MỤC LỤC
MỤC LỤC 2
DANH SÁCH CÁC KÝ HIỆU TỪ VIẾT TẮT 3
DANH SÁCH CÁC BẢNG 4
DANH SÁCH CÁC HÌNH VẼ 5
LỜI MỞ ĐẦU 6
Chương I: Tổng quan về hàm băm mật mã 7
1.1 Khái quát về hàm băm mật mã 7
1.1.1 Định nghĩa hàm băm mật mã 7
1.1.2 Cấu trúc của hàm băm mật mã 8
1.2 Phân loại các hàm băm mật mã 10
1.2.1 Lớp các hàm băm không có khóa 10
1.2.2 Lớp các hàm băm có khóa 10
1.3 Các ứng dụng cơ bản của hàm băm mật mã 12
1.4 Giới thiệu một số họ hàm băm phổ biến 17
1.5 Một số kiểu tấn công lên hàm băm mật mã 19
1.5.1 Tấn công dựa trên “Nghịch lý ngày sinh” 19
1.5.2 Phương pháp tấn công gặp nhau ở giữa (meet in the middle attack) 19
1.5.3 Tấn công vét cạn 20
Chương II: Thuật toán SHA-256 21
2.1 Tổng quan về SHA 21
2.2 SHA-256 22
2.2.1 Ứng dụng của SHA-256 22
2.2.2 Các bước làm việc trong SHA-256 22
Chương III: Cài đặt thuật toán SHA-256 27
KẾT LUẬN 30
TÀI LIỆU THAM KHẢO 31
Trang 33
DANH SÁCH CÁC KÝ HIỆU TỪ VIẾT TẮT
SHA Secure Hash Algorithm
MD Message-Digest algorithm
MAC Message Authentication Code
HMAC Hash based Message Authentication Code
IPSEC Internet Protocol Securit
NIST National Institute of Standards and Technology
DKIM DomainKeys Identified Mail
TLS Transport Layer Security
PGP Pretty Good Privacy
Trang 44
DANH SÁCH CÁC BẢNG
Bảng 1.1: Một số hàm băm phổ biến và thông số tương ứng 17
Trang 55
DANH SÁCH CÁC HÌNH VẼ
Hình 1.1: Ánh xạ giữa thông điệp và giá trị băm không phải là song ánh…… 8
Hình 1.2: Cấu trúc Mekle-Damrgard 8
Hình 1.3: Mô hình sử dụng hàm băm để xác thực thông báo 13
Hình 1.4: Mô hình sử dụng hàm băm trong lược đồ chữ ký số 14
Hình 1.5: Chứng thực mật khẩu, theo tính chống trùng, 15
Hình 1.6: Ứng dụng hàm băm khi tải dữ liệu trên mạng 16
Hình 2.1: Hàm nén SHA-256 26
Hình 2.2: SHA-256 message schedule……… 26
Hình 3.1: Giao diện chương trình chức năng băm file 27
Hình 3.2: Chọn file cần băm 28
Hình 3.3: Giá trị băm trả về khi thực hiện băm file 28
Hình 3.4: Chức năng băm thông điệp nhập vào từ bàn phím 29
Hình 3.5: Giá trị băm trả về khi thực hiện băm thông điệp nhập vào từ bàn phím……….29
Trang 66
LỜI MỞ ĐẦU
Ngày này, với sự phát triển nhanh chóng của Internet và các ứng dụng giao dịch điện tử trên mạng, nhu cầu bảo vệ thông tin đi kèm cũng ngày càng được quan tâm và có ý nghĩa quan trọng Một trong những công việc quan trọng của giao dịch điện tử chính là quá trình chứng thực nguồn gốc nội dung thông tin (chữ
ký điện tử) và xác thực tính toàn vẹn dữ liệu Để làm được điều này, chúng ta cần phải áp dụng ứng dụng chuẩn mật mã nâng cao, trong đó ứng dụng xây dựng các hàm băm mật mã là một trong những vấn đề cần được nghiên cứu và giải quyết Trong bài báo cáo này, chúng em sẽ đi tìm hiểu về các nội dung sau:
• Chương I: Tổng quan về hàm băm mật mã
- Tìm hiểu về khái niệm, tính chất, phân loại, cấu trúc và ứng dụng của hàm băm mật mã
• Chương II: Thuật toán SHA-256
- Trình bày về một trong những thuật toán băm được sử dụng rộng rãi hiện nay là SHA-256 Chi tiết về các bước của thuật toán này
• Chương III: Cài đặt thuật toán SHA-256
- Sử dụng ngôn ngữ lập trình Java để cài đặt thuật toán SHA-256, thực hiện demo băm đoạn thông điệp nhập vào từ bàn phím
Trang 77
Chương I: Tổng quan về hàm băm mật mã
1.1 Khái quát về hàm băm mật mã
a) Tính chất nén: ℎ sẽ ánh xạ một đầu vào 𝑥 có độ dài bit hữu hạn tùy ý
tới một đầu ra ℎ(𝑥) có độ dài bit 𝑛 hữu hạn (tùy vào thuật toán băm được sử dụng)
b) Tính chất dễ dàng tính toán: Với ℎ cho trước và một đầu vào 𝑥, có thể
dễ dàng tính được ℎ(𝑥)
Hàm băm mật mã là hàm băm mà ngoài hai tính chất cơ bản trên còn phải thỏa mãn ba tính chất an toàn được nêu dưới đây:
a) Tính kháng tiền ảnh (tính một chiều): Đối với hầu hết đầu ra được xác
định trước, không có khả năng tính toán để tìm một đầu vào bất kỳ mà khi băm sẽ cho ra đầu ra tương ứng (tức là cho trước một giá trị tóm lược 𝑦, không thể tìm một tiền ảnh 𝑥 sao cho ℎ(𝑥) = 𝑦)
b) Tính kháng tiền ảnh thứ hai: Không có khả năng tính toán để tìm một
đầu vào thứ hai bất kỳ mà có cùng đầu ra như với đầu vào đã được xác định trước (tức là cho trước 𝑥 ∈ 𝑋, không có khả năng tính toán để tìm tiền ảnh thứ hai 𝑥+ ∈ 𝑋 sao cho 𝑥+ ≠ 𝑥 và ℎ(𝑥+) = ℎ(𝑥))
c) Tính kháng va chạm: Không có khả năng tính toán để tìm hai đầu vào
bất kỳ 𝑥, 𝑥+ ∈ 𝑋 sao cho 𝑥+ ≠ 𝑥 và ℎ(𝑥+) = ℎ(𝑥)
Kích thước của thông điệp đầu vào 𝑥 là bất kỳ còn kích thước của giá trị băm ℎ của thông điệp là nhỏ vậy nên việc trùng giá trị băm là không thể loại bỏ Tính chống trùng của hàm băm là yêu cầu rằng việc tìm ra hai thông điệp đầu vào 𝑥 như vậy thì phải là rất khó khăn về mặt thời gian và tính toán
Trang 88
Hình 1.1: Ánh xạ giữa thông điệp và giá trị băm không phải là song ánh
1.1.2 Cấu trúc của hàm băm mật mã
Theo định nghĩa hàm băm mật mã ta thấy rằng bản chất của hàm băm chính
là một hàm nén Hiện tại hầu hết các hàm băm mật mã áp dụng cấu trúc hàm băm Merkle- Damrgard (MD5, SHA-1, SHA-2) hoặc cấu trúc Sponge (SHA-3) Cấu trúc Mekle-Damrgard:
Hình 1.2: Cấu trúc Mekle-Damrgard
Không gian thông điệp
Không gian giá trị băm 1
(a) Mô tả ở mức cao
Thêm các bit đệm (padding) Thêm độ dài khối
ɰ
g Đầu vào đã định dạng
(b) Mô tả chi tiết đầu vào ban đầu x
Hàm băm Tiền xử lý
Xử lý lặp Hàm nén ɰ
Trang 99
Hầu hết các hàm băm không có khóa ℎ được thiết kế như các xử lý lặp để băm
các đầu vào có độ dài hữu hạn tùy ý, bằng việc xử lý các khối đầu vào có độ dài
cố định, như chỉ ra trong hình 1.2
Đầu vào hàm băm là một thông báo 𝑥 có độ dài hữu hạn tùy ý được chia
thành các khối bằng nhau có độ dài cố định là 𝑟-bit Bước tiền xử lý này thường
gồm việc thêm các bit mở rộng (gọi là padding) để thông báo 𝑥 có độ dài bit là
bội của độ dài khối 𝑟, và (vì các lý do an toàn) thường gồm 1 khối hoặc một
phần khối để chỉ độ dài bit của đầu vào chưa được thêm vào Mỗi khối 𝑥0 được
dùng làm đầu vào có độ dài cố định cho hàm băm bên trong 𝑓 (hàm nén của ℎ,
thực hiện tính một kết quả trung gian mới có độ dài bit là 𝑛) là một hàm của kết
quả trung gian trước đó có độ dài là 𝑛 bit và khối đầu vào tiếp theo 𝑥023
Gọi 𝐻0 là ký hiệu phần kết quả sau bước thứ 𝑖, xử lý chung cho hàm băm lặp
với đầu vào 𝑥 = 𝑥3𝑥6… 𝑥8 có thể được mô tả như sau:
𝐻9 = 𝐼𝑉; 𝐻0 = 𝑓(𝐻0<3,𝑥0),1 ≤ 𝑖 ≤ 𝑡; ℎ(𝑥) = 𝑔(𝐻8)
đầu được định nghĩa trước hay gọi là giá trị khởi đầu 𝐼𝑉 Biến đổi đầu ra có lựa
chọn 𝑔 được dùng trong bước cuối cùng để ánh xạ biến chuỗi 𝑛 −bit thành một
kết quả 𝑚 −bit 𝑔(𝐻8), 𝑔 thường là ánh xạ đồng nhất 𝑔(𝐻8) = 𝐻8 Cấu trúc Sponge: là một cấu trúc mới, được nghiên cứu và áp dụng trong
hàm SHA-3
Trang 1010
1.2 Phân loại các hàm băm mật mã
Dựa trên những tham số đầu vào của các hàm băm, các hàm băm được phân thành hai lớp Gồm lớp hàm băm có khóa và lớp hàm băm không có khóa
1.2.1 Lớp các hàm băm không có khóa
Một hàm băm không có khóa là một hàm ℎ: 𝑋 → 𝑌
1.2.2 Lớp các 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)
1.2.2.1 Định nghĩa hàm băm có khóa:
Một họ hàm băm có khóa là một bộ bốn (𝑋, 𝑌, 𝐾, 𝐻) thỏa mãn các điều kiện: 1) 𝑋 là một tập các thông báo có thể
2) 𝑌 là một tập hữu hạn các giá trị tóm lược thông báo hoặc các thẻ xác thực có thể
3) 𝐾 là không gian khóa, là một tập hữu hạn các khóa có thể
4) Đối với mỗi khóa 𝑘 ∈ 𝐾, có một hàm băm ℎG ∈ 𝐻 Mỗi ℎG: 𝑋 → 𝑌 Trong định nghĩa ở trên, 𝑋 có thể là một tập hữu hạn hoặc vô hạn; 𝑌 luôn luôn
là một tập hữu hạn Nếu 𝑋 là một tập hữu hạn, thì hàm băm đôi khi được gọi là
hàm nén (compression function) Trong trường hợp này, chúng ta luôn giả thiết
rằng |𝑋| ≥ |𝑌| và thường giả thiết với điều kiện mạnh hơn là |𝑋| ≥ 2|𝑌| Điều này có nghĩa là không thể tránh khỏi các va chạm Nếu hàm ℎ là ngẫu nhiên theo
Trang 1111
nghĩa tất cả các đầu ra là đồng xác suất thì có khoảng 28<3 các đầu vào ánh xạ tới mỗi đầu ra (𝑡 là số bit đầu vào, 𝑛 là số bit đầu ra, 𝑡 > 𝑛) và 2 đầu vào được chọn ngẫu nhiên sẽ có cùng đầu ra với xác suất 2<L (không phụ thuộc vào 𝑡)
1.2.2.2 Mã xác thực thông báo
Định nghĩa mã xác thực thông báo (MAC-Message Authentication Code) Thuật toán mã xác thực thông báo là một họ các hàm ℎM được tham số hóa bởi một khóa bí mật 𝑘, với các tính chất:
a Tính chất dễ tính toán: với một hàm ℎM đã biết, cho trước một giá trị 𝑘
và một đầu vào 𝑥, ℎM(𝑥) là dễ tính toán Kết quả này gọi là giá trị MAC hoặc MAC
b Tính chất nén: ℎM ánh xạ một đầu vào 𝑥 có độ dài bit tùy ý hữu hạn thành một đầu ra ℎM(𝑥) có độ dài bit cố định 𝑛
c Tính chất kháng tính toán: cho trước không hoặc nhiều cặp text-MAC
(𝑥0, ℎM(𝑥0)), không thể tính toán để tìm một cặp text-MAC bất kỳ (𝑥, ℎM(𝑥)) cho một đầu vào mới 𝑥0 ≠ 𝑥0 (bao gồm cả khả năng ℎM(𝑥) = ℎM(𝑥0) với 𝑖 nào đó)
Kỹ thuật xác thực bằng thuật toán MAC được mô tả chung như sau: Giả sử
có hai thực thể tham gia liên lạc được gọi là 𝐴 và 𝐵 Hai thực thể 𝐴 và 𝐵 phải chia
sẻ một khóa bí mật chung 𝑘 Khi 𝐴 cần gửi một thông báo cho 𝐵, thì , 𝐴 tính mã xác thực thông báo như một hàm của thông báo và khóa:
𝑀𝐴𝐶 = 𝑀𝐴𝐶 (𝑘, 𝑥) Trong đó: 𝑥 là thông điệp đầu vào, 𝑘 là khóa bí mật đã chia sẻ, MAC là mã xác thực thông báo Thông báo được nối với giá trị MAC và được truyền cho người nhận Người nhận xác thực thông báo này bằng cách tính lại MAC từ thông báo 𝑥 nhận được bằng khóa bí mật 𝑘 đã chia sẻ, sau đó so sánh với MAC nhận được kèm theo thông báo Nếu hai giá trị này giống nhau thì thông báo được xác thực Do chỉ có người gửi và người nhận biết khóa bí mật 𝑘, do đó không ai khác có thể tạo được
Trang 12hàm MAC và không thể được sử dụng trực tiếp cho mục đích xác thực thông báo, vì
nó không dựa trên một khóa bí mật Đã có một số đề xuất cho sự kết hợp của một khóa bí mật vào một thuật toán băm hiện tại Cách tiếp cận này tạo ra một hàm MAC
và được ký hiệu là HMAC HMAC đã được sử dụng trong một số ứng dụng an toàn như IPSEC, SSL… và HMAC cũng đã được ban hành như một tiêu chuẩn NIST (FLIP 198)
1.3 Các ứng dụng cơ bản của hàm băm mật mã
Hàm băm mật mã được đánh giá là một thuật toán mật mã linh hoạt nhất Nó được sử dụng trong nhiều ứng dụng an toàn và các giao thức Internet Sau đây là một số ứng dụng quan trọng của hàm băm mật mã:
Xác thực thông báo: Xác thực thông báo làm một cơ chế được sử dụng để
xác thực tính toàn vẹn của một thông báo Xác thực thông báo đảm bảo rằng dữ liệu nhận được là chính xác giống như khi nó được gửi (tức là không bị sửa đổi, chèn, xóa hay phát lại), và trong nhiều trường hợp định danh của người gửi là được bảo vệ Khi một hàm băm được sử dụng để cung cấp cơ chế xác thực thông báo, giá trị hàm băm thường được gọi là một mã băm Có một số phương pháp sử dụng mã băm để cung cấp cơ chế xác thực thông báo như hình 1.3:
Theo Hình 1.3 (a): hai thực thể liên lạc 𝐴 và 𝐵 có một khóa bí mật 𝐾 đã chia
sẻ Khi 𝐴 cần gửi một thông báo cho 𝐵, thì 𝐴 tính mã băm 𝐻 = 𝐻(𝑀) Mã băm được nối vào thông báo 𝑀 và được mã hóa bằng khóa bí mật 𝐾 để tạo bản mã
𝐸G(𝑀||𝐻(𝑀)) truyền cho 𝐵 Người nhận 𝐵 xác thực thông báo này như sau: trước tiên 𝐵 giải mã bản mã nhận được bằng khóa bí mật 𝐾 đã chia sẻ, sau đó tính lại
mã băm từ thông báo 𝑀 và so sánh với mã băm nhận được kèm theo thông báo Nếu hai giá trị này giống nhau thì thông báo được xác thực Do chỉ có người gửi
𝐴 và người nhận 𝐵 biết khóa bí mật 𝐾, do đó thông báo phải đến từ 𝐴 và không
Trang 1313
bị sửa đổi trái phép Trong lược đồ này, mã băm được sử dụng để đảm bảo tính xác thực thông báo, còn hàm mã hóa 𝐸 được sử dụng để đảm bảo tính bí mật của thông báo
Hình 1.3: Mô hình sử dụng hàm băm để xác thực thông báo
Theo Hình 1.3 (b), duy nhất mã băm được mã hóa bằng mật mã khóa bí mật Điều này sẽ làm giảm gánh nặng xử lý cho những ứng dụng không cần giữ bí mật thông báo, mà chỉ cần đảm bảo tính toàn vẹn của thông báo
Theo Hình 1.3 (c), duy nhất hàm băm được sử dụng để xác thực thông báo Kỷ thuật này yêu cầu hai thực thể liên lạc 𝐴 và 𝐵 phải chia sẻ một tham số bí mật 𝑆 𝐴 tính giá trị băm trên 𝑀 và 𝑆 như sau: 𝐻 = 𝐻(𝑀||𝑆) và bổ sung vào thông báo gửi cho 𝐵 Do 𝐵 cũng có tham số bí mật 𝑆 nên có thể tính lại giá trị băm để xác thực
Trang 14Chữ ký số: Chữ ký số là một chuỗi số, kết quả của phép biến đổi mật mã trên
thông báo nhằm cung cấp một phương tiện để triển khai tính xác thực của nguồn gốc thông báo, tính toàn vẹn của dữ liệu và tính không thể chối bỏ của người ký
Khi hàm băm được sử dụng trong lược đồ chữ ký số, giá trị băm của thông báo được mã hóa bởi một khóa riêng của người gửi Bất kỳ ai, biết khóa công khai của người gửi đều có thể xác thực tính toàn vẹn của thông báo Hình 1.4 mô tả 2 phương pháp sử dụng giá trị băm để cung cấp một chữ ký số
Hình 1.4: Mô hình sử dụng hàm băm trong lược đồ chữ ký số
Trang 15Phương pháp bảo vệ mật khẩu hiệu quả nhất hiện nay là dùng hàm băm 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 đó (SHA-1, SHA-2…) 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, nên dù biết được giá trị băm và loại hàm băm, kẻ tấn công cũng 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 giá trị băm và so sánh với giá trị băm đang lưu trữ Do tính chống trùng, 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
Trang 1616
• Ứng dụng tải dữ liệu trên mạng
Khi chúng ta tải dữ liệu trên mạng, nếu chất lượng mạng không tốt thì có thể xảy ra lỗi trong quá trình tải làm cho tập tin tại máy khách khác với tập tin trên máy chủ
Hàm băm có thể giúp chúng ta phát hiện ra những trường hợp lỗi như vậy bằng cách sau: Gọi tập tin cần tải xuống trên máy chủ là 𝑋, và giá trị băm theo MD5 của tập tin 𝑋 mà máy chủ đã tính sẵn và cung cấp trên trang điện tử là 𝐻T(có thể xem bằng mắt) Gọi 𝑌 là tập tin mà người sử dụng tải được tại máy tính
sử dụng Người sử dụng sẽ tính giá trị MD5 𝐻U cho tập tin 𝑌 Như vậy nếu 𝐻Ttrùng khớp với 𝐻U thì theo tính chống trùng của hàm băm, tập tin 𝑌 hoàn toàn giống tập tin 𝑋 và quá trình tải xuống không xảy ra lỗi
Hình 1.6: Ứng dụng hàm băm khi tải dữ liệu trên mạng
Internet
Trang 1717
1.4 Giới thiệu một số họ hàm băm phổ biến
Đã có rất nhiều hàm băm được công bố và được sử dụng trong thực tế (bao gồm cả các hàm băm có khóa và các hàm băm không có khóa) Bảng 1.1 cho chúng ta một số hàm băm với các thông số tương ứng:
Thuật
toán
Kích thước đầu vào (bit)
Kích thước đầu
ra (bit)
Kích thước trạng thái trong (bit)
Kích thước khối (bit)
Kích thước word (bit)
Độ an toàn (bit)
kế của hàm băm MD5 là nguyên tắc chung cho rất nhiều hàm băm khác
Hàm băm MD5 nhận thông báo đầu vào có độ dài tối đa 2VW bit Thông báo này được thực hiện đệm sau đó chia thành các khối con với độ dài 512 bit Các khối con 512 bit này sẽ là đầu vào của thuật toán băm, bên trong thuật toán mỗi khối 512 bit lại được chia ra 16 khối 32 bit và đi qua bốn vòng lặp của MD5 Mỗi khối thống báo con 512 bit qua xử lý sẽ cho đầu ra là một khối 128 bit, chính là giá trị băm của thông báo đầu vào tương ứng Theo cấu trúc Mekle-Damrgard giá trị băm này sẽ là đầu vào để xử lý khối thông báo con tiếp theo Tiếp tục xử lý, đầu ra cuối cùng là một khối 128 bit, là giá trị băm nhận được của thông báo đầu vào