CHƢƠNG TRÌNH OPENSSL
3.1. CHỮ KÝ RSASSA-PSS.
3.1.1. Các thuật toán cơ bản trong sơ đồ chữ ký RSASSA-PSS.
3.1.1.1. Biểu diễn cặp khoá RSA.
Khoá công khai RSA chứa hai thành phần:
Modulus n (số nguyên không âm).
Thành phần công khai e (số nguyên không âm).
Khoá công khai RSA hợp lệ nếu: modulus n là tích của 2 số nguyên tố lẻ khác nhau. Khoá bí mật RSA: Có hai cách biểu diễn khoá bí mật RSA
Khoá bí mật RSA là cặp (n,d), trong đó các thành phần có ý nghĩa sau: - n là modulus (số nguyên không âm).
- d là thành phần bí mật (số nguyên không âm).
Biểu diễn thứ hai của khoá bí mật RSA chứa bộ năm (p, q, dP, dQ, qInv), trong đó các thành phần có ý nghĩa sau:
- p là ước thứ nhất (số nguyên không âm). - q là ước thứ hai (số nguyên không âm).
- dP là exponent của ước thứ nhất (số nguyên không âm). - dQ là exponent của ước thứ hai (số nguyên không âm). - qInv là hệ số (đầu tiên) CRT (số nguyên không âm).
Khoá bí mật RSA được coi là hợp lệ nếu hai ước p và q là hai ước nguyên tố của modulus n, các thành phần dP và dQ là các số nguyên dương nhỏ hơn p và q tương ứng thoả mãn:
e.dP 1 (mod(p-1)). e.dQ 1 (mod(q-1)).
3.1.1.2. Thuật toán I2OSP (Integer to Octet String primitive).
Chuyển đổi số nguyên không âm, thành xâu octet có độ dài cố định, (một octet=8 bít).
I2OSP(x, L)
Đầu vào:
x Số nguyên không âm cần chuyển đổi. L Độ dài của xâu octet kết quả.
Đầu ra:
X Xâu octet tương ứng có độ dài L, hoặc “integer too large”.
Các bước:
1. Nếu x 256L, Hàm nhận thông báo “integer too large” và dừng. 2. Biểu diễn số nguyên x là một số có L chữ số với cơ số 256.
x = xL-1256L-1 + xL-2256L-2 + … + x1256 + x0.
Trong đó 0 xi < 256.
3. Đặt octet Xi có giá trị xL-ivới 1 i L. Xâu octet đầu ra là: X = X1X2 … XL.
3.1.1.3. Thuật toán OS2IP (Octet String to Integer primitive).
Chuyển đổi xâu octet, thành số nguyên không âm.
OS2IP(X)
Đầu vào:
X Xâu octet cần chuyển đổi.
Đầu ra:
x Số nguyên không âm tương xứng.
Các bƣớc:
1. Đặt X1X2 … XL là các octet của X, và XL-i có giá trị Xi với 1 i L. 2. Đặt x = xL-1256L-1 + xL-2256L-2 + … + x1256 + x0.
3.1.1.4. Thuật toán RSASP1 (RSA Signature primitive 1).
Sử dụng khoá bí mật (private key), tạo chữ ký trên thông điệp.
RSASP1(K, m)
Đầu vào:
K Khoá bí mật RSA.
m Thông điệp, được biểu diễn là số nguyên trong khoảng từ 0 đến n-1.
Đầu ra:
s Chữ ký, được biểu diễn là số nguyên trong khoảng từ 0 đến n-1.
Các lỗi:
“message representative out of range”.
Giả thiết:
Khoá bí mật K (n, d) hợp lệ.
Các bước:
1. Nếu thông điệp m không nằm trong khoảng từ 0 đến n-1, đưa ra thông báo “message representative out of range” và dừng.
2. Đặt s = md mod n. 3. Hàm nhận giá trị s.
3.1.1.5. Thuật toán RSAVP1 (RSA Verification primitive 1).
Sử dụng khoá công khai tương ứng (public key), tạo lại thông điệp gốc từ chữ ký.
RSAVP1((n, e), s)
Đầu vào:
(n, e) Khoá công khai RSA
s Chữ ký, là số nguyên trong khoảng từ 0 đến n-1.
Đầu ra:
m Thông báo, là số nguyên trong khoảng từ 0 đếnn-1.
Các lỗi:
“signature representative out of range”.
Giả thiết:
Khoá công khai (n, e) hợp lệ.
Các bước:
1. Nếu chữ ký s không nằm trong khoảng từ 0 đến n-1, đưa ra thông báo “signature representative out of range” và dừng.