Quy trình tạo khóa , mã hóa và giải mã RSA

Một phần của tài liệu Xây dựng chương trình ứng dụng chữ ký điện tử ký lên văn bản (Trang 24 - 29)

CHƯƠNG 1: TỔNG QUAN VỀ MÃ HÓA VÀ BẢO MẬT THÔNG TIN

6. Thuật toán mã hóa khóa công khai RSA

6.5 Quy trình tạo khóa , mã hóa và giải mã RSA

Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an toàn (ví dụ như Internet). Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:

- Chọn 2 số nguyên tố lớn p và q với p≠q, lựa chọn ngẫu nhiên và độc lập.

- Tính: N=p*q

- Tính: Ф(N) = (p-1)(q-1)

- Chọn một số tự nhiên e sao cho 1 < e <Ф(N) và là số nguyên tố cùng nhau với Ф(N)

- Tính: d sao cho de ≡ 1 (mod Ф(N)) (hay d= (1 + i * Phi_N) / E) với i=1,n Khóa công khai: Ku = {e, N}

Khóa bí mật: Kprl = {d, p, q}

Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình. Ở đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d khi biết e. Nếu không sử dụng dạng sau của khóa bí mật thì p và q sẽ được xóa ngay sau khi thực hiện xong quá trình tạo khóa.

a, Mã hóa:

Giả sử Bob muốn gửi đoạn thông tin M cho Alice. Đầu tiên Bob chuyển M thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa thuận trước.

M  m

Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã hóa của m theo công thức:

C=m*e mod N

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ bằng phương pháp bình phương. Cuối cùng Bob gửi C cho Alice.

b, Giải mã:

Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo công thức sau:

m = c*d mod N

Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải mã hoạt động vì ta có

c*d ≡ (me)d ≡ med (mod N)

Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:

med ≡ m (mod p) và med ≡ m (mod q)

Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung quốc, ta có:

(med ≡ m (mod p*q) hay:

cd ≡ m (mod N)

Có thể tóm tắt giải thuật RSA như bảng sau:

Tạo khóa Độ phức tạp

Tạo 2 số nguyên tố lớn p và q Tính n = p*q, 0(n) = (p-1)*(q-1)

Chọn 1 số ngẫu nhiên 1<e<0(n): gcd(0(n), e) = 1

Tính d: d = e-1 mod 0(n) (giải thuật Extended Euclidean) Khóa công khai KU = [e, n]

Khóa bí mật KR = [d, n]

0((logn)2) 0((log(0(n))2) 0((logn)3)

Bảng 1: Mô tả độ phức tạp của giải thuật RSA

Mã hóa

Đoạn tin : M < n

Mã hóa : C = Me mod n

Giải mã

Đoạn tin mã: C

Giải mã : M = Cd mod n Bảng 2: Mã hóa và giải mã trong RSA - Độ phức tạp:

+ Cộng 2 số k bít: 0(k) + Nhân 2 số k bít: 0(k2) + 2 k bít mod n : 0(k2) + x*c mod n : 0(k3)

Để tính x*c mod n cần c-1 phép nhân modul  không hiệu quả (do c lớn)  sử dụng giải thuật square_multiply để giảm số phép nhân mod nhiều nhất 2l (l là số bít nhị phân của c, l<=k với k là số bít nhị phân của x)

Ví dụ

Sau đây là một ví dụ với những số cụ thể. Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị đủ lớn.

p = 61 — Số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)

q = 53 — Số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa) N = p*q = 3233 — Môđun (công bố công khai)

e = 17 — Số mũ công khai

d = 2753 — Số mũ bí mật

Bảng 3: Ví dụ cụ thể RSA

Khóa công khai là cặp (e, N). Khóa bí mật là d. Hàm mã hóa là:

encrypt(m) = m*e mod N = m17 mod 3233 với m là văn bản rõ.

Hàm giải mã là:

decrypt(c) = c*d mod N = c2753 mod 3233 với c là văn bản mã.

Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:

encrypt(123) = 12317 mod 3233 = 855

Để giải mã văn bản có giá trị 855, ta thực hiện phép tính:

decrypt(855) = 8552753 mod 3233 = 123

Cả hai phép tính trên đều có thể được thực hiện hiệu quả với phương pháp tính hàm mũ (môđun) bằng phương pháp bình phương.

6.6 Tính bảo mật của giải thuật RSA

Vì khóa là công khai, nên người giải mã thường dựa vào cặp khóa này để tìm cặp khóa bí mật. Điều quan trọng là dựa vào n để tính hai thừa số p, q của n từ đó tính được d. Có nhiều giải thuật như thế, đầu tiên ta xét trường hợp đơn giản nhất là người giải mã biết được Φ(n). Khi đó tính p, q đưa về việc giải hai phương trình sau:

n = p. q

Φ(n) = (p-1)(q-1)

Thay q=n/p ta được phương trình bậc hai:

p2 – (n - Φ(n) + 1)p + n = 0

Hai nghiệm của phương trình bậc hai này sẽ là p, q. Tuy nhiên vấn đề có được Φ(n) còn khó hơn tính hai thừa số của n nhiều.

Một phần của tài liệu Xây dựng chương trình ứng dụng chữ ký điện tử ký lên văn bản (Trang 24 - 29)

Tải bản đầy đủ (DOC)

(76 trang)
w