1.1.3.4. Thuật tốn mã hóa khóa cơng khai RSA
Mã hóa đối xứng d rằng đã phát triển từ cổ điển đến hiện đại, vẫn tồn tại hai điểm yếu sau:
Vấn đề trao đổi khóa giữa người gửi và người nhận: Cần phải có một kênh an tồn để
trao đổi khóa sao cho khóa phải được giữ bí mật chỉ có người gửi và người nhận biết. Việc thiết lập một kênh an tồn như vậy sẽ tốn kém về mặt chi phí và chậm trễ về mặt thời gian. Điều này tỏ ra không hợp lý khi mà ngày nay khối lượng thông tin luân chuyển trên khắp thế giới là rất lớn. Vì vậy cần một giải pháp an toàn, nhanh gọn, rẻ tiền và tận dụng hạ tầng mạng Internet có sẵn.
Tính chịu trách nhiệm về khóa: khơng có cơ sở quy trách nhiệm nếu khóa bị tiết lộ.
Vào năm 1976 Whitfield Diffie và Martin Hellman đã tìm ra một phương pháp mã mật khác mà có thể giải quyết được hai vấn đề trên, đó là mã hóa khóa cơng khai hay cịn gọi là
17 mã hóa bất đối xứng, xem Hình 1.6. Đây có thể xem là một bước đột phá quan trọng nhất trong lĩnh vực mã mật.
Hình 1.6 Mơ hình mã hóa khóa cơng khai:
a)Ứng dụng trong xác thực; b) Ứng dụng trong bảo mật.
Thuật tốn mã hóa RSA [49] là một thuật tốn điển hình về mã hóa khóa cơng khai. RSA được xây dựng bởi các tác giả Ron Rivest, Adi Shamir và Len Adleman tại học viện MIT vào năm 1977. Cũng như các thuật tốn mã hóa cơng khai khác, ngun lý của RSA dựa chủ yếu trên lý thuyết số chứ không dựa trên các thao tác xử lý bit.
RSA là một thuật tốn mật mã khối, kích thước khối thơng thường là 1024 hoặc 2048 bit. Thông tin gốc của RSA được xử lý như các số nguyên. Ví dụ, khi chọn kích thước khối của thuật tốn là 1024 bit thì thuật tốn xử lý các số ngun có giá trị từ 0 đến
21024 – 1, tương đương với số thập phân có 309 chữ số. Chú ý rằng đây là những số nguyên
cực lớn, không thể xử lý được bằng cách sử dụng các cấu trúc dữ liệu có sẵn của các ngơn ngữ lập trình phổ biến.
Cơ sở lý thuyết của thuật toán RSA dựa trên lý thuyết về số nguyên tố, phép toán modulo và định lý Euler.
Ngun lý làm việc của thuật tốn RSA:
Tạo khóa: 1) Chọn hai số nguyên tố đủ lớn p và q và gọi N là tích của chúng, N = pq. 2) Chọn một số e sao cho e và n = (p-1)(q-1) là hai số nguyên tố c ng nhau.
Sau đó tìm số d sao cho e.d = 1 mod n. Ký hiệu mod n là biểu diễn phép
modulo trên cơ số n.
18 + Khóa cơng khai (public key) là tổ hợp (N, e)
+ Khóa bí mật (private key) là tổ hợp (N, d)
Mã hóa: Việc mã hóa một khối thông tin gốc M được thực hiện theo công thức:
+ C = Me mod N Ứng với trường hợp bảo mật + C = Md mod N Ứng với trường hợp xác thực
Giải mã: Quá trình giải mã C được thực hiện theo tương ứng ngược lại:
+ M = Cd mod N
+ M = Ce mod N
Độ phức tạp của thuật tốn RSA:
Có hai vấn đề về độ phức tạp tính tốn trong thuật tốn RSA. Đó là các phép tính mã hóa/giải mã và các phép tính sinh khóa.
Phép tính mã hóa và giải mã d ng phép lũy thừa modulo. Nếu thực hiện bằng cách
tính phép lũy thừa trước sau đó rút gọn modulo, thì giá trị của phép lũy thừa là q lớn để có thể lưu trữ và tính tốn. Tuy nhiên phép modulo có một tính chất sau:
a x b a mod n x b mod n mod n (1.3) Chúng ta có thể sử dụng tính chất này để đơn giản phép tính lũy thừa modulo thơng qua một phương pháp gọi là “bình phương liên tiếp”. Ví dụ cần tính x16 mod n, đầu tiên sẽ tính a = x mod n , tiếp theo là b = x2 mod n = a2 mod n, tiếp theo là c = x4
mod n = b2 mod
n, tiếp theo là d = x8
mod n = c2 mod n, và cuối c ng x16
mod n = d2 mod n. Các số a, b, c, d ln nhỏ hơn n do đó tránh được việc tính số lũy thừa lớn đồng thời nâng cao tốc độ tính tốn.
Phép tính sinh khóa là chọn p và q nguyên tố để tính N. Để phân tích số N thành tích
hai thừa số nguyên tố p, q, chỉ có một cách duy nhất là thử từng số p và q. Do đó phải chọn
p, q đủ lớn để việc thử là khơng khả thi. Hiện nay chưa có phương pháp nào để sinh ra số
nguyên tố lớn t y ý. Chỉ có cách là chọn một số lẻ ngẫu nhiên nào đó và kiểm tra số đó có phải là số ngun tố khơng. Việc kiểm tra tính ngun tố cũng gặp nhiều khó khăn. Thuật tốn kiểm tra số ngun tố hiệu quả hiện nay là thuật toán Miller-Rabin, d rằng khơng hồn tồn chính xác 100%, tuy nhiên có thể đạt sai số nhỏ khơng đáng kể.
Chúng ta thường chọn trước e là 65537 hoặc 3 hoặc 17, vì các số này khi biểu diễn ở dạng nhị phân chỉ có 2 chữ số 1, nên khi thực hiện lệnh lũy thừa sẽ giảm đi lệnh nhân. Ta cần kiểm tra xem e có nguyên tố c ng nhau với n = (p-1)(q-1) hay không. Nếu không ta phải thử lại với cặp số p và q khác. Sau khi đã có p và q thích hợp, cần tìm d sao cho e.d 1 mod n. Bằng cách d ng thuật toán Euclid mở rộng, chúng ta có thể kết hợp việc kiểm tra tính ngun tố c ng nhau của e và n, đồng thời nếu e nguyên tố c ng nhau với n thì thuật tốn cũng cho biết d. Vì vậy khơng cần tiến hành bước tìm d riêng.
19
Độ an tồn của thuật tốn RSA:
Độ an tồn của thuật tốn RSA dựa trên độ khó của bài tốn phân tích một số thành nhân tử. Việc đo lường tính bảo mật của RSA đã trình bày trong [57], Kefa Rabah chỉ ra rằng vào năm 1994 để phân tích số thập phân N có129 số (tương ứng số nhị phân 426 bit) thành tích hai thừa số nguyên tố lớn c ng nhau phải cần 5.000 MIPS-year (một MIPS-year bằng một năm hoạt động liên tục của máy tính có tốc độ thực hiện một triệu lệnh trong một giây), tương đương việc sử dụng thời gian nhàn rỗi của 1.600 máy tính trên tồn thế giới trong thời gian tám tháng. Điều này cho thấy với N lớn thì việc tìm khóa của thuật tốn RSA vơ c ng khó khăn. Khi sử dụng thuật tốn mã hóa RSA để mã hóa khóa bí mật, chiều dài khóa 512 đến 1024 bit là cần thiết, và để bảo vệ các giao dịch giá trị rất cao thì sử dụng khóa dài trên 1024 bit.
Bảng 1.4 Thử nghiệm độ bảo mật của RSA
Số bit của N Số thao tác Thời gian
100 9,6 x 108 16 phút 200 3,3 x 1012 38 ngày 300 1,3 x 1015 41 năm 400 1,7 x 1017 5.313 năm 500 1,1 x 1019 3,3 x 105 năm 1024 1,3 x 1026 4,2 x 1012 năm 2048 1,5 x 1035 4,9 x 1021năm
1.1.3.5. Hàm băm bảo mật SHA
Hàm băm là một thuật tốn khơng sử dụng khóa. Kết quả của hàm băm là một giá trị băm dài cố định được tính tốn dựa trên bản rõ. Từ một giá trị băm quá khó để phục hồi được bản rõ. Vì vậy hàm băm đơi khi cịn được gọi là hàm rút gọn bản tin (message digest) hay hàm một chiều (one-way function), xem Hình 1.7. Các thuật tốn băm thường được sử dụng để xác thực rằng các bản tin không bị thay đổi bởi một hành động chủ quan hoặc khách quan trên đường truyền từ nơi gửi đến nơi nhận. Một số hệ điều hành cũng thường sử dụng hàm băm để mã hóa mật khẩu. Lúc này, mật khẩu được lưu trữ bằng một giá trị băm nên việc đảm bảo an toàn cho mật khẩu là rất cao.