Back to Home

Chữ ký số trong hệ RSA

Chữ ký số (Digital Signature) là gì?

Một điều đáng ngạc nhiên là có rất nhiều người, kể cả bao gồm dân IT, cũng không hiểu chữ ký số - digital signature là gì. Họ đa số vẫn cho rằng đó là một tấm ảnh có hình chữ ký và dán vào dưới một document.

Thực ra, không phải vậy. Chữ ký số là một đoạn thông tin khoảng vài chục bytes được gắn vào cuối văn bản nhằm đảm bảo:

  • Xác thực tính toàn vẹn (Integrity): Thông tin không bị sửa đổi, giả mạo trong quá trình truyền hay lưu trữ

  • Tính xác thực (Authentication): Xác thực danh tính của người gửi hoặc nguồn gốc của thông tin

  • Tính không chối bỏ (Non-repudiation): Người tạo ra thông tin được ký là người duy nhất có thể tạo ra chữ ký tương ứng, người tạo ra thông tin không thể phủ nhận rằng họ đã tạo ra dữ liệu ấy

Luồng hoạt động

Giai đoạn 1: Ký (Phía Alice - Người gửi)

  1. Bước 1: Hash Văn bản: Alice tạo một mã băm (Hash) từ văn bản gốc (mm) bằng một hàm băm SHA-256. Hash=H(m)Hash = H(m).

  2. Bước 2: Ký lên bản Hash bằng Private Key: Alice mã hóa bản Hash này bằng Private Key của mình (dd) theo công thức RSA: signature=(Hash)d(modn)\text{signature} = (Hash)^d \pmod n.

  3. Bước 3: Đóng gói Văn bản + Chữ ký: Alice đính kèm Chữ ký số vào văn bản gốc để tạo ra một tin nhắn (TT). T=(m,signature)T = (m, \text{signature}).

  4. Bước 4: Gửi tin nhắn: Alice gửi tin nhắn TT qua một kênh không bảo mật cho Bob.

Giai đoạn 2: Xác thực (Phía Bob - Người nhận)

  1. Bước 5: Giải mã Chữ ký bằng Public Key: Bob nhận tin nhắn T=(m,signature)T' = (m', \text{signature}). Bob dùng Public Key của Alice (e,n)(e, n) để giải mã Chữ ký: Hash1=signaturee(modn)Hash1 = \text{signature}'^e \pmod n.

    • Nếu chữ ký đúng do Alice ký, Bob sẽ thu được bản Hash1 nguyên bản của Alice.

  2. Bước 6: Tự Hash văn bản nhận được: Bob hash văn bản nhận được mm' bằng cùng một hàm băm (SHA-256) để tạo ra bản Hash2. Hash2=H(m)Hash2 = H(m').

  3. Bước 7: So sánh: Bob so sánh Hash1Hash2.

    • Trường hợp 1 (Xác thực thành công): Nếu Hash1=Hash2Hash1 = Hash2, Bob tin 100% rằng:

      1. Tin nhắn này thực sự từ Alice gửi (vì chỉ Alice mới có Private Key để tạo ra chữ ký khớp với Public Key).

      2. Tin nhắn chưa bị chỉnh sửa (vì bất kỳ sự thay đổi nhỏ nào của văn bản mm cũng sẽ làm cho Hash2 khác Hash1).

    • Trường hợp 2 (Xác thực thất bại): Nếu Hash1Hash2Hash1 \neq Hash2, Bob biết rằng Chữ ký sai hoặc Văn bản đã bị sửa đổi trên đường đi, tin nhắn này không đáng tin.

Cách hoạt động

Chúng ta đã biết RSA tạo ra một cặp khóa:

  • Khóa bí mật - secret key: (d,n)(d,n)

  • Khóa công khai - public key: (e,n)(e,n)

Trong chữ ký số, khóa bí mật dùng để tạo chữ kýkhóa công khai được dùng để xác minh chữ ký.

Bước 1 - Tạo chữ ký

Giả sử bạn muốn tạo chữ ký cho một tài liệu mm :

  • Tính giá trị Hash cho mm: h=Hash(m)h=Hash(m) bước này nhằm đảm bảo thông tin được thu gọn nhưng vẫn giữ được tính toàn vẹn. Hàm hash được dùng có thể là SHA-256, Keccak, …

  • Tạo chữ ký bằng khóa bí mật: signature=hdmodn\text{signature} = h^d \mod n

  • Gắn chữ ký vào thông điệp để gửi đi, lúc này thông tin gửi đi sẽ bao gồm một cặp (m,signature)(m,\text{signature})

Bước 2 - Xác minh chữ ký

Người nhận sẽ nhận được (m,signature)(m,\text{signature}), để xác minh, anh ta sẽ:

  • Tính lại giá trị Hash của mm: h=Hash(m)h' = Hash(m)

  • Giải mã chữ ký: h=signatureemodnh=\text{signature}^e \mod n

  • So sánh:

    • Nếu h=hh=h' thì chữ ký hợp lệ

    • Nếu không, chữ ký không hợp lệ

Quy trình HTTPS đơn giản hóa

Chúng ta hãy cung xem quy trình HTTPS hoạt động để hiểu chữ ký số được áp dụng thế nào trong thực tế.

Bước 1: Yêu cầu kết nối (The Hello)

Khi bạn nhập https://google.com, trình duyệt gửi một lời chào kèm theo danh sách các thuật toán mã hóa mà nó hỗ trợ.

Bước 2: Server gửi "Chứng thư số" (Certificate)

Server gửi lại một Digital Certificate.

  • Chứng chỉ này chứa Public Key của Google.

  • Chứng chỉ này đã được Ký số bởi một bên thứ ba tin cậy (gọi là CA - Certificate Authority).

Bước 3: Trình duyệt xác thực chữ ký (Verification)

Trình duyệt của bạn sẽ dùng Public Key của nhà phát hành (CA) để giải mã chữ ký trên chứng chỉ của Google.

  • Nếu khớp: Trình duyệt tin rằng đây đúng là Google thật, không phải kẻ mạo danh.

  • Nếu không khớp: Bạn sẽ thấy cảnh báo "Kết nối của bạn không an toàn".

Bước 4: Trao đổi khóa bí mật (Hybrid Encryption)

Thay vì dùng RSA để mã hóa toàn bộ dữ liệu (vì RSA rất chậm), trình duyệt sẽ:

  1. Tạo ra một Khóa đối xứng (Session Key) ngẫu nhiên (dùng cho thuật toán AES, cực nhanh).

  2. Dùng Public Key của Google (lấy từ chứng chỉ ở Bước 2) để mã hóa khóa Session Key này.

  3. Gửi bản mã đó cho Google.

Bước 5: Thiết lập kênh bảo mật

Chỉ duy nhất Google (người giữ Private Key) mới giải mã được để lấy khóa Session Key. Từ thời điểm này, cả hai bên dùng khóa chung đó để mã hóa mọi dữ liệu (chat, mật khẩu, thẻ tín dụng).

Demo

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!