TÌM HIỂU VỀ HÀM BĂM MẬT MÃ TIỂU LUẬN LÝ THUYẾT MẬT MÃ Hiểu theo nghĩa đơn giản, hàm băm là hàm cho tương ứng một mảng dữ liệu lớn với một mảng dữ liệu nhỏ hơn mà được dùng rộng rãi trong nhiều ứng dụng tin học, không chỉ thuộc phạm vi mật mã. Ở đây, chúng ta chỉ xét đến các hàm băm trong phạm vi các hàm băm mật mã, xem xét cụ thể đến các ứng dụng của chúng trong việc đảm bảo tính toàn vẹn của dữ liệu.
TRƯỜNG ĐẠI HỌC KHOA HỌC HUẾ KHOA CÔNG NGHỆ THÔNG TIN TIỂU LUẬN LÝ THUYẾT MẬT MÃ Đề tài: TÌM HIỂU VỀ HÀM BĂM MẬT MÃ Giáo viên hướng dẫn: GS. TSKH. Phạm Huy Điển Nhóm 5: Trương Khánh Duy Dương Phước Đạt Phạm Anh Đức Phạm Trung Đức Hoàng Thị Thu Hằng Lớp: Khoa Học Máy Tính B – K2010 Tìm hiểu về hàm băm mật mã 2/7 1. Giới thiệu sơ lược về hàm băm mật mã Hiểu theo nghĩa đơn giản, hàm băm là hàm cho tương ứng một mảng dữ liệu lớn với một mảng dữ liệu nhỏ hơn mà được dùng rộng rãi trong nhiều ứng dụng tin học, không chỉ thuộc phạm vi mật mã. Ở đây, chúng ta chỉ xét đến các hàm băm trong phạm vi các hàm băm mật mã, xem xét cụ thể đến các ứng dụng của chúng trong việc đảm bảo tính toàn vẹn của dữ liệu. Các hàm băm nhận đầu vào là một chuỗi bit có chiều dài hữu hạn tùy ý và tạo ra một chuỗi bit có chiều dài cố định bằng n bit (n > 0) gọi là mã băm (hash code). Trong mã hóa, mã băm được xem như là ảnh đại diện thu gọn (compact representative image) của một chuỗi bit có độ dài hữu hạn tùy ý và được dùng để nhận diện cho chuỗi bit đó. Kết hợp với công cụ tạo chữ ký số, các hàm băm được dùng cho việc đảm bảo tính toàn vẹn của dữ liệu. Trong lược đồ chữ ký số, mã băm của chuỗi bit được tính ở thời điểm T 1 và được bảo vệ để chống lại mọi sự thay đổi bất hợp pháp. Tại thời điểm T 2 sau đó, để kiểm tra xem chuỗi bit x có bị thay đổi hay không, người ta thường tính giá trị hàm băm của chuổi bit này tại thời điểm T 2 , mà ta ký hiệu là x T2 , sau đó so sánh giá trị vừa tính với mã băm tại thời điểm T1. Nếu 2 giá trị bằng nhau thì người ta chấp nhận chuổi bit tại thời điểm T2 trùng khớp với chuổi bit tại thời điểm T1, tức chuỗi bit x vẫn chưa bị thay đổi. Như vậy vấn đề bảo đảm tính toàn vẹn của chuỗi bit có chiều dài tùy ý được thay bằng việc bảo vệ sự toàn vẹn của chuỗi bit có chiều dài cố định. 2. Định nghĩa tổng quát của hàm băm Hàm h(x) được gọi là một hàm băm nếu nó thoã mãn hai tính chất sau: Nén gọn (Compression): Hàm h(x) tương ứng chuỗi bit đầu vào x có chiều dài hữu hạn tuỳ ý vào chuỗi bit y = h(x) có chiều dài cố định n > 0 cho trước. Dễ tính toán (Easy of computation): Với mọi chuỗi bit đầu vào x có chiều dài hữu hạn tuỳ ý, h(x) được tính toán dễ dàng. 3. Các tính chất của hàm băm mật mã Một hàm băm mật mã lý tưởng có các tính chất sau : 3.1. Tính kháng tiền ảnh (Preimage resistance) Tìm hiểu về hàm băm mật mã 3/7 Với mọi đầu ra y cho trước, không thể tìm được bất kỳ dữ liệu đầu vào x sao cho h(x) = y (hay không thể tìm được một thông điệp từ một giá trị băm cho trước). 3.2. Tính kháng tiền ảnh thứ hai (2 nd - Preimage resistance) 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) (hay không thể tìm ra 2 thông điệp khác nhau mà có cùng giá trị băm). 3.3. Tính kháng xung đột (Collision resistance) 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’) (hay không thể sửa được một thông điệp mà không làm thay đổi giá trị băm của nó). 4. Phân loại hàm băm mật mã Dựa trên tham biến đầu vào của các hàm băm, các hàm băm mật mã được phân thành hai lớp: Lớp các hàm băm sử dụng khoá (keyed hash functions), chẳng hạn như MAC (Message Authentication Codes): nhận hai giá trị đầu vào o Thông điệp cần tính giá trị băm o Khoá bí mật để băm văn bản theo đúng chuẩn quy định Lớp các hàm băm không sử dụng khoá (unkeyed hash functions): chỉ nhận duy nhất một giá trị đầu vào là Thông điệp (message). Trong lớp các hàm băm không sử dụng khoá thì MDCs (Modification Detection Codes – 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 - Hàm băm một chiều (One-Way Hash Functions - OWHFs): các hàm trong lớp này đều thoã 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 (Collision Resistant Hash Functions - CRHFs): các hàm trong lớp này thoã 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. 5. Cấu trúc của thuật toán hàm băm Khối dữ liệu đầu vào x có chiều dài tuỳ ý sẽ được phân thành các khối con liên tiếp x 1 , x 2 , …, x m (với x i có chiều dài cố định là r). Tuy nhiên do chiều Tìm hiểu về hàm băm mật mã 4/7 dài khối ban đầu là tùy ý nên ta cần thêm vào dữ liệu ban đầu một số bit phụ sao cho tổng số bit của khối dữ liệu x sau khi thêm vào sẽ là bội số của r. Ngoài ra số bit phụ thêm vào thường chứa một khối bit xác định chiều dài thực sự của khối dữ liệu khi chưa thêm các bit phụ. Sau đó ta lần lượt cắt từng khối con r bit từ khối x. Mỗi khối con r bit x i ta thực hiện một hàm nén của hàm băm h(x) được ký hiệu là f. Tại bước thứ i, hàm nến f nhận dữ liệu đầu vào là x i và kết quả trung gian của bước trước đó để tạo đầu ra là kết quả trung gian bước thứ i, ký hiệu là H i . Kết quả trung gian tại mỗi bước H i là một chuổi bit có độ dài cố định bằng n>0. Nếu ký hiệu IV (init value) là giá trị khởi tạo ban đầu cho H 0 , thì quá trình lặp xử lý dãy các khối con x 1 ,x 2 ,…, x m được mô tả như sau: H 0 =IV H 1 = f(H i-1, x i ), (i=1,…,m) h(x) = g(H m ) H i là kết quả trung gian sau bước thứ i, là các biến dây chuyền. Hàm g(x) ánh xạ biến dây chuyền cuối cùng để tạo ra mã băm kết quả. Và thông thường, g(x) được chọn là ánh xạ đồng nhất: g(H m ) o H m . Khâu then chốt trong xây dựng hàm băm là thiết kế hàm nén f. 6. Ứng dụng của các hàm băm mật mã Một ứng dụng điển hình của một hàm băm mật mã học như sau: Alice đưa cho Bob một câu đố khó và tuyên bố rằng cô ấy đã giải được rồi. Bob muốn tự giải, nhưng cũng muốn chắc chắn là Alice đúng là đã giải được. Do đó, Alice viết đáp án, gắn thêm một nonce ngẫu nhiên, tính giá trị băm của nó, và đưa kết quả băm cho Bob (trong khi vẫn giữ bí mật đáp án và nonce). Bằng cách này, khi Bob tự giải xong, Alice có thể chứng minh rằng cô đã có đáp án từ trước bằng cách đưa nonce cho Bob. Trong thực tiễn, Alice và Bob thường là các chương trình máy tính, và bí mật thường là cái gì đó không dễ lừa bằng một lời giải cho câu đó. Ứng dụng trên được gọi là một hệ thống tin cậy (commitment scheme). Một ứng dụng quan trọng khác của các hàm băm bảo mật là sự kiểm tra tính toàn vẹn của thông điệp. 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ìm hiểu về hàm băm mật mã 5/7 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. Một ứng dụng có liên quan là kiểm tra 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 và so sánh với kết quả băm được lưu trữ. Do các lý do cả về bảo mật và hiệu năng chương trình, đa số các thuật toán chữ ký số nói rằng chỉ có tóm lược của thông điệp, chứ không phải toàn văn thông điệp, được "ký". Các hàm băm còn có thể được dùng để tạo các bit giả ngẫu nhiên (pseudorandom). 7. Các hàm băm mật mã hiện nay Thuật toán Kích thước đầu ra Kích thước trạng thái trong Kích thước khối Thông điệp tối đa Kích thước word Xung đột HAVAL 256/224/192/160/128 256 1024 64 32 Có MD2 128 384 128 No 8 Khả năng lớn MD4 128 128 512 64 32 Có MD5 128 128 512 64 32 Có PANAMA 256 8736 256 No 32 Có lỗi RIPEMD 128 128 512 64 32 Có RIPEMD- 128/256 128/256 128 512 64 32 Không RIPEMD- 160/320 160/320 160/320 512 64 32 Không Tìm hiểu về hàm băm mật mã 6/7 SHA-0 160 160 512 64 32 Có SHA-1 160 160 512 64 32 Có lỗi SHA-256/224 256/224 256 512 64 32 Không SHA-512/384 512/384 512 1024 128 64 Không Tiger(2)- 192/160/128 192/160/128 192 512 64 64 Không VEST-4/8 160/256 256/384 8 80/128 1 Không VEST-16/32 320/512 512/768 8 160/256 1 Không WHIRLPOOL 512 512 512 256 8 Không Trong danh sách dài các hàm băm mật mã trên, có một số hàm băm được cho là dễ bị tổn thương và không nên sử dụng. Ngay cả khi một hàm băm chưa bị phá vỡ, một tấn công thành công đối với một biến thể yếu đó có thể làm giảm sự tự tin của các chuyên gia và dẫn đến loại bỏ nó. Ví dụ, vào tháng 8 năm 2004 người ta đã tìm ra những điểm yếu của một vài hàm băm phổ biến vào thời đó, bao gồm SHA-0, RIPEMD, và MD5. Điều này đã đặt ra câu hỏi an ninh lâu dài của các thuật toán sau này được bắt nguồn từ những hàm băm này - đặc biệt, SHA-1 (một phiên bản mạnh của SHA-0), RIPEMD-128, và RIPEMD-160 (cả hai phiên bản mạnh của RIPEMD). Vì vậy, cả SHA-0 và RIPEMD đều không được sử dụng rộng rãi kể từ khi chúng được thay thế bởi các phiên bản mạnh. Đến năm 2009, hai hàm băm mật mã được sử dụng thông dụng nhất vẫn là MD5 và SHA-1. Tuy nhiên, MD5 đã bị phá vỡ do có một tấn công lên nó để phá vỡ SSL trong năm 2008. SHA-0 và SHA-1 là các thành viên của họ hàm băm SHA được phát triển bởi NSA. Vào tháng 2 năm 2005, đã tấn công thành công trên SHA-1, việc tìm kiếm va chạm trong khoảng 269 phép toán băm, thay vì 280 theo dự kiến cho hàm băm 160-bit. Vào tháng 8 năm 2005, có một tấn công thành công trên SHA-1 trong đó việc tìm kiếm va chạm chỉ cần 263 phép toán băm. Điểm yếu lý Tìm hiểu về hàm băm mật mã 7/7 thuyết của SHA-1 tồn tại vốn có, nhưng về mặt thực tế để phá vỡ nó cũng phải mất vài năm. Các ứng dụng mới có thể tránh được những vấn đề này bằng cách sử dụng thêm các thành viên tiên tiến của họ SHA, như SHA-2, hoặc sử dụng các kỹ thuật như băm ngẫu nhiên hóa sẽ không quan tâm đến kháng va chạm. Tuy nhiên, để đảm bảo tính chất mạnh lâu dài của các ứng dụng có sử dụng hàm băm, hiện có một cuộc thi nhằm thiết kế hàm băm thay thế cho SHA-2, nó sẽ có tên là SHA-3 và trở thành một tiêu chuẩn FIPS vào năm 2012. 8. Kết luận Trong tiểu luận này, chúng ta đã tìm hiểu tổng quan về hàm băm mật mã, cấu trúc của thuật toán hàm băm, các ứng dụng của nó. Đồng thời cũng giới thiệu sơ lược các hàm băm mật mã hiện nay. 9. Tài liệu tham khảo [1] Antoine Joux. Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions. LNCS 3152/2004, pages 306-316 Full text. [2] Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Weger, MD5 considered harmful today: Creating a rogue CA certificate, accessed March 29, 2009 [3] Bart PRENEEL, Analysis and Design of Cryptographic Hash Functions, 2003 [4] Diplomarbeit, Christian Knopf, Cryptographic Hash Functions, 2007. [5] Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu, Finding Collisions in the Full SHA-1 . Lớp: Khoa Học Máy Tính B – K2010 Tìm hiểu về hàm băm mật mã 2/7 1. Giới thiệu sơ lược về hàm băm mật mã Hiểu theo nghĩa đơn giản, hàm băm là hàm cho tương ứng một mảng dữ liệu lớn. hàm băm mật mã Một hàm băm mật mã lý tưởng có các tính chất sau : 3.1. Tính kháng tiền ảnh (Preimage resistance) Tìm hiểu về hàm băm mật mã 3/7 Với mọi đầu ra y cho trước, không thể tìm. tiểu luận này, chúng ta đã tìm hiểu tổng quan về hàm băm mật mã, cấu trúc của thuật toán hàm băm, các ứng dụng của nó. Đồng thời cũng giới thiệu sơ lược các hàm băm mật mã hiện nay. 9. Tài liệu