CHƢƠNG V : CHƢ̃ KÝ ĐIỆN TƢ̉ VÀ HÀM BĂM
2. Hàm Băm (Hash Function)
2.5. Một số ƣ́ng dụng của hàm Băm
Nhƣ đã trình bày ở phần đầu chƣơng , ứng dụng chính của các hàm băm là sử dụng với các hệ chữ ký điện tử , trong đó thay vì ký trƣ̣c tiếp lên các văn bản , thông điệp (mà trong đa số trƣờng hợp là rất lớn, tốc độ chậm) ngƣời ta sẽ ký lên giá tri ̣ băm đại diện cho toàn bộ văn bản đó . Điều này đặc biệt quan trọng và hiệu quả bởi vì chúng ta biết rằng các hệ chƣ̃ ký điện tƣ̉ đều làm việc với các phép tính số học số lớn nên bản thân chúng đã tƣơng đối chậm, việc sƣ̉ dụng giá tri ̣ băm thay cho toàn bộ văn bản là giải pháp toàn diện khắc phục đƣợc yếu điểm này của các hệ chữ ký điện tử . Ngoài việc xử dụng với các hệ chƣ̃ ký điện tƣ̉ hàm băm còn đƣ ợc sử dụng vào các mục đích khác nhƣ : xác thƣ̣c hóa thơng điệp, xác thực hóa ngƣời dùng.
Đới với các ứng dụng không cần giữ bí mật thông điệp mà chỉ cần đảm bảo thông điệp không bi ̣ thay đổi trên đƣờng truyền ngƣời ta sẽ sƣ̉ dụng hàm băm cho mục đích xác thƣ̣c tính nguyên vẹn của thông điệp đó . Chẳng hạn chúng ta có một phần mềm mã nguồn mở ở dạng setup muốn phân phối cho ngƣời dùng , rõ ràng việc gửi phần mềm đó tới máy tính của ngƣờ i dùng là không cần phải mã hóa , tuy nhiên nếu nhƣ phần mềm đó bị thay đổi trên đƣờng truyền (chẳng hạn nhƣ bi ̣ gắn thêm các spyware , virus …) thì sẽ rất nguy hiểm . Để đảm bảo chúng ta sẽ cung cấp giá tri ̣ băm của phần mềm đ ó (khi đó phần mềm chính là thông điệp ). Ngƣời dùng sẽ download cả phần mềm và giá tri ̣ băm nhận đƣợc , sau đó tiến hành băm lại , đối sánh giá tri ̣ băm nhận đƣợc với giá tri ̣ băm đƣợc cung cấp cùng với phần mềm , nếu hai gi á trị này khớp nhau thì có thể đảm bảo phần mềm không bi ̣ sƣ̉a đổi trên đƣờng truyền . Hiện nay đa số các phần mềm mã nguồn mở đều đƣợc phân phối theo cách này.
Trong các hệ thống yêu cầu có xác thƣ̣c ngƣời dùng nhƣ các hệ quản tri ̣ cơ sở dƣ̃ liệu, hệ điều hành , các ứng dụng web , ứng dụng dạng desktop application , để lƣu mật khẩu ngƣời dùng ngƣời ta cũng sƣ̉ dụng các hàm băm hoặc các hệ mã trong các vai trò của hàm băm (không sƣ̉ dụng khóa ). Khi đó mỗi tài khoản của ngƣời dùng thay vì lƣu dƣới dạng tên truy cập (username) và mật khẩu (password) sẽ đƣợc lƣu dƣới dạng : tên ngƣời dùng, giá trị băm của mật khẩu . Khi một ngƣời dùng đăng nhập vào hệ thống , hệ thống sẽ lấy tên truy cập , mật khẩu họ nhập vào , kiểm tra xem có tên truy cập nào nhƣ vậy hay không . Nếu có sẽ tiến hành băm giá tri ̣ mật khẩu do ngƣời dùng nhập vào , đối
sánh với giá trị băm tƣơng ứng lƣu trong cơ sở dữ liệu (có thể ở dạng file text , xml, hay file cơ sở dƣ̃ liệu của một hệ quản tri ̣ cơ sở dƣ̃ liệu nào đó). Nếu kết quả đối sánh là khớp thì ngƣời dùng đó là hợp lệ , ngƣợc lại nếu khơng khớp có nghĩa là sai mật khẩu . Hiện nay tất cả các hệ quản tri ̣ cơ sở dƣ̃ liệu đều đƣợc trang bi ̣ các hàm băm để cho phép ngƣời dùng tạo ra các giá tri ̣ băm của mật khẩu ngƣời dùng và lƣu lại các giá tri ̣ băm này. Việc lƣu các giá tri ̣ băm đảm bảo chúng ta khôn g bi ̣ lộ mật khẩu do mật khẩu đƣợc lƣu ở dạng nguyên bản trên má y tính hoặc khi truyền qua hệ thống mạng . Hệ điều hành Unix sƣ̉ dụng nguyên tắc lƣu mật khẩu nhƣ trên với hàm băm là hệ mã DES đƣợc lặp lại 25 lần, mật khẩu của ngƣời dùng đƣợc sử dụng nhƣ khóa của hệ mã, bản rõ đem mã hóa là xâu 64 bit 0.
Ngày nay với sự phát triển mạnh mẽ của thƣơng mại điện tử , các giao dịch đều đƣợc thƣ̣c hiện tƣ̀ xa, trên các hệ thống mạng nên việc ƣ́ng dụng của các hệ chữ ký điện tƣ̀ và đi kèm với đó là các hàm băm ngày càng trở nên quan trọng . Mọi thông tin trong các giao dịch thƣơng mại điện tử đều cần đƣợc bảo vệ bằng các chữ ký , hàm băm. Vì thế có thể nói rằng đôi khi các hàm băm còn quan trọng hơn cả các hệ mã mật.
3. Bài tập
Bài tập 5.1: Cho hệ chữ ký điện tử ElGamma có p = 1019, a = 191 là một phần tử nguyên thuỷ của ZP*
, x = 37.
a) Hãy tìm khóa cơng khai KP, và khóa bí mật KS của hệ chữ ký trên.
b) Để ký lên bản rõ M = 102 ngƣời ta chọn k = 143, hãy thực hiện ký đƣa ra chữ ký tƣơng ứng.
c) Kiểm tra xem cặp (K, S) = (251, 507) có là chữ ký lên văn bản M = 127 hay không.
Bài tập 5.2: Cho hệ chƣ̃ ký điện tƣ̉ RSA có p = 31, q = 41, e = 271. a) Hãy tìm khóa cơng khai KP, và khóa bí mật KS của hệ mã trên. b) Hãy tính chữ ký cho thông điệp M = 100.
Bài tập 5.3: Cho thuật toán chƣ̃ ký điện tƣ̉ DSA có q = 11, p = 67, α = 9, β = 62, khóa bí mật a = 4, để ký lên văn bản M = 8, ngƣời ta chọn k = 2. Hãy xác định chữ ký lên văn bản M.
Bài tập 5.4: Cho hệ chƣ̃ ký điện tƣ̉ RSA có p = 47, q = 71, e= 79. Hãy xác định chữ ký của hệ mã lên thông điệp M = 688.
Sƣ̉ dụng một trong các ngôn ngƣ̃ lập trình C, C++, Java hoặc C# để làm các bài tập sau:
Bài tập 5.5: Cài đặt hệ chữ ký điện tử RSA. Bài tập 5.6: Cài đặt hệ chữ ký điện tử El Gammal. Bài tập 5.7: Cài đặt hàm băm MD5.
Bài tập 5.8: Cài đặt hàm băm SHA.
Gợi ý: Có thể sử dụng các thƣ viện số lớn nhƣ MIRACL hoặc các thƣ viện mã nguồn mở
nhƣ Crypto++ (chi tiết tại đi ̣a chỉ website : http://www.cryptopp.com/), Cryptolib ( chi tiết tại đi ̣a chỉ website http://www.cs.auckland.ac.nz/~pgut001/cryptlib).