Do số lượng các đối tượng mà CA phải chịu trách nhiệm quản lý quá lớn, đôi khi phải chuyển giao bớt công việc cho phần tử khác. Rất nhiều hệ thống PKI lớn sử dụng một đơn vị đảm nhiệm việc đăng ký gọi là RA (Registration Authority) để
làm nhiệm vụ quản lý đăng ký cấp chứng chỉ [5]. RA có thể khởi tạo và xác nhận từng đối tượng riêng lẻ, phân phát khoá mã công khai cho người dùng, thay mặt người sử dụng khởi tạo các tiến trình xử lý chứng chỉ với CA, quản lý thời gian hiệu lực của chứng chỉ. RA không làm nhiệm vụ phát hành chứng chỉ nhưng có thể đóng vai trò trung gian giữa người sử dụng và CA. Điều này tỏ ra rất hữu ích trong môi trường phân tán.
Hình 3.3: Đơn vị đăng ký chứng chỉ giúp giảm bớt khối lượng công việc và lưu lượng thông tin gửi đến CA trong môi trường phân tán
Ví dụ giả sử CA được đặt ở NewYork, có một công ty ở New Mexico yêu cầu hỗ trợ về mặt cấp phát chứng chỉ. Sẽ hiệu quả hơn rất nhiều nếu có một RA ở New Mexico đảm nhiệm việc giải đáp các thắc mắc, thu thập các yêu cầu cấp chứng chỉ rồi chuyển sang cho CA. Điều này có thể giảm bớt khối lượng công việc cho CA và tạo sự thuận lợi cho người dùng [6].
3.1.4 Các bƣớc trong PKI
Giả sử John muốn có một cặp khoá mã public/private cho cá nhân anh ta, anh ta làm một yêu cầu gửi đến CA. CA yêu cầu John cung cấp các thông tin cá nhân như bản sao thẻ căn cước, địa chỉ nhà, số điện thoại,… Sau khi CA nhận và kiểm tra các thông tin do John cung cấp, CA đăng ký tên John vào hệ thống cơ sở dữ liệu và tạo một cặp khoá mã. CA tạo một chứng chỉ bằng khoá mã công khai của John và gán các thông tin chung của John vào chứng chỉ ấy. Khoá mã cá nhân có thể tạo bởi CA
hoặc bởi máy tính của John, tuỳ theo quy định của hệ thống. Nếu khoá mã cá nhân của John được tạo bởi CA, nó sẽ được gửi đến cho John theo một đường an toàn. Bây giờ John đã được đăng ký và tham gia vào hệ thống PKI. John muốn trao đổi thông tin với Diane nên anh ta yêu cầu khoá mã công khai của Diane trên CA mà anh ta đăng ký. CA gửi khoá mã công khai của Diane cho John và John sử dụng khoá mã đó để mã hoá khoá mã session dùng để mã hoá thông tin rồi gửi cho Daine. Sau đó John gửi chứng chỉ kèm theo mã khoá công khai của anh ta cho Diane. Khi Daine nhận được chứng chỉ của John, trình duyệt của Daine sẽ kiểm tra xem sự hợp lệ của CA ký trên chứng chỉ của John. Sau đó trình duyệt của Diane sẽ tin cậy CA này và tạo yêu cầu CA kiểm tra tính hợp lệ của chứng chỉ. Khi CA xác nhận rằng chứng chỉ đó hợp lệ, Diane sẽ sử dụng mã khoá cá nhân để giải mã nhằm lấy khoá mã session. Sau đó cả John và Diane sẽ trao đổi thông tin với nhau một cách an toàn.
Hình 3.4: CA và mối quan hệ với người sử dụng
3.2 Hàm một chiều và chữ ký điện tử
Hàm một chiều là những hàm toán học cho phép tính toán theo chiều này dễ dàng hơn so với chiều ngược lại. Ví dụ khi thả chiếc kính xuống sàn nhà, việc thả chiếc kính xuống sàn nhà rất dễ dàng nhưng việc nhặt các mảnh vỡ lắp lại thành chiếc kính thì rất khó có thể (thậm chí không thể) thực hiện được [6]. Khái niệm này tương tự đối với hàm toán học một chiều trong mã hoá.
lớn với nhau. Việc nhân hai số nguyên tố lớn với nhau có thể tiến hành rất dễ dàng, nhưng việc phân tích thành nhân tử nguyên tố và tìm ra các số nguyên tố thì khó hơn rất nhiều. Rất nhiều thuật toán mã hoá công khai dựa trên sự khó khăn trong việc phân tích nhân tử của một số lớn để khôi phục lại các số nguyên tử đã tạo thành số lớn đó.
Hệ thống mã hoá công khai dựa trên các hàm một chiều có bẫy (trapdoor one-way functions). Khi người sử dụng dùng khoá mã công khai để mã hoá thông tin, thông tin này được mã hoá bằng một hàm một chiều (tương tự như việc thả chiếc kính xuống sàn nhà). Hàm này cung cấp một trapdoor (cách để gắn các mảnh kính vỡ lại với nhau) nhưng cách duy nhất để thực hiện được trapdoor này là phải biết chính xác mật mã được sử dụng [4]. Khoá mã cá nhân đảm đương chức năng mật mã này. Khoá mã cá nhân có các thông tin về trapdoor và có các mã chương trình cần thiết của trapdoor này để mở được thông tin bị mã hoá (gắn lại các mảnh kính vỡ).
Có đầy đủ các thông tin về trapdoor và có được các hàm chính xác để thực hiện sẽ tạo ra được một khoá mã cá nhân.
Điểm mấu chốt của phần này là phương pháp mã hoá khoá công khai đảm bảo an toàn bằng các sử dụng các phương trình toán học mà dễ dàng thực hiện theo một chiều (sử dụng khoá mã công khai) và không thể thực hiện theo chiều ngược lại (sử dụng khoá mã cá nhân).
3.2.1 Tính toàn vẹn của thông tin
Hệ thống mã hoá có thể phát hiện được sự thay đổi nội dung thông tin khi bị truy nhập bất hợp pháp theo hai cách. Cách thứ nhất là thông điệp không thể giải mã một cách thành công nếu một phần trong nó của nó bị thay đổi. Bit chẵn lẻ thường được dùng trong các giao thức khác nhau để phát hiện sự thay đổi của một chuỗi bit khi nó được truyền từ máy tính này sang máy tính khác. Tuy nhiên bit chẵn lẻ chỉ có thể phát hiện được các sự thay đổi không có chủ ý ví dụ như do bị nhiễu, suy hao trên đường truyền, mất điện đột ngột,… Bit chẵn lẻ không thể phát hiện được thông tin đã bị đánh cắp và sửa đổi vì kẻ tấn công có thể tính toán và thay đổi bit chẵn lẻ cho phù hợp với thông tin mà hắn đã sửa.
3.2.2 Hàm Hash một chiều
Hàm hash một chiều thường là các hàm toán học có thể làm việc trên các chuỗi thông tin có độ dài khác nhau và tiến hành các thuật toán nén, biến đổi các thông tin đó thành một giá trị có độ dài cố định được gọi là giá trị hash. Một giá trị hash còn được gọi là một message digest. Lý do phải thực hiện các quá trình này là để tạo dấu vết (fingerprint) của thông tin. Nếu dấu vân tay có thể dùng để nhận dạng người thì giá trị hash cũng có thể dùng để xác định một thông điệp.
Nếu Kevin muốn gửi một thông điệp đến cho Maureen và anh ta muốn thông điệp đó không bị sửa đổi bất hợp pháp trên đường truyền, anh ta tính toán giá trị hash cho thông điệp đó và đính kèm vào thông điệp. Khi Maureen nhận được thông điệp, cô ta cũng tiến hành tính giá trị hash cho thông điệp bằng cách sử dụng thuật toán giống như Kevin đã dùng. Nếu giá trị hash do Maureen tính giống với giá trị hash do Kevin gửi đến, Maureen có thể chắc chắn rằng thông tin vẫn còn nguyên vẹn và không bị sửa đổi trong quá trình truyền đi. Nếu hai giá trị hash khác nhau, Maureen có thể biết được thông tin đã bị thay đổi một các vô tình hay hữu ý và cô ta có thể bỏ qua thông tin ấy.
Thông thường hàm hash là một thuật toán được công bố rộng rãi. Điều bí mật của thuật toán hash một chiều là khả năng “một chiều” của nó. Thuật toán chỉ chạy theo một chiều mà không thể chạy theo chiều ngược lại. Điều này khác với hàm một chiều dùng trong mã hoá công khai. Trong thuật toán mã hoá khoá công khai, tính an toàn được đảm bảo bởi vì nếu không biết khoá mã, rất khó có thể thực hiện chiều ngược lại để khôi phục dữ liệu plaintext; trong khi đó, hàm hash một chiều không bao giờ thực hiện được theo chiều ngược lại. Thay vì cố gắng thực hiện theo chiều ngược lại, người nhận được thông tin sẽ thực hiện hàm hash theo cách người gửi đã thực hiện rồi sau đó so sánh kết quả với nhau.
Hàm hash có thể thực hiện mà không cần bất kỳ khoá mã nào. Điều đó có nghĩa tất cả mọi người nhận được thông tin đều có thể thực hiện thuật toán hash, kiểm tra giá trị và xác định tính toàn vẹn của dữ liệu. Tuy nhiên nếu người gửi muốn chỉ có một người cụ thể mới có quyền xem giá trị hash gửi kèm theo thông tin, anh ta có thể mã hoá giá trị hash bằng một khoá mã. Giá trị hash được tạo ra với khoá mã được
gọi là mã xác thực thông tin (message authentication code - MAC).
Hình 3.5: Người nhận kiểm tra mã MAC của mình với giá trị MAC của người gửi
MAC hoàn toàn giống hàm hash một chiều, ngoại trừ giá trị hash được tạo bởi thông tin và khoá mã. Điều này đảm bảo chỉ có người nhận với khoá mã cần thiết mới xác định được tính toàn vẹn của thông điệp gửi đến.
3.2.3 Hàm một chiều sử dụng trong mã hoá so với hàm hash một chiều
Hàm một chiều sử dụng trong mã hoá khoá công khai
- Cung cấp cho thuật toán tính an toàn và xác thực dữ liệu
- Hàm mã hoá theo một chiều và sau đó giải mã theo chiều ngược lại
Hàm hash một chiều
- Không bao giờ thực hiện được theo chiều ngược lại
- Cung cấp tính toàn vẹn cho dữ liệu nhưng không cung cấp tính an toàn và xác thực dữ liệu
- Sử dụng trong quá trình hashing để tạo dấu vết của dữ liệu
3.2.4 Chữ ký điện tử (Digital Signatures)
Như trong ví dụ trước, nếu Kevin muốn đảm bảo rằng thông tin anh ta gửi cho Maureen không bị sửa đổi và anh ta muốn Maureen biết chắc rằng thông tin là do anh gửi đến, Kevin có thể gán chữ ký điện tử vào thông điệp. Điều này có nghĩa rằng Kevin tiến hành tính toán giá trị hash cho thông điệp rồi mã hoá giá trị ấy bằng khoá mã cá nhân của anh ta.
Khi Maureen nhận được thông điệp, cô ta tiến hành tính toán giá trị hash trên thông điệp nhận được. Sau đó cô ta giải mã giá trị hash của Kevin gửi bằng khoá mã công khai của Kevin. Nếu hai giá trị hash giống nhau, Maureen có thể khẳng định rằng thông tin không bị sửa đổi trong quá trình truyền. Maureen đồng thời biết rằng thông điệp đó đến từ Kevin bởi giá trị hash của nó được mã hoá bằng khoá mã cá nhân của Kevin [6].
Như vậy hàm hash đảm bảo tính toàn vẹn dữ liệu và việc ký lên giá trị hash mang lại khả năng xác thực và chống phủ nhận thông tin. Các bước thực hiện chữ ký điện tử được minh hoạ trong hình 3.6.
Hình 3.6: Các bước thực hiện chữ ký điện tử
Ta có thể thấy:
- Một thông điệp có thể được mã hoá, điều đó cung cấp tính bảo mật (riêng tư)
- Một thông điệp có thể được hash, điều đó cung cấp tính toàn vẹn
- Một thông điệp có thể được gán chữ ký điện tử, điều đó cung cấp tính xác thực và toàn vẹn
- Một thông điệp có thể được mã hoá, gán chữ ký điện tử, điều đó cung cấp tính bảo mật, xác thực và toàn vẹn
Cần phải nói rằng không một thuật toán nào cung cấp đầy đủ các dịch vụ bảo mật. Phần lớn các thuật toán này phải kết hợp với nhau để đáp ứng các yêu cầu bảo mật. Bảng dưới đây mô tả các chức năng của từng thuật toán [6]:
Thuật toán Mã hoá Chữ ký điện
tử Hàm hash Phân phát khoá
Mã hoá bất đối xứng RSA ECC Diffie-Hellman El Gamal Mã hoá đối xứng DES 3DES Blowfish IDEA RC4 Safer
Thuật toán Hash
RSA
MD2, MD4, MD5
SHA dùng với DSA
HAVAL
Chữ ký điện tử là một giá trị hash được mã hoá. Hành động ký có nghĩa là sử dụng khóa mã cá nhân để mã hoá giá trị hash của thông tin. Quá trình này được minh hoạ trong hình vẽ 3.7.
Hình 3.7: Tạo chữ ký điện tử cho một file
3.2.5 Tiêu chuẩn chữ ký điện tử Quốc gia Hoa kỳ - DSS
Do chữ ký điện tử có vai trò quan trọng trong việc chứng minh ai là người gửi thông tin và gửi vào thời điểm nào do đó Chính phủ Mỹ đã quyết định xây dựng một tiêu chuẩn cho chữ ký điện tử. Năm 1991 NIST đệ trình lên Chính phủ một tiêu chuẩn có tên gọi là Digital Signature Standard (DSS). Tiêu chuẩn này được dành cho các bộ nghành nhưng phần lớn các sản phẩm được phát triển đều đáp ứng yêu cầu này. Chính phủ liên bang yêu cầu các bộ, nghành phải sử dụng thuật toán chữ ký điện tử DSA và thuật toán hash SHA để ký các thông tin. Thuật toán SHA tạo ra một giá trị hash có độ dài cố định là 160 bit, giá trị hash này được đưa vào mã hoá bằng DSA. SHA dùng để đảm bảo tính toàn vẹn cho thông tin còn DSA dùng để ký lên thông tin.
RSA và DSA là hai thuật toán dùng cho chữ ký điện tử được biết nhiều nhất. Không giống như RSA, thuật toán DSA chỉ cho phép làm chữ ký điện tử và thuật toán là một phần tiêu chuẩn DSS của Mỹ, còn thuật toán RSA có thể sử dụng làm chữ ký điện tử và mã hoá thông tin.
3.2.6 Các thuật toán Hash
Như đã đề cập ở trên, mục tiêu của hàm một chiều là cung cấp chứng năng tạo dấu vết cho thông tin. Nếu hai thông điệp khác nhau có cùng một giá trị hash, kẻ tấn
công có thể dễ dàng phá vỡ cơ chế vảo mật bởi vì cơ chế đó tuân theo một khuôn dạng cụ thể.
Một thuật toán hash mạnh yêu cầu phải khó bị phá vỡ và cũng không được phép tạo ra cùng một giá trị hash từ hai hoặc nhiều thông điệp khác nhau. Nếu thuật toán hash đảm bảo không tạo ra cùng một giá trị hash từ hai hoặc nhiều thông điệp, thuật toán đó có tính chất “không mẫu thuẫn” hoặc không lặp lại.
Một thuật toán hash tốt cần có đầy đủ các đặc tính sau:
- Giá trị hash tạo ra phải từ quá trình tính toán trên toàn bộ thông điệp - Hàm hash đó phải một chiều
- Không thể sử dụng một thông điệp và giá trị hash của nó để tìm ra một thông điệp khác có chung giá trị hash
- Thuật toán phải chống được kiểu tấn công birthday - có nghĩa kẻ tấn công không thể tìm ra hai thông điệp có chung một giá trị hash
MD4
MD4 là thuật toán hash một chiều được phát triển bởi Ron Rivest. Thuật toán này tạo ra một giá trị hash có độ dài 128 bit. Thuật toán này sử dụng sức mạnh tính toán trong phần mềm và được tối ưu hoá cho bộ vi xử lý.
MD5
MD5 là phiên bản mới của MD4. Thuật toán này vẫn tạo ra giá trị hash 128 bit nhưng phức tạp hơn và khó bị phá hơn so với thuật toán MD4. Thuật toán MD5 bổ sung thêm vòng điều khiển thứ tư để tăng thêm tính phức tạp và độ an toàn cho thuật toán.
MD2
MD2 cũng là thuật toán hash một chiều do Ron Rivest phát triển. Thuật toán này yếu hơn so với hai thuật toán trên và tốc độ tính toán cũng chậm hơn rất nhiều.
SHA
một giá trị hash có độ dài cố định là 160 bit. Giá trị hash này sau đó được đưa vào thuật toán DSA để tạo ra chữ ký điện tử. SHA tương tự như MD4 nhưng nó có thêm một số chức năng và tạo ra một giá trị 160 bit cho phép chống lại kiểu tấn công dạng vét cạn và birthday một cách tốt hơn.