Vấn đề chứng thực

Nếu ta nhận một thông điệp được ký xác nhận bởi một người quen biết (người bạn) thì ta dễ dàng sử dụng khóa công khai được cung cấp để kiểm tra tính xác thực cúa thông điệp đó. Bây giờ ta xét tiếp trường hợp nhận được một tài liệu của một người không quen biết, người lạ. Tương tự như trên, nếu ta nhận được khóa cộng khai (vấn để này không khó) thi vẫn kiềm chứng được xem tài liệu đó có sánh được với tài liệu được ký bằng khóa riêng tương ứng hay không.

Tuy nhiên, ở đây có vấn đề ta cần phải thận trọng vì ta không có một khái niệm gì về người gửi. Bất kỳ một người nào đó có thể tạo ra một cặp khóa, ký nhận vào tài liệu và gửi nó cho chúng ta. vấn đề xuất hiện ở đây là, việc xác định danh tinh của người gửi hay còn gọi vấn đề chứng thực được thực hiện như thế nào?.

Cách giải quyết vấn đề trên trong thực tế thường là thông qua một đối tượng trung gian. Giả sử cả người gửi (là người không quen biết trước) và bạn có một người “quen” trung gian
(người, hay một tổ chức môi giới, một cơ quan có thẩm quyền). Người gửi gặp người trung gian trao tài liệu và khóa công khai, sau đó anh ta trao lại cho bạn (xem hình 7.8).


Trong thực tế, người trung gian cũng không cần gặp cả người gửi lẫn người nhận tài liệu. Anh ta có thể sử dụng một khóa riêng của mình để ký tiếp vào tài liệu của người gừi và gửi nó với khóa công khai cho người nhận (xem hỉnh 7.9). Người nhận sẽ sử dụng cả hai khoá công khai nhận được xác thực tính trung thực của tài liệu nhận được.

Song, vấn đề giải quyết như thế nào khi không có người môi giới trung gian. Khi đó ta có thể sừ dụng giấy chứng nhận để chứng thực danh tính của người gửi.

1. Giấy chứng nhận Certificate 509

Tương tự như trong thực tế, mỗi xí nghiệp được cấp một giấy phép sản xuất hay kinh doanh, chúng ta cũng có thể tạo ra các giấy chứng nhận để xác thực trong quá trình trao đồi tin. Giấy chứng nhận được một cơ quan, một tổ chức có thẩm quyền (được luật pháp thừa nhận) CA cấp, những người được cấp sỗ được xác thực và dựa vào giấy chứng nhận đó để bào mật tin (mã hoả tin), rồi gửi đi. Những người nhận cũng được cấp một giấy chứng nhận cho phép họ xác thực và giải mã những thông tin nhận được. Một trong các mẫu ký xác nhận được sử dụng phỗ biến là mẫu X. 509 được định nghĩa bởi ITU-T.

Khi một máy trạm (Client) kết nối với một máy chù (Server) sử dụng SSL/TLS [4], thì cà mảy Client và Server phải thoả thuận với nhau về thuật toán mật mã chung sẽ được sừ dụng đề mã hoá tin cần trao đỗi. Quá trình xác thực trong SSL/TLS sừ dụng X. 509 được thực hiện như sau.

  1. Server gửi chứng chì 509 chứa khoá còng khai cho các máy trạm cẩn trao đồi tin.
  2. Máy trạm (Client) tạo ra các số bi mật ngẫu nhiên chiếm khoảng 48 byte và sử dụng khoá công khai cùa Server để mật mã số bí mật đó, rồi gửi nó cho
  3. Server sừ dựng khoá riêng đề giải mã số bi mật đã được mã hoá nhận được.
  4. Cả Server và Client chia sè với nhau số bí mật đó và người khác không biết được. Từ số bí mật dó phát sinh ra các khoá đối xứng và bắt đầu trao đổi tin với nhau.

Ngoài ra giấy chứng nhận X.509 được sừ dụng rộng rãi bởi Microsoft, Netscape và nhiều hãng khác để ký xác nhận các thư điện tử E-mail, chứng thực mã chương trình và nhiều loại dữ liệu khác. Ở dạng đơn giản nhất, X. 509 chứa các thông tin sau:

– Phiên bản (Version) của bang chứng thực,

  • Số hiệu cùa bằng chứng thực,
  • Định danh của thuật toán ký xác nhận (tên gọi và các tham số), yTên người ký,

– Thời gian có hiệu lực (ngày bắt đầu và kết thúc),

  • Định danh cùa người được chứng thực,
  • Khóa công khai của giấy chứng nhận,

– Chữ ký (mã băm cho các trường dữ liệu, mã hoá chữ ký bằng khóa riêng).

2. Lớp giấy chứng nhận

Thông thường các giấy chứng chỉ (chứng nhận) số được một tổ chức CA có đủ thẩm quyền (được luật pháp công nhận) cấp.

Trong JDK có chương trình keytool. exe để lập ra giấy chứng nhận và quản lý chúng. Các phần tiếp theo, chủng ta tìm hiểu cách Ngọc Lan ký xác nhận vào một tài liệu và gùi nó cho Lê Ba; người nhận kiểm tra xem tài liệu nhận được có đúng là tài liệu do Ngọc Lan ký và có bị sứa đổi hay không?.

Chương trình keytool quản lý cho các khóa và một CSDL các giấy chứng nhận. Mỗi mục trong kho các khóa có một biệt danh (alias).

Sau đây ta tim hiểu quá trình thiết lập các kho khóa, giấy chứng nhận và trao đổi các thông điệp đã được ký xác nhận, chứng thực giữa người gửi và người nhận.

3. Ký giấy chứng nhận

Phần trên ta đã xem xét cách sử dụng giấy chứng nhận “tự ký” để gửi khóa công khai cho các bộ phận khác. Song, người nhận phải được được đàm bảo rằng giấy chứng nhận nảy là hợp lệ.

JDK không cung cấp công cụ để ký giấy chứng nhận nêu fren. Phần tiếp theo chúng ta tìm hiểu cách viết chương trình Java để ký nhận giấy chứng nhận bằng khóa riêng từ kho các khóa.

javasecurityKeyStore   

* static getlnstance(String type)

  • static getInstance(String type, string provider)

Xác định đối tượng cùa kho các khóa. Nếu sừ dụng keytool cùa Java thì type là “JKS” và provider là “SUN”.

  • void load(Inputstream in, char[] password)

Nhập một kho các khóa từ luồng vào in khi mật khẩu được chấp nhận.

  • Key getKey(String alias, chart] password)

Nhận lại một khóa riêng với biệt danh alias được lưu trong kho hiện thời.

  • Certificate getCertificate(String alias)

Nhận lại một giấy chứng nhận với biệt danh alias được lưu trong kho hiện thời,

java.security.cert.CertificateFactory 

■ CertificateFactofy getlnstance(String type)

Tạo ra một đối tượng để làm ra các giấy chứng nhận kiểu type. Kiểu sừ dụng ở đây là “X509”.

■ Certificate generateCertificate(Inputstream in) Sinh ra giấy chứng nhận từ luồng vào in

■ PublicKey getPublicO

Nhận lại khóa công khai được đính kèm với giấy phép.

  • byte[] getEncodedO Đọc mã của giấy chứng nhận.
  • string getType()

Đọc kiểu của giấy chứng nhận, ví dụ “X509”.

java. security. cert.x 509 Certificate     

  • Principal getSubjectDN()
  • Principal getlssuerDN()

Xác định tên cùa người chứng nhận và người được cấp giấy chứng nhận.

* Date getNotBefore ()

  • Date getNotAfter()

Xác định khoảng thời hợp lệ cùa giấy phép.

  • String getSigAlgName()
  • byte[] getsignature()

Xác định thuật toán và chữ ký cùa giấy chứng nhận.

  • bytet] getTBCertificate()

Đọc thông tin được mã hoá cần thiết để ký giấy chứng nhận.

4. Ký nhận các tệp JAR

Trước tiên chúng ta đi tìm hiểu cách đóng gói và tổ chức các tệp lưu trữ JAR trong Java. Cơ chế gói gọn (package) là rất tiện lợi để tổ chức những lớp có liên quan với nhau thành các nhóm và nhất là trong quá trình phát triển phần mềm, ta cần phải đóng gói các tệp chương trình ứng dụng thành các gói để tiện lợi cho việc di chuyển và cài đặt ứng dụng. Chính các gói giúp chúng ta dễ dàng định vị, sử dụng các tệp lớp và hồ trợ để điều khiển hoạt động truy cập vào dữ liệu của lớp lúc thực thi chương trình.

Khi chương trình đã được hoàn tất và chuyển sang giai đoạn thẩm định, kiểm tra để chuẩn bị triển khai, thỉ nên tổ chức thành các tệp JAR Tệp JAR là dạng nén theo tệp ZIP và đóng gói những tệp thực thi (tệp lóp), cùng với những tệp ứng dụng liên quan sao cho chúng có thể được triển khai như là một đơn thể.

Các ưu điểm của tệp (lạng JAR là:                                                ‘

  • Báo mật.Bạn có thể ký số vào nội dung cùa một tệp Người sử dụng nếu nhận dạng được chữ kỷ cùa bạn sẽ có cơ hội được đảm bảo an toàn hơn dối với những người khác.
  • Giảm thiểu thời gian chuyển tải:Nếu cảc tệp của một chương trinh được tổ chức thành một tệp JAR thì chúng sẽ được tải xuống trinh duyệt trong cùng một giao dịch HTTP mà không cần tạo ra các kết nối cho từng tệp trong đó.
  • Được nén: Dạng JAR cho phép nén các tệp để cho việc lưu trữ hiệu quả và sau đó việc tải các tệp nén là khá tiện lợi.
  • Đóng dẩu xi vào gỏi (Version 2): Tất cà các lớp được định nghĩa trong một gói được tìm thấy trong cùng một tệp JAR.
  • Tương thích: Co chế xù lý các tệp JAR là một bộ phận được chuẩn hoá cùa API

VỚI Java platform.

Để nén và gói những tệp liên quan với nhau vào một gói tệp JAR, sù dụng chưomg trình jar của JDK và viết một dòng lệnh DOS command dạng:

jar cf jarFileName.jar fileList

Trong đó, jarFileName là tên của tệp JAR, fileList là danh sách các tệp lớp hoặc những tệp khác có liên quan, ngăn cách với nhau bằng dấu cách.

Tiếp theo, chúng ta đi tim hiểu cách ký chứng nhận một applet để sử dụng trong Java Plug-in. Có hai kịch bản chính:

  1. Các applet được ký xác nhận trên mạng nội hạt (Intranet)
  2. Các applet được ký xác nhận trên mạng quốc tế (Internet).

Trong kịch bản thứ nhất, bộ phận quản trị hệ thống có thể cài đặt các giấy chứng nhận và các tệp chính sách trên các máy địa phương. Khi Java Plug-in nạp về một applet được ký xác nhận, nó sẽ thông qua kho chứa các khóa và tệp chính sách để kiểm duyệt các quyền được thực hiện cùa applet đó.

ở kịch bản thứ hai, các hãng bản phần mềm nhận được giấy chứng nhận được kỷ bời các tả chức có thẩm quyền như Thrawte hay Verign. Khi người sử dụng đầu cuối truy cập vào một trang Web có chửa một applet đã được ký xác nhận, hệ thống xác định được danh tính của người cung cấp applet này và cho phép nó thực hiện theo một số giới hạn nào đó hoặc toàn quyền sử dụng.

Phần này chứng ta chủ yếu tim hiểu cách xây dựng các tệp chính sách để cấp quyền cho các applet từ cảc nguồn đã biết. Việc xây dựng, triển khai các tệp chính sách không phải là những công việc dành cho những người sử dụng đầu cuối, mà chính là những người quản trị hệ thống phải đảm nhiệm trong mạng nội hạt.