Tiêu chuẩn mật mã khóa công khai:

Một phần của tài liệu các hệ mật mã.doc (Trang 54 - 57)

. EMK: {KC }→ EKM0(KC)

3.1.Tiêu chuẩn mật mã khóa công khai:

Chương 3: Các Tiêu Chuẩn

3.1.Tiêu chuẩn mật mã khóa công khai:

(PKCS: Public_Key Cryptography Standards)

- PKCS là một tập hợp các tiêu chuẩn để hoàn thiện hệ mật mã khóa công khai, được phát triển vào năm 1991. Nó được soạn bởi cơ quan bảo mật dữ liệu RSA, cùng hợp tác với liên hiệp các công ty kỹ thuật máy tính bao gồm Apple, Microsoft, DEC Lotus, Sun và MIT. PKCS đã được trích dẫn bởi OIW (OSI Implementor’s Workshop) như là một phương pháp để hoàn thiện các tiêu chuẩn OSI. Nó tương thích với PEM (Privacy Enhanced Mail) nhưng mở rộng ngoài PEM. Chẳng hạn nơi nào PEM chỉ có thể xử lý data ASCII thì PKCS có thể xử lý data binary tốt tương đương. Ngoài ra PKCS cũng tương thích với tiêu chuẩn X.509 của CCITT.

- Các tiêu chuẩn PKCS bao gồm: mã hóa RSA, đồng ý khóa Diffie_Hellman, mã hóa dựa trên password, cấu trúc chứng thực mở rộng. PKCS bao gồm cả việc đặc tả giải thuật lẫn các tiêu chuẩn hoàn thiện độc lập giải thuật. Các giải thuật đặc tả đã hỗ trợ bao gồm: RSA, DES, và sự trao đổi khóa Diffie_Hellman . Nó cũng xác định cấu trúc cho chữ ký số, bì thư số (digital evelope) (cho việc mã hóa) và sự chứng thực độc lập với giải thuật. Điều này cho phép một người nào đó hoàn thiện bất kỳ giải thuật mật mã sao cho phù hợp với cấu trúc tiêu chuẩn. Hiện nay có các tiêu chuẩn PKCS sau:

PKCS #1: tiêu chuẩn mã hóa RSA.

PKCS #3: tiêu chuẩn đồng ý khóa Diffie_Hellman. PKCS #5: tiêu chuẩn hệ mật mã dựa trên password. PKCS #6: tiêu chuẩn cấu trúc chứng thực mở rộng. PKCS #7: tiêu chuẩn cấu trúc đoạn tin hệ mật mã. PKCS #8: tiêu chuẩn cấu trúc thông tin khóa bí mật. PKCS #9: tiêu chuẩn các kiểu thuộc tính được chọn. PKCS #10: tiêu chuẩn cấu trúc yêu cầu sự chứng thực. PKCS #11: tiêu chuẩn giao tiếp token hệ mật mã.

PKCS #12: tiêu chuẩn cấu trúc trao đổi thông tin cá nhân. PKCS #13: tiêu chuẩn hệ mật mã Elliptic Curve.

PKCS #1 v1.5: là tiêu chuẩn hệ mật mã RSA. - Các ký hiệu:

(n,e): khóa công khai RSA. n: modulus (n = pq). e: số mũ công khai

d: số mũ bí mật (d = e-1 mod phiN, phiN = (p-1)(q-1)). p,q: các thừa số nguyên tố của modulus n.

dP: số mũ của p, là một số nguyên xác định sao cho: dP = e-1 mod (p-1). dQ: số mũ của q, là một số nguyên xác định sao cho: dQ = e-1 mod (q-1). qInv: hệ số CRT (Chinese Remainder Theorem) thỏa: qInv = q-1 mod p. K: khóa bí mật RSA.

||M||: chiều dài của đoạn tin M.

+ Khóa công khai RSA (n, e): gồm hai thành phần modulus n và số mũ công khai e. Khóa công khai là hợp lệ khi: n = pq và e phải nằm trong khoảng 3 và n-1 và thỏa gcd(e, phiN) = 1 với phiN = (p-1)(q-1).

+ Khóa bí mật RSA (K): có thể ở một trong hai dạng: . Cặp (n, d).

. Bao gồm các phần tử: (p, q, dP, dQ, qInv).

Một tiêu chuẩn khác cho việc xác định kiểu khóa công khai và khóa bí mật là tiêu chuẩn ASN.1:

. RSAPublicKey = {n, e}

. RSAPrivateKey = {n, e, d, p, q, dP, dQ, qInv}

Các ứng dụng của tiêu chuẩn này bao gồm chứng thực X.509, PKCS #8, và PKCS #12.

- Các thao tác biến đổi data:

+ I2OSP: biến đổi số nguyên lớn thành xâu. + OS2IP: biến đổi xâu thành số nguyên. Với xâu: X = X1X2 … Xl

số nguyên: x = xl - 1256l - 1 + xl - 2256l - 2 + … + x1256 + x0 (xâu Xi có giá trị xl – i với 1=< i <= l).

- Các thao tác hệ mật mã:

+ Mã hóa: RSAEP ((n, e), m) : c = memod n. Nhập: (n, e) khóa công khai RSA.

m đoạn tin rỏ (0 < m < n – 1).

Xuất: mật mã c (0 < c < n –1) hay thông báo “đoạn tin ngoài vùng”. Giả thiết: (n, e) phải hợp lệ.

Giải thuật:

. Nếu m không thuộc 0 và n – 1 thì xuất “đoạn tin ngoài vùng” và dừng. . Tính c = me mod n.

. Xuất c.

+ Giải mã: RSADP (K, c)

Nhập: K khóa bí mật RSA (ở một trong hai dạng trên). c mật mã (0 < c < n – 1).

Xuất: m đoạn tin giải mã (0 < m < n – 1) hay “mật mã ngoài vùng”. (adsbygoogle = window.adsbygoogle || []).push({});

Giả thiết: khóa bí mật K là hợp lệ. Giải thuật:

. Nếu c không thuộc 0 và n – 1 thì xuất “mật mã ngoãi vùng” và dừng. . Nếu K ở dạng (n, d) thì tính m = cd mod n.

. Ngược lại tính m1 = cdP mod p

m2 = cdQ mod q h = qInv (m1 – m2) mod p m = m2 + hp.

. Xuất m.

Cần chú ý rằng trước khi nhập và sau khi xuất trong các thao tác mật mã đoạn tin phải được biến đổi từ xâu sang số nguyên (khi nhập) hoặc từ số nguyên sang xâu (khi xuất).

- Quá trình mật mã bằng khóa công khai:

+ Hoạt động mã hóa: EME_PKCS1_v1.5_ENCODE (M, emLen)

Nhập: M đoạn tin rỏ, xâu có chiều dài tối đa là emLen – 11.

emLen chiều dài dự định cho đoạn tin đã mã hóa (chiều dài modulus) Xuất: EM mật mã (xâu có chiều dài emLen) hay “đoạn tin quá dài”. Giải thuật:

. Nếu chiều dài M > emLen – 11 thì xuất “đoạn tin quá dài” và dừng.

. Tạo xâu PS có chiều dài emLen - ||M|| - 3 bao gồm các byte khác 0 được tạo một cách giả ngẫu nhiên. Chiều dài PS ít nhất là 8 byte.

. Nối PS, M và phần thêm (padding) để hình thành mật mã EM EM = 02 || PS || 0 || M

. Xuất EM.

+ Hoạt động giải mã: EME_PKCS1_v1.5_DECODE (EM) Nhập: EM đoạn tin mật mã (xâu có chiều dài ít nhất là 11).

Xuất: M đoạn tin giải mã (xâu có chiều dài nhiều nhất là ||EM|| - 11) hay thông báo “lỗi giải mã”.

Giải thuật:

. Nếu chiều dài EM < 11 thì xuất “lỗi giải mã” và dừng.

. Tách EM thành xâu PS bao gồm các byte khác 0 và đoạn tin M: EM = 02 || PS || 0 || M

Nếu hai byte đầu của EM khác 0 và 2 hay nếu không có byte 0 để tách PS khỏi M thì xuất “lỗi giải mã” và dừng.

. Nếu chiều dài PS < 8 byte thì xuất “lỗi giải mã” và dừng. . Xuất M.

- Quá trình mật mã bằng khóa bí mật:

Tương tự quá trình mật mã bằng khóa công khai chỉ khác: EM = 01 || PS || 0 || M

+ Hai byte đầu của EM là 0 và 1. + Các byte PS đều bằng 1.

Một phần của tài liệu các hệ mật mã.doc (Trang 54 - 57)