Xuất phát từ nhu cầu thực tế trên, hầu hết các nhà thiết kế phần mềm đã xem các tính năng bảo mật như một phần không thể thiếu của mỗi ứng dụng. Tuy nhiên, trên thực tế khi một phần mềm đã trở thành một sản phẩm thương mại thì việc đánh giá về độ bảo mật của các dịch vụ mật mã được phần mềm trợ giúp chỉ có thể do chính các nhà xây dựng nên phần mềm đó thực hiện một cách hiệu quả nhất. Vậy giải pháp nào để người khai thác và sử dụng có thể tin tưởng vào các dịch vụ bảo mật của một phần mềm khi chúng được đưa ra sử dụng?
Trong các năm gần đây xu thế cung cấp mã nguồn mở của các phần mềm tin học có phần phổ biến hơn, giải pháp tìm hiểu, khai thác các bộ chương trình nguồn để đưa ra các ứng dụng mang một số đặc tính riêng như thay thế hoặc bổ sung các dịch vụ bảo mật (tích hợp mật mã),... được xem là một trong những hướng đi phù hợp của quá trình bảo đảm an toàn cho các ứng dụng công nghệ thông tin ở Việt Nam. Với cách tiếp cận này chúng ta có thể kế thừa toàn bộ những kết quả về công nghệ thông tin đã được sử dụng để xây dựng phần mềm mã nguồn mở, đồng thời làm chủ được về nguyên lý, cơ chế của các dịch vụ bảo mật và xác thực cung cấp cho các ứng dụng trên.
Để giúp cho việc khai thác, tìm hiểu, làm chủ và tích hợp các thuộc tính mật mã mạnh hơn cho 2 bộ chương trình thực hiện giao dịch Web là trình duyệt Web Mozilla và Web Sever Apache và tạo ra một bộ phần mềm ứng dụng Web an toàn, bài viết này phân tích cấu trúc, tính năng, thuộc tính của các môđun chương trình cung cấp dịch vụ mật mã có sẵn trong các bộ mã nguồn mở trình duyệt Web Mozilla.
Cấu trúc phần nguồn mở cung cấp dịch vụ bảo mật cho Mozilla
Dự án về cơ chế an toàn và dịch vụ bảo mật [1] của Mozilla có thể qui về 2 lĩnh vực chính:
- Cơ chế an toàn cho các thành phần của Mozilla. Đây là “dự án” bổ sung cơ chế an toàn cho các thành phần của Mozilla (sử dụng Java, JavaScript, giải quyết vấn đề tràn bộ đệm, an toàn cho các gói cài đặt JAR,...) mà không đề cập đến việc bảo mật sử dụng các thuật mật mã.
- Môđun chương trình cung cấp các dịch vụ mật mã.
Phạm vi bài viết này chỉ đề cập đến lĩnh vực thứ hai. Môđun chương trình cung cấp các dịch vụ mật mã trong bộ chương trình nguồn Mozilla, được gói gọn hoàn toàn trong một thư mục riêng có tên là “security” [2]. Mối quan hệ giữa môđun này với các môđun thực hiện các chức năng khác có thể được mô tả như mô hình gồm các lớp dưới đây [3]:
Trong đó:
- HTTP, Mail, FTP: Các thành phần ứng dụng của Mozilla.
- PSM (Personal Security Manager): Quản lý dịch vụ bảo mật riêng sử dụng cho Mozilla.
- NSS (Network Security Services): Các dịch vụ bảo mật mạng.
1. Các dịch vụ bảo mật mạng (NSS)
NSS [4], [5] là bộ chương trình nguồn cung cấp một thư viện độc lập thực hiện các dịch vụ bảo mật phục vụ cho việc phát triển các ứng dụng cross-platform. Khi xây dựng một ứng dụng dựa trên NSS, ứng dụng đó có thể được cung cấp các giao thức SSL v1, SSL v2, TLS; các chuẩn mật mã khoá công khai PKCS#5, PKCS#7, PKCS#11, PKCS#12, S/MIME; chứng chỉ số theo chuẩn X.509 v3 và rất nhiều các chuẩn mật mã khác.
Dưới đây là các chuẩn mật mã được xây dựng trong NSS:
- Giao thức bảo mật SSL phiên bản 2 và 3 (SSL v2 và v3): Đây là giao thức cho phép thiết lập một kết nối tin cậy và thực hiện mã hoá dữ liệu trao đổi qua lại trong mỗi phiên liên lạc giữa server/client. Giao thức này được thiết kế và công bố bởi Netscape.
- Giao thức bảo mật TLS phiên bản 1 (Transport Layer Security): Là một giao thức được thiết kế và công bố bởi IETF dựa trên cơ sở SSL, do đó nó hoàn toàn tương thích với SSL.
- PKCS#1 (Chuẩn mật mã khoá công khai - Public-Key Cryptography Standard): Chuẩn RSA cho việc thực hiện mật mã khoá công khai trên cơ sở thuật toán RSA.
- PKCS#3: Chuẩn RSA cho việc thực hiện trao đổi khoá Diffie-Hellman.
- PKCS#5: Chuẩn RSA cho mật mã trên dựa trên mật khẩu, chẳng hạn mã pháp dùng mật khẩu để mã khoá bí mật khi lưu trữ.
- PKCS#7: Chuẩn RSA cho việc định dạng dữ liệu được sử dụng bởi các ứng dụng mật mã, chẳng hạn định dạng dữ liệu chữ ký số.
- PKCS#8: Chuẩn RSA cho việc lưu trữ và mã hoá khoá bí mật.
- PKCS#9: Chuẩn RSA cho việc lựa chọn các kiểu thuộc tính, được sử dụng cho PKCS#7, PKCS#8, và PKCS#10.
- PKCS#10: Chuẩn RSA cho cú pháp yêu cầu chứng chỉ số (khi người sử dụng muốn được cấp chứng chỉ số theo chuẩn RSA, yêu cầu của người sử dụng được định dạng theo qui định của chuẩn PKCS#10).
- PKCS#11: Chuẩn RSA cho việc truyền thông với các môđunvà các thẻ mật mã (như smart card).
- PKCS#12: Chuẩn RSA cho định dạng được sử dụng trong việc lưu trữ và trao đổi khoá bí mật, chứng chỉ số và các dữ liệu bí mật khác.
- S/MIME: Định dạng thông báo IETF trên cơ sở chuẩn Internet MIME (Multipurposse Internet Mail Extensions) phổ thông, cung cấp một phương pháp phù hợp cho việc gửi/nhận dữ liệu MIME đã được ký và mã hoá.
- X509 v3: Chuẩn ITU cho định dạng của các chứng chỉ số được sử dụng cho xác thực trong mật mã khoá công khai.
- OCSP (giao thức xác định trạng thái của chứng chỉ số thời gian thực): Giao thức xác định tính hợp lệ của một chứng chỉ số thời gian thực.
- Mô tả danh sách các chứng chỉ số bị huỷ bỏ (Certificates Revoked List) và chứng chỉ số PKIX: Các chuẩn cho việc phát triển cơ sở hạ tầng khoá công khai theo chuẩn X509.
- Các thuật toán mã hoá dữ liệu: chuẩn mã hoá dữ liệu tiên tiến AES (Advanced Encryption Standard), chuẩn mã hoá dữ liệu DES (Data Encryption Standard), Triple DES, RSA, RC2, RC4.
- Các thuật toán hàm băm: SHA256, SHA-1, MD2, MD5,...
- Các thuật toán chữ ký số và trao đổi khoá: RSA, DSA, Diffie-Hellman.
Đối với Mozilla, NSS là một môđun, một thành phần của XPCOM (Cross-platform Component Object Module). Khi biên dịch, NSS thành một thư viện động, và được một thư viện khác (từ môđun PSM) gọi các hàm của nó sử dụng cho các ứng dụng được xây dựng ở tầng trên.
Với việc bổ sung phần chương trình nguồn NSS vào bộ chương trình nguồn Mozilla, các ứng dụng của Mozilla hoàn toàn có thể sử dụng các thuộc tính mật mã được cung cấp bởi NSS. Tuy nhiên, để sử dụng các dịch vụ mật mã này cần có một phần chương trình thực hiện gắn kết NSS với các ứng dụng của Mozilla, môđun chương trình thực hiện chức năng này được gọi là PSM.
2. Quản lý dịch vụ bảo mật riêng (PSM)
PSM [6] là một môđun chương trình được xây dựng ngay trên lớp NSS, thực hiện các tiến trình bảo mật cho các ứng dụng của Mozilla thông qua việc sử dụng các hàm mật mã được cung cấp bởi NSS như thiết lập các kết nối SSL, ký các đối tượng và kiểm tra chữ ký, quản lý các chứng chỉ số và rất nhiều hàm phục vụ cho cơ sở hạ tầng khoá công khai (PKI) khác.
Dưới đây là 3 nhóm các hàm mật mã chính của NSS được PSM sử dụng cung cấp cho các ứng dụng của Mozilla:
- Các hàm thực hiện cho việc sử dụng các dịch vụ PKI bao gồm:
+ PKCS#5: Chuẩn sử dụng mật khẩu làm khoá mã hoá khoá bí mật.
+ PKCS#7: Được sử dụng trong các tiến trình ký nội dung thư và các đối tượng khác.
+ PKCS#11: Truyền thông với các môđun PKCS#11 và các thẻ mật mã khác như smart card.
+ PKCS#12: Sử dụng để Mozilla nạp hoặc lấy ra các chứng chỉ số và khoá bí mật từ cơ sở dữ liệu của Mozilla khi dùng đến chúng.
+ OCSP: Giao thức để Mozilla kiểm tra tính hợp lệ của chứng chỉ số.
- Giao thức bảo mật dịch vụ thư tín điện tử S/MIME: Trong đó có tác vụ ký/kiểm tra chữ ký và mã hoá/giải mã nội dung thư và tệp đính kèm thực hiện bởi hệ mật khoá công khai RSA và hệ mật khoá đối xứng (như Triple DES).
- Các giao thức cung cấp cơ chế bảo mật cho ứng dụng HTTPS khi trình duyệt Mozilla truy nhập tới một Web server bao gồm SSLv2, SSLv3 và TLS v1 [7].
Tất cả phần chương trình nguồn PSM thực hiện việc đính kết thư viện mật mã NSS với các ứng dụng Web và Mail của Mozilla được lưu trong thư mục mozilla\security\manager. Khi biên dịch xong môđun PSM trên môi trường Windows sẽ cho kết quả là thư viện động psm.dll.
Kết luận
Với mục đích xây dựng một bộ phần mềm thực hiện ứng dụng Web an toàn (Web server và trình duyệt an toàn) dựa trên các gói chương trình mã nguồn mở, chúng ta cần thực hiện hai việc chính dưới đây:
- Phân tích chi tiết các môđun chương trình quan trọng của trình duyệt mã nguồn mở Mozilla như: môđun chương trình thực hiện chức năng mạng (Network), môđun chương trình cung cấp các dịch vụ bảo mật,... nhằm đảm bảo tính an toàn của phần mềm (không có “cửa sau”, kênh ngầm,...) và loại bỏ một số môđun chương trình không cần thiết.
- Thực hiện loại bỏ các thuật toán mật mã yếu có sẵn trong hai bộ chương trình Web server Apache và trình duyệt Mozilla và thay thế bằng các thuật toán mật mã mạnh hơn.
Những thông tin được cung cấp trong bài viết trên sẽ góp một phần vào việc xây dựng các bộ phần mềm thực hiện ứng dụng web an toàn.