Chữ ký số (digital signatures) là gì?

Chữ ký số (digital signatures) là gì?

Rate this post

Chữ ký số, về bản chất, chính là quy trình xác thực thông điệp kèm theo tính chất không thể chối cãi được của người ký. Như vậy, chữ ký số của một thông điệp sẽ cho ta kiểm soát được tính toàn vẹn của thông điệp, tính hợp lệ và không thể chối cãi được của người gửi. Chữ ký số có khả năng kiểm tra tác giả chữ ký, thời điểm ký, xác nhận nội dung thông điệp. Chữ ký số có thể được kiểm tra bởi thành phần thứ ba tin tưởng, nhằm giải quyết các tranh chấp. 

Các bài viết liên quan:

Các tính chất cơ bản của chữ ký số gồm có:

  • Chữ ký số cần phụ thuộc vào thông điệp được ký
  • Chữ ký số cần sử dụng thông tin đặc thù của người ký để tránh người khác giả mạo chữ ký lẫn người ký từ chối chữ ký của mình
  • Quy trình tạo ra chữ ký số tương đối dễ
  • Chữ ký số cần dễ được nhận diện và kiểm tra
  • Không thể làm giả mạo một thông điệp mới cho một chữ ký có sẵn hoặc giả mạo một chữ ký số mới cho một thông điệp có sẵn
  • Chữ ký số có khả năng lưu lại trong bộ nhớ
  • Chữ ký số được chia thành hai loại: trực tiếp – người nhận có thể kiểm tra tính xác thực của chữ ký số và trọng tài – người nhận có thể uỷ quyền người thứ ba tin tưởng kiểm tra chữ ký số.

Về cơ bản, chữ ký số có được các tính chất pháp lý như chữ ký thông thường. Hơn thế nữa, chữ ký số an toàn hơn, dễ kiểm tra hơn và rất khó làm giả mạo. Đặc biệt, chữ ký số phù hợp cho công việc liên quan đến phát hành, xử lý và lưu trữ các thông điệp điện tử. Trên thực tế, người ta sử dụng quy trình mật mã khoá công khai để tạo ra các chữ ký số (chữ ký số khóa công khai). Trong quy trình này, người sử dụng dùng khóa cá nhân của mình để tạo ra chữ ký cho văn bản; mọi người khác sẽ dùng khóa công khai của người ký để kiểm tra chữ ký.

Chỉ có chủ nhân của khóa cá nhân mới có thể tạo ra chữ ký, do đó, ta có thể kiểm tra được ai là người đã ký (người đã tạo ra thông điệp). Mọi người khác nếu biết khóa công khai của người ký thì đều có thể kiểm tra chữ ký. Trường hợp người kiểm tra chưa biết chắc chắn về chủ nhân khoá công khai thì phải nhờ một bên thứ ba tin tưởng xác nhận. Nói chung, người ta chỉ ký trên giá trị băm của thông điệp (để tránh làm gấp đôi thông điệp khi gửi đi chữ ký kèm theo thông điệp).

Chữ ký số RSA

Mật mã khoá công khai RSA có thể được sử dụng để tạo nên một quy trình chữ ký số đơn giản. Giả sử có các khoá của mật mã RSA: khoá công khai (e, N), và khoá cá nhân (d, N).

  • Để ký thông điệp M, ta sử dụng khoá cá nhân (d, N). Ta tính: S = Md mod

N. Chữ ký là S sẽ được kèm thông điệp M để gửi cho người nhận: {M, S}

  • Để kiểm tra chữ ký, ta cần kiểm tra M và Se xem có bằng nhau không?

Se mod N = M mod N ?

Trên thực tế, người ta không ký trực tiếp lên thông điệp M mà ký lên hàm băm của nó, ví dụ: SHA512(M). Lúc đó, quá trình trên sẽ là:

  • Tính H = SHA512(M); S = Hd mod N. Chữ ký là S sẽ được kèm thông điệp M để gửi cho người nhận: {M, S}
  • Để kiểm tra chữ ký ta tính: H = SHA512(M); sau đó kiểm tra H và Se

xem có bằng nhau không: Se mod N = H mod N ?

Quy trình này có thể được minh hoạ bằng sơ đồ sau (mật mã sử dụng ở đây có thể là RSA hoặc mật mã khoá công khai khác):

Chữ ký số (digital signatures) là gì?

Hình 8.12 Mô hình chữ ký số RSA

Chữ ký số điện tử ECC-ECDSA

ECDSA có tên đúng là Elliptic Curve Digital Signature Algorithm, hay là chữ ký số sử dụng đường cong Elliptic. Đây là thuật toán quan trọng trong mật mã, được sử dụng trong các nên tảng blockchain, ví dụ trong các tiền ảo như bitcoin…

Thuật toán này được sử dụng để tạo chữ kí số (digital signature) cho dữ liệu (ví dụ 1 tệp tin) giúp ta có thể xác minh tính xác thực của dữ liệu mà không ảnh hưởng đến độ bảo mật của nó.

Trong thực tế chữ ký số và chữ ký thực tế là tương đương nhau, tuy nhiên người ta có thể dễ dàng giả mạo chữ ký nhưng với chữ ký số thì không. ECDSA signature thì không thể giả mạo

Thuật toán thiết lập chữ ký:

Input: Văn bản m và khóa mật x.

Output: Chữ ký (r, s) trong văn bản m.

  1.  Chọn k ngẫu nhiên từ {1, …, q-1}.
  2.  T←[k]G, r ←xT mod q.
  3.  Nếu r = 0 thì quay lại bước 1.
  4.  e ←H(m), s ←k-1(e+xr)(mod q).
  5. Nếu s = 0 thì quay lại bước 1.

Return (r, s).

Thuật toán kiểm tra chữ ký:

Input: Văn bản m, khóa công khai Y và chữ ký (r, s).

Output: “loại bỏ” hoặc “chấp nhận”.

  1. Nếu r, s ∉ {1, …, q-1} thì loại bỏ chữ ký.
  2.  e←H(m).
  3.  u1 ←e/s (mod q), u2 ← r/s (mod q).
  4.  T←[u1 ]G + [u2 ]G

 Nếu r = f(T) thì “chấp nhận” chữ ký.

Chữ ký số ElGamal

Có thể sử dụng quy trình mật mã ElGamal để tạo chữ ký số như sau: Giả sử quy trình ElGamal có khoá cá nhân và khoá công khai của A là XA và {p, α, YA}.

A tạo chữ ký với các bước sau:

  • Tính giá trị băm của thông điệp M: H = H(M)
  • Chọn số nguyên ngẫu nhiên K với 1 ≤ K ≤ p -1 và (K, p-1) = 1
  • Tính S1 = αK mod p
  • Tính K-1 mod (p-1) và S2 = K-1(H – XAS1) mod (p-1)
  • Chữ ký số chính là cặp hai giá trị: (S1, S2).

B kiểm tra chữ ký với các bước sau:

  • Tính V1 = αH mod p
  • Tính V2 = × ) mod p

Ví dụ chữ ký số ElGamal:

  • Cho trước: p = 11, α = 2
  • Chọn khóa cá nhân: XA = 8
Chữ ký số (digital signatures) là gì?

Khóa công khai: (YA, α, p) = (3, 2,11)

Để ký thông điệp M có giá trị băm H = H(M) = 5, ta làm các bước:

  • Chọn số ngẫu nhiên K = 9; Khẳng định: gcd(K, p-1) = (9, 10) = 1
  • Tính: S1 = αK mod p = 29 mod 11 = 6

Tính: K-1 mod (p-1) = 9-1 mod 10 = 9

S2 = K-1(H – XAS1) mod (p-1) = 9 × (5 – 8 × 6) mod 10 = 3

Chữ ký số là: (S1, S2) = (6, 3)

Để kiểm tra chữ ký số ta cần khẳng định V1 = V2 với:

V1 = αH mod p = 25 mod 11 = 10

V2 = × ) mod p = 36 × 63 mod 11 = 3 × 7 mod 11 = 10

Chữ ký số hợp lệ !

Chuẩn chữ ký số

Năm 1991, NIST công bố chuẩn chữ ký số (Digital Signature Standard – DSS, FIPS 186). Chuẩn chữ ký số DSS sử dụng hàm băm SHA và một thuật toán chữ ký số DSA. Sau ba lần điều chỉnh, bản cuối cùng của DSS hiện nay là FIPS 186-3 vào năm 2009.

Mô hình DSS chuẩn trong phiên bản đầu tiên có dạng:

Chữ ký số (digital signatures) là gì?

Các tham số của DSA gồm có:

  1. Các tham số toàn cục:
    • p là số nguyên tố, với 2L-1 < p < 2L ; 512 ≤ L ≤ 1024 và L là bội của 64
    • q là ước số nguyên tố của p – 1, với 2159 < q < 2160 (q có độ dài 160 bit)
    • g = h(p-1)/q mod p, với h thoả 1 < h < p – 1 sao cho h(p-1)/q mod p > 1
  2. Khoá cá nhân của người dùng:

x là số ngẫu nhiên trong khoảng 0 < x < q

  1. Khoá công khai của người dùng:

y = gx mod p

  1. Số bí mật của người dùng:

k là số ngẫu nhiên trong khoảng 0 < k < q

Các số p, q, và g cần được công bố công khai cho nhóm người; x và y tương ứng là khoá cá nhân và khoá công khai của người dùng, chúng không được thay đổi trong một khoảng thời gian nào đó. Các tham số x và k chỉ dùng để tạo chữ ký số và chúng cần được giữ bí mật. Tham số k cần được thay đổi mỗi khi tạo chữ ký mới.

  1. Quá trình ký:

Thông điệp được ký là M; Tính:

  • H(M) = SHA(M)
  • r = (gk mod p) mod q
  • s = (k-1 (H(M) + xr) ) mod q.

Chữ ký số là cặp (r, s)

  1. Kiểm tra chữ ký: (Giả sử nhận được các giá trị:M’, r’ và s’). Tính
    • w = (s’)-1 mod q
    • u1 = ( H(M’)w ) mod q
    • u2 = ( (r’)w ) mod q
    • v = ( (gul yu2) mod p ) mod q

Kiểm tra, nếu v = r’, thì chữ ký là hợp lệ và có thể tin tưởng chắc chắn rằng thông điệp nhận được đã được gửi từ người có cặp khoá (x, y).

Leave a Reply