Ở phần 2 này sử dụng rất nhiều kiến thức, ký hiệu và thuật ngữ đã có trong phần 1 của series này. Các thuật ngữ mới vẫn sẽ tiếp tục được giải thích trong phần này, tuy nhiên những thuật ngữ đã được giải thích ở phần 1 tác giả xin phép không giải thích lại.
Ở bài trước chúng ta đã được tìm hiểu về nguyên lý hoạt động của hệ mật mã RSA. Trong phần này chúng ta sẽ cùng nhau tiếp tục tìm hiểu về chữ ký số (Digital Signature) và đặc biệt là chữ ký số dựa trên hệ mật mã RSA nhé. Hệ mật mã RSA chính là thuật toán mã hóa bất đối xứng đầu tiên có khả năng tạo ra chữ ký số. Chữ ký số thường được sử dụng để:
- Xác thực danh tính và tính pháp lý của tài liệu trong các giao dịch trên internet;
- Xác thực tính nguyên vẹn của các tài liệu (tài liệu có bị chỉnh sửa hay chưa);
- Xác thực trong các giao dịch ngân hàng;
- Xác thực trong các giao dịch mua bán, chứng khoán.
Chữ ký số hiện nay có rất nhiều loại và được phân loại cơ bản như sau:
- Chữ ký số dựa trên hệ mật mã khóa công khai (RSA, Rabin, …);
- Chữ ký số Lamport (Lamport signature);
- Chữ ký số dựa trên các thuật toán đặc biệt khác (Elgamal, GOST R 34.11.2012, DSS).
Độ phức tạp thuật toán (Algorithm complexity)
Thời gian đa thức
Hàm một chiều (One-way function)
One-way trapdoor function
Hàm băm mật mã học (Cryptographic hash function)
Trước khi chúng ta đi vào tìm hiểu về chữ ký số, chúng ta cùng nhau xem xét một ví dụ thực tế sau: Ánh muốn đăng ký hợp đồng bảo hiểm từ xa, Ba là giao dịch viên. Theo quy trình thì Ánh sẽ phải ký vào xác nhận đăng ký hợp đồng bảo hiểm và Ba sẽ gửi bưu điện cho Ánh, Ánh ký và gửi lại cho Ba qua đường bưu điện, cách này tốn thời gian và chi phí vận chuyển. Vậy có cách nào khác thuận tiện hơn không ? Giải pháp chính là chữ ký số, chúng ta hãy cùng nhau tìm hiểu nó nhé.
Trong thực tế Ánh và Ba sẽ sử dụng đồng bộ hạ tầng khóa công khai (Public key infrastructure) và chữ ký số, để tránh việc bị giả mạo khóa công khai, tuy nhiên chúng ta sẽ không đề cập đến nó trong bài viết này để độc giả có thể dễ dàng tiếp cận các khái niệm cơ bản và nguyên lý hoạt động của chữ ký số.
Chữ ký số là thông tin được đi kèm cùng dữ liệu và phụ thuộc vào dữ liệu và khóa bí mật (có nghĩa là: khi dữ liệu hoặc khóa bí mật bị thay đổi, chữ ký số cũng sẽ thay đổi) nhằm mục đích xác định chủ nhân của tài liệu và mọi người có thể kiểm tra ai đã ký vào dữ liệu đó.
Vậy chữ ký số thì khác gì với chữ ký tay nhỉ ?
- Thuật toán sinh khóa (Key generation algorithm)
- Thuật toán ký (Signature algorithm)
Trái ngược với thuật toán mã hóa, thuật toán ký sử dụng khóa bí mật của người ký, điều này cho phép chỉ chủ nhân của tài liệu mới có thể ký vào tài liệu đó chứ không phải là người khác.
- Thuật toán kiểm tra chữ ký (Verification algorithm)
Thuật toán kiểm tra sử dụng khóa công khai của người ký, vì vậy ai cũng có thể kiểm tra tính chính xác và xác thực chủ nhân của tài liệu.
Định nghĩa chữ ký số theo ngôn ngữ toán học
- Tính xác thực (Chữ ký số giúp xác định được người ký là ai ngược lại xác định được khóa công khai của người đó trong mạng liên lạc)
- Tính toàn vẹn (Khi dữ liệu bị chỉnh sửa, chữ ký số cũng sẽ thay đổi, vậy nên kẻ xấu không thể chỉnh sửa tài liệu nhằm mục đích trục lợi).
Ví dụ: Trong các hợp đồng tài chính, kẻ xấu có thể chỉnh sửa giá trị hợp đồng 50 tỷ thành 500 tỷ. Nhưng nếu tài liệu đã được ký trước đó, nếu kẻ xấu chỉnh sửa giá trị hợp đồng, chữ ký sẽ bị thay đổi và không trùng khớp với dữ liệu kèm theo, vậy thuật toán kiểm tra sẽ trả kết quả False cho tài liệu đã bị chỉnh sửa này.
- Tính chống chối bỏ (Khi một người đã ký vào tài liệu, người đó phải chịu trách nhiệm về tài liệu đó và không thể chối bỏ hành động đã ký của mình).
Ví dụ: Khi giám đốc tài chính của một công ty đã ký vào một hợp đồng có liên quan đến hoạt động rửa tiền, khi bị điều tra người này không thể chối bỏ rằng tôi không ký vào đó (bởi chỉ có khóa bí mật của người này và bản thân hợp đồng đó mới có thể tạo ra chữ ký số tương tự đính kèm theo văn bản đó).
Hiện nay ở tiêu chuẩn PKCS #1, người ta đang sử dụng các lượng đồ chữ ký số trên RSA đó chính là RSASSA-PKCS, RSASSA-PSS, tuy nhiên ở bài viết này tác giả mong muốn độc giả hiểu được rõ bản chất của chữ ký số nên sẽ không trình bày các lượng đồ chữ ký số phức tạp trên. Độc giả mong muốn tìm hiểu sâu về 2 lượng đồ này vui lòng xem [1]
Chúng ta sẽ tìm hiểu những kiến thức nền tảng và bản chất của chữ ký số trên RSA dựa vào lượng đồ cơ bản sau:
Thuật toán sinh khóa
Thuật toán ký
Thuật toán kiểm tra
Trong ví dụ này chúng ta sử dụng hàm băm là MD5 (xem thêm tại [2]) , ta ký hiệu hàm là hàm như sau: Đầu tiên băm thông tin bằng thuật toán MD5, sau đó lấy 5 bit đầu tiên của giá trị băm (để đảm bảo số nhỏ nhằm mục đích minh họa).
Chúng ta sẽ thực hiện gửi thông điệp đơn giản và ký vào thông điệp đó (trong thực tế, thuật toán ký có thể sử dụng để ký vào tập tin nữa)
Mô tả: A muốn gửi cho B thông điệp “7”, giả sử A và B đã gửi khóa công khai cho nhau. Văn bản “7” được quy đổi qua hệ đếm 16 và 10 như sau, nêu độc giả không hiểu cách quy đổi, vui lòng xem [3]:
Thuật toán sinh khóa
Thuật toán mã hóa và ký
Thuật toán kiểm tra
Trong thực tế, chữ ký số được dùng vào nhiều mục đích khác nhau như bầu cử và xác thực các giao dịch mua sắm.
Liệu ngân hàng có cần biết người dùng vừa mua gì hay không ? hay có cần biết cử tri vừa bầu phiếu thuận hay không ? Dĩ nhiên là không, vậy có cách nào để bảo vệ quyền riêng tư nhưng vẫn có thể bảo đảm được yêu cầu xác thực không nhỉ ?
Chữ ký mù được David Chaum giới thiệu vào năm 1983, nó là một loại chữ ký số, trong đó nội dung của thông điệp bị "che" đi trước khi nó được ký (có nghĩa là ký nhưng không biết nội dung là gì). Chữ ký mù thường được dùng trong các vấn đề đòi hỏi sự nặc danh như bỏ phiếu điện tử, xác thực mua hàng, …
Về cơ bản, chữ ký mù cũng là một dạng chữ ký số nên chúng vẫn phải đảm bảo các yêu cầu và nguyên tắc cơ bản của chữ ký số như 3 thuật toán sinh, ký và kiểm tra và các yêu cầu bảo mật khác.
Điểm khác biệt giữa chữ ký mù và chữ ký số đó chính là 2 hàm sau đây, với mọi :
1. Hàm
trong đó số ngẫu nhiên , là khóa công khai
2. Hàm
Với mọi hàm , trong đó — khóa công khai, — khóa bí mật. Ta cần chứng minh rằng
Ta có:
Vậy người ký thực sự không biết được thông điệp là gì (do đã nhân với số ngẫu nhiên ) nhưng vẫn có thể đảm bảo được yêu cầu xác thực.
Qua bài viết này, tác giả đã giới thiệu về chữ ký số RSA, thuật toán sinh khóa, thuật toán ký và kiểm tra chữ ký. Ngoài ra, bài viết cũng giới thiệu về chữ ký mù (Blind signature) RSA và ứng dụng của nó. Cuối cùng, bài viết cung cấp tài liệu tham khảo cho người đọc muốn tìm hiểu sâu về mật mã.Độc giả mong muốn tìm hiểu thêm về lịch sử mật mã cũng như mật mã hiện đại, vui lòng xem thêm [6,7]. Đây là 2 cuốn sách rất hay và dễ tiếp cận cho các bạn mới tìm hiểu về ngành mật mã.
- RSA Laboratories. PKCS #1 v2.2: RSA Cryptography Standard October, 2012
- RFC 1321, The MD5 Message-Digest Algorithm
- Oded Goldreich (2001). Foundations of Cryptography: Volume 1, Basic Tools, (draft available from author's site). Cambridge University Press. ISBN 0-521-79172-3.
- Simon Singh, Mật Mã - Từ Cổ Điển Đến Lượng Tử, NXB Trẻ
- Menezes A., van Oorschot P., Vanstone S. Handbook of Applied Cryptography — CRC Press, 1997.