CHƯƠNG 1 CƠ SỞ HẠ TẦNG KHÓA CÔNG KHAI 1.1 Hệ mật mã khóa bất đối xứng[2] 1.1 Khái niệm Đặc trưng của hệ mật mã khóa bất đối xứng (Asymmetric Key Encryption), hay còn được gọi là hệ mật mã khóa công khai (Public Key Encryption) là dùng 2 khóa riêng biệt cho hai quá trình mã hóa và giải mã, trong đó có một khóa được phổ biến công khai (Public Key), không cần giữ bí mật, ký hiệu PU và khóa còn lại gọi là khóa riêng (Private Key) được giữ bí mật, chỉ có chủ sở hữu được biết, ký hiệu là PR. Cả hai khoá có thể được dùng để mã hoá hoặc giải mã theo nhu cầu sử dụng. Việc chọn khoá công khai hay khoá bí mật cho quá trình mã hoá sẽ tạo các ứng dụng khác nhau: 1. Dùng khoá công khai PU để mã hoá và khoá riêng để giải mã cho ứng dụng bảo mật thông tin (Confidentiality).
Dùng khoá riêng PR để mã hoá và khoá công khai PU để giải mã cho ứng dụng xác thực nội dung và nguồn gốc thông tin (Authentication). Thuật toán mật mã bất đối xứng dựa trên các hàm toán học. Mật mã hóa bất đối xứng còn được gọi bằng một tên thông dụng hơn là mật mã hóa dùng khóa công khai (Public Key Kncryption). Nói chung, mật mã hóa bất đối xứng không phải là một kỹ thuật mật mã an toàn hơn so với mật mã đối xứng, mà độ an toàn của một thuật toán mã nói chung phụ thuộc vào 2 yếu tố: Độ dài của khóa và mức độ phức tạp khi thực hiện thuật toán (trên máy tính).
Hơn nữa, mặc dù được ra đời sau nhưng không có nghĩa rằng mật mã bất đối xứng hoàn toàn ưu điểm hơn và sẽ được sử dụng thay thế cho mật mã đối xứng. Mỗi kỹ thuật mã có một thế mạnh riêng và mật mã đối xứng vẫn rất thích hợp cho các hệ thống nhỏ và đơn giản. Ngoài ra, vấn đề phân phối khóa trong mật mã bất đối xứng cũng được đánh giá là một trong những vấn đề phức tạp khi triển khai kỹ thuật mật mã này trong thực tế. 4 Các bước cơ bản của một hệ thống mật mã khóa công khai bao gồm: 1.
Mỗi thực thể thông tin (User) tạo ra một cặp khóa công khai PU (Public Key) và khóa riêng PR (Private Key). User thông báo khoá công khai PU cho các User khác biết, còn khóa riêng PR là sở hữu riêng, giữ bí mật. Nếu User A muốn gửi thông tin cho User B, User A sẽ thực hiện mã hóa thông tin cần gửi bằng khóa công khai của User B. Khi nhận được thông tin đã mã hóa từ User A, User B thực hiện giải mã thông tin đó bằng khóa riêng của nó.
Do khóa riêng không phổ biến công khai nên chỉ có User B có khả năng giải mã được. Mật mã hóa bất đối xứng được sử dụng trong các ứng dụng: che giấu thông tin, tạo chữ ký số (Digital Signature) và trao đổi khóa trong các thuật toán mật mã đối xứng (Key Exchange). a) Ứng dụng bảo mật thông tin 5 b) Ứng dụng xác thực thông tin Hình 1.1: Cấu trúc hệ thống mật mã khóa bất đối xứng 1.2 Thuật toán mật mã RSA RSA (Rivest – Shamir – Adleman hay RSA) là thuật toán mật mã khóa bất đối xứng được xây dựng bởi Ron Rivest, Adi Shamir và Len Adleman tại viện công nghệ Massachusetts (MIT), ra đời năm 1977, đến nay đã được ứng dụng trong nhiều lĩnh vực. Cũng như các thuật toán mật mã bất đối xứng khác, nguyên lý của RSA dựa chủ yếu trên lý thuyết số, lý thuyết logic rời rạc RSA là một thuật toá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 toán là 1024 bit thì số nguyên này 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. Thuật toán RSA được mô tả như sau: 1.
Chọn hai số nguyên tố đủ lớn p và q. Chọn một số e sao cho e và φ(N) là hai số nguyên tố cùng nhau. Tìm số d sao cho ed = 1 mod φ(N) 6 5. Cặp khóa bất đối xứng − Khóa công khai (Public): PU= (N, e) − Khóa bí mật (Private): PR = (N, d) 6.
Nếu sử dụng kỹ thuật RSA để mã hóa thông tin − Mã hóa: • Khối thông tin gốc “m” chuyển về số nguyên M≤ N • C = Me mod N − Giải mã: M = Cd mod N Ví dụ: 1. Chọn các số nguyên tố: p = 11 và q = 3 2. Chọn e = 3, vì 3 và 20 nguyên tố cùng nhau. Với e = 3, chọn d = 7, vì e*d = 3*7 = 1 mod 20 5.
Cặp khóa bất đối xứng − Khóa công khai (Public): PU = (33, 3) − Khóa bí mật (Private): PR = (33, 7) 6. Giả sử User A có cặp khóa PUA = (33, 3) và PRA = (33, 7),User B muốn gửi thông tin M = 15 cho User A − User B mã hóa M bằng PUA = (33,3), C = 153 mod 33 = 3375 mod 33 = 9 mod 33. Khi đó, thông tin mật gửi cho User A là C = 9 − Khi nhận C = 9, User A giải mã bằng khóa riêng PRA = (33, 7): M = Cd mob N = 97 mod 33 = 4. - Thông tin giải mã được là M = 15 Tóm lại, thuật toán mật mã RSA được thực hiện gồm 3 quá trình tách rời: tạo khoá, mã hoá và giải mã được tóm tắt như sau: 1.
Tạo khoá: • Chọn p, q (p và q là số nguyên tố, p ≠ q) • Tính N = p*q • Tính φ(N) = (p - 1)(q - 1) • Chọn e sao ước số chung lớn nhất của e và φ(N) là 1 • Chọn d sao cho e. Mã hoá: C = Me mod N (M là số nguyên nhỏ hơn N) 7 3. Giải mã: M = Cd mod N Trong thực tế, để đạt được độ an toàn cao, cặp khóa phải được chọn trên các số p và q đủ lớn (N nhỏ nhất phải là 1024 bit), do vậy, vấn đề thực thi RSA bao gồm các phép toán lũy thừa trên các số rất lớn. Vấn đề giảm chi phí tính toán và tăng tốc độ thực hiện thuật toán RSA là một trong những vấn đề quan trọng cần phải giải quyết.
Trên các hệ thống máy tính hiện nay, hiệu suất thực hiện giải thuật RSA là chấp nhận được.3 Chuyển đổi văn bản rõ Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ (chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã không an toàn. Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề: Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương ứng Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị cũng nhận giá trị nhỏ (so với n). Như vậy phép modulo không có tác dụng và có thể dễ dàng tìm được m bằng cách khai căn bậc e của c (bỏ qua modulo). RSA là phương pháp mã hóa xác định, không có thành phần ngẫu nhiên, nên Hacker có thể tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã.
Khi gặp một bản mã, Hacker sử dụng bảng tra để tìm ra bản rõ tương ứng. Trên thực tế, thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn với m là nhóm vài ký tự ASCII. Một đoạn tin chỉ có 1 ký tự NUL sẽ được gán giá trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N. Tương tự, một ký tự ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1.
Với các hệ thống dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và 2553 nhỏ hơn giá trị n chấp nhận được. Những bản mã này sẽ dễ dàng bị phá mã. Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa. Quá trình chuyển đổi này phải đảm bảo rằng m không rơi vào các giá trị không an toàn.
Sau khi chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp bản mã. Điều này làm giảm tính khả thi tấn công lựa chọn bản rõ (một bản rõ sẽ có thể tương ứng với nhiều bản mã tuỳ thuộc vào cách chuyển đổi). 8 Một số chuẩn, như PKCS, được thiết kế chuyển đổi bản rõ trước khi mã hóa bằng RSA. Các phương pháp chuyển đổi này bổ sung thêm bít vào M.
Các phương pháp chuyển đổi cần được thiết kế cẩn thận để tránh những dạng tấn công phức tạp, tận dụng khả năng biết trước được cấu trúc của bản rõ. Phiên bản ban đầu của PKCS dùng một phương pháp Ad- hoc mà về sau được biết là không an toàn trước tấn công lựa chọn bản rõ thích ứng (Adaptive Chosen Ciphertext Attack). Các phương pháp chuyển đổi hiện đại sử dụng các kỹ thuật như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) để chống lại tấn công dạng này. Tiêu chuẩn PKCS còn được bổ sung các tính năng khác để đảm bảo an toàn cho chữ ký RSA (Probabilistic Signature Scheme for RSA - RSA - PSS).4 Đánh giá kỹ thuật mật mã bất đối xứng Kỹ thuật mật mã bất đối xứng hoàn toàn có thể đáp ứng được những yêu cầu về bảo mật hệ thống như trong kỹ thuật mật mã đối xứng, mặc dù tốc độ thực thi của mã bất đối xứng thường thấp hơn do bản chất thuật toán dựa trên các thao tác số học chứ không dựa trên các thao tác xử lý bit.
Hơn nữa, mã bất đối xứng chỉ phù hợp với việc thực thi bằng phần mềm. Mật mã bất đối xứng đảm bảo được 2 yêu cầu cơ bản của thông tin là tính bí mật và tính toàn vẹn. Kỹ thuật mật mã bất đối xứng có 2 ưu điểm so với mã đối xứng: 1. Hai thực thể không cần thực hiện trao đổi khóa trước khi làm việc.