2.2.1. Mô tả sơ lược về mã hóa RSA
Bài toán: A muốn gửi cho B một thông tin mật mà A muốn duy nhất B có thể đọc
được. Để làm được điều này, B gửi cho A một chiếc hộp có khoá đã mở và giữ lại chìa khoá. A nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khoá lại (lúc này ngay cả A cũng không thể đọc lại hay sửa thông tin trong thư được nữa). Sau đó A gửi chiếc hộp lại cho B. B mở hộp với chìa khoá của mình và đọc thông tin
trong thư.
Trong ví dụ này, chiếc hộp với khoá mở đóng vai trò khoá công khai, chiếc chìa khoá chính là khoá riêng.
Độ mật của RSA được dựa trên cơ sở là hầu như không có khả năng khôi phục hai số nguyên tố p và q từ tích n = p.q của chúng ít nhất là theo với các thuật toán phân tích ra thừa số hiện đã biết. Mặt khác, các số nguyên tố lớn ngẫu nhiên có thể được tạo sinh nhanh chóng.
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã. Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa. Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được
2.2.2. Phương pháp tạo mã và giải mã trong mã hóa công khai RSA
a. Tạo khóa
Một cặp khóa công khai – khóa riêng được thực hiện theo các bước sau : i) Chọn hai số nguyên tố lớn p, q (p ≠ q) , tính tích n = p.q
ii) ϕ(n) = (p - 1)(q - 1)
iii) Chọn một số nguyên e đủ lớn nguyên tố cùng ϕ(n), có nghĩa: 1< e < ϕ(n) và (e, ϕ(n) = 1)
23
iv) Tìm số d thoả mãn: e.d (mod ϕ(n)) = 1, 1<d< ϕ(n) bằng giải thuật Euclidean mở rộng
Bộ ba (n; e; d) là chìa khoá của hệ mã, với khoá công khai của B là (n; e) và khoá riêng của B là (n; d)
b. Mã hóa
i) Sử dụng khoá công khai của B là (n, e)
ii) Biểu diễn thông điệp dưới dạng số, giả sử là số nguyên m sao cho: m ∈ [0, n-1]
iii) Tính C = m e mod n iv) Gửi bản mã C cho B
c. Giải mã
i) Dùng khoá riêng d của B tính m = C d mod n
ii) Khôi phục thông điệp từ hàm ngược của hàm số hoá để có P
2.2.3. Đặc trưng của mã hóa công khai RSA
Đặc trưng của hệ mã hóa công khai RSA:
- Không cần phải thiết lập một kênh bảo vệ phức tạp để truyền khoá như trong hệ mã bí mật.
- Cặp khoá công khai được tạo ra theo một phương pháp đặc biệt có quan hệ với nhau và được chọn trong nhiều khoá có thể (trong đó nếu khoá này dùng để mã hoá thì khoá kia dùng để giải mã).
- Ứng với một cặp p, q có thể chọn được nhiều bộ khoá công khai (n; e; d)
- Mọi người trong hệ thống nếu nhận được bản mật C thì cũng không thể biết
được bản rõ P. Với việc chỉ biết khoá mã hoá ke và căn cứ vào các thông tin về thuật toán thì không thể tìm ra khó giải mã kd trong thời gian chấp nhận được (kể cả dùng hệ thống hiện đại nhất để tính toán).
Hình 2.2 mô tả quá trình mã hóa và giải mã giữa A và B sử dụng thuật toán mã hóa công khai RSA.
24
Hình 2.2. Quá trình mã hóa và giải mã bằng thuật toán RSA
2.2.4. Độ an toàn của mã hóa RSA
Độ an toàn của hệ mật RSA thể hiện qua hai yếu tố:
- Tính bảo mật của mã hóa RSA, chủ yếu dựa vào việc bảo vệ khoá riêng d và giữ bí mật các số nguyên tố p và q.
- Tính an toàn của hệ RSA dựa vào độ khó của bài toán RSA và độ phức tạp của bài toán phân tích một số thành các thừa số nguyên tố.
Với việc phân tích thừa số nguyên tố, giả sử khóa có độ dài128 bit là một số giữa 1 và một số rất lớn : 340.282.366.920.938.000.000.000.000.000.000.000.000 Có khoảng ≈ n / ln(n) = 2128 / ln(2128) ≈
3.835.341.275.459.350.000.000.000.000.000.000.000 số nguyên tố giữa 1 và số
này. Giả sử nếu mỗi giây có thể tính được 1012 số Cần hơn
121,617,874,031,562,000 năm (khoảng 10 triệu lần tuổi của vũ trụ) để tìm ra khóa
Các cách thức tấn công mã hóa RSA:
- Phương pháp vét cạn : Thử tất cả các khóa riêng có thể Phụ thuộc vào độ dài khóa và gần như không thể.
- Phương pháp phân tích toán học : Phân tích n thành 2 thừa số nguyên tố p và q. Như trên ta đã nói việc phân tích một số ra số nguyên tố là rất khó khăn, với tốc độ của máy tính hiện nay cũng không thể đáp ứng được việc phân tích số
nguyên tố lớn trong thời gian đa thức nếu các số p, q được chọn là lớn. 25
- Xác định trực tiếp (n) không thông qua p và q - Xác định trực tiếp d không thông qua (n)
- Phương pháp phân tích thời gian : Dựa trên việc đo thời gian giải mã. Đây là một cách dựa vào thời gian giải mã . Phương pháp phân tích thời gian có thể loại bỏ bằng cách làm nhiễu bằng cách cho thời gian giải mã của thông báo bất kỳ là gần như không đổi
2.2.5. Các hình thức tấn công đối với mã hóa RSA2.2.5.1. Tấn công trong quá trình tạo khóa 2.2.5.1. Tấn công trong quá trình tạo khóa
Việc tìm ra 2 số nguyên tố đủ lớn p và q thường được thực hiện bằng cách thử xác suất các số ngẫu nhiên có độ lớn phù hợp và p và q cần được chọn không quá gần
nhau để phòng trường hợp phân tích n bằng phương pháp phân tích Fermat. Ngoài ra, nếu p-1 hoặc q-1 có thừa số nguyên tố nhỏ thì n cũng có thể dễ dàng bị phân tích và vì thế p và q cũng cần được thử để tránh khả năng này
2.2.5.2. Tấn công liên quan đến tốc độ
RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật toán mã hóa đối xứng khác. Trên thực tế, Bob sử dụng một thuật toán mã hóa đối xứng nào đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã (thông thườngkhóa ngắn hơn nhiều so với văn bản)
2.2.5.3. Tấn công vào quá trình phân phối khoá
Quá trình phân phối khóa cần chống lại được tấn công đứng giữa (man-in-the-middle attack). Giả sử Eve có thể gửi cho Bob một khóa bất kỳ và khiến Bob tin rằng đó là
khóa (công khai) của Alice. Đồng thời Eve có khả năng đọc được thông tin trao đổi giữa Bob và Alice. Khi đó, Eve sẽ gửi cho Bob khóa công khai của chính mình (mà
Bob nghĩ rằng đó là khóa của Alice). Sau đó, Eve đọc tất cả văn bản mã hóa do Bobgửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của Alice và gửi cho Alice. Về nguyên tắc, cả Bob và Alice đều không phát hiện ra sự can thiệp của người thứ ba. Các phương pháp chống lại dạng tấn công này
26
thường dựa trên các chứng thực khóa công khai (digital certifcate) hoặc các thành phần của hạ tầng khóa công khai (public key infrastructure - PKI)
2.2.5.4. Tấn công dựa trên thời gian
Nếu kẻ tấn công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định được thời gian giải mã đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa d. Dạng tấn công này có thể áp dụng đối với hệ thống chữ ký điện tử sử dụng RSA. Một dạng tấn công thực tế: phân tích thừa số RSA dùng mạng máy tính (Máy chủ web dùng SSL)
Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn ra trong thời gian không đổi bất kể văn bản mã
2.2.5.5. Tấn công lựa chọn thích nghi bản mã
Dạng tấn công lựa chọn thích nghi bản mã (adaptive chosen ciphertext attack) có thể thực hiện trên thực tế đối với một văn bản mã hóa bằng RSA. Văn bản này được mã hóa dựa trên tiêu chuẩn PKCS #1 v1, một tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ của văn bản sau khi giải mã. Do những khiếm khuyết của PKCS #1, Bleichenbacher có thể thực hiện một tấn công lên bản RSA dùng cho giao thức SSL (tìm được khóa phiên). Do phát hiện này, các mô hình chuyển đổi an toàn hơn như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding) được khuyến cáo sử
dụng. Đồng thời phòng nghiên cứu của RSA cũng đưa ra phiên bản mới của PKCS #1 có khả năng chống lại dạng tấn công nói trên.
2.3. CHỮ KÝ SỐ RSA 2.3.1. Đặt vấn đề
Trong trao đổi thông tin, thông điệp được truyền đi giữa bên gửi và bên nhận cần có các tiêu chuẩn cần xác minh, đó chính là xác thực. Xác thực thông báo là một kỹ thuật trong mật mã học để xác minh tính đúng đắn của thông báo đuợc gửi. Một thông báo đuợc xác thực khi thỏa mãn các yêu cầu :
27
- Thông báo có nguồn gốc rõ ràng, chính xác - Nội dung thông báo toàn vẹn không bị thay đổi - Thông báo được gửi đúng trình tự và thời điểm
Xác thực thông báo bảo vệ hai bên tham gia trong quá trình trao đổi thông tin từ
kẻ thứ ba. Tuy nhiên, xác thực thông báo không có tác dụng khi bên gửi và bên nhận muốn gây hại cho nhau:
- Bên nhận giả mạo thông báo của bên gửi - Bên gửi chối là đã gửi thông báo đến bên nhận
Chữ ký số không những giúp xác thực thông báo mà còn bảo vệ mỗi bên khỏi bên kia Ở phần này cung cấp những đề xuất để triển khai mật mã khóa công khai dựa trên thuật toán RSA:
- Những số nguyên tố mật mã. - Lược đồ mã hóa
- Lược đồ chữ ký số
Những giới thiệu nhằm vào ứng dụng phổ biến trong máy tính và các hệ thống truyền thông. Người ta kỳ vọng rằng những chuẩn ứng dụng dựa trên đặc tả này có thể baogồm những ràng buộc.
2.3.2. Các biểu tượng
c – Đại diện dữ liệu mã hóa, một số giữa 0 và n-1. C – Dữ liệu mã hóa, một chuỗi số hệ 8.
d – Số mũ khóa riêng RSA.
di– Số mũ hàm CRT của thừa số cộng ri, một số nguyên dương e*di≡ 1 (mod(ri-1)), i=3, …, u.
dP – Số mũ hàm CRT của p, môt số nguyên dương
28
e*dP≡1(mod(p-1))
dQ – Số mũ hàm CRT của q, một số nguyên dương e*dQ≡1(mod(q-1))
e – Số mũ công khai RSA
EM – Thông điệp được mã hóa, một xâu hệ 8.
emBits – Chiều dai theo bits của thông điệp được mã hóa EM. emLen – Chiều dài theo hệ 8 của thông điệp được mã hóa EM. GCD (. , .) – Hàm ước số chung lớn nhất của hai số không âm. Hash – Hàm băm.
hLen – Chiều dài dữ liệu đầu ra theo hệ 8 của hàm băm Hash.
k – Chiều dài theo hệ 8 của số modulus RSA n. K – Khóa riêng RSA.
L – Nhãn RSAES-OAEP tùy chọn, một chuỗi hệ 8.
LCM – Hàm bội số chung nhỏ nhất của một danh sách số nguyên không âm.
m – Đại diện thông điệp, một số nguyên dương giữa 0 và n-1. M – Thông điệp, một chuỗi hệ 8.
mask – Dữ liệu ra hàm MGF, một xâu hệ 8. maskLen – Chiều dài của xâu hệ 8 mask. MGF – Hàm sinh mask.
mgfSeed – Nhân, từ đó mask được sinh, một xâu hệ 8. mLen – Chiền dài theo hệ 8 của một thông điệp M. n – Số modulus RSA, n= r1*r2*…*ru, u>2
29
(n, e) – Khóa công khai RSA.
p, q – Hai thừa số nguyên tố của số modulus n RSA. qInv – Hệ số CRT, một số nguyên dương nhỏ hơn p
q*qInv≡1(mod p)
ri– Thừa số nguyên tố của số modulus n RSA, bao gồm r1=p, r2=q, và những thừa số bổ xung nếu cần.
s – Đại diện chữ ký, một số giữa 0 và n-1. S – Chữ ký, một chuỗi hệ 8.
sLen – Chiều dài hệ 8 của khóa biến thiên (salt) EMSA-PSS.
ti – Hệ số CRT của thừa số nguyên tố cộng ri, một số nguyên dương nhỏ hơn ri r1*r2*….*ri-1*ti≡1(mod ri), i=3, …, u
u – Số của các Thừa số nguyên tố của hàm modulus RSA, u>2. x – Một số nguyên không âm.
X– Một chuỗi hệ 8 phù hợp với x. xLen – chiều dài của chuỗi hệ 8 X.
0x – Dấu chỉ đại diện hệ hexa của một số hệ 8 hoặc một chuỗi hệ 8; “0x48” biểu thị một số hệ 8 với giá trị hexa 48; “(0x)48 09 0e” biểu thị một chuỗi ba số
hệ 8 liên tiếp với giá trị hexa theo trình tự 48, 09 và 0e.
λ(n) – LCM (r1-1, r2-1, …, ru-1)
– hàm loại trừ bít của của hai chuỗi hệ 8.
‖– Toán tử cắt
≡ Biểu tượng đồng dư; a≡b(mod n) nghĩa là một số nguyên n chia cho số
nguyên a- b.
2.3.3. Các loại khóa
Hai loại khóa được sử dụng trong các số nguyên tố và lược đồ được định nghĩa trong tài liệu này là Khóa công khai RSA và Khóa riêng RSA. Khóa công khai RSA và khóa bí mật RSA tạo nên cặp khóa RSA.
Đặc tả này hỗ trợ cái gọi là RSA đa nguyên tố ở đó số modulus có thể có nhiều hơn hai thừa số nguyên tố. Lợi ích của RSA đa nguyên tố là chi phí tính toán thấp hơn cho giải mã và kiểm tra chữ ký số, được cung cấp mà thuật toán CRT được sử dụng. Hiệu năng có thể đạt được trên các nền tảng bộ xử lý đơn tốt hơn, nhưng mở tộng rất lớn trên các nền tảng đa bộ xử lý, nơi mà các số mũ modulus bao gồm có thể dược xử lý song song.
2.3.3.1. Khóa công khai RSA
Khóa công khai RSA gồm 2 thành phần:
- n – Số modulus RSA, một số nguyên dương.
- e – Số mũ công khai RSA, một số nguyên dương.
Một khóa công khai hợp lệ, số Modulus n RSA là kết quả của ri các số nguyên tố
riêng biệt u, i=1, 2, …, u ở đó u>=2, và số mũ công khai e RSA là một số nguyên giữa 3 và n-1 thỏa mãn GCD(e, λ(n))≡1, ở đó λ(n)≡LCM(r1-1, …, ru-1). Theo quy
ước, hai số nguyên tố đầu tiên r1 và r2 cũng có thể ám chỉ p và q theo trình tự.
2.3.3.2. Khóa riêng RSA
Khóa riêng RSA có thể có một trong hai đại diện.
- Đại diện đầu tiên bao gồm một cặp (n, d), ở đó các thành phần có nghĩa sau đây:
n – số modulus RSA, một số nguyên dương.
d – số mũ riêng RSA, một số nguyên dương.
- Đại diện thứ 2 bao gồm bộ năm (p, q, dP, dQ, qInv) và một chuỗi ba số
(ri, di, ti), i= 3, …, u, mot cho mỗi số nguyên tố không trong bộ năm, ở đó các thành phần có ý nghĩa sau đây:
31
p – Thừa số đầu tiên, một số nguyên dương.
q – Thừa số thứ hai, một số nguyên dương.
dP – Số mũ CRT của thừa số đầu tiên, một số nguyên dương.
dQ – Số mũ CRT của thừa số thứ 2, một số nguyên dươn.
qInv – Hệ số CRT đầu tiên, một số nguyên dương. ri– thừa số thứ i, một số nguyên dương.
di– Số mũ CRT của thừa số thứi, một số nguyên dương.
ti– hệ số CRT của thừa số thứ i, một số nguyên dương.
Trong một khóa riêng RSA hợp lệ với biểu diện thứ nhât, số modulus n RSA là giống
như trong khóa công khai RSA tương ứng và là kết quả của ri các số nguyên tố u,i=1, 2, …, u, ở đó u>2. Số mũ khóa riêng d RSA là một số nguyên dương nhỏ hơn n
thỏa mãn: e*d ≡ 1 (mod , λ(n)). (2.1)
Ở đó e phù hợp với số mũ công khai RSA và λ(n) được định nghĩa như trên.
Trong một khóa riêng RSA hợp lệ với biểu diễn thứ 2, hai thừa số p và q là hai thừa số đầu tiên của số Modulus n RSA (tức là, r1 và r2), số mũ dP và dQ CRT là hai số nguyên dương nhỏ hơn p và q thỏa mãn theo trình tự: