0
Tải bản đầy đủ (.pdf) (120 trang)

Cơng cụ hỗ trợ PKI :IAIK

Một phần của tài liệu XÂY DỰNG HỆ THỐNG QUẢN LÝ CHỨNG CHỈ SỐ SỬ DỤNG CÔNG NGHỆ IAIK VÀ SSL (Trang 79 -79 )

3.4.1. Giới thiệu chung về IAIK

Sử dụng ngơn ngữ Java để phát triển các ứng dụng mạng và bảo mật là sự lựa chọn hàng đầu cho các nhà phát triển phần mềm. Đặc biết trong lĩnh vực bảo mật, ngồi các API cơ bản tronng package java.security.*, java cịn hỗ trợ thêm các API mở rộng JCE(Java Cryptography Extension) nằm trong package

javax.security.* . Tuy nhiên bản thân JCE của java chưa phải hỗ trợ hồn tồn đầy đủ cho việc phát triển các ứng dụng bảo mật. Ví dụ JCE khơng hỗ trợ cho việc tạo file pkcs12. Vì vậy đã cĩ rất nhiều tổ chức khác nhau phát triển các Crypto tookit dựa trên JCE của java tạo thành các bộ Crypto tookit hồn chỉnh như:

 Cryptix : (http://www.cryptix.org/)

 IAIK (Institute for Applied Information Processing and Communication) http://jce.iaik.tugraz.at/

 Bouncycastle: http://www.bouncycastle.org/

Trong số các Crypto tookit trên : IAIK là một trong các tookit hỗ trợ đầy đủ nhất các chuẩn về bảo mật và PKI. Các lĩnh vực mà IAIK hỗ trợ :

 Communication and Messaging Security( iSaSiLk -được phát triển dựa trên đặc tả SSL của Netscape .)

 Public Key Infrastructure  XML Security

3.4.2. Sử dụng IAIK xây dựng hệ thống

Để xây dựng hệ thống quản lý và cung cấp chứng chỉ số, chúng ta sử dụng chủ yếu IAIK-JCE. JCE của java (The Java Cryptography Extension) kế thừa từ JCA (Java Cryptography Architecture-Kiến trúc về mật mã của Java) và thêm vào một số đặc tính mới để phục vụ cho việc mã hĩa và trao đối khĩa. Trong các bộ JDK version từ 1.4 trở lên JCE đã được tích hợp sẵn và được coi như là các thư viện chuẩn trong các bộ JDK này.

IAIK-JCE bao gồm các đặc điểm và thành phần chính như sau:

1) IAIK-JCE API cài đặt lại tồn bộ JCE của Sun. Bao gồm 3 gĩi chính

 package javax.crypto  package javax.crypto.spec  package javax.crypto.interfaces

Mở rộng các provider về security (nhưng vẫn tuân theo các chuẩn về kiến trúc của JCA)

2) IAIK-JCE hỗ trợ hầu hết các cấu trúc cơ bản trong ASN.1 (Abstract Syntax Notation One)

 BOOLEAN  INTEGER  BITSTRING  OCTETSTRING  NULL  OBJECTIDENTIFIER  ENUMERATED  SEQUENCE  SET  SEQUENCE OF  SET OF  UTCTime  GeneralizedTime

3) IAIK-JCE hỗ trợ những chuẩn sau về PKCS (Public-Key Cryptography Standards)

 PKCS#1: RSA Encryption Standard : Chuẩn mã hĩa RSA

 PKCS#3: Diffie Hellman Key Agreement Standard: Chuẩn thỏa thuận khĩa Diffie Hellman

 PKCS#5: Password-Based Encryprion Standard :Chuẩn mã hĩa mật khẩu  PKCS#7: Cryptographic Message Syntax Standard

 PKCS#8: Private-Key Information Syntax Standard : Chuẩn lưu trữ khĩa mật

 PKCS#9: Selected Attribute Types

 PKCS#10: Certification Request Syntax Standard: Chuẩn về yêu cầu chứng chỉ số

 PKCS#12: Personal Information Exchange Syntax Standard

4) Về chuẩn X.509

 Certificate/crl API

 Kế thừa JCA certificate/crl API về việc tạo mới chứng chỉ số  Hỗ trợ X.509 public key certificates

 Hỗ trợ X.509 certificate revocation lists (CRLs), delta CRLs and indirect CRLs

 Hỗ trợ X.509 qualified certificates  Hỗ trợ X.509 attribute certificates

 Cài đặt tồn bộ X.509 certificate and crl extensions  Cài đặt tồn bộ private Netscape cert extenions

 Cài đặt tồn bộ qualified, attribute, and OCSP certificate extensions  Cài đặt giao thức OCSP Online Certificate Status Protocol, version 2.01

o Hỗ trợ client và server trong việc tạo, ký , kiểm tra các yêu cầu/trả lời trong giao thức OCSP.

o Cài đặt tồn bộ phần mở rộng của giao thức OCSP

o Hỗ trợ giao thưc OCSP qua HTTP

o Các cơng cụ phục vụ cho việc tạo các response về danh sách thu hồi trong giao thức OCSP

5) Random Number Generators

IAIK-JCE hỗ trợ rất nhiều kiểu sinh các số ngẫu nhiên theo chuẩn ANSI X9.17, FIPS PUB 186-2.

3.5 HỆ THỐNG QUẢN LÝ CHỨNG CHỈ SỐ

“Hệ Thống Quản Lý Chứng Chỉ Số” được xây dựng dựa trên cơng cụ thiết kế Rational, sử dụng cơng nghệ Java, IAIK Kết hợp SSL, J2EE, cĩ khả năng chạy trên mọi hệ điều hành khác nhau và hệ thống mạng đảm bảo an tồn. Định dạng chứng chỉ số theo chuẩn X.509, là một chuẩn được dùng phổ biến hiện nay trên thế giới, hầu hết các chương trình ứng dụng sử dụng cơng nghệ chứng chỉ số đều ít nhất phải hỗ trợ X.509. Hệ thống tương tác với khách hàng và người quản trị hệ thống thơng qua mơi trường WEB.

3.5.1. Mơ hình phân cấp hệ thống

Hệ thống CA phân cấp theo mơ hình bảo hiểm, áp dụng cho thương mại điện tử. Hệ thống đáp ứng cho cả những đối tượng sử dụng thử, với mục địch tìm hiểu và làm quen với chứng chỉ số.

VASC Secure Server CA - Class 3 VASC Class 3 Primary

CA

VASC Individual CA - Class 3

VASC Object Signing CA - Class 3 Máy dịch vụ Người sử dụng sử dụngNgười sử dụngNgười Phát triển phần mêm Phát triển phần mêm Phát triển phần mêm

Hình 3-12. Mơ hình phân cấp với mức xác thực đầy đủ.

VASC Secure Server CA - Demo VASC Individual CA - Demo Máy dịch vụ Người sử dụng Người sử dụng sử dụngNgười

Hình 3-13. Mơ hình phân cấp cho thử nghiệm.

Hệ thống CA đưa ra 2 mức xác thực: đầy đủ và thử nghiệm, xem hình 3-12 và 3-13. Đối với mơ hình xác thực thơng tin đầy đủ, đối tượng đăng ký chứng chỉ số phải đưa ra đầy đủ các thơng tin cần thiết để đảm bảo thơng tin. Đối với mơ hình thử nghiệm, hệ thống khơng chịu trách nhiệm đối với các thơng tin đăng ký, chỉ cĩ ý nghĩa về tìm hiểu và sử dụng thử nghiệm.

3.5.2. Một số chức năng chính của hệ thống 3.5.2.1. Cấp mới 3.5.2.1. Cấp mới

Chức năng này được áp dụng cho khách đăng ký lần đầu. Tùy thuộc vào loại chứng chỉ số sẽ cĩ quy trình đăng ký khác nhau.

- Đăng ký cho cá nhân - Đăng ký cho server

- Đăng ký cho phát triển phần mềm

Bước 1: Khách hàng gửi các thơng tin cho bộ phận quản lý đăng ký và xác thực thơng tin khách hàng (RA)

Bước 2: RA gửi cho khách hàng email thơng báo xác nhận đăng ký.

Bước 3: Tương ứng với các trình duyệt khác nhau, hệ thống sẽ yêu cầu khách hàng sinh cặp khĩa và đĩng gĩi yêu cầu theo 2 chuẩn được dùng phổ biến hiện nay là PKCS#10 và CMRF. Bước này sẽ được thực hiện một cách tự động mà khơng địi hỏi khách hàng phải hiểu rõ về mặt kỹ thuật.

Bước 4: Bộ phận RA xác thực các thơng tin khách hàng và kiểm tra tính hợp lệ của của yêu cầu. Sau khi tất cả đều hợp lệ, yêu cầu sẽ được gửi tới CA để thực hiện tạo chứng chỉ số cho khách hàng.

Bước 5: CA đưa chứng chỉ số vào kho thơng tin và gửi cho khách hàng kèm theo các thơng tin cần thiết để thực hiện việc cài đặt.

Các bước đăng ký chứng chỉ số cho server và phát triển phần mềm cũng tương tự chỉ khác về ý nghĩa của các thơng tin yêu cầu.

3.5.2.2. Gia hạn hoặc thay thế

Việc gia han hoặc thay thế sẽ cĩ hai hình thức:

Tự động: Trạng thái của chứng chỉ số phải là hợp lệ mới cĩ thể sử dụng chức năng gia hạn tự động, hình 3-14.

Sử dụng mật khẩu: Áp dụng trong tất cả trường hợp. Phương pháp này địi hỏi người sử dụng phải nhớ được mật khẩu lúc đăng ký chứng chỉ số, hình 3-15.

Hình 3-14. Mẫu gia hạn chứng chỉ số tự động.

3.5.2.3. Xem trạng thái yêu cầu

Sau khi hồn thành việc đăng ký, người sử dụng sẽ nhận được thơng báo mã yêu cầu và hướng dẫn xem trạng thái. Để cĩ thể biết được trạng thái yêu cầu, người sử dụng cần phải nhập mã yêu cầu trong mẫu nhập như hình 3.16.

Hình 3-16. Mẫu nhập xem trạng thái yêu cầu

3.5.2.4. Tìm kiếm, xem trạng thái và lấy chứng chỉ số

Để cĩ thể giúp đỡ các thành viên tham gia vào hệ thống cĩ thể tìm kiếm và xem trạng thái, VASC CA đưa ra chức năng tìm kiếm và xem trạng thái chứng chỉ số từ đơn giản cho đến thơng tin chi tiết.

3.5.2.5. Xem và cài đặt chuỗi chứng thực

Chuỗi chứng thực là một trong những thành phần khơng thể thiếu của bất kỳ một hệ thống quản lý chứng chỉ số. Nĩ giúp cho các đối tượng tham gia cĩ thể thực hiện việc kiểm tra tính hợp lệ của chứng chỉ số. Thơng tin này cũng cĩ trong phần kho thơng tin của hệ thống.

Hình 3-17. Mẫu nhập xem và cài đặt chuỗi chứng thực. 3.5.2.6. Xem và cài đặt danh sách chứng chỉ số bị thu hồi

Chứng chỉ số cĩ thể khơng cịn hợp lệ trong các trường hợp phi kỹ thuật như lộ khĩa, khơng sử dụng nữa, thay đổi thơng tin, và cần phải đưa vào danh sách thu hồi. Các thành viên tham gia vào hệ thống dựa vào thơng tin của danh sách thu hồi để ngừng giao dịch khi sử dụng các chứng chỉ số đĩ.

3.5.2.7 Đăng ký thu hồi

Chức năng về hình thức thực hiện sẽ giống như chức năng gia hạn (tự động và sử dụng mật khẩu), chỉ cĩ điểm khác về ý nghĩa là thu hồi chứng chỉ số kèm theo lý do tại sao. Khi chứng chỉ số bị hỏng, mất, lộ khĩa hoặc thay đổi thơng tin, người sử dụng cĩ thể sử dụng chức năng này để thơng báo cho hệ thống và các thành viên khác biết. Khi cảm thấy nghi ngờ, chứng chỉ số của thành viên cũng cĩ thể bị thu hồi cưỡng bức bởi hệ thống

3.5.2.8 Quản trị hệ thống

Hệ thống quản trị CA phân quyền dựa trên chứng chỉ số. Khi truy cập, hệ thống quản trị sẽ yêu cầu đưa ra chứng chỉ số. Sau khi thực hiện các bước bắt tay và chứng thực việc sở hữu chứng chỉ số, hệ thống quản trị sẽ thực hiện việc phần quyền. Trình duyệt sẽ cĩ hộp thoại yêu cầu chọn chứng chỉ số như hình 3- 20.

Hình 3-20

Lựa chọn chứng chỉ số thích hợp khi đăng nhập hệ thống quản trị

Tương ứng với mỗi chức năng của hệ thống sẽ cĩ một quyền. Tùy theo các quyền, các thành viên quản trị cĩ thể thực hiện các chức năng chính sau:

 Thu hồi

 Cập nhật trạng thái  Tìm kiếm yêu cầu  Ký duyệt yêu cầu

 Cập nhập danh sách thu hồi  Quản lý thành viên quản trị  Quản lý đối tác

 Thống kê hệ thống  Cấu hình hệ thống

KẾT LUẬN

Kết quả chính của luận văn bao gồm:

1. Tìm hiểu và nghiên cứu qua các tài liệu để hệ thống lại các vấn để sau

 Giới thiệu về hệ mật mã đối xứng, hệ mật mã khĩa cơng khai, giao thức SSL và bộ cơng cụ IAIK hộ trợ cho hệ thống PKI

 Giới thiệu về chứng chỉ khĩa cơng khai, cơ sở hạ tầng mã khĩa cơng khai. 2. Thử nghiệm xây dựng hệ thống quản lý chứng chỉ số


TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt:

1. GS.TS Phan Đình Diệu, Giáo trình Lý thuyết mật mã và an tồn thơng tin. 2. PGS.TS Trịnh Nhật Tiến, Giáo trình An tồn dữ liệu.

Tài liệu tiếng Anh:

1. Secure Electronic Commerce, Building the Infrastructure for Digital Signatures and Encryption, Second Edition. Warwick Ford, Michael S. Baum. Prentice Hall PTR, 2001.

2. PKI Implementing and Managing E-Security. Andrew Nash, William Duane, Celia Joseph, Derek Brink. McGraw-Hill, 2001.

3. Digital Signatures. Mohad Atreya, Benjamin Hammond, Stephen Paine, Paul Starrett, Stephen Wu. McGraw-Hill, 2001.

4. Internet X.509 Public Key Infrastructure Certificate Policy and Certification Practices Framework (RFC2527), Internet Engineering Task Force (IETF). 5. Internet X.509 Public Key Infrastructure Qualified Certificates Profile,

Internet Engineering Task Force (IETF).

PHỤ LỤC Một số modul chính của chương trình

1) Modul tiếp nhận yêu cầu của khách hàng

import java.sql.*; import javax.ejb.*; import javax.sql.DataSource; import java.rmi.RemoteException; import java.math.*; import java.util.Collection; import java.util.Vector; import vasc.ca.Common; import java.io.*; /** * <p>Title: CA Developement</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * @author Vu Van Trieu

* @version 1.0 */

String o, String ou, String s, String l, String c, byte[] crtData, BigDecimal reqId) throws CreateException {

super.ejbCreate(crtFormat, crtType, crtClass, keyLen, algorithm, crtStatus, startDate, endDate, publish, cn, email, o, ou, s, l, c, crtData, reqId);

Connection connection = null;

PreparedStatement statement = null; BigDecimal crtId=null; ResultSet resultSet=null; try { ////////////////////////////////////////// connection = dataSource.getConnection(); connection.setAutoCommit(false); statement=connection.prepareStatement("SELECT SEQ_CRT_ID.nextval FROM DUAL"); resultSet=statement.executeQuery();

if(resultSet.next()==false) throw new CreateException("Error REQUEST Sequence nextval");

crtId=resultSet.getBigDecimal(1); if(resultSet!=null) {resultSet.close();} statement.close();

///////////////////////////////////////////

statement = connection.prepareStatement("INSERT INTO CERTIFICATE (CRT_ID, CRT_FORMAT, CRT_TYPE, CRT_CLASS, KEY_LEN, ALGORITHM, CRT_STATUS, START_DATE, END_DATE, PUBLISH, CN, EMAIL, O, OU, S, L, C, CRT_DATA, REQ_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, EMPTY_BLOB(), ?)");

statement.setBigDecimal(1, crtId); statement.setString(2, crtFormat); statement.setString(3, crtType);

statement.setBigDecimal(4, crtClass); statement.setBigDecimal(5, keyLen); statement.setString(6, algorithm); statement.setString(7, crtStatus); statement.setTimestamp(8, startDate); statement.setTimestamp(9, endDate); statement.setBigDecimal(10, publish); statement.setString(11, cn); statement.setString(12, email); statement.setString(13, o); statement.setString(14, ou); statement.setString(15, s); statement.setString(16, l); statement.setString(17, c);

/**@todo Set parameter crtData*/ statement.setBigDecimal(18, reqId); //Attention

super.crtId =crtId;

if (statement.executeUpdate() != 1) {

throw new CreateException("Error adding row"); }

statement.setBigDecimal(1, crtId); ResultSet rs=statement.executeQuery(); if(rs.next()) { Blob contentdata=rs.getBlob(1); try { Common.writeBlob(contentdata,crtData); } catch(Exception e) { System.out.println(e.getMessage()); } rs.close(); } } connection.commit(); connection.setAutoCommit(true); return crtId; } catch(SQLException e) {

throw new EJBException("Error executing SQL INSERT INTO CERTIFICATE (CRT_ID, CRT_FORMAT, CRT_TYPE, CRT_CLASS, KEY_LEN, ALGORITHM, CRT_STATUS, START_DATE, END_DATE, PUBLISH, CN, EMAIL, O, OU, S, L, C, CRT_DATA, REQ_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?): " + e.toString());

closeConnection(connection, statement); }

}

public void ejbRemove() throws RemoveException { super.ejbRemove();

Connection connection = null;

PreparedStatement statement = null; try {

connection = dataSource.getConnection();

statement = connection.prepareStatement("DELETE FROM CERTIFICATE WHERE CRT_ID = ?");

statement.setBigDecimal(1, crtId); if (statement.executeUpdate() < 1) {

throw new RemoveException("Error deleting row"); }

}

catch(SQLException e) {

throw new EJBException("Error executing SQL DELETE FROM CERTIFICATE WHERE CRT_ID = ?: " + e.toString());

}

finally {

closeConnection(connection, statement); }

PreparedStatement statement = null; try {

connection = dataSource.getConnection(); connection.setAutoCommit(false);

statement = connection.prepareStatement("SELECT CRT_FORMAT, CRT_TYPE, CRT_CLASS, KEY_LEN, ALGORITHM, CRT_STATUS, START_DATE, END_DATE, PUBLISH, CN, EMAIL, O, OU, S, L, C, CRT_DATA, REQ_ID FROM CERTIFICATE WHERE CRT_ID = ?");

statement.setBigDecimal(1, crtId);

ResultSet resultSet = statement.executeQuery(); if (!resultSet.next()) {

throw new NoSuchEntityException("Row does not exist"); } this.crtFormat = resultSet.getString(1); this.crtType = resultSet.getString(2); this.crtClass = resultSet.getBigDecimal(3); this.keyLen = resultSet.getBigDecimal(4); this.algorithm = resultSet.getString(5); this.crtStatus = resultSet.getString(6); this.startDate = resultSet.getTimestamp(7); this.endDate = resultSet.getTimestamp(8); this.publish = resultSet.getBigDecimal(9); this.cn = resultSet.getString(10); this.email = resultSet.getString(11); this.o = resultSet.getString(12); this.ou = resultSet.getString(13); this.s = resultSet.getString(14);

this.l = resultSet.getString(15); this.c = resultSet.getString(16); Blob temp=resultSet.getBlob("CRT_DATA"); try { this.crtData=Common.readBlob(temp); } catch(Exception e) {System.out.println(e.getMessage());} this.reqId=resultSet.getBigDecimal(18); if(resultSet!=null) { resultSet.close(); } connection.setAutoCommit(true); } catch(SQLException e) {

throw new EJBException("Error executing SQL SELECT CRT_FORMAT, CRT_TYPE, CRT_CLASS, KEY_LEN, ALGORITHM, CRT_STATUS, START_DATE, END_DATE, PUBLISH, CN, EMAIL, O, OU, S, L, C, CRT_DATA, REQ_ID FROM CERTIFICATE WHERE CRT_ID = ?: " + e.toString());

public void ejbStore() { super.ejbStore();

Connection connection = null;

PreparedStatement statement = null; try {

connection = dataSource.getConnection(); connection.setAutoCommit(false);

statement = connection.prepareStatement("UPDATE CERTIFICATE SET CRT_FORMAT = ?, CRT_TYPE = ?, CRT_CLASS = ?, KEY_LEN = ?, ALGORITHM = ?, CRT_STATUS = ?, START_DATE = ?, END_DATE = ?, PUBLISH = ?, CN = ?, EMAIL = ?, O = ?, OU = ?, S = ?, L = ?, C = ?, CRT_DATA =EMPTY_BLOB(), REQ_ID = ? WHERE CRT_ID = ?");

statement.setString(1, crtFormat); statement.setString(2, crtType); statement.setBigDecimal(3, crtClass); statement.setBigDecimal(4, keyLen); statement.setString(5, algorithm); statement.setString(6, crtStatus); statement.setTimestamp(7, startDate); statement.setTimestamp(8, endDate); statement.setBigDecimal(9, publish); statement.setString(10, cn); statement.setString(11, email); statement.setString(12, o); statement.setString(13, ou); statement.setString(14, s); statement.setString(15, l);

/**@todo Set parameter crtData*/ statement.setBigDecimal(17, reqId); statement.setBigDecimal(18, crtId); if (statement.executeUpdate() < 1) {

throw new NoSuchEntityException("Row does not exist"); }

else

{ statement.close();

statement = connection.prepareStatement("SELECT CRT_DATA FROM CERTIFICATE WHERE CRT_ID=? FOR UPDATE");

statement.setBigDecimal(1,crtId); ResultSet rs=statement.executeQuery(); if(rs.next()) { Blob contentdata=rs.getBlob(1); try { Common.writeBlob(contentdata,this.crtData); } catch(Exception e){System.out.println(e.getMessage());} } rs.close();

}

catch(SQLException e) {

throw new EJBException("Error executing SQL UPDATE CERTIFICATE SET CRT_FORMAT = ?, CRT_TYPE = ?, CRT_CLASS = ?, KEY_LEN = ?, ALGORITHM = ?, CRT_STATUS = ?, START_DATE = ?, END_DATE = ?, PUBLISH = ?, CN = ?, EMAIL = ?, O = ?, OU = ?, S = ?, L = ?, C = ?, CRT_DATA = ?, REQ_ID = ? WHERE CRT_ID = ?: " + e.toString());

}

finally {

Một phần của tài liệu XÂY DỰNG HỆ THỐNG QUẢN LÝ CHỨNG CHỈ SỐ SỬ DỤNG CÔNG NGHỆ IAIK VÀ SSL (Trang 79 -79 )

×