Đề tài Lite Security ModulePKCS#11
Trang 1Lite Security Module
PKCS#11
Giảng viên hướng dẫn: Phạm Xuân Khánh
Sinh viên thực hiện: Nguyễn Tuấn Duyệt 07520532
Hồ Trung Kiên 06520235
Nguyễn Viết Sơn 06520388
TP.Hồ Chí Minh, Tháng 4 năm 2011
Trang 2Mục lục
I. Tổng quan………Trang 3
II. Cấu trúc LSM-PKCS11……… ………Trang 3
1 SecureBox……… ………….Trang 4
2 Phiên và quản lý dối tượng……… Trang 7
3 Khe cắm và quản lý token……… Trang 17
4 Giao diện OpenSSL……… Trang 18
5 Slots, Tokens, Objects, Sessions……….… Trang 18
III. Cấu trúc dự án……… … Trang 19
1. Protocol Library module……… … Trang 20
2. SecureBox Library module……… Trang 21
3. LSM-PKCS11 Daemon module……… Trang 21
4. PKCS#11 Shared Library module……… Trang 21
5. PKCS#11 Test Program module……… ……….Trang 22
IV. Xây dựng LSM-PKCS#11……… Trang 22
1. Xây dựng trên môi trường Linux……… Trang 22
2. Xây dựng trên môi trường MS Window……… …… Trang 23
V. Sử dụng LSM-PKCS#11……… Trang 23
1. Chạy trên môi trường Linux……… ………Trang 23
2. Chạy trên môi trường MS Window……….… Trang 24
3. Xử lý SecureBoxes……… Trang 24
4. Cấu hình LSM-PKCS#11……… Trang 25
Trang 3I Tổng quan
LSM-PKCS11 là một gói phần mềm dùng để hỗ trợ triển khai thực hiện Lite Security Modules, tức là một loại Software không đòi hỏi bản quyền hoặc Hardware Security Modules (HSM, SSM) Các chỉ tiêu triển khai thực hiện như vậy là PKIs(Public Keys Infrastructures) cho các công
ty nội bộ và mạng ứng dụng, đòi hỏi một mức độ bảo mật không quá tầm thường nhưng cũng không quá “ngân sách”, cho phép việc mua lại có xácnhận HSMs, có giá bắt đầu ít nhất vài ngàn đôla
Các phần cơ bản của LSM-PKCS11 là một trình nền (deamon) đa luồng (multi-thread) có thể được lưu trữ trên một hệ thống chuyên dụng nhỏ, chạy trên Linux (hoặc Windows NT/ 2000/ XP)
Các dịch vụ deamon có thễ được truy cập thông qua kết nối TCP/IP với sự hỗ trợ của một thư viện chia sẻ (DLL trong môi trường Window) phù hợp với PKCS#11 tiêu chuẩn được phát triễn bởi RSA Laboratories (http://www.rsasecurity.com), còn được gọi là Criptoki2 PKCS # 11 là một phần của Public-Key Cryptography tiêu chuẩn (PKCS)
Phiên bản đầu tiên của gói chỉ hỗ trợ mức thấp nhất của cơ chế mã hóa: RSA, DES, mã hóa và giải mã DES3; RSA và DSA chữ ký số và xác minh; MD2, MD5 và SHA1 digesting, tạo ngẫu nhiên Nhưng sau bước thử nghiệm ban đầu, trọn gói sẽ được mở rộng dễ dàng để hỗ trợ các cơ chế mã hóa nhiều hơn nữa
Các kênh giao tiếp giữa client và server là một kết nối TCP tiêu
chuẩn, thực thi với:
- Một cơ chế nén để giảm băng thông mạng
- Một lớp phiên thực hiện các giao thức phiên PKCS#11
- Một lớp trình bày hỗ trợ các giao thức phiên PKCS#11
Trang 4Các điểm cuối của kết nối TCP là 2 thread, một trong những tiến trìnhngười dùng sử dụng thư viện PKCS#11, và một trong những trình nền LSM.
Hình 1 biễu diễn như một tình huống, chứng minh các lớp giao thức trong mẫu ISO/OSI
Hình 1 Cấu trúc mạng LSM-PKCS#11
PKCS#11 yêu cầu (do một user process thread) được ánh xạ, thông qua kết nối TCP, để các thread trình nền LSM-PKCS11 tương ứng thực hiện các chức năng cần thiết và ánh xạ phản hồi trở lại thread người dùngban đầu
Nội bộ LSM-PKCS11 liên kết chặt chẽ để chuẩn hóa PKCS#11, do
đó, dễ dàng giao tiếp với thư viện PKCS#11 để mã hóa thông tin thật và hoạt động Nghĩa là, các ánh xạ mạng vận chuyển dữ liệu thông qua kết nối TCP là một loại hệ thống ánh xạ độc lập của các hàm PKCS#11
Trang 5Trình nền LSM-PKCS11 giữ các mật mã (public và private keys, secret keys, dữ liệu của đối tượng, giấy chứng nhận) trong các tập tin đặc biệt gọi là SecureBoxes Một SecureBox là:
- Một dữ liệu định dạng tập tin
- Thiết kế đặc biệt để giữ mật mã và mô tả thông tin người sử dụng được an toàn (public và private keys, secret keys, dữ liệu của đối tượng, giấy chứng nhận)
- Với một mức độ bảo mật bên trong, độc lập với cơ chế bảo mật màbản thân các tập tin được bảo vệ
- Nền tảng độc lập (tức là, nó có thể được tạo ra trên một hệ thống
và sử dụng trên bất kỳ hệ thống khác)Hiện tại, SecureBoxes xử lý bởi LSM-PKCS11 có thể chứa tới 256 đối tượng, với một đối tượng tối đa 1048576 bytes dữ liệu mã hóa và mô
tả (1MB), nhưng các giới hạn này có thể mở rộng cho các nhân vật quan trọng nếu ứng dụng cuối cùng đòi hỏi một con số cao hơn của các mục
mã hóa
Một SecureBox được sắp xếp thành ba phần, như sau:
Header Tổng quát và kích thước thông tin
Magic magic string “LSMSBOXM”VersionMajor số phiên bản chínhVersionMinor số phiên bản phụName[16+1] module tênKey thuật toán mã hóa key Camellia (256 bits)SOPINToBeChanged cờ SO PIN ToBeChanged SOPINLoginCount số lần đăng nhập sai SO PINSOPINMaxTrials tối đa số lần đăng nhập sai SO PINSOPIN SO PIN hiện tạiUSPINToBeChanged cờ user PIN ToBeChangedUSPINLoginCount số lần nhập sai user PINUSPINMaxTrials tối đa số lần nhập sai user PINUSPIN user PIN hiện tại
Object
Descriptor
s Pool
Mô tả chi tiết tất cả đối tượng được lưu giữ trong hộp
Pool NumObjects số đối tượng trong module
MaxObjects số tối đa các đối tượng được phân bổ AllSiz tổng kích thước phân bổ trong
Trang 6khu vực dữ liệu FreSize kích thước phân bổ trống trong khu vực dữ liệu
MaxSize kích thước tối đa phân bổ trong khu vực dữ liệu
Object Name tên đối tượng
Type loại đối tượng: ứng dụng phụ thuộc Scope public | private | secret ActSize kích thước thực tế của đối tượng AllSize phân bổ kích thước trong khu vực dữ liệu
RelPtr con trỏ lien quan trongkhu vực dữ liệu
Data Area Mật mã thực và thông tin mô tả các đối tượng được lưu giữ
Một tập các đơn vị phân bổ (16 bytes): cho giá trị mặc địnhcủa 1 Mbyte dữ liệu (1048576 bytes), 65536 đơn vị phân bổ
Mỗi SecureBox tự mã hóa chính xác với một lược đồ chuyên dụng dựa trên thuật toán Camellia3 và cơ chế băm Tiger4 Key mã hóa
Camellia có nguồn gốc từ các Key bằng văn bản trong “Header” bằng một hoán vị xored (xored-permutation) và một Tiger hashing (Hình 2):
Trang 7- Chuẩn bị (định dạng) của một SecureBox
- Tái xây dựng một SecureBox
- Dump của một SecureBox
- Quản lí và sử dụng mã PIN SO
2 Phiên và quản lý đối tượng
Trang 8Mỗi thread LSM xử lý một phiên với thread ứng dụng người dùng cuối Quản lí phiên được thực hiện với sự hỗ trợ của một nhóm các mô tảphiên và hàng đợi lưu trữ động các phiên hiện tại: mỗi phiên hoạt động
có thể được truy cập bằng một hoặc nhiều thread của người dùng cuối (các tiến trình cùng một người dùng)
Một giao diện phiên có dạng như sau:
Forward Liên kết động giữa bộ nhớ quản lí hàng đợiBackward Liên kết động giữa bộ nhớ quản lí hàng đợiHandle Định danh phiên hợp lý (0 n)
SlotId Định danh khe cắm hợp lý (1 4)
ThreadId LSM thread tạo ra các phiên
Info Thông tin phiên (adhering PKCS#11
CK_SESSION_INFO structure)UserType Hình thức mở phiên (CKU_SO | CKU_USER)NumObjs Số đối tượng đang truy cập bằng phiên
ObjectList Mảng xử lý các đối tượng lưu trữ truy cập bằng
phiênEncryptState Con trỏ đến cấu trúc mã hóa nội bộ (nếu mã
hóa hoạt động)EncryptMechanism Loại cơ chế mã hóa (nếu mã hóa hoạt động)DecryptState Con trỏ đến cấu trúc giải mã nội bộ (nếu giải
mã hoạt động)DecryptMechanism Loại cơ chế giải mã (nếu giải mã hoạt động)DigestState Con trỏ đến cấu trúc digest nội bộ (nếu digest
hoạt động)DigestMechanism Loại cơ chế digest (nếu digest hoạt động)
SignState Con trỏ đến cấu trúc chữ ký nội bộ (nếu chữ ký
hoạt động)SignMechanism Loại cơ chế chữ ký (nếu chữ ký hoạt động)VerifyState Con trỏ đến cấu trúc xác minh nội bộ (nếu xác
minh hoạt động)VerifyMechanism Loại cơ chế xác minh (nếu xác minh hoạt động)Đối tượng truy cập của thread người dùng cuối được lưu trữ trong bộ nhớ trong được nhúng trong mỗi khe bộ nhớ ánh xạ: có nghĩa là không cóđối tượng có thể được tạo ra bên ngoài của một khe cắm
Trang 9Một đối tượng có thể được một đối tượng phiên (biến động, xóa việc chấm dứt phiên), hoặc một đối tượng token (thường trú, nội dung bộ nhớ của nó là luôn ánh xạ tới SecureBox tương ứng).
Một mô tả đối tượng được trình bày như sau:
Handle Định danh đối tượng hợp lí (1 256)
Owner Kiểu đối tượng (session | token)
Name Tên đối tượng hợp lí
NumSession
s
Số phiên đang truy cập vào đối tượng
AttrSet Mảng động của thuộc tính phiên
Obj Gói nội dung đối tượng
Các mảng động của các thuộc tính phiên là một cấu trúc bộ nhớ mà nội dung đối tượng lưu trữ trong một hình thức thích hợp để xử lý bộ nhớthời gian chạy của các đối tượng Hình thức này liên quan đến hình thức được xác định bởi tiêu chuẩn PKCS # 11, và dễ dàng ánh xạ để định dạngnền tảng độc lập của thuộc tính đối tượng khi viết vào một SecureBox hoặc vận chuyển qua mạng
Một mảng động của các thuộc tính phiên được thể hiện trong bảng sau:
NumAttrs Số thuộc tính của đối tượng
Set Mảng thuộc tính đối tượng
Mỗi thuộc tính đối tượng được trình bày như sau:
Assigne
d
Gán giá trị thuộc tính bởi người dùng cuối (1), mặc định (0)
Type Loại đối tượng (boolean, numeric value, buffered value)
Size Kích thước đối tượng trong bytes: 1 if boolean, 4 if numeric
value, variable if bufferValue Giá trị thuộc tính thật – hợp của:
B boolean value
V numeric value
P buffered value (con trỏ trỏ tới một bộ nhớ đệm động)
Trang 10Loại ob của một đối tượng có thể giả định như sau:
Các đối tượng quản lý bởi LSM-PKCS11 được định nghĩa với các bộ thuộc tính sau đây:
Trang 173 Khe cắm và quản lý Token
Mỗi khe cắm được xử lý bởi trình nền LSM-PKCS11 được quản lý trong một bộ nhớ với một mô tả chuyên dụng, chia thành hai phần, một cho khe cắm và một cho token được nhúng trên SecureBox lien quan.Các mô tả này được thể hiện trong bảng sau:
SlotId Định danh khe cắm hợp lý (1 4)
Name Tên khe cắm/ token
SlotInfo Thông tin khe cắm (adhering PKCS#11 CK_SLOT_INFO
structure)Token Mô tả token
Mô tả token như sau:
Trang 18TokenInfo Thông tin token (adhering PKCS#11
CK_TOKEN_INFO structure)Flags Các cờ token cho phiên đang mở (RO, RW)
SBoxFileName tên tập tin SecureBox
SBoxKeyFName Key bảo vệ tập tin SecureBox
SBoxName Tên SecureBox
SBoxKey Key bảo vệ SecureBox
NumObjs Số đối tượng được lưu giữ vào token
ObjSet Mảng mô tả đối tượng
4 Giao diện OpenSSL
Để thực hiện thao tác mã hóa các trình nền LSM sử dụng thư viện mã hóa OpenSSL (libeay) Sự lựa chọn này được đề xuất bởi một số nguyên nhân sau:
- Mục tiêu chính của LSM-PKCS11 là sự phát triển của một module bảo mật (phần mềm hoặc phần cứng), không phải các thao tác mã hóa được thực hiện bởi nó
- Trong nhiều khả năng được cung cấp bởi các tình huống mã nguồn
mở, OpenSSL thường xuyên được sử dụng, thử nghiệm nhiều và đáng tin cậy
Giao diện cho thư viện OpenSSL được thực hiện trong một module chuyên dụng, trong đó một bộ chương trình con thực hiện các thao tác
mã hóa cần thiết với sự hỗ trợ của các hàm OpenSSL và các kiểu dữ liệu bên trong của nó (RSA, DSA, des_cblock, MD2_CTX, MD5_CTX, SHA_CTX, etc.) Các module dữ liệu ánh xạ từ định dạng OpenSSL sangmột định dạng nội bộ tới LSM, phù hợp hơn để chuẩn hóa giao diện PKCS#11
5 Khe cắm, Token, đối tượng, phiên
Thiết kế toàn cầu của việc quản lý trình nền LSM-PKCS11 cho các khe cắm, token, đối tượng và phiên được biễu diễn như Hình 3:
Trang 19Hình 3 LSM-PKCS#11quản lý Slots, Tokens, Objects, Sessions.III Cấu trúc dự án
Dự án LSM-PKCS11 là một tập hợp các module như Hình 4:
Trang 20Hình 4 LSM-PKCS11 Project modules
Tất cả các module có nền tảng độc lập, và chạy cả môi trường Linux
và Microsoft Windows Phiên bản hiện tại đã được phát triển và thử nghiệm trên những nền tảng sau đây:
- Linux Fedora 4, 64 bits
- Linux Fedora 4, 32 bits
- MS Windows 2000/XP, 32 bits
1 Protocol Library module
Module này chứa các nguồn sau đây:
• lsmprolib.c basic protocol and socket
managementlsmprolib.h
Trang 21serialization/deserializationpkcs11proto.h
• lsmobjects.c object and attributes handlinglsmobjects.h
• lsmcamellia.c Camellia cryptographylsmcamellia.h
• lsmtiger.c Tiger hashinglsmtiger.h
• minilzo.c, lsmlzo.c network compression minilzo.h, lsmlzo.h, lzoconf.h
2 SecureBox Library module
Module này chứa các nguồn sau đây:
• lsmsbox.c SecureBox handlinglsmsbox.h
• lsmsboxutil.c SecureBox utility program
• lsmsboxtest.c SecureBox test program
3 LSM-PKCS11 Daemon module
Module này chứa các nguồn sau đây:
• lsmsrv_main.c main thread and process management
• lsmsrv_child.c child thread management
• lsmsrv_funcs.c PKCS11 functions
• lsmsrv_lsm.c LSM-PKCS11 management functions
• lsmsrv_crypto.c cryptographic handling
• lsmsrv_conf.c configuration file handling
• lsmsrv_queue.c dynamic memory queues and pools handling
• lsmsrv_lib.c general purpose internal functions
• lsmsrv_uxth.c Unix multithread functions
• lsmsrv_win32.c MS Windows multithread functions
• lsmsrv_log.c log functions
• lsmsrv_vars.c daemon global variables
• lsmsrv.h daemon internal header
4 PKCS#11 Shared Library module
Trang 22Module này chứa các nguồn sau đây:
• pkcs11.c PKCS#11 shared library functionspkcs11.h
pkcs11types.hpkcs11proto.h
• pkcs11net.c client network handling
• pkcs11net.h
• pkcs11util.c internal functionspkcs11util.h
pkcs11int.h
• pkcs11uxtht.c Unix multithread functions
• pkcs11win32.c MS Windows multithread functions
5 PKCS#11 Test Program module
Module này chứa các nguồn sau đây:
• testpkcs11.c PKCS#11 test program
IV Xây dựng LSM-PKCS#11
1 Xây dựng trên môi trường Linux
Giải nén tập tin LSM-PKCS11.tar.gz, và thực hiện theo các bước sau:For 64 bits environment:
rm Makefile
ln –s Makefile.64 Makefilemake
make installFor 32 bits environment:
rm Makefile
ln –s Makefile.32 Makefilemake
make installThen create the following directories:
mkdir /usr/local/lsmmkdir /usr/local/lsm/conf
Trang 232 Xây dựng trên môi trường MS Window
Giải nén tập tin LSM-PKCS11.zip, và thực hiện theo các bước sau:
Run Visual Studio 6.0Open the project lsm.dws (it is under the main directory LSM-PKCS11)
Build, batch-build, rebuild allThen create the following directories:
mkdir c:\usr\local\lsmmkdir c:\usr\local\lsm\confmkdir c:\usr\local\lsm\keysmkdir c:\usr\local\lsm\logmkdir c:\usr\local\lsm\sbox
V Sử dụng LSM-PKCS#11
1 Chạy trên môi trường Linux
Chuẩn bị SecureBoxes, như chi tiết tại khoản V.3, và sao chép chúng theo thư mục / usr / local / LSM / sbox, và bảo vệ các tập tin quan trọng liên quan theo thư mục / usr / local / LSM / phím Sau đó chuẩn bị một file cấu hình cho trình nền LSM-PKCS11, càng chi tiết tại mục V.4, và sao chép nó theo thư mục / usr / local / LSM / conf
Vào lúc này, chạy các daemon ban hành lệnh:
/usr/local/bin/lsmsrv –c /usr/local/lsm/conf/<yourlsmsrv.cfg>
-d [-s]
The daemon is ready to be used
Now edit your file /etc/ld.conf.so, and if missing add to it the entry:
/usr/local/libChạy các lệnh hệ thống:
ldconfig
Để các thư viện chia sẻ / usr/local/lib/liblsmpkcs11.so.1.0.1 ánh xạ chính xác trong hệ thống
Sau đó chuẩn bị 'lsmpkcs11.cfg' cấu hình các tập tin cho thư viện chia
sẻ LSM-PKCS11, như chi tiết trong mục V.4, và sao chép nó theo thư mục / usr / local / LSM / conf
Bây giờ bạn có thể tiếp tục sử dụng các thư viện và daemon, ví dụ bằng lệnh:
Trang 24/ usr/local/bin/testpkcs11 [<RSA-key-size>]
Nơi <RSA-key-size> có thể mất các giá trị 512, 1024, 2048, 4096 (mặc định 1024)
2 Chạy trên môi trường MS Window
Chuẩn bị SecureBoxes, như chi tiết tại mục V.3, và sao chép chúng theo thư mục c: \ usr \ local \ LSM \ sbox, bảo vệ các tập tin quan trọng liên quan theo thư mục c: \ usr \ local \ LSM \ key
Sau đó chuẩn bị một file cấu hình cho trình nền LSM-PKCS11, càng chi tiết tại mục V.4, và sao chép nó theo thư mục c: \ usr \ local \ LSM \ conf
Vào lúc này, bạn có thể chạy các daemon Tạo thư mục:
c:\usr\local\lsm\bin
Và sao chép theo nó là daemon tập tin thực thi lsmsrv.exe (từ thư mục
bi \ d hoặc bin r \ của bạn) Sau đó, dưới một cửa sổ DOS, ra lệnh:
c:\usr\local\lsm\bin\lsmsrv.exe –c lsmsrv.cfg> [-s]
c:\usr\local\lsm\conf\<your-The daemon is ready to be used
Bây giờ sao chép các thư viện chia sẻ LSM-PKCS11 (lsmpkcs11.dll) vào thư mục 'system32' hệ thống của bạn (tức là c: \ WINNT \ system32),
để nó có thể được tìm thấy bởi các chương trình ứng dụng
Sau đó chuẩn bị 'lsmpkcs11.cfg' các tập tin cấu hình cho thư viện chia
sẻ LSM-PKCS11, như chi tiết trong mục V.4, và sao chép nó theo thư mục c: \ usr \ local \ LSM \ conf
Bây giờ bạn có thể tiếp tục sử dụng các thư viện và daemon, ví dụ bằng lệnh:
testpkcs11.exe [<RSA-key-size>]
Nơi <RSA-key-size> có thể mất các giá trị 512, 1024, 2048, 4096 (mặc định 1024)
3 Xử lý SecureBoxes