Nội dung của chương này giới thiệu gói phần mềm mã nguồn mở EJBCA, gó
8.2.2 Cải tiến bộ sinh khóa RSA của EJBCA
EJBCA sử dụng gói thư viện mã hóa mã nguồn mở Bouncy Castle (gọi tắt là BC) trong mọiquytrình mãhóa vàgiao thứccủamình nhằmmanglại tínhcẩnmật, toàn vẹn, xác thực và không thể chối từ. Gói thư viện mã hóa này là một thực thi Java của cácthuật toánmãhóa, được pháttriển bởi côngtyLegionof theBouncyCastle. Gói thư viện này được tổ chức nhằm cung cấp một giao tiếp lập trình ứng dụng (Application Program Interface – API) “gọn nhẹ” (light-weight) phù hợp cho việc sử dụngtrongbấtkỳmôitrường nào(baogồmcảphiênbảnJ2EEmớinhất)vớihạtầng bổ sung để các thuật toán phù hợp với cơ cấu mở rộng mã hóa Java (Java CryptographyExtension–JCE).
• MộtAPImãhóagọnnhẹchoJavavàC#.
• Một provider cho JCE và kiến trúc mã hóa Java (Java Cryptography Architecture – JCA).
• Một thư viện cho việc đọc và ghi các đối tượng ASN.1 được mã hóa. • MộtAPITLS24phíatrìnhkhách“gọnnhẹ”.
• CácbộphátsinhchochứngnhậnX.509phiênbản1và3,CRLphiênbản2và cáctậptinPKCS#12.
• Các bộ phát sinh cho chứng nhận thuộc tính X.509 phiên bản 2. • Cácbộphátsinh/xửlýchoS/MIMEvàCMS(PKCS#7/RFC3852). • Các bộ phát sinh/xử lý cho OCSP (RFC 2560).
• Cácbộphátsinh/xửlýchoTSP(RFC3161). • Các bộ phát sinh/xử lý cho OpenPGP (RFC 2440).
• MộtphiênbảnjarđượckýphùhợpchoJDK1.4-1.6vàSunJCE.
API nhỏgọn làm việcvới mọithứ từJ2ME đến JDK1.6 vàcũng có mộtAPI trong C#cungcấphầuhếtnhữngchứcnăngtươngtựnhưtrên.
Như đã trình bày ở Chương 2, đề tài này quan tâm đến hệ mã khóa công khai RSA và các ứng dụng của nó trong mã hóa và chữ ký số nên các hàm liên quan đến hệ mã
24TLS(TransportLayerSecurity)làgiaothứcmậtmãcungcấpcácgiaotiếpantoàntrênInte rnetnhưchotrìnhduyệtweb,
thưđiệntử,gửitinnhắntứcthời,traođổidữliệu,…TiềnthâncủaTLSchínhlàgiaothứcS SL(SecureSocketsLayer).
132
RSA đượcđặc biệtchú ý.Hàmsinhkhóa genKeyscủaEJBCA tronglớp KeyTool
thuộc gói org.ejbca.util như sau:
public static KeyPair genKeys(String keySpec, String keyAlg)
throws NoSuchAlgorithmException,
NoSuchProviderException,
InvalidAlgorithmParameterException {
…
KeyPairGenerator keygen = KeyPairGenerator.getInstance(keyAl
g, "BC");
…
// RSA keys
int keysize = Integer.parseInt(keySpec);
keygen.initialize(keysize); …
…
return keys;
}
Hình8.2.HàmphátsinhkhóaRSAcủaEJBCA
Tathấybiến keygencókiểu KeyPairGenerator(thuộcgói java.security)sẽ nhậnthựcthểcủaproviderBCnếuđược.NếugóithưviệnBCnàychưađượccàiđặt, nósẽlấythựcthểmặcđịnhcủaJava.Đâylàthaotáckiểmtratrongtrườnghợpngười sử dụng quên cài đặt gói thư viện BC này.
Lệnh keygen.generateKeyPair nhằm phát sinh cặp khóa. Khi thuật toán được chọn là RSA, hàm RSAKeyPairGenerator của BC (lớp RSAKeyPairGenerator
thuộc gói org.bouncycastle.crypto.generators) sẽ được thực hiện. Thuật toán phát sinh cặp khóa RSA được hàm này sử dụng như sau:
RSAKeyPairGenerator(e,strength)
Đầu vào: số nguyên � là số mũ công khai, �������� là độ dài khóa.
Đầu ra: cặp khóa công khai �, � và bí mật �, � .
(1) ����������←(��������+1)/2. (2) ����������←��������−����������.
(3) Chọn một số nguyên ngẫu nhiên �, độ dài ����������.
(4) Nếu � không là số nguyên tố hoặc ���(�,�)≠1 thì trở lại bước (3). (5) Chọn một số nguyên ngẫu nhiên �, độ dài ����������.
(6) Nếu � không là số nguyên tố hoặc ���(�,�)≠1 hoặc độ dài của �×� khác �������� thì quay lại bước (5).
(7) �←�×�.
(8) ��� ← �−1 ×(�−1). (9) � ←�−1������.
(10) Trả về (�,�) và (�,�).
Thuậttoán8.1.PhátsinhcặpkhóaRSAtrongBouncyCastle
133
Theo các phân tích ở Chương 5, các số nguyên tố � và � được sinh ra ở bước (3) và (5)trongThuậttoán8.1trên nênlàcácsốnguyêntốmạnh(strongprime)thayvìcác số nguyên tố ngẫu nhiên nhằm tránh các phương pháp tấn công phân tích đặc biệt. Vì vậy,phần sinhkhóacủaRSA sẽđược thaybằngphầnsinhkhóa củathưviệnmãhóa SmartRSA được xây dựng và giới thiệu ở Chương 7 .
8.2.3 Nhậnxét
BouncyCastlelàgóiphầnmềmmãhóamãnguồnmở cungcấpcácchứcnăngnhằm mang lại tính cẩn mật, toàn vẹn, xác thực và không thể chối từ cho bất kỳhệ thống
nào sử dụng nó, điển hình là hệ thống EJBCA. Với việc cải tiến hàm sinh khóa RSA củagóiphầnmềmmãhóanàybằnghàmsinhkhóamạnhcủabộthưviệnSmartRSA đã đượctrình bàyởChương 7,hệ thốngEJBCA sẽ manglại độan toànvà hiệu quả cao hơn khi đi vào sử dụng trong thực tế.
8.3 Triểnkhai hệthống8.3.1 Mụctiêu