2.3.3. Một số lược đồ chữ ký cơ bản
2.3.3.1. Lược đồ chữ ký RSA
Lược đồ chữ ký cơ bản nhất và có ứng dụng rộng rãi, đáng tin cậy nhất hiện nay đó là lược đồ chữ ký RSA. Đặc điểm của các sơ đồ chữ ký này là mức độ tính toán phụ thuộc hoàn toàn vào độ lớn của giải thuật giải quyết các bài toán nhân số nguyên - bài toán lũy thừa. Sơ đồ chữ ký bao gồm cả hai loại kèm thông điệp và khôi phục thông điệp, đây là sơ đồ có ứng dụng thực tế rộng rãi nhất dựa trên công nghệ sử dụng khóa công khai.
- Thuật toán sinh khoá:
Người dùng A tạo khoá công khai và khoá bí mật theo phương thức sau:
Sinh ra hai số nguyên tố lớn ngẫu nhiên p và q
Tính n = p*q và (n) = (p-1)*(q-1)
Chọn e là số tự nhiên ngẫu nhiên sao cho 1 < e < (n) và nguyên tố cùng nhau với (n)
Ta tìm được duy nhất d e-1 mod (n) nhờ giải thuật Euclid mở rộng.
Khoá công khai của A là <n, e>, khóa bí mật là <n, d>.
- Thuật toán sinh chữ ký:
+ Số hóa thông điệp Y thành các số nguyên m € [0, n-1]; m = R (Y). + Tính s = md mod n
Chữ ký của A lên thông điệp m là s, gửi s cho B
- Thuật toán xác nhận chữ ký:
Để xác thực chữ ký s là của A, B làm như sau: + Xác thực khóa công khai của A là <n, e> + Tính m =se mod n
+ Xác nhận chữ ký nếu m € MR, ngược lại chối bỏ chữ ký của A. + Khôi phục lại Y = R-1(m).
- Tóm tắt lược đồ ký theo RSA
+ Cho n = p.q với p và q là các số nguyên tố
+ Cho P = A = Zn K = {(n, p, q, a, b), n = pq, p và q là nguyên tố, ab 1 mod (n)}. Các giá trị n, b là công khai
+ Với mỗi k = {(n, p, q, a, b)} Ta định nghĩa: Sigk(x) = xa mod n
Verk(x,y) = true x b (mod n) với x, y Zn
2.3.3.2. Lược đồ chữ ký DSA (Digital Signature Standard)
- Giải thuật sinh khoá
Mỗi một người dùng tạo một khoá công khai và một khoá bí mật tương ứng theo cách sau:
+ Chọn một số nguyên tố q sao cho 2159 < q < 2160
+ Chọn một số nguyên tố p sao cho 2511+64t < p < 2512+64t ở đó t [0,8] + Chọn g là một số nguyên bất kỳ nhỏ hơn p, α = g(p-1)/q mod p + α khác 1
+ Chọn số nguyên a sao cho : 1 ≤ a ≤ q - 1 + Tính β = αa mod p
+ Khoá riêng của người dùng là a, khoá công khai là bộ (p,q, α, β)
như sau:
+ Chọn một số nguyên mật k, 0 < k < q - 1 + Tính γ = (αk mod p) mod q.
+ Tính k-1 mod q.
+ Tính δ = k-1(h(Z) + aγ) mod q
+ Chữ ký của người dùng cho Z là cặp (δ, γ) - Giải thuật xác nhận chữ ký
Khi cần xác nhận chữ ký cho một thông điệp m thực thể phải làm những việc như sau:
+ Dành lấy khoá công khai của thực thể ký (p,q, α, β)
+ Nếu điều kiện : 0 < δ, γ < q không thoả mãn thì từ chối chữ ký + Tinh w = δ-1 mod q và h(Z)
+ Tính e1 = w.h(Z) mod q và e2 = γw mod q + Tính v = (αe1 βe2 mod p) mod q
+ Nếu v = γ thì chấp nhận chữ ký ngoài ra thì từ chối. Ví dụ:
Giả sử q = 101, p = 78q + 1 = 7879.
3 là phần tử nguyên thuỷ trong Z7879 nên ta có thể lấy: α = 378 mod 7879 = 170
Giả sử a = 75, khi đó β = αa mod 7879 = 4576
Muốn kí bức điện x = 1234, ta chọn số ngẫu nhiên k = 50, vì thế có k-1 mod 101 = 99. Khi đó có :
γ = (17050 mod 7879) mod 101 = 2518 mod 101 = 94 Và δ = (1234 +75.94)99 mod 101 = 96
Chữ kí (94, 97) trên bức điện 1234 được xác minh bằng các tính toán sau: 96-1 mod 101 =25
e1 = 1234.25 mod 101 = 45 e2 = 94.25 mod 101 = 2
Có (17045 457627 mod 7879) mod 101 = 2518 mod 101 = 94 vì thế chữ kí hợp lệ.
- Tóm tắt lược đồ chữ ký số DSA
Giả sử p là số nguyên tố 512 bits sao cho bài toán logarit rời rạc trong Z p là khó giải.
Cho q là số nguyên tố 160 bits là ước của (p-1) Giả thiết α Z p là căn bậc q của 1 modulo p Cho p Zp và a = Zq× Zp và định nghĩa: A = {(p, q, α, a, β) : β ≡ αa (mod p)} Các số p, q, α và β là công khai, có a mật.
Với K = (p, q, α , a, β ) và với một số ngẫu nhiên (mật) k ,1 ≤ k ≤ q-1, ta định nghĩa:
Quá trình ký số sigk (x, k) = (γ, δ) trong đó γ = ( αk mod p) mod q và
δ = (x +aγ)k-1 mod q với x Zp và γ, δ Zq
Quá trình xác minh sẽ hoàn toàn sau các tính toán : e1 = xδ-1 mod q
e2 = γδ-1 mod q
verk(x, g, δ) = true (αe1βe2 mod p) mod q = γ
- Các tính chất của chữ ký số DSA
+ Ðộ an toàn: Độ an toàn của chữ ký phụ thuộc vào độ an toàn của khoá bí mật. Người sử dụng phải bảo vệ khóa bí mật của mình. Nếu khoá bí mật đảm bảo an toàn tuyệt đối thì chữ ký cũng có mức độ an toàn hầu như tuyệt đối. Mặt khác, với khoá công khai, chữ ký DSA là an toàn khi từ khoá công khai không
Cho p là một số nguyên tố rất lớn, phương trình toán học sau là không thể giải được: y = ax mod p (1) với y, a = g(p-1)/q và khác 1. Ðể xem xét điều này trước hết chúng ta nhận xét phương trình có nghiệm x duy nhất thuộc khoảng [1,q]. Thật vậy giả sử có hai nghiệm l à x1 và x2 và ta có:
y = ax1 mod p và y = ax2 mod p.
Không mất tính tổng quát giả sử x1 < x2 từ đây suy ra: ax1 chia hết cho p (không thoả mãn do p nguyên tố)
Tồn tại k nhỏ hơn p sao cho ak ≡ 1 (mod p). Với giá trị a có dạng a = g(p-1)/q thì điều này không thể xảy ra khi g < p.
Song trên thực tế, nhiều khi một bức điện được dùng làm một tài liệu đối chứng, chẳng hạn như bản hợp đồng hay một di chúc và vì thế cần xác minh chữ ký sau nhiều năm kể từ lúc bức điện được ký. Bởi vậy, điều quan trọng là có phương án dự phòng liên quan đến sự an toàn của sơ đồ chữ ký khi đối mặt với hệ thống mật mã.
+ Nhược điểm: Nhược điểm lớn nhất về mặt kỹ thuật là kích thước modulo p bị cố định = 512 bits. Nhiều người muốn kích thước này có thể thay đổi được nếu cần, có thể dùng kích cỡ lớn hơn. Ðáp ứng những đòi hỏi này, NIST đã chọn tiêu chuẩn cho phép có nhiều cỡ modulo, nghĩa là cỡ modulo bất kì chia hết cho 64 trong phạm vi từ 512 đến 1024 bits.
Một nhược điểm nữa là DSA là chữ ký được tạo ra nhanh hơn việc thực hiện xác minh nó. Trong khi đó, nếu d ùng RSA làm sơ đồ chữ ký với số mũ xác minh công khai nhỏ hơn (chẳng hạn = 3) thì có thể xác minh nhanh hơn nhiều so với việc lập chữ ký. Ðiều này dẫn đến hai vấn đề liên quan đến những ứng dụng của sơ đồ chữ ký.
Nhiều khi việc ký chỉ thực hiện một lần, song việc xác minh chữ ký số lại thực hiện nhiều lần trong nhiều năm. Ðiều này lại gợi ý nhu cầu có thuật toán xác minh nhanh hơn. Sự đáp ứng của NIST đối với yêu cầu về số lần xác
minh chữ ký thực ra không có vấn đề gì ngoài yêu cầu về tốc độ, miễn là cả hai quá trình có thể thực hiện đủ nhanh.
2.3.4. Quá trình ký và xác thực chữ ký số