Thư viện OpenSSL

Một phần của tài liệu xây dựng phân hệ setup trong hệ thống an ninh dựa trên sinh trắc học biopki-openca (Trang 58)

b. Các giải pháp tích hợp sinh trắc để bảo vệ khoá cá nhân

3.2Thư viện OpenSSL

Hệ thống được phát triển kế thừa dựa trên hệ thống BK-BioPKI đã được xây dưng và thử nghiệm trên phịng thí nghiệm.

Mơi trường phát triển : hệ thống được viết trên môi trường VC++ 2005, cơ sở dữ liệu MySQL sử dụng các hàm C API, hệ thống thư viện OpenSSL. Hệ thống OpenCA được cài đặt trên máy chủ Linux chạy hệ điều hành Fedora 6.

Khái quát chung về OpenSSL

Dự án OpenSSL là một kết quả của sự cộng tác nhằm phát triển một kỹ thuật bảo mật dạng thương mại, đầy đủ các đặc trưng và là bộ công cụ mã nguồn mở thực thi các giao thức như Secure Sockets Layer (SSL v2/v3) và Transport Layer Security (TSL v1) với những thuật tốn mã hóa phức tạp. Dự án được quản lý bởi hiệp hội những người tình nguyện trên thế giới, sử dụng Internet để trao đổi thông tin, lập kế hoạch và phát triển công cụ OpenSSL và các tài liệu liên quan khác.[13]

SSL là giao thức đa mục đích được thiết kế để tạo ra các giao tiếp giữa hai chương trình ứng dụng trên một cổng định trước (socket 443) nhằm mã hoá tồn bộ thơng tin đi/đến, mà ngày nay được sử dụng rộng rãi cho giao dịch điện tử như truyền số hiệu thẻ tín dụng, mật khẩu, số bí mật cá nhân (PIN) trên Internet. [13]

Ngày nay giao thức Secure Socket Layer (SSL) đã được sử dụng rộng rãi trên World Wide Web trong việc xác thực và mã hố thơng tin giữa client và server. Tổ chức IETF (Internet Engineering Task Force ) đã chuẩn hoá SSL và đặt lại tên là TLS (Transport Layer Security). Mặc dù là có sự thay đổi về tên nhưng TSL chỉ là một phiên bản mới của SSL. Phiên bản TSL 1.0 tương đương với phiên bản SSL 3.1. Tuy nhiên SSL là thuật ngữ được sử dụng rộng rãi hơn.

Tính mở của thư viện OpenSSL cho phép can thiệp tới quá trình tạo và quản lý chứng thư số, phù hợp với yêu cầu của đề tài. Do vậy đề tài lựa chọn xây dựng một hệ thống PKI trên nền tảng thư viện OpenSSL.

OpenSSL là thư viện cho lập trình với ngơn ngữ C và có thể cài đặt trên nhiều môi trường thực hiện C khác nhau như Microsoft Visual C++. Borland C++ Builder…

OpenSSL có thể được sử dụng trên nhiều hệ điều hành khác nhau từ các hệ thống UNIX đến Window.

Cài đặt thư viện OpenSSL

Để cài đặt thư viện OpenSSL trên hệ điều hành Window trước hết cần download phiên bản của thư viện này dành cho Window tại địa chỉ:

http://www.slproweb.com/products/Win32OpenSSL.html

Sau đó, chạy file install để cài đặt (giả sử vào thư mục C:\Openssl). Để sử dụng thư viện này với Microsoft Visual C++ cần làm các bước sau:

Copy tất cả các file trong thư mục 'C:\OpenSSL\lib\VC' vào thư mục Visual C++ 'lib'. Thư mục này đôi khi được đăt ở địa chỉ 'C:\Program Files\Microsoft Visual Studio 8\VC\lib' or 'C:\Program Files\Microsoft Visual C++\lib'.

Tiếp theo, copy tất cả trong thư mục 'C:\OpenSSL\include' tới thư mục Visual C+ + 'include'.

Q trình cài đặt hồn tất và có thể bắt đầu lập trình với thư viện OPENSSL. Thành phần của bộ thư viện OpenSSL bao gồm[13]:

 Thư viện về mã hóa: hầu hết các thuật tốn phổ biến về mã hóa đối xứng, mã hóa

cơng khai, hàm băm .. đều được hiện thực trên thư viện này. Thư viện có chức năng sinh số ngẫu nhiên lớn, và hỗ trợ nhiều định dang lưu trữ và quản lý khóa, chứng thư số. Ngồi ra, OpenSSL cho phép tích hợp với các bộ phần cứng tăng tốc mã hóa phổ biến trong phiên bản mới nhất là 0.9.8.

 Thư viện về giao thức SSL: tất cả các phiên bản của giao thức SSL đều được hỗ

trợ, bao gồm cả giao thức mới nhất là TLS v1.

Lập trình sử dụng OpenSSL

Để sử dụng thư viện OpenSSL, cần cho các file khai báo đặc tả (file .h) sau vào file mã nguồn: #include <openssl/bio.h> #include <openssl/err.h> #include <openssl/rand.h> #include <openssl/ssl.h> #include <openssl/x509.h> #include <openssl/x509v3.h>

Ngoài ra cần thêm file applink.c là file liên kết module khi biên dịch chương trình. File này chỉ sử dụng cho các phiên bản thư viện 0.9.8 trở về sau. Khi liên kết (link), cần đặt thông số cho thư viện cần thêm là libeay32.lib và ssleay32.lib.

Khởi tạo thư viện

• Khởi tạo thơng số cho sử dụng các hàm mã hóa và băm OpenSSL_add_all_algorithms();

OpenSSL_add_all_digests();

• Khởi tạo quản lý bộ nhớ, nạp các hàm quản lý lỗi.

CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); CRYPTO_malloc_init();

ERR_load_crypto_strings();

• Khởi tạo sử dụng thư viện SSL

SSL_library_init(); (adsbygoogle = window.adsbygoogle || []).push({});

SSL_load_error_strings();

Sử dụng

Tập các hàm API của OpenSSL chia ra theo nhóm chức năng, mỗi nhóm chức năng bắt đầu tên hàm bằng một tiền tố. Ví dụ, các hàm về thư viện X.509 ln có tên bắt đầu là X509_, các hàm giao tiếp vào ra có tiền tố của tên BIO_, các hàm mã hóa là EVP_, các hàm giao thức SSL là SSL_.

 Sử dụng các hàm mã hóa

Q trình thực hiện mã hóa như sau

- Tạo context chứa thông tin về mã hóa: lưu trong con trỏ kiểu EVP_CIPHER_CTX:

EVP_CIPHER_CTX *x = NULL;

x = (EVP_CIPHER_CTX*) malloc(sizeof(EVP_CIPHER_CTX)); EVP_CIPHER_CTX_init(x);

- Chỉ định thuật tốn, khóa mã cho q trình mã hóa/giải mã: dùng một trong các hàm sau:

int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type, unsigned char *key, unsigned char *iv);

int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char *key, unsigned char *iv);

- Thêm dữ liệu cần mã hóa:

int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int*outl, unsigned char *in, int inl);

- Lấy ra dữ liệu đã mã hóa:

int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int*outl);

• Sử dụng giao thức SSL

- Tạo context cấu hình kết nối SSL: dùng các hàm SSL_CTX_

- Tạo một kết nối vào ra thông thường: theo giao thức TCP/IP bằng các hàm BIO_: BIO_new_connect, BIO_do_connect…

- Tạo một socket SSL: dựa trên kết nối BIO và context cấu hình SSL: SSL_new, - SSL_set_bio, SSL_connect…

- Đọc ghi dữ liệu qua socket SSL: bằng các hàm SSL_read, SSL_write. - Đóng kết nối SSL và giải phóng context: SSL_close, SSL_CTX_free.

• Sử dụng thư viện X.509

u cầu chứng thư số thể hiện bằng đối tượng X509_REQ. Trong đối tượng này bao gồm tên định danh của người đăng ký, được thể hiện bằng X509_NAME. Thành phần mở rộng của yêu cầu chứng thư là X509_EXTENSION.

Các hàm của X.509 chia theo chức năng:

- X509_NAME_*: thao tác với đối tượng X509_NAME

- X509_PKEY* và X509_PUBKEY*: thao tác với khóa cơng khai/cá nhân. - X509_REQ*: thao tác với yêu cầu chứng thư số.

- X509_CRL*: thao tác với danh sách CRL.

- X509_REVOKED*: thao tác với một chứng thư số bị hủy nằm trong danh sách CRL.

Ngồi ra cịn một số hàm khác.

Các bước tạo yêu cầu chứng thư như sau: - Tạo đối tượng tên định danh X509_NAME

- Tạo cặp khóa cơng khai/cá nhân, cho khóa cơng khai vào u cầu chứng thư số. (adsbygoogle = window.adsbygoogle || []).push({});

- Thêm các thành phần mở rộng nếu cần.

- Thực hiện ký chứng thực nội dung yêu cầu chứng thư. CA phát hành chứng thư số từ yêu cầu chứng thư:

- Lấy thông tin X509_NAME trong yêu cầu chứng thư và gán cho trường Subject của chứng thư số.

- Lấy thông tin X509_NAME trong chứng thư số gốc của CA và gán cho trường Issuer của chứng thư số.

- Dùng khóa cơng khai trong u cầu chứng thư số và kiểm tra chữ ký. Lấy khóa cơng khai cho vào chứng thư số.

- Thực hiện ký chứng thư bằng khóa cá nhân của CA.

Thư viện OpenSSL đang trong quá trình phát triển, tài liệu thư viện được liệt kê tại

http://www.openssl.org/docs/.

3.3 Phương án thiết kế xây dựng hệ thống BK-BioPKI-OpenCA[15]

Hình 3.4: Mơ hình hệ thống BioPKI-OpenCA mức khung cảnh

3.3.2 Các thành phần và chức năng của hệ thốnga. CA a. CA

CA gồm hai bộ phận: CA Operator (máy người điều hành CA) và OpenCA. CA Operator:

- Là một máy Window kết nối với máy chủ Linux-OpenCA,

- CA Operator là công cụ quản trị của người điều hành CA.

- Cung cấp ứng dụng cho phép người điều hành CA nhập thông tin yêu cầu vào

cơ sở dữ liệu của OpenCA.

- Cung cấp ứng dụng để sản xuất ra thiết bị nhúng giao tiếp với PC qua cổng

USB (gọi là Etoken). Thiết bị nhúng Etoken sẽ chứa chứng thư, khóa riêng, đặc trưng vân tay của người đăng ký.

(thiết bị nhúng này có vai trị như thẻ giao dịch điên tử( OpenCA;

- Là một máy chủ Linux,

- Quản lý yêu cầu, quản lý và phát hành chứng thư.

- Cung cấp một giao diện web cho phép người điều hành CA quản trị được các

yêu cầu từ đó phát hành chứng thư.

b RA

RA bao gồm 2 bộ phận: bộ phận phát hành chứng thư và bộ phận cung cấp các dịch vụ cho phép người dùng sử dụng chứng thư đối với các ứng dụng cụ thể.

Bộ phận dịch vụ phát hành chứng thư : Cung cấp các dịch vụ về chứng thư

- Phát hành thiết bị nhúng Etoken chứa chứng thư (Phát hành chứng thư )

- xử lý mất thiết bị nhúng Etoken (hủy chứng thư theo yêu cầu)

- xử lý cấp thiết bị nhúng Etoken (cấp mới chứng thư).

Bộ phận dịch vụ chứng thư cung cấp các dịch vụ để sử dụng chứng thư tương ứng với từng ứng dụng cụ thể như chữ ký số, mã hóa thơng điệp… Ví dụ: (adsbygoogle = window.adsbygoogle || []).push({});

- Dịch vụ xác thực chứng thư: kiểm tra thơng tin, tính hợp lệ của chứng thư.

- Dịch vụ cung cấp chứng thư theo serial number…

c. LRA

LRA là nơi giao tiếp trực tiếp với người dùng các vấn đề về cấp thiết bị nhúng Etoken

- Phát hành thiết bị nhúng Etoken (chứng thư) mới: nơi tiếp nhận yêu cầu, mẫu

sinh trắc, đồng thời là nơi trả thẻ cho khách hàng.

- Xử lý mất thiết bị nhúng Etoken (chứng thư): nơi khách hàng đến để yêu cầu

hủy chứng thư trong trường hợp mất thẻ.

- Cấp mới thiết bị nhúng Etoken (chứng thư).

User Application là một ứng dụng cho phép người dùng truy cập đến trung tâm dịch vụ chứng thư của RA để sử dụng chứng thư của mình vào một số ứng dụng như chữ ký sô, mã hóa thơng điệp…

3.3.3 Biểu đồ phân cấp chức năng

Dựa vào các phân tích về u cầu và quy trình ở trên, ta có các biểu đồ phân rã chức năng cho từng khối thành phần hệ thống như sau:

a. Biểu đồ phân cấp chức năng của CA Operator

CA-Operator sẽ có các chức năng chính như biểu đồ dưới đây:

Hình 1.5: Biểu đồ phân cấp chức năng của CA Operator

Giao dịch với RA:

 Cấp chứng thư số mới: Nhận request từ RA, cấp chứng thư, ghi chứng thư và thẻ

 Hủy chứng thư số: Nhận yêu cầu từ RA, đánh dấu hủy và cập nhật vào CSDL, trả lời lại cho RA

 Cấp lại chứng thư số: Hủy chứng thư số cũ, cấp lại chứng thư mới

Giao tiếp với CA:

 Cấp mới chứng thư số: submit request lên CA, thông qua giao diện web của

OpenCA issue chứng thư, lấy chứng thư từ CSDL của CA, ghi ra file và trả lại cho RA

 Hủy chứng thư số: Cập nhật vào CSDL hủy bỏ chứng thư số nào đó

 Cấp lại chứng thư số: trước tiên là hủy chứng thư cũ, rồi cấp lại một chứng thư

mới

Ghi Token:

 Nhận đặc trưng sinh trắc của người dùng do RA gửi lên, mã hóa với khóa cá nhân

b. Biểu đồ phân rã chức năng của RA

RA sẽ có các chức năng chính như biểu đồ dưới đây:

Hình 2.6: Biểu đồ phân cấp chức năng của RA (adsbygoogle = window.adsbygoogle || []).push({});

Giao tiếp với LRA:

 Cấp chứng thư số mới: Nhận thơng tin đăng kí xin cấp chứng thư số mới do LRA

gửi lên, trả thẻ lại cho LRA để phát cho người dùng

 Hủy chứng thư số: Nhận yêu cầu hủy chứng thư số của một user từ LRA, kiểm tra

thơng tin user, chứng thư, token có đúng hay không, đánh dấu hủy chứng thư trong CSDL, trả lời lại cho LRA để thông báo kết quả đến người dùng

 Cấp lại chứng thư số: hủy chứng thư số cũ, cấp lại chứng thư mới

 Cấp chứng thư số mới: gửi thông tin xin cấp chứng thư lên cho CA Operator, nhận thẻ và chứng thư để trả lại cho LRA

 Hủy chứng thư số: tạo yêu cầu hủy chứng thư số, gửi lên cho CA Operator và

nhận lại kết quả hủy từ CA Operator

 Cấp lại chứng thư số: bao gồm 2 thao tác hủy chứng thư cũ, cấp lại chứng thư mới

Setup:

 Kết nối với LRA: kết nối, send test message để chứng tỏ thông với LRA

 Kết nối với CA Operator: offline, cần kí lên các thơng tin gửi cho CA Operator và

xác thực các thông tin nhận được từ CA Operator

 Kết nối với ứng dụng: Mở cổng cho các ứng dụng truy cập và sử dụng các dịch vụ

chứng thư số

Cung cấp dịch vụ sử dụng chứng thư số:

 Xác thực chứng thư số: Kiểm tra xem chứng thư đó có đúng của hệ thống và cịn

hiệu lực hay khơng

 Download chứng thư số: cho phép các ứng dụng download các chứng thư số của

người dùng để thực hiện giao dịch điện tử

c. Biểu đồ phân cấp chức năng của LRA

LRA sẽ có các chức năng chính như biểu đồ dưới đây:

Hình 3.7: Biểu đồ phân cấp chức năng của LRA

 Cấp chứng thư mới: nhận thơng tin đăng kí (bao gồm cả thông tin user nếu chưa là user của hệ thống), trả thẻ lại cho ngươid dùng nếu yêu cầu được chấp nhận và cấp chứng thư

 Hủy chứng thư số: Nhận yêu cầu hủy từ User, thông báo lại kết quả việc hủy

 Cấp lại chứng thư số: gồm 2 thao tác: hủy chứng thư cũ và cấp lại chứng thư mới

Giao tiếp với RA:

 Cấp mới chứng thư: Gửi yêu cầu xin cấp mới chứng thư từ người dùng lên cho

RA, nhận thẻ được trả về và phát lại cho user (adsbygoogle = window.adsbygoogle || []).push({});

 Hủy chứng thư số: Gửi yêu cầu hủy chứng thư số của user và nhanh kết quả việc

hủy, thông báo lại cho user

 Cấp mới chứng thư

• Setup hệ thống: Xác thực chứng thư, kết nối đến RA để tiến hành các giao dịch

3.3.4 Xây dựng phương án về quy trình hệ thống BK-BioPKI-OpenCAa. Cấp phát chứng thư a. Cấp phát chứng thư

(1). Người dùng muốn có 1 chứng thư để sử dụng đến chi nhánh đăng ký chứng thư (LRA), điền thông tin vào mẫu đơn đăng ký xin cấp chứng thư (xem mẫu) nộp cho nhân viên chi nhánh. Các thông tin bao gồm:

- Họ và tên - Giới tính - Ngày sinh - Nơi sinh - Quốc tịch - Số CMND/Hộ chiếu - Ngày cấp

- Nơi cấp - Địa chỉ thường trú - Nơi công tác - Điện thoại - Fax - Điện thoại di động (*) - Email (*) - Chức vụ

- Thời hạn đề nghị cấp (tối đa là 05 năm tính từ ngày cấp chứng thư số)

(2). Nhân viên chi nhánh tiếp nhận đơn đăng ký, kiểm tra thông tin người dùng cung cấp. Nếu các thơng tin chính xác, yêu cầu người dùng nhập mẫu sinh trắc đúng chuẩn. Mẫu sinh trắc được chuyển thành đặc trưng sinh trắc. Đặc trưng này được mã hóa với chứng thư chuyên dùng cho user của CA.

(3). Lưu vào cơ sở dữ liệu quản lý thông tin sau:

- Thông tin người dùng (cả đặc trưng sinh trắc đã mã hóa). - Ngày nhận đăng ký, ngày trả kết quả.

- Sinh mã đăng ký: 3 ký tự đầu mã LRA, 6 ký tự sau phiên đăng ký (tự động tăng)

- Lưu trạng thái yêu cầu: đã đăng ký.

(4). Đưa giấy hẹn trả lời cho người dùng (có mã đăng ký).

(5). LRA ký và gửi thông tin đăng ký xin cấp chứng thư cho RA: - Thông tin đăng ký.

- Mã đăng ký.

(6). RA nhận yêu cầu từ LRA, lọc lấy mã LRA, căn cứ vào mã LRA để kiểm tra chữ ký LRA, nếu kiểm tra thấy không đúng thông báo cho LRA , còn nếu đúng lưu vào cơ sơ dữ liệu:

- Thông tin đăng ký

- Trạng thái yêu cầu: đang xét duyệt tại RA.

LRA nhận được trả lời từ RA thì cập nhật lại trạng thái yêu cầu (nếu cần) và hủy

Một phần của tài liệu xây dựng phân hệ setup trong hệ thống an ninh dựa trên sinh trắc học biopki-openca (Trang 58)