ĐẠI HỌC THÁI NGUYÊN 1
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
\
PHAN THỊ KIM QUẾ
LỜI CẢM ƠN
Em xin gửi lời cảm ơn tới Khoa CNTT- ĐHTN, nơi các thầy cô đã tận tình
giúp đỡ truyền đạt các kiến thức cho em trong suốt quá trình học tập. Em xin cảm
ơn Ban chủ nhiệm khoa và các cán bộ đã tạo điều kiện tốt nhất cho em học tập và
hoàn thành đề tài tốt nghiệp của mình.
PHÁT TRIỂN MỘT HẠ TẦNG KHÓA CÔNG KHAI CƠ BẢN DỰA TRÊN BỘ CÔNG Em xin gửi lời cảm ơn chân thành nhất đến T.S Lương Thế Dũng đã tận tình
CỤ CRYPTOSYS giúp đỡ, chỉ bảo cũng như tạo điều kiện để em có thể hoàn thành thực hiện đề tài
này.
Bên cạnh đó em cũng nhận được nhiều sự giúp đỡ, lời động viên từ các anh,
Tuy nhiên, do thời gian hạn hẹp, mặc dù đã hết sức mình, nhưng chắc luận
các chị, bạn bè,… Em xin hết lòng ghi ơn.
văn khó tránh khỏi thiếu sót. Em rất mong nhận được sự thông cảm và chỉ bảo tình
của quý thầy cô và các bạn.
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 10 năm 2015
Học viên
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Thái Nguyên - 2015 Phan Thị Kim Quế
2
LỜI CAM ĐOAN
Em xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày trong
luận văn là bản thân em tự tìm hiểu và tìm tòi dưới sự hướng dẫn khoa học của thầy
T.S Lương Thế Dũng.
Các tài liệu, số liệu tham khảo được trích dẫn đầy đủ nguồn gốc. Em xin chịu
trách nhiệm trước pháp luật lời cam đoan của mình.
Học viên thực hiện
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Phan Thị Kim Quế
3
MỤC LỤC
LỜI CẢM ƠN
LỜI CAM ĐOAN
MỤC LỤC ................................................................................................................. 3
DANH MỤC CÁC TỪ VIẾT TẮT .......................................................................... 6
DANH MỤC HÌNH VẼ ............................................................................................ 7
1.1.Giới thiệu chung ....................................................................................... 11
1.2.Mật mã khóa đối xứng và mật mã khóa bất đối xứng.............................. 12
Mật mã khóa đối xứng ......................................................................... 12
Mật mã khóa bất đối xứng ................................................................... 14
1.3.Chữ kí số .................................................................................................. 16
Chương 1.TỔNG QUAN VỀ PKI .......................................................................... 11
1.3.1. Khái niệm ............................................................................................ 16
1.4.Hạ tầng khóa công khai PKI .................................................................... 18
1.4.1.Định nghĩa PKI .............................................................................. 18
1.4.2.Các thành phần chính của PKI ...................................................... 18
1.3.2. Tạo chữ kí số ....................................................................................... 17
Toàn vẹn .................................................................................................... 22
1.4.3.Các dịch vụ của PKI...................................................................... 22
1.4.4.Kiến trúc PKI hiện hành ............................................................... 23
1.5.Kết chương ............................................................................................... 25
Bảo mật ...................................................................................................... 22
2.1.Giới thiệu Cryptosys PKI ......................................................................... 26
Chương 2. TÌM HIỂU KIẾN TRÚC VÀTHUẬT TOÁN TRONG CRYPTOSYS ........ 26
2.1.1. Các hàm được sửa đổi trong các phiên bản ........................................ 26
2.2.Các thuật toán hỗ trợ trong Cryptosys PKI .............................................. 29
2.1.2. Quy ước trong tài liệu này .................................................................. 29
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
2.2.1. Thuật toán ký số và mã hóa công khai ............................................... 29
4
2.2.2. Thuật toán mật mã khối đối xứng cho mã hóa nội dung .................... 30
2.2.3. Thuật toán mã hóa khối cho việc đóng gói khóa ................................ 30
2.2.4. Thuật toán băm Message digest .......................................................... 30
2.2.5. Thuật toán băm khóa HMAC ............................................................. 30
2.2.6. Các thuật toán mã hóa dựa trên mật khẩu ........................................... 31
2.2.7. Định dạng khóa RSA .......................................................................... 31
2.2.8. Các kiểu nội dung CMS ...................................................................... 32
2.2.9. Chứng chỉ X509. ................................................................................. 32
2.2.10.Các thuật toán không được hỗ trợ trong Cryptosys PKI ................... 32
2.3.Chứng thư số ........................................................................................... 33
2.2.11.Các định dạng lưu trữ khóa ............................................................... 32
2.3.1. Chứng thư khóa công khai .................................................................. 33
2.4.Cài đặt và sử dụng thư viện CryptoSysPKI ............................................. 38
2.3.2. Khuôn dạng chứng thư X.509 ............................................................. 35
2.4.1. Cài đặt ................................................................................................. 38
2.4.2. Sử dụng với C và C++ ........................................................................ 39
2.4.3. Sử dụng với .NET: C# và VB.NET .................................................... 39
2.4.4. Phát hành an toàn ................................................................................ 40
2.4.5. An toàn khóa ....................................................................................... 41
2.4.6. Các tùy chọn an toàn cho khóa bí mật được mã hóa .......................... 42
2.4.7. Sinh số ngẫu nhiên ( Random Number Generator) ............................ 43
2.4.8. Xác định những định danh riêng biệt ................................................. 44
2.4.9. Tham số mở rộng X509 ...................................................................... 45
2.4.10.Danh sách một số hàm trong CryptoSysPKI .................................... 46
1.Hàm CMS ................................................................................................ 46
2.Các hàm khóa công khai RSA ............................................................... 46
3.Hàm RSA gốc .......................................................................................... 47
4.Hàm chứng chỉ X509 .............................................................................. 47
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
5.Hàm PFX ................................................................................................. 48
5
6.Các hàm mật mã khối ............................................................................. 48
7.Các hàm băm Message Digest ............................................................... 48
8.Các hàm HMAC ...................................................................................... 49
9.Các hàm chuyển đổi mã hóa .................................................................. 49
10.Các hàm chuyển đổi tập tin nhị phân và PEM .................................. 49
2.5.Các hoạt động chính trong hệ thống PKI ................................................. 49
11.Các hàm sinh số ngẫu nhiên ................................................................ 49
2.5.1. Giai đoạn khởi tạo chứng chỉ .............................................................. 50
2.5.2. Giai đoạn sau phát hành ...................................................................... 52
2.5.3. Giai đoạn hủy bỏ chứng thư................................................................ 53
2.5.4. Các hoạt động phục hồi ...................................................................... 54
3.1. Mục tiêu phát biểu bài toán ..................................................................... 55
3.2. Sơ đồ hoạt động của chương trình .......................................................... 55
3.3. Một số chức năng chính và lựa chọn môi trường công cụ ...................... 56
3.4. Ứng dụng chứng thư số sử dụng hệ thống PKI để bảo mật .................... 60
CHƢƠNG 3.XÂY DỰNG CHƢƠNG TRÌNH THỬ NGHIỆM ....................... 55
3.4.1. Ứng dụng truyền tin an toàn ............................................................... 60
3.4.2.Ứng dụng xác thực người dùng và kiểm tra tính toàn vẹn ................. 61
3.5. Đánh giá kết quả thử nghiệm ........................................................................... 61
KẾT LUẬN ............................................................................................................. 63
Tiếng Việt: ............................................................................................................. 65
Tiếng Anh: ............................................................................................................. 65
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
PHỤ LỤC. Chương trình mô phỏng hệ thống PKI .............................................. ..66
6
DANH MỤC CÁC TỪ VIẾT TẮT
CA Certificate Authority
CRLs Certificate Revocation Lists
DES Data Encryption Standard
DNS Domain Name System
DSA Directory System Agent
DSS Directory Service Server
IEEE Institute of Electrical & Electronic Engineers
LDAP Lightweight Directory Access Protocol
MAC Message Authentication Code
MD5 Message Digest 5 Hash Algorithm
OCSP Online Certificate Status Protocol
PGP Pretty Good Privacy
PKC Public Key Certificate
PKCS Public Key Cryptography Standards
PKI Public Key Infrastructure
RA Registration Authorities
RAO Registration Authorities Operator
RFC Request For Comments
RSA Rivest Shamir Adleman
S/MIME Secure Multipurpose Internet Mail Extensión
SHA-1 Secure Hash Standard
SSL Secure Socket Layer
TTP Trusted Third Party
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
TLS Transport Layer Security
7
DANH MỤC HÌNH VẼ
Hình 1.1. Mô hình mã hóa và giải mã sử dụng mật mã ......... Error! Bookmark not
defined.
Hình 1.2. Mô hình đơn giản của hệ thống mã hóa đối xứng .................................. 12
Hình 1.3. Mô hình đơn giản của mật mã khóa bất đối xứng ................................... 15
Hình 1.4. Mô hình tạo chữ kí số .............................................................................. 17
Hình 1.5. Mô hình trao đổi thông tin sử dụng chữ ký số ........................................ 18
Hình 1.6. Ví dụ về việc áp dụng chữ ký số trong thực tế ....................................... 18
Hình 1.7.Các thành phần của chứng chỉ ................................................................. 19
Hình 1.8.Quá trình yêu cầu đăng ký chứng thư số .................................................. 19
Hình 1.9. Mô hình kiến trúc hệ thống PKI .............................................................. 21
Hình 1.10.Mô hình hệ thống CA một cấp ............................................................... 24
Hình 1.11.Mô hình hệ thống CA phân cấp ............................................................. 25
Hình 1.12.Mô hình hệ thống CA ngang cấp ........................................................... 25
Hình 2.1.Chứng thư khóa công khai đơn giản ........................................................ 34
Hình 2.2.Khuôn dạng chứng thư số phiên bản 1 và 2 dạng X.509 ......................... 36
Hình 2.3. Phần mở rộng của khuôn dạng chứng thư số trong phiên bản 3 dạng X.509 ...... 37
Hình 2.4.Thư viện Cryptosys PKI........................................................................... 39
Hình 2.5. Tóm tắt quá trình hoạt động cơ bản trong hệ thống PKI ........................ 51
Hình 2.6. Giai đoạn khởi tạo ................................................................................... 52
Hình 2.7. Giai đoạn hủy bỏ chứng chỉ .................................................................... 53
Hình 3.1. Sơ đồ hoạt động của chương trình .......................................................... 55
Hình 3.2. Giao diện chính của chương trình ........................................................... 56
Hình 3.3. Giao diện chức năng cấp phát chứng chỉ ................................................ 58
Hình 3.4. Giao diện yêu cầu tạo chứng chỉ ............................................................. 59
Hình 3.5. Giao diện danh sách chứng thư được cấp ............................................... 59
Hình 3.6. Giao diện kiểm tra chứng thư số ............................................................. 59
Hình 3.7. Chứng chỉ số do CA cấp ......................................................................... 60
Hình 3.8. Giao diện cập nhật chứng thư số hết hạn ................................................ 60
Hình 3.9. Giao diện kiểm tra chứng thư bị thu hồi ................................................. 61
Hình 3.10. Giao diện chương trình ứng dụng truyền tin bảo mật ........................... 61
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 3.11. Sơ đồ hoạt động của ứng dụng xác thực, kiểm tra tính toàn vẹn ......... 61
8
MỞ ĐẦU
1. Lý do chọn đề tài
Trong kỷ nguyên của công nghệ thông tin, tính phổ biến rộng rãi của Internet
một mặt đem lại nhiều ứng dụng tiện lợi, thú vị và dần thay thế các hoạt động
truyền thống trong thế giới thực, mặt khác nó đặt ra các vấn đề về sự an toàn, tính
tin cậy của những giao dịch trên Internet. Cơ sở hạ tầng khóa công khai (PKI) có
thể đáp ứng, giải quyết những vấn đề cơ bản nhất cho những yêu cầu trên. Dựa trên
các dịch vụ cơ bản về chứng thực số và chữ ký số, một PKI chính là bộ khung của
các chính sách, dịch vụ và phần mềm mã hóa, đáp ứng nhu cầu bảo mật của người
sử dụng.
Không chỉ nằm trong lĩnh vực thương mại điện tử, chứng thực số hiện còn
được sử dụng như một dạng chứng minh thư cá nhân. Tại các nước công nghệ phát
triển, chứng thực số CA được tích hợp vào các chip nhớ nằm trong thẻ căn cước,
thẻ tín dụng để tăng cường khả năng bảo mật, chống giả mạo, cho phép chủ thẻ xác
thực danh tính của mình trên nhiều hệ thống khác nhau, chẳng hạn như xe Bus, thẻ
rút tiền ATM, kiểm soát hải quan v.v..
Từ tính cấp thiết của các vấn đề trong thực tế, em xin mạnh dạn trình bày tổng
quát về cơ sở hạ tầng khóa công khai. Đề tài đi vào hướng “ Phát triển một hạ tầng
khóa công khai cơ bản dựa trên bộ công cụ Cryptosys”.
2. Mục đích và nhiệm vụ
* Mục đích
Đề tài này tập trung vào hướng phát triển một hạ tầng khóa công khai cơ bản
dựa trên bộ công cụ Cryptosys PKI (PKI- Public Key Infrastructure).
Các kết quả của đề tài sẽ được ứng dụng trong xây dựng thử nghiệm mô hình
triển khai hạ tầng mật mã khóa công khai PKI.
* Nhiệm vụ
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Nghiên cứu các quá trình thực hiện mã hóa và giải mã công khai
9
Tìm hiểu các thuật toán
Thực hiện đưa ra các giải pháp
Ứng dụng trong hệ mã cụ thể PKI
So sánh với kết quả thực thi của hệ mã khi chưa áp dụng
3. Phƣơng pháp nghiên cứu
Nghiên cứu dựa trên việc tìm hiểu các giải thuật xử lý dựa trên bộ công cụ
Cryptosys PKI.
Thu thập các tài liệu đã xuất bản, các bài báo trên các tạp trí khoa học và các
tài liệu trên mạng Internet có liên quan đến vấn đề đang nghiên cứu.
Tìm hiểu, vận dụng và kế thừa các thuật toán và qui trình mã đã công bố kết quả.
4. Đối tƣợng và phạm vi nghiên cứu
Đối tƣợng nghiên cứu
Đi vào nghiên cứu kỹ thuật, công nghệ, triển khai hạ tầng mật mã khóa công
khai (PKI- Public Key Infrastructure) áp dụng an toàn một số giao dịch qua cổng
thông tin điện tử, từ đó phân tích và nêu ra các giải pháp phù hợp. Từ các kết quả
thu được, đề tài đưa ra cách xây dựng thử nghiệm mô hình triển khai hạ tầng mật
mã khóa công khai PKI.
Phạm vi nghiên cứu
Đề tài thực hiện triển khai hạ tầng mật mã khóa công khai (PKI- Public Key
Infrastructure) áp dụng an toàn một số giao dịch qua cổng thông tin điện tử.
Đề tài giới hạn trong phạm vi nghiên cứu để đưa ra giải pháp, việc triển khai
ứng dụng thực tiễn cần có thêm các điều kiện về thời gian và quy mô.
5. Ý nghĩa khoa học của đề tài
Nghiên cứu tổng hợp cơ sở lý thuyết, phương pháp luận, các công cụ cho
việc phát triển hệ thống cơ sở hạ tầng khóa công khai phục vụ cho việc cấp phát
chứng chỉ số. Góp phần giải quyết bài toán xác thực các thực thể tham gia vào trao
đổi thông tin liên lạc qua cổng giao dịch điện tử.
Các phương pháp mật mã gồm: Phương pháp mã hoá khóa bí mật và phương
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
pháp mã hóa khóa công khai. Phương pháp mã hóa khóa công khai thì tập trung vào
10
mã khóa công khai (PKI) cơ bản dựa trên nền bộ thư viện Cryptosys PKI. Với
Phương pháp mã bí mật chỉ trình bày sơ bộ mang tính so sánh.
6. Bố cục của luận văn
Luận văn được trình bày trong chương, có phần mở đầu, phần kết luận, phần
tài liệu tham khảo. Các nội dung cơ bản của luận văn được trình bày theo cấu trúc
như sau:
Mở đầu
1. Lý do chọn đề tài
2. Mục đích và nhiệm vụ
3. Phương pháp nghiên cứu
4. Đối tượng và phạm vi nghiên cứu
5. Ý nghĩa khoa học của đề tài.
Chƣơng 1: Tổng quan về PKI
Chƣơng 2: Kiến trúc và các thuật toán trong Cryptosys PKI
Chƣơng 3: Xây dựng chƣơng trình thử nghiệm
Kết luận
Đánh giá và nêu ưu nhược điểm của đề tài. Trình bày các kết quả thu được
sau khi thực hiện đề tài.
Hướng phát triển tiếp theo của đề tài.
6. Đóng góp của luận văn
Luận văn hệ thống các cơ sở lý thuyết cơ bản về hệ mật mã khóa công
khai. Xây dựng chương trình thử nghiệm mô hình PKI cơ bản dựa trên nền bộ công
cụ lập trình Cryptosys PKI (PKI- Public Key Infrastructure).
Mô hình này hoàn toàn có thể phát triển tạo ra cơ sở hạ tầng khóa công khai
đáp ứng trong thực tế.
Giúp người sử dụng hiểu rõ hơn về khả năng ứng dụng mật mã trong các bài
toán bảo mật thông tin.
Ngoài ra giúp người sử dụng hiểu rõ hơn hệ thống PKI, từ đó có thể vận
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
hành tốt các hệ thống PKI trong thực tế.
11
Chƣơng 1. TỔNG QUAN VỀ PKI
1.1. Giới thiệu chung
Mật mã được sử dụng để bảo vệ tính bí mật của thông tin khi thông tin được
truyền trên các kênh truyền công cộng như kênh bưu chính, mạng truyền thông tin
máy tính, điện thoại, mạng Internet,…
Mật mã đã được con người sử dụng từ lâu đời[1]. Các hình thức mật mã sơ
khai đã được tìm thấy từ khoảng bốn nghìn năm trước trong nền văn minh Ai Cập
cổ đại. Trải qua hàng nghìn năm lịch sử, mật mã được sử dụng rộng rãi ở khắp nơi
trên thế giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin trong nhiều
lĩnh vực hoạt động giữa con người và các quốc gia, đặc biệt trong các lĩnh vực quân
sự, chính trị, ngoại giao. Mật mã trước hết là một loại hoạt động thực tiễn, nội dung
chính của nó là để giữ bí mật thông tin.
Ví dụ một văn bản được gửi từ người A đến người nhận B mà không muốn
bất kì một ai khác B đọc được văn bản đó. A mã hóa văn bản đó thành bản mã
tương ứng thay vì gửi văn bản thì A chỉ gửi bản mã cho B, B nhận được bản mã và
giải mã lại văn bản để hiểu được thông tin mà A muốn gửi cho mình. Do văn bản
gửi đi thường được chuyển qua các con đường công khai nên người ngoài có thể
“ đánh cắp” được, nhưng vì đó là bản mã nên không thể đọc hiểu được.
Hình 1.1. Mô hình mã hóa và giải mã sử dụng mật mã.
A có thể tạo ra bản mã và B có thể giải mã thành văn bản rõ để hiểu được là
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
do hai người đã có một thoả thuận về một chìa khoá chung, chỉ với khoá chung này
12
thì A mới tạo được bản mã từ bản rõ và B mới khôi phục được bản rõ từ bản mã.
Khoá chung đó được gọi là khoá mã.
Để thực hiện được một phép mã, ta còn cần có một thuật toán biến bản rõ
cùng với khoá mã thành bản mã và một thuật toán ngược lại biến bản mã cùng với
khoá mã thành bản rõ. Các thuật toán đó được gọi tương ứng là thuật toán lập mã và
thuật toán giải mã. Các thuật toán này thường không nhất thiết phải giữ bí mật, mà
cái luôn cần được giữ bí mật là khoá mã. Trong thực tiễn, có những hoạt động
ngược lại với hoạt động bảo mật là khám phá bí mật từ các bản mã “lấy trộm” được,
hoạt động này thường được gọi là mã thám hay phá khoá.
1.2. Mật mã khóa đối xứng và mật mã khóa bất đối xứng
Mật mã khóa đối xứng
Mật mã khóa đối xứng còn có tên gọi khác như Private Key Cryptography –
mã hóa hóa bí mật. Mã hóa đối xứng sẽ sử dụng một khóa chung cho cả hai quá
trình mã hóa và giải mã.[1]
Trước khi truyền dữ liệu hai bên gửi và nhận phải thỏa thuận về khóa dùng
chung cho quá trình mã hóa và giải mã. Khóa sẽ được phân phối bằng cách an toàn
nào đó như đĩa mềm, dùng bên thứ 3 tin cậy, hoặc bằng phương pháp mã hóa công
khai,… Hai bên phải giữ bí mật về khóa dùng chung này. Sau đó, bên gửi sẽ mã hóa
bản rõ bằng cách sử dụng khóa bí mật đã được thỏa thuận giữa 2 bên và gửi thông
điệp được mã hóa sang cho bên nhận. Bên nhận sau khi nhận được thông điệp này
sẽ dùng khóa bí mật để giải mã và sẽ nhận được bản rõ.
Hình 1.2. Mô hình đơn giản của hệ thống mã hóa đối xứng
Mã hóa đối xứng có thể phân làm 2 loại sau:
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Block Cipher ( mã khối): Tác động trên bản rõ theo từng khối bits, từng nhóm
13
bits này còn được gọi là khối (Block). Từng khối dữ liệu trong văn bản ban đầu
được thay thế bằng một khối dữ liệu khác có cùng độ dài. Ví dụ như thuật toán DES
với khối dữ liệu có độ dài là 64 bits, 3DES (Triple DES), AES với khối dữ liệu có
độ dài là 128 bits và khóa có độ dài là 128, 192 hoặc 256 bits
Stream Cipher (mã dòng): Tác động lên bản rõ theo từng bits một.
Dữ liệu của văn bản được mã hóa từng bits một. Các thuật toán mã dòng này
có tốc độ nhanh hơn các thuật toán mã khối và nó thường được áp dụng khi lượng
dữ liệu cần mã hóa chưa biết trước. Phương pháp này tạo ra lỗi ít hơn so với
phương pháp mã khối và nếu có xảy ra lỗi cũng chỉ ảnh hưởng trên 1 bit. Các thuật
toán được dùng như là RC5, SEAL,…
Thuật toán mã hóa đối xứng cũng có thể được dùng để xác thực tính toàn vẹn
và nguồn gốc dữ liệu. A sử dụng khóa của mình để sinh ra ciphertext (bản mã) cho
toàn bộ plaintext (bản rõ). Sau đó gửi bản plaintext và 1 phần của ciphertext cho B.
Một phần của ciphertext đó được gọi là đoạn mã xác thực thông điệp (MAC). B sử
dụng bản sao khóa của mình để sinh ra ciphertext, lấy một phần tương tự của
ciphertext và so sánh nó với MAC nhận được. Nếu chúng giống nhau thì B biết
được rằng A đã gửi thông điệp đó cho anh. Tuy nhiên, phương pháp này không
cung cấp khả năng chống chối bỏ. A có thể phủ nhận việc gửi thông điệp đó, bởi vì
chính B cũng có thể sinh ra thông điệp như vậy.
A và B cần chia sẻ một khóa đối xứng trước khi A mã hóa hay tạo ra một
MAC cho một thông điệp. Cần thành lập một nơi để chia sẻ khóa gọi là hệ thống
quản lý khóa (key management), nhưng đây vẫn là một vấn đề rất khó. Hệ thống
quản lý khóa có thể được thực hiện với mật mã khóa đối xứng, nhưng đó là một vấn
đề nan giải. Để sử dụng mật mã đối xứng, A và B cần chia sẻ một cách bí mật.
Nơi đầu tiên chia sẻ khóa phải được thành lập thông qua kỹ thuật “out-of-
band” (một kênh giao tiếp riêng). Nó có thể chấp nhận được nếu A chỉ liên lạc với
B. Nếu A liên lạc với một cộng đồng lớn hơn, thì việc thành lập từng mối quan hệ
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
trở nên phức tạp và khó để đạt được các dịch vụ bảo mật.
14
Tuy nhiên, vấn đề này có thể trở thành dễ sử dụng thông qua sự giới thiệu
của một bên thứ ba tin cậy (Trusted Third Party). Nếu A và người mà A muốn liên
lạc đều tin vào TTP, họ có thể lấy một khóa mới cho ý định đó từ TTP. Mỗi bên
phải thành lập một out-of-band bí mật với TTP như một điểm khởi đầu. Tuy nhiên,
A sẽ không cần lặp lại quá trình đó cho mỗi người mới mà A muốn liên lạc.
Ưu, nhược điểm của mật mã khóa đối xứng:
+ Ưu điểm:
Có thể được thiết kế để đạt tốc độ cao. Các thiết bị phần cứng hỗ trợ có thể đạt
tốc độ hàng trăm megabytes mỗi giây trong khi việc thực thi bằng phần mềm chỉ đạt
được khoảng vài megabytes mỗi giây.
Khóa bí mật dùng cho việc mã hóa và giải mã tương đối ngắn.
Được xem như thành phần cơ bản có thể triển khai để xây dựng các kỹ thuật mã hóa
khác bao gồm khởi tạo các số ngẫu nhiên, các hàm băm, các kỹ thuật tính toán.
Có thể được kết hợp để tạo ra các thuật toán mã hóa mạnh hơn.
+ Nhược điểm:
Trong quá trình truyền thông giữa hai người, khóa phải được giữ bí mật cho cả hai phía.
Trong một hệ thống mạng lớn, số lượng khóa cần được quản lý
rất nhiều. Ví dụ để đảm bảo giao thông liên lạc an toàn cho tất cả mọi người trong
một nhóm gồm n người, tổng số lượng khóa cần phải có là . Do vậy việc
quản lý khóa một cách hiệu quả đòi hỏi sử dụng một bộ phận tin cậy thứ ba (TTP
:Trusted Third Party).
Khóa bí mật cần được thay đổi thường xuyên.
Mật mã khóa bất đối xứng
Mật mã khóa bất đối xứng hay còn được gọi là mật mã công khai (Public
Key Cryptography). Trong thuật toán này sẽ có hai khóa được sử dụng, một được
dùng để mã hóa và một được dùng để giải mã. Khóa dùng để mã hóa được gọi là
khóa công khai (Public key), còn khóa dùng để giải mã được gọi là khóa bí mật
(private key). Một người dùng bất kỳ có thể dùng khóa công khai để mã hóa dữ liệu
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
nhưng chỉ có người có khóa giải mã tương ứng mới có thể đọc được dữ liệu đó mà thôi.
15
Hình 1.3. Mô hình đơn giản của mật mã khóa bất đối xứng
Mã hóa khóa công khai ra đời nhằm giải quyết vấn đề phân phối khóa của
các phương pháp mã hóa đối xứng. Quá trình này được thực hiện như sau:
Bên gửi sẽ yêu cầu lấy khóa công khai của bên nhận đến bên nhận hoặc có thể
gửi yêu cầu này đến trung tâm phân phối khóa.
Sau đó hai bên sẽ thống nhất thuật toán dùng để mã hóa dữ liệu, bên gửi sẽ sử
dụng khóa công khai của người nhận cùng với thuật toán đã thống nhất để mã hóa
dữ liệu gửi đi.
Khi nhận được thông tin mã hóa bên nhận sẽ dùng khóa bí mật tương ứng để
giải mã thông điệp nhận được.
Với phương pháp mã hóa này thì khóa bí mật không phải phân phối thủ công hoặc
qua mạng, mà người dùng chỉ cần bảo vệ khóa bí mật do vậy sẽ an toàn hơn. Nhưng tốc độ
thực hiện của mã hóa bất đối xứng chậm hơn nhiều so với mã hóa đối xứng.
Một số thuật toán mã hóa bất đối xứng điển hình là, Elgamal, Diffie –
hellman, RSA ...
Ưu, nhược điểm của mật mã khóa bất đối xứng:
Ưu điểm:
Chỉ có khóa riêng thì cần được giữ bí mật (tuy nhiên việc xác nhận của các
khóa công khai cần được đảm bảo).
Việc quản trị các khóa trên mạng đòi hỏi sự tồn tại duy nhất một thành phần
tin cậy TTP.
Cặp khóa riêng và công khai có thể được sử dụng trong thời gian dài.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Nhiều mô hình khóa công khai được phát triển hình thành nên các kỹ thuật
16
chữ ký số hiệu quả. Khóa được sử dụng cho hàm kiểu công khai thì nhỏ hơn rất
nhiều so với dùng khóa đối xứng
Trong một mạng lớn, số lượng các khóa cần thiết được quan tâm ít hơn so với
việc dùng khóa đối xứng.
Nhược điểm:
Tốc độ cho các phương thức mã hóa công khai thì chậm hơn rất nhiều so với
các mô hình khóa đối xứng.
Kích thước khóa lớn hơn rất nhiều so với cơ chế mã hóa khóa đối xứng.
Không có mô hình khóa công khai nào được chứng minh là an toàn. Phần lớn
các mô hình mã hóa hiệu quả ngày nay có sự an toàn dựa trên các giả thuyết của
một tập nhỏ của các vấn đề lý thuyết số học.
Hệ thống mã hóa công khai không có bề dày lâu đời như hệ thống mã hóa
khóa đối xứng, nó chỉ được tìm ra vào giữa khoảng những năm 1970.
1.3. Chữ kí số
1.3.1. Khái niệm
Theo nghị định 26/2007/NĐ-CP “chữ kí số” là một dạng chữ kí điện tử được
tạo ra bằng sự biến đổi một thông điệp dữ liệu sử dụng hệ thống mật mã không đối
xứng theo đó người có được thông điệp dữ liệu ban đầu và khóa công khai của
người ký có thể xác định được chính xác.[2]
Việc biến đổi nêu trên được tạo ra bằng đúng khóa bí mật tương ứng với
khóa công khai trong cùng một cặp khóa;
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Sự toàn vẹn nội dung của thông điệp dữ liệu kể từ khi thực hiện việc biến đổi nêu trên.
17
1.3.2. Tạo chữ kí số
Mật mã khóa công khai có thể được sử dụng theo nhiều cách khác nhau. Chữ
kí số là một ví dụ minh chứng cho việc đảm bảo xác thực người dùng và toàn vẹn
dữ liệu. Nếu người gửi A mã hóa thông điệp hay tài liệu với khóa riêng của mình thì
bất kì ai cũng có thể giải mã thông điệp với khóa công khai của A. Do đó, người
nhận có thể chắc chắn rằng thông điệp mình nhận chỉ có thể do A mã vì chỉ có A
mới có khóa riêng của mình. Quá trình mã hóa thông điệp với khóa riêng của người
gửi gọi là quá trình “ký số”.[8]
Hình 1.4. Mô hình tạo chữ kí số Chữ kí số được sử dụng để xác thực người gửi và kiểm tra tính toàn vẹn của dữ liệu.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 1.5. Mô hình trao đổi thông tin sử dụng chữ ký số
18
Hình 1.6. Ví dụ về việc áp dụng chữ ký số trong thực tế
Ví dụ người A gửi thông điệp cho người B. Người nhận B sau khi nhận được
thông điệp đầu tiên sẽ giải mã bản băm với khóa công khai của người gửi. Nếu giải
mã được thì xác định đúng là do A gửi. Còn giải mã không được thì không phải do
A gửi. Sau đó băm thông điệp đi kèm bằng thuật toán băm tương ứng với thuật toán
băm người gửi đã sử dụng. B so sánh hai giá trị băm nếu giống nhau thì chắc chắn
rằng thông điệp A gửi cho B còn nguyên vẹn.
1.4. Hạ tầng khóa công khai PKI
1.4.1. Định nghĩa PKI
Có nhiều định nghĩa khác nhau về PKI (Public Key Infratructure): PKI là cơ sở
của một hạ tầng an ninh rộng khắp, các dịch vụ cơ bản của nó được cài đặt và được thực
hiện bằng cách sử dụng các khái niệm và kỹ thuật của mật mã khóa công khai.[4]
PKI là một tập hợp các phần cứng, phần mềm, con người, các chính sách và
các thủ tục cần thiết để tạo, quản lý, lưu trữ, phân phối và thu hồi các chứng thư
khóa công khai dựa trên mật mã khóa công khai.[2]
Chứng thư số (Certificate): Là đại lượng điện tử đại diện cho người dùng,
máy tính, dịch vụ hoặc thiết bị trong mạng. Nó liên kết định danh của chủ sở hữu nó
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
với một cặp khóa và thường có những thông tin cơ bản sau:
19
Hình 1.7. Các thành phần của chứng chỉ
Version: phiên bản
Serial Number: Số Serial của chứng chỉ
CA Signature Alg: Thuật toán ký số của CA
Issuer Name: Tên người phát hành
Validity Period: Thời gian hết hạn
Subject Name: Tên chủ thể
Subject Public Key: Khóa công khai của chủ thể 1.4.2. Các thành phần chính của hệ thống PKI
Certificate Authority (CA) là một tổ chức được tin tưởng trong việc cấp phát
chứng thư số và công nhận các nội dung thông tin lưu giữ trong chứng thư số. CA
được coi là trái tim của hệ thống PKI, là tổ chức quản lý của PKI.
Registration Authority (RA) là cơ quan chịu trách nhiệm xác nhận về tính
trung thực của yêu cầu sử dụng chứng thư số. RA không có trách nhiệm sinh và ký
chứng thư. RA sau khi nhận yêu cầu sẽ chuyển sang CA để thực hiện.Kết quả của
CA sẽ được chuyển tới yêu cầu thông qua RA.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 1.8. Quá trình yêu cầu đăng ký chứng thư số
20
RA được thiết kế để chia sẻ bớt công việc mà CA thường phải đảm trách và
không thể thực hiện bất kỳ một dịch vụ nào mà tổ chức CA của nó không thực hiện
được. Quan trọng nhất là RA được ủy quyền và có quyền thực hiện các công việc
mà CA cho phép vì lợi ích của CA. Một RA chỉ nên phục vụ cho một CA, trong khi
đó một CA có thể được hỗ trợ bởi nhiều RA. Thông qua việc chia sẻ bớt nhiệm vụ
cho các RA, một CA sẽ có thể đáp ứng nhanh các yêu cầu của thực thể cuối. Mục
đích chính của một RA là xác minh danh tính của thực thể cuối và quyết định xem
thực thể này có được cấp chứng nhận khóa công khai hay không. RA phải tuân theo
các chính sách và các thủ tục được định nghĩa trong CP và CPS.
Chức năng đặc trưng của RA là thẩm tra yêu cầu cấp chứng nhận của thực
thể cuối bằng cách kiểm tra tên, ngày hiệu lực, các ràng buộc thích hợp, khóa công
khai, sự gia hạn chứng nhận và các thông tin liên quan. RA còn có thể có trách
nhiệm về việc thực hiện các kiểm tra chi tiết thực thể cuối đơn giản như việc chắc
chắn rằng tên của thực thể cuối là duy nhất trong phạm vi của PKI
Local Registration Authority (LRA) là đại diện của RA tại địa phương, thực
hiện các chức năng của RA tại khu vực quản lý của mình. Các chức năng của một
LRA đó là :
Xác nhận các thông tin về người đăng ký
Chấp thuận các yêu cầu đăng ký sử dụng
Gửi yêu cầu cấp mới tới CA
Gửi yêu cầu gia hạn tới CA
Gửi yêu cầu hủy bỏ chứng thư tới CA
Hỗ trợ tại chỗ cho người sử dụng
Chứng thư số là phần quan trọng để đảm bảo an toàn cho khóa công khai
tránh được các lỗ hổng an toàn như giả mạo hay sửa đổi.
Kho chứng thư: Kho lưu trữ chứng thư (CR) là nơi để chứa các thông tin và
trạng thái của các chứng thư số được phát hành bởi CA và cũng có thể chứa cả
danh sách thu hồi chứng thư số (CRL). Kho chứa còn lưu trữ các chứng thực chéo
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
của CA này được phát hành bởi CA khác, chứng nhận chéo của CA khác phát hành
21
bởi CA này. Kho chứa còn có nhiệm vụ chứa những biểu mẫu điện tử và các công
cụ cho phép tải về, công bố CP và CPS, cập nhật thông tin, hỏi và đáp (Q & A), …
Kho lưu trữ chứng thư số phải là một hệ thống tín nhiệm và an toàn.
Dịch vụ thư mục để tra cứu chứng thư: Là một dạng cấu trúc cây thư mục
dùng để lưu trữ các chứng thư số của toàn bộ người dùng trong hệ thống phục vụ tra
cứu, tìm kiếm chứng thư.
Danh sách hủy bỏ (Certificate Revocation List – CRL) danh sách hủy bỏ
CRL phục vụ việc kiểm tra tình trạng các chứng thư số bị hủy bỏ.
Thực thể cuối trong PKI có thể là con người, thiết bị, hay thậm chí là một
chương trình phần mềm nhưng thường là người sử dụng hệ thống. Thực thể cuối sẽ
thực hiện chức năng những mật mã như mã hóa, giải mã và kí số.
Dưới đây là một mô hình kiến trúc hệ thống PKI :
Hình 1.9. Mô hình kiến trúc hệ thống PKI
Trung tâm chứng thực CA đứng ra chịu trách nhiệm và đảm bảo sự tin cậy vào khóa
công khai cũng như danh tính của chủ sở hữu. Chứng thư số được ký bởi một trung tâm
chứng thực CA bằng khóa bí mật của CA. Chứng thư số do CA phát hành là để xác thực
danh tính của những người sử dụng và khóa công khai đi kèm, CA có trách nhiệm phát hành
quản lý, cung cấp các dịch vụ cần thiết trên những chứng thư này.
Các chức năng mở rộng của hệ thống PKI:
Hệ thống kiểm tra tình trạng chứng thư online (OCSP – Online Certificat
Status Protocol).
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hệ thống chứng thực nhãn thời gian (Time Stamp Authority)
22
Toàn vẹn
- Đảm bảo dữ liệu không bị thay đổi, nếu có thay đổi thì bị phát hiện
- Để đảm bảo tính toàn vẹn, một hệ thống phải có khả năng phát hiện những thay
đổi dữ liệu trái phép.
- Mục đích giúp cho người nhận dữ liệu xác minh được rằng dữ liệu không bị thay đổi
- Các kĩ thuật mật mã được sử dụng
- Thường có sự thỏa thuận về các thuật toán và khóa tích hợp giữa hai bên
- Dịch vụ PKI về toàn vẹn dữ liệu thỏa mãn lợi ích cho cả hai bên:
+ Qua đó thực hiện được thỏa thuận thuật toán và khóa
+ Hoàn toàn trong suốt với người dùng
Bảo mật
- Đảm bảo tính bí mật của dữ liệu: Không ai đọc được nội dung ngoại trừ
những người dùng định trước.
- Các dữ liệu nhạy cảm đều cần được bảo mật
- Tính năng bảo mật thường được yêu cầu khi:
+ Dữ liệu được lưu trên những phương tiện dễ bị đọc bởi người dùng không
được quyền (đĩa mềm, USB,…)
+ Dữ liệu được lưu trên thiết bị dễ bị rơi vào tay người khác
+ Được truyền trên mạng không bảo vệ được
- Để đảm bảo tính bí mật, các thuật toán thích hợp và khóa sẽ được thỏa thuận
- Dịch vụ PKI về tính bảo mật giúp cho quá trình này trở nên trong suốt với
các thực thể có liên quan
1.4.3.Các dịch vụ của PKI
- Đảm bảo cho người dùng rằng một thực thể nào đó đúng là đối tượng mà
họ đang cần kiểm định
- Có hai ngữ cảnh ứng dụng chính đó là:
Xác minh thực thể :
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hoạt động này tách khỏi các hoạt động khác của thực thể
23
Xác minh thực thể sinh ra một kết quả, sử dụng kết quả này cho các hoạt
động khác.
Xác minh nguồn gốc dữ liệu:
Xác minh dữ liệu được gắn kết với một thực thể nào đó
Hỗ trợ chống chối bỏ nguồn gốc dữ liệu
Xác minh thực thể bao gồm: Cục bộ và ở xa, nó có thể là xác minh một hay
nhiều nhân tố.
Xác minh thực thể trong môi trường cục bộ- tức là, xác minh tới thiết bị
vật lý của cá nhân thực thể mà không truyền tới các thiết bị khác trong mạng.
Xác thực thực thể tới một thiết bị, thực thể hay môi trường ở xa.
1.4.4.Kiến trúc của PKI hiện hành
Có một CA sẽ đem lại lợi ích là: Bất kỳ người sử dụng nào biết được khóa
công khai của CA có thể lấy được khóa công khai của những người sử dụng khác đã
được CA xác thực. Như vậy để lấy được khóa công khai của những người sử dụng
một cách tin cậy thì cần phải biết được khóa công khai của CA. Vấn đề nảy sinh là
làm cách nào để cung cấp cho những người sử dụng khóa công khai của CA theo
một phương thức an toàn? Đề giải quyết vấn đề này trung tâm chứng thực CA đã
đưa ra các mô hình hệ thống sau:
Hệ thống CA một cấp
Khóa công khai của CA được truyền an toàn tới những thực thể tham gia
trong hệ thống PKI. Điều này được thực hiện bằng cách sử dụng một chứng thư
được ký bởi CA đó, trường hợp này gọi là chứng thư tự ký (self-signed certificate).
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 1.10. Mô hình hệ thống CA một cấp
24
Hệ thống CA phân cấp
Trong hệ thống CA nhiều cấp, CA gốc (root CA) xác thực những CA cấp
dưới và có mỗi CA cấp dưới có thể phát hành các chứng thư trên các CA trực thuộc.
Hình 1.11. Mô hình hệ thống CA phân cấp
Ưu điểm:
- Có tính mềm dẻo:
Hệ thống có thể tăng về số lượng mà vẫn ổn định
Để thêm 1 CA vào hệ PKI, CA gốc chỉ việc thiết lập một quan hệ tin tưởng
với CA đó hoặc một trong các CA không phải là CA gốc hiện thời trong hệ thống
cấp phát cho CA mới.
- Dễ triển khai:
Vì là một chiều nên PKI phân cấp khá dễ dàng trong việc triển khai: Đường
dẫn cho thực thể CA gốc hoặc CA cấp phát có thể được xác định nhanh và dễ dàng
Đường dẫn cấp phát chứng thư ngắn
Đường dẫn dài nhất là chứng chỉ CA cho từng CA cộng với chứng chỉ cho từng
thực thể cuối. Cách thức tìm ra một nhánh xác thực là theo một hướng nhất định, không có
hiện tượng vòng lặp.
Nhược điểm :
- Có 1 điểm tin tưởng đơn là CA gốc điều khiển toàn bộ kiến trúc PKI - Phân cấp. Do đó, nếu CA gốc mà bị phá vỡ thì cả hệ thống PKI phân cấp đó sẽ
không còn giá trị tin tưởng
- Trong một phạm vi rộng, một CA duy nhất không thể đảm nhận được tất cả quá
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
trình xác thực
25
- Các quan hệ kinh doanh thương mại không phải bao giờ cũng có dạng phân cấp Hệ thống CA ngang cấp hay còn gọi là mô hình chứng thực chéo
Thay vì cấu trúc CA phân cấp, hai CA có thể xác thực lẫn nhau. Trong trường hợp
này bất kì ai có khóa công khai của một trong hai CA này có thể dựa vào đó mà xác thực
chứng thư số được phát hành bởi CA còn lại. Trường hợp này được gọi là hệ thống CA
ngang cấp.
Hình 1.12. Mô hình hệ thống CA ngang cấp
1.5. Kết chƣơng
Tóm lại, trong chương này, em trình bày một số lý thuyết tổng quan nhất về
một hệ thống cơ sở hạ tầng khoá công khai – PKI với 2 hệ mã khóa đối xứng và hệ
mã khóa bất đối xứng. Đồng thời cũng nêu được định nghĩa PKI và các thành phần
chính của PKI để có nền tảng xây dựng một hệ thống PKI cụ thể. Qua đó giúp
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
người sử dụng hiểu rõ hơn về việc vận hành hệ thống PKI trong thực tế.
26
CHƢƠNG 2. TÌM HIỂU KIẾN TRÚC VÀ THUẬT TOÁN TRONG
CRYPTOSYS PKI
2.1. Giới thiệu Cryptosys PKI
CryptoSys PKI [7] là một bộ thư viện dạng giao diện lập trình ứng dụng cho
hệ thống Windows cho phép người dùng tạo ra và đọc các thông điệp an toàn mật
mã được mã hóa hoặc được ký sử dụng mật mã khóa công khai RSA. Nó cung cấp độ mật mạnh sử dụng công nghệ không cấp bằng sáng chế.
PKI được định nghĩa trong PKIX-MAP là sự thiết lập các phần cứng, phần
mềm, con người, chính sách và các thủ tục cần thiết để tạo, quản lý, lưu trữ, phân
phối và hủy bỏ chứng chỉ khóa công khai dựa trên mật mã khóa công khai.
Bộ công cụ CryptoSysPKI cung cấp cho người lập trình và người phát triển
với hầu hết các thuật toán hữu ích bạn cần để tạo ra các phần mềm cho một hệ
thống PKI thực sự. CryptoSys PKI là một công cụ sắc nét. Nó giúp bạn quản lý
phần cứng, con người, chính sách, các thủ tục và các phần mềm bảo mật tổng thể
mà bạn yêu cầu.
Để bắt đầu, các bạn có thể sử dụng các ngôn ngữ lập trình:
Classic Visual Basic và VBA
C và C++
.NET như C# và VB.NET
2.1.1. Các hàm được sửa đổi trong các phiên bản
Ở đề tài này em chỉ đề cập đến các hàm sửa đổi trong phiên bản 3.0 trở lên.
a) Các hàm sửa đổi trong phiên bản 3.0 Giới thiệu máy sinh số ngẫu nhiên mới và an toàn hơn (RNG) dựa trên phương thức NIST SP800-90 [SP80090] và Ferguson và Schneier của "Fortuna" từ Practical
Crytography [FERG03]
Kết hợp thêm bảo mật bằng cách mã hóa chuỗi khóa RSA "nội bộ" để ngăn chặn các vi phạm an toàn bởi việc tiết lộ những chi tiết phụ. Thêm hàm RSA_KeyHashCode để cho phép so sánh các chuỗi khóa nội bộ.
Thêm thuật toán message digest SHA-384 và SHA-512 thành hàm HASH (băm)
b) Các hàm đƣợc sửa đổi trong phiên bản 3.2
Thêm các hàm mật mã khối chung mới với AES và Triple DES. SHA-224 để chọn lựa hàm băm cho message digest và thêm hàHASH_HexFromHex và
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
HMAC_HexFromHex. "shaXXXWithRSAEncryption"với SHA
27
Xác minh đối tượng dữ liệu được ký CMS sử dụng thuật toán băm SHA-
224/256/384/512
Thêm các tính năng để tạo và đọc đối tượng dữ liệu được đóng phong bì CMS sử dụng thuật toán mã hóa nội dung AES-128/192/256
Thêm các tính năng để tạo và đọc các đối tượng dữ liệu được đóng phòng bì CMS sử dụng thuật toán mã hóa khóa (RSA-KEM) (“RSA đơn”)
Thêm hàm đóng gói khóa mật mã khối CIPHER_KeyWrap và CIPHER_KeyUnwrap sử dụng AES-wrap và 3DES wrap.
Thêm các tùy chọn để lưu và đọc khóa bí mật được mã hóa với độ an toàn được cải thiện sử dụng AES-128/192/256 và SHA-224/256/384/512 khi sử dụng hàm
RSA_SaveEncPrivateKey và RSA_ReadEncPrivateKey.
Thêm tính năng để cho phép các dữ liệu chứng chỉ X.509 và dữ liệu khóa công khai và khóa bí mật RSA thành các hàm các X.509 và RSA bằng cách sử dụng một
chuỗi PEM-mã hóa thay vì một tập tin.
c) Một số hàm và chức năng đƣợc sửa đổi trong phiên bản 3.3 Biên dịch sử dụng VS2008 cho cả Win32 và X64
Thêm các hàm PEM_FileFromBinFile và PEM_FileToBinFile để giúp bạn có thể chuyển đổi giữa định dạng file nhị phân ASN.1 DER/BER và định dạng PEM.
Kết hợp thuật toán tính toán BigDigits nhanh làm cho việc tính toán các modul mũ RSA được nhanh hơn
Cải thiện việc thực thi hàm WIPE_File – nhanh hơn gấp 3 lần cho các file lớn.
Cải thiện hàm RSA_FromXMLString để cho phép hạn chế việc nhập khóa bí
mật RSA từ dữ liệu XML, chỉ bao gồm các trường
Kết quả là chuỗi khóa “internal” có thể được sử dụng để ký dữ liệu gốc, nhưng
không thể bị lưu trữ trong file khóa bí mật. Điều này hữu ích cho việc tái sản xuất các vector kiểm thử một cách chắc chắn.
d) Một số hàm và chức năng đƣợc sửa đổi trong phiên bản 3.4 Tất cả các thư viện DLL có thể thực thi giờ đây được ký số với mã xác nhận chứng chỉ.
Thêm chức năng để tìm platform (nền) của DLL, như platform của Win32 hoặc X64, phương thức General.lsWin64 và phương thức General.Plastform.
Gỡ bỏ được các chức năng RSA-KEM
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Cập nhật hướng dẫn với phương thức List of .NET và Cross-reference giữa Hàm và Phương thức .NET
28
e) Phiên bản 3.5
Thêm các X509_makeCRL chức năng để thực hiện một danh sách thu hồi
giấy chứng nhận X.509 cơ bản.
Thêm các X509_CheckCertInCRL chức năng để kiểm tra xem một chứng chỉ X.509 xác
định đã được thu hồi trong một danh sách thu hồi giấy chứng nhận X.509 (CRL)
Thêm các OCSP_MakeRequest chức năng để tạo ra một chứng chỉ, Online
Certification Status Protocol (OCSP) yêu cầu trực tuyến như là một chuỗi base64
TThêm các X509_ValidatePath chức năng để xác nhận một đường dẫn chứng
chỉ, hoặc là ở dạng một danh sách các tên tập tin chứng nhận X.509 hoặc trong một
PKCS7 "certs chỉ" tập tin chuỗi chứng chỉ (.p7b hoặc .p7c).
Cập nhật các X509_MakeCert chức năng cho phép tạo ra các chứng chỉ X.509
mới sử dụng PKCS # 10 Certificate Signing Request (CSR).
Cập nhật các X509_VerifyCert chức năng cũng để xác minh X.509 Certificate
Revocation List (CRL) và PKCS # 10 Certificate Signing Request (CSR) tài liệu.
Thêm tùy chọn hơn cho X509_QueryCert chức năng.
f) Phiên bản 3.10 Sau khi trải qua rất nhiều lần sửa đổi để hoàn thiện thì hiện nay phiên bản mới
nhất vào 27 tháng 3 năm 2015 đó là 3.10 phiên bản này có thêm các chức năng sau:
Thêm chức năng RSA_ReadAnyPrivateKey và RSA_ReadAnyPublickey
để đọc khóa công khai và khóa bí mật dưới bất kì định dạng nào được hỗ trợ trong
chuỗi khóa nội bộ.
Thêm chức năng chữ ký mới SIG_SignData và SIG_SignFile để tạo chữ ký
RSA trong một bước. Đầu ra là một chuỗi các base64 mã hóa thích hợp cho một
Thêm chức năng xác minh chữ ký mới SIG_VerifyData và SIG_VerifyFile để
xác minh chữ ký RSA ở dạng base64 mã hóa
Thêm chức năng mới RSA_KeyValue để trích xuất một giá trị khóa RSA
base64 mã hóa từ một chuỗi chìa khóa nội bộ. Đầu ra là một chuỗi base64 mã hóa
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
thích hợp cho một
29
Thêm tính năng để thiết lập các lĩnh vực phụ như dNSName, URI và
PAddresscho tên chủ đề thay thế trong giấy chứng nhận X.509 mới và ký kết các
yêu cầu chứng thực bằng cách sử dụng X509_MakeCert , X509_MakeCertSelf và
X509_CertRequest chức năng. Xem X.509 Extensions Parameter.
Loại bỏ các phương pháp sau đây NET với tham số boolean inputIsBase64 lỗi thời:
Cms.QueryEnvData Method (String, String, Boolean) Cms.QuerySigData Method (String, String, Boolean) Cms.GetSigDataDigest Method (String, String, Boolean) Cms.ReadSigDataToFile Method (String, String, Boolean) Cms.ReadSigDataToString Method (String, Boolean) Cms.VerifySigData Method (String, String, String, Boolean)
Code trong C# như sau: // Mã hóa trong chế độ CBC sử dụng chuỗi cơ số 16
2.1.2. Quy ước trong tài liệu này
keyhex = "737C791F25EAD0E04629254352F7DC6291E5CB26917ADA32"; ivhex = "B36B6BFB6231084E"; plain = "5468697320736F6D652073616D706520636F6E74656E742E0808080808080808" ; cipher = "d76fd1178fbd02f84231f5c1d2a2f74a4159482964f675248254223daf9af8e4"; s = Tdea.Encrypt(plain, keyhex, Mode.CBC, ivhex); Console.WriteLine("CT={0}",s); Console.WriteLine("OK={0}",cipher); Debug.Assert(String.Compare(s, cipher, true)==0, "Tdea.Encrypt{Hex,CBC} failed"); Đầu ra từ các ví dụ trên là Result-OK Tất cả các chức năng được gọi trực tiếp trong bộ công cụ CryptoSys PKI bắt
đầu với 3 hoặc 4 chữ cái viết hoa, tiếp theo là một gạch dưới “_’’ ví dụ :
nRet = RSA_ReadPublicKey(rsaReadPublicKey, nKeyLen, strKeyFile, 0) 2.2. Các thuật toán hỗ trợ trong Cryptosys PKI
2.2.1. Thuật toán ký số và mã hóa công khai
Mã hóa khóa công khai RSA (“rsaEncryption”)
Thuật toán ký số từ PKCS#1, cụ thể là:
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
"sha1WithRSAEncryption" (mặc định)
30
"md5WithRSAEncryption" "md2WithRSAEncryption" "sha224WithRSAEncryption" "sha256WithRSAEncryption" "sha384WithRSAEncryption" "sha512WithRSAEncryption"
Các thuật toán chữ ký ANSI X9.57 "dsaWithSha1" và khoá công khai DSA "DSAPublicKey" để xác nhận chứng chỉ X.509 và chỉ những đối tượng dữ liệu
được ký CMS (tuy nhiên các tham số DSS được thừa kế không được hỗ trợ).
2.2.2. Thuật toán mật mã khối đối xứng cho mã hóa nội dung
"des-EDE3-CBC" (mặc định)
"aes128-CBC"
"aes192-CBC"
"aes256-CBC
2.2.3. Thuật toán mã hóa khối cho việc đóng gói khóa
"aes128-Wrap" (default)
"aes192-Wrap"
"aes256-Wrap"
"cms3DESWrap"
2.2.4. Thuật toán băm Message digest
"sha1" or "sha-1" (mặc định)
"md5"
"md2"
"sha224"
"sha256"
"sha384"
"sha512 Việc giữ MD2 ở đây để có thể tái sản xuất các mẫu từ các giấy tờ từ phòng thí nghiệm RSA 1993 [PKCS-EX] và bởi vì chúng ta vẫn còn tìm thấy chứng chỉ X.509 cũ
sử dụng nó. Bạn được đề nghị sử dụng ít nhất SHA-1 trong các ứng dụng mới. 2.2.5. Thuật toán băm khóa HMAC
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Để tạo ra mã xác thực thông điệp HMAC với các hàm HMAC
31
"hmacWithSHA1"
"hmacWithSHA224"
"hmacWithSHA256"
"hmacWithSHA384"
"hmacWithSHA512"
"hmacWithMD5"
2.2.6. Các thuật toán mã hóa dựa trên mật khẩu
Các thuật toán này từ PKCS # 5 và PKCS # 12 có thể được sử dụng để tạo ra
các tệp tin khóa bí mật được mã hóa PKCS#8 bởi các hàm
RSA_SaveEncPrivateKey và RSA_MakeKeys:
"pbeWithSHAAnd3-KeyTripleDES-CBC" (default)
"pbeWithMD5AndDES-CBC"
"pbeWithMD2AndDES-CBC"
"pbeWithSHA1AndDES-CBC"
"pkcs5PBES2" với:
"des-EDE3-CBC" "aes128-CBC" "aes192-CBC" "aes256-CBC"
Thêm nữa, các thuật toán này có thể được đọc bởi hàm
RSA_ReadEncPrivateKey:
"pkcs5PBES2" with "desCBC"
"pkcs5PBES2" with "rc2CBC"
"pbeWithSHAAnd128BitRC2-CBC"
"pbeWithSHAAnd40BitRC2-CBC"
"pbeWithMD5AndRC2-CBC"
"pbeWithMD2AndRC2-CBC"
"pbeWithSHA1AndRC2-CBC"
2.2.7. Định dạng khóa RSA
Các định dạng được hỗ trợ cho các khóa RSA như PKCS#1 và PKCS#8
"RSAPublicKey (mặc định cho khóa công khai)
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
"PrivateKeyInfo" với "rsaEncryption"
32
"EncryptedPrivateKeyInfo" với "rsaEncryption" (mặc định cho các khóa bí mật)
Định dạng XML cho XKMS 2.0 cũng được hỗ trợ.
2.2.8. Các kiểu nội dung CMS
Kiểu nội dung EnvelopedData (CMS phiên bản 0) với EncryptedContentInfo
Kiểu nội dung SignedData (CMS phiên bản 1) với các thuộc tính ký tùy chọn như:
Các đối tượng CMS của kiểu SignedData thích hợp cho việc sử
dụng trong các thông điệp S/MIME “application/ pkcs7-mime”
Các đối tượng dữ liệu được ký CMS “chữ ký được tách rời”
thích hợp cho việc sử dụng trong các thông điệp S/MIME "multipart/signed".
Các thông điệp “cert-only” của SignedData giảm dần, chuỗi
chứng chỉ a.k.a. PKCS#7
Chỉ các đối tượng CMS với một kiểu nội dung bên trong id-data được hỗ trợ.
RecipientIdentifier phải trở thành issuerAndSerialNumber.
2.2.9. Chứng chỉ X509.
Bạn có thể tạo chứng chỉ CA tự ký và sử dụng chứng chỉ này để tạo các
chuỗi bên trong các chứng chỉ được ký.
Một file yêu cầu ký chứng chỉ (CSR) có thể được tạo để gửi tới CA mà bạn lựa chọn.
Hầu hết các tùy chọn thường được sử dụng cho chứng chỉ X509 phân biệt
các định danh được cung cấp.
TDanh sách hủy bỏ chứng chỉ (CRLs) không được hỗ trợ.
2.2.10. Các thuật toán không được hỗ trợ trong Cryptosys PKI
Diffie-Helman keys ("DHPublicKey")
Key Exchange Algorithm ("id-keyExchangeAlgorithm")
Các thuật toán từ [PKIXALG] hiện chưa được hỗ trợ, bao gồm:
Các khóa Elliptic Curve và chữ ký số (ECDSA), chúng bao gồm khá nhiều
thành phần lộn xộn, khó có thể hỗ trợ được chúng.
2.2.11. Các định dạng lưu trữ khóa
Khóa RSA được tạo ra và có thể sẽ được tìm thấy trong các tập tin mã hóa
nhị phân BER được mã hóa với:
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
RSAPublicKey theo PKCS#1 cho khóa công khai EncryptedPrivateKeyInfo theo PKCS#8 cho khóa bí mật.
33
Định dạng “PEM” base64 và “OpenSSL” cho các khóa công khai và định
dạng PrivateKeyInfo không được mã hóa cho khóa bí mật cũng được hỗ trợ
Các hành động mặc định để lưu các khóa riêng được mã hóa bằng mật khẩu. Lưu dưới dạng PrivateKeyInfo không được mã hóa có nguy cơ rủi ro cho chính bạn
Các khóa công khai có thể được tìm thấy trong chứng chỉ X509.
Các khóa bí mật thì có thể được tìm thấy từ tệp tin PFX (PKCS#12), tuy
nhiên chỉ khi nó được tạo bởi các thuật toán mà CryptoSysPKI hỗ trợ.
Các hàm đó phải được tìm thấy để có thể sử dụng khóa thường xuyên cho việc yêu cầu khóa được đọc trong những chuỗi nội bộ đầu tiên. Chúng tôi đã chọn để lưu trữ chúng trong nội bộ như là một chuỗi ký tự Base64. Sử dụng kiểu chuỗi
(string) Visual Basic hoặc kiểu ký tự (char) zero-terminated trong C làm cho đơn
giản hơn để giao tiếp với dữ liệu nhị phân.
Xử lý các chuỗi khóa nội bộ như “blobs” của dữ liệu. Theo phiên bản 3.0,
chúng được mã hóa với một khóa phiên
Hãy cẩn thận với chuỗi khóa bí mật nội bộ - sử dụng WIPE_Data để xóa
chúng khi không cần thiết.
Sử dụng hàm RSA_ToXMLString và RSA_FromXMLString để chuyển đổi qua lại giữa các định dạng XML và chuỗi bên trong của bộ công cụ. Hãy rất cẩn
thận với dữ liệu khóa bí mật XML không được mã hóa.
2.3. Chứng thƣ số
Chứng thư số là một dạng chứng thư điện tử do tổ chức cung cấp dịch vụ
chứng thực chữ ký số cấp. Nó là một tài liệu có chứa một công bố được chứng thực.
Trong lĩnh vực điện tử, chứng thư là một tài liệu chứa một tập hợp các thông tin có
chữ ký số của một người có thẩm quyền và người này được cộng đồng những người
sử dụng chứng thư công nhận và tin cậy.
2.3.1. Chứng thư khóa công khai
Khi người khởi tạo (người gửi) thông báo muốn sử dụng mã hóa công khai
để mã hóa một thông báo gửi cho người nhận, họ cần một bản sao khóa công khai
của người nhận. Khi 1 người bất kỳ muốn kiểm tra chữ ký số do người khác sinh ra,
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
người kiểm tra cần một bản sao khóa công khai của người ký. Người mã hóa thông
34
báo và người kiểm tra chữ ký số là những người sử dụng khóa công khai hay gọi
ngắn gọn là người dùng.
Khi khóa công khai được gửi đến cho một người dùng thì không cần thiết
phải giữ bí mật khóa công khai này. Tuy nhiên, người sử dụng khóa công khai phải
đảm bảo chắc chắn rằng khóa công khai được sử dụng đúng là của người nhận
thông báo chủ định hoặc người ký. Nếu một đối tượng có thể dùng một khóa công
khai khác thay thế cho khóa công khai hợp lệ, các nội dung của thông báo mã hóa
có thể bị lộ, đối tượng này có thể biết được nội dung của các thông báo và có thể
làm giả chữ ký số. Hay nói cách khác, các biện pháp bảo vệ sẽ bị lộ nếu như một
đối tượng có thể thay thế các khóa công khai không được chứng thực.
Hệ thống chứng thư khóa công khai làm việc như sau: CA phát hành chứng
thư cho những người nắm giữ cặp khóa công khai và khóa bí mật. Mỗi chứng thư
gồm có một khóa công khai và thông tin nhận dạng duy nhất của chủ thể của chứng
thư. Chủ thể của chứng thư có thể là một người, thiết bị, hoặc một thực thể khác có
nắm giữ khóa bí mật tương ứng, xem hình sau [8] :
Hình 2.1. Chứng thư khóa công khai đơn giản
Khi chủ thể của chứng thư là một người hoặc một kiểu thực thể hợp pháp nào
đó, thì chủ thể thường được gọi là một thuê bao của CA. Các chứng thư được CA
ký bằng khóa bí mật của CA.
Một khi các chứng thư này được thiết lập, nhiệm vụ của người sử dụng rất
đơn giản. Giả thiết rằng, một người sử dụng đã có khoá công khai của CA một cách
an toàn (ví dụ, thông qua phân phối khoá công khai thủ công) và anh ta tin cậy CA
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
phát hành các chứng thư hợp lệ. Nếu người dùng cần khoá công khai của một trong
35
các thuê bao của CA này, anh ta có thể thu được khoá công khai của thuê bao đó
bằng cách lấy từ bản sao chứng thư của thuê bao. Chứng thư của thuê bao có thể
được kiểm tra bằng cách kiểm tra chữ ký của CA có trên chứng thư. Người sử dụng
các chứng thư theo cách này được gọi là thành viên đáng tin cậy.
Kiểu hệ thống này tương đối đơn giản và kinh tế khi thiết lập trên diện rộng và
theo hình thức tự động, bởi vì một trong các đặc tính quan trọng của các chứng thư là:
Các chứng thư có thể được phát hành mà không cần phải bảo vệ thông qua các dịch vụ
an toàn truyền thông truyền thống để đảm báo bí mật, xác thực và tính toàn vẹn.
Khoá công khai không cần giữ bí mật, như vậy các chứng thư không phải là
bí mật. Hơn nữa, ở đây không đòi hỏi các yêu cầu về tính xác thực và toàn vẹn, do
các chứng thư tự bảo vệ (chữ ký số của CA có trong chứng thư đảm bảo tính xác
thực và toàn vẹn). Nếu một đối tượng truy nhập trái phép định làm giả một chứng
thư được phát hành cho một người sử dụng khoá công khai, anh ta sẽ bị người này
phát hiện vì có thể kiểm tra được chữ ký số CA. Chính vì vậy, các chứng thư khoá
công khai được phát hành theo các cách không an toàn, ví dụ như thông qua các máy
chủ, các hệ thống thư mục hoặc các giao thức truyền thông không an toàn.
Lợi ích cơ bản của một hệ thống chứng thư khoá công khai là một người sử
dụng có thể có được một số lượng lớn các khoá công khai của các thành viên khác
một cách tin cậy, xuất phát từ thông tin khoá công khai của một thành viên, đó
chính là khoá công khai của CA.
2.3.2. Khuôn dạng chứng thư X.509
Khuôn dạng chứng thư khóa công khai được chấp nhận rộng rãi nhất định
nghĩa trong chuẩn X.509 của ISO/IF/ITU.
a) Khuôn dạng chứng thƣ cơ bản Khuôn dạng chứng thư X.509 gồm có 3 phiên bản 1,2,3 được trình bày như sau:
Phiên bản (Version): Chỉ ra dạng phiên bản
Số hiệu (serial number): Số hiệu nhận dạng duy nhất của chứng thư này. Nó
được CA phát hành gán cho.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Tên thuật toán ký (Signature): Tên thuật toán ký được CA sử dụng để ký chứng thư
36
Người phát hành (Issuer): Tên theo chuẩn X.509 của CA phát hành
Thời gian hợp lệ (Validity): Ngày/giờ có hiệu lực và hết hạn của một chứng thư
Chủ thể ( Subject): Tên X.509 của đối tượng nắm giữ khóa bí mật (tương ứng
với khóa công khai được chứng thực)
Thông tin về khóa công khai của chủ thể (Subject Public key Information): gồm khóa
công khai của chủ thể cùng với một tên thuật toán sử dụng khóa công khai này.
Định danh duy nhất của người phát hành ( Issuer unique identifier): Là một chuỗi
bít tùy chọn, được sử dụng để chỉ rõ ràng là của CA phát hành, trong trường hợp cùng
một tên được gán cho các thực thể khác nhau trong cùng một thời gian.
Định danh duy nhất của chủ thể (Subject unique identifier): Là một chuỗi bit
tùy chọn, được sử dụng để chỉ ra rõ ràng của chủ thể, trong trường hợp cùng một
tên được gán cho các thực thể khác nhau trong cùng thời gian.
Hình 2.2. Khuôn dạng chứng thư số phiên bản 1 và 2 dạng X.509
b) Khuôn dạng chứng thƣ X.509 mở rộng ( phiên bản 3) Càng ngày các khuôn dạng chứng thư trong phiên bản 1,2 không đáp ứng
được tất cả các yêu cầu. Dưới đây là các lý do bổ sung thêm thông tin :
Giả thiết chủ thể của một chứng thư số bất kì có các chứng thư khác nhau với các
khóa công khai khác nhau (các khóa này được sử dụng cho các mục đích khác nhau)
và giả thiết rằng các cặp khóa cần được cập nhật định kỳ, do vậy cần phải có cách để
phân biệt các chứng thư khác nhau của đối tượng này một cách dễ dàng.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Chứng thư trong phiên bản 3 sau:
37
Hình 2.3. Phần mở rộng của khuôn dạng chứng thư số trong phiên bản 3 dạng
X.509
Mỗi trường mở rộng có một kiểu (cần được đăng ký). Giống với cách đăng ký
một thuật toán, kiểu của trường mở rộng được đăng ký bằng cách gán cho nó một tên
đối tượng. Về nguyên tắc, các kiểu của trường mở rộng được một người nào đó xác
định. Trong thực tế, để làm được điều này, các kiểu của trường mở rộng thông thường
phải được biết rộng rãi qua các thiết lập khác nhau, chính vì vậy các kiểu quan trọng
của trường mở rộng phải được chuẩn hoá. Tuy nhiên, các cộng đồng quan tâm có thể
xác định các kiểu của trường mở rộng để đáp ứng các nhu cầu riêng của họ.
Trong phiên bản 3, mỗi trường mở rộng chứa một giá trị tên đối tượng (gồm
kiểu trường, một chỉ báo thiết yếu và một giá trị). Kiểu của mục dữ liệu trong
trường con (ví dụ như chuỗi văn bản, ngày tháng hoặc cấu trúc dữ liệu phức tạp)
ngữ nghĩa liên quan đến giá trị này do kiểu của trường mở rộng chi phối. Điều này
có thể xảy ra như là kết quả của việc định nghĩa các chứng thư nhằm hỗ trợ cho các
nhu cầu của nhiều ứng dụng, hoặc là kết quả của việc đưa ra các trường mở rộng
mới thông qua việc di trú kỹ thuật.
Chỉ báo thiết yếu là một cờ, cờ này sẽ xuất hiện khi trường mở rộng là thiết
yếu hoặc không thiết yếu. Nếu cờ chỉ báo là “không thiết yếu” thì một hệ thống
sử dụng chứng thư được phép bỏ qua trường mở rộng nếu nó không chấp nhận kiểu
của trường. Nếu cờ chỉ báo là “thiết yếu” thì một hệ thống sẽ không an toàn nếu sử
dụng bất kỳ phần nào của chứng thư, trừ khi hệ thống nàychấp nhận kiểu của trường
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
mở rộng và thiết lập chức năng liên quan.
38
Khái niệm “thiết yếu” thường xuyên bị hiểu sai. Một trường mở rộng có thể
quan trọng với người sử dụng chứng thư nhưng không nhất thiết phải chỉ báo thiết
yếu. Một hệ thống sử dụng chứng thư có thể yêu cầu các trường mở rộng nào đó
xuất hiện trong một chứng thư hoặc thông tin nào đó phải có trong các trường của
chứng thư trước khi chứng thư được chấp nhận. Một yêu cầu như vậy không liên
quan đến tính thiết yếu, hệ thống sử dụng chứng thư có thể yêu cầu sự xuất hiện
của các trường mở rộng không thiết yếu chẳng khác gì với yêu cầu sự xuất hiện
của các trường mở rộng thiết yếu nào đó.Các trường mở rộng không thiết yếu giúp
cho việc sử dụng các chứng thư thông qua các ứng dụng khác nhau trở nên dễ dàng
hơn và giúp cho sự di trú trở nên đơn giản hơn thông qua việc bổ sung dần dần các
kiểu mới cho trường mở rộng. Các trường mở rộng thiết yếu dẫn đến các vấn đề về
khả năng liên hoạt động và cần phải tránh, trừ khi giải quyết các mối quan tâm về
an toàn. Thông thường khi sử dụng, đa số các trường mở rộng được chỉ báo không
thiết yếu.
c) Các trƣờng mở rộng chuẩn của chứng thƣ Một tập hợp các trường mở rộng chuẩn (dành cho chứng thư phiên bản 3 của
X.509) được một số tổ chức phát triển như sau:[8]
1. Thông tin về khóa và chính sách
2. Các thuộc tính của chủ thể và người phát hành
3. Các ràng buộc đối với đường dẫn chứng thực
4. Các trường mở rộng liên quan đến danh sách các chứng thư bị thu hồi (CRL)
Các trường mở rộng nhóm (1) chuyển thêm các thông tin về các khoá của
chủ thể và người phát hành.
2.4. Cài đặt và sử dụng thƣ viện CryptoSysPKI
2.4.1. Cài đặt
Để cài đặt trên một hệ thống thử nghiệm hoặc hệ thống phát triển, sử dụng
chương trình setup.exe được cung cấp và phân phối. Lõi này sẽ cài đặt Win32 DLL
trong hệ thống cửa sổ chính của bạn và tạo ra các bản sao của tất cả các file cần
thiết khác, bao gồm cả hướng dẫn, trong thư mục C: \ Program Files \
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
CryptoSysPKI.
39
Hình 2.4. Thư viện Cryptosys PKI
Để phân phối một phiên bản giấy phép cho người dùng cuối cùng, xin vui lòng
đọc các hướng dẫn trong file distrib.txt. Không được sử dụng chương trình
setup.exe để phân phối cho người dùng cuối.
Sử dụng chương trình setup.exe để cài đặt. Để gỡ bỏ cài đặt, sử dụng Start>
Settings> Control Panel> Add / Remove Programs> CryptoSys PKI Toolkit để loại bỏ các ứng dụng và tất cả các tập tin liên quan.
Thực thi lõi DLL: Các tập tin thực thi cốt lõi là diCrPKI.dll mà là một DLL
(thư viện động) Win32. Tập tin này phải tồn tại trong đường dẫn tìm kiếm trên hệ
thống thư viện của người dùng cho tất cả các giao diện ngôn ngữ lập trình. Các
diCrPKI.dll thực thi không được đăng ký với regsvr32. Các giao diện VB6/VBA và
C / C + + truy cập vào lõi thực thi trực tiếp.
Trình đóng gói DLL: Một sự thực thi trình đóng gói được cung cấp để ngôn
ngữ lập trình .NET có thể truy cập các lõi thực thi. Điều này đòi hỏi cốt lõi Win32
DLL tồn tại trong đường dẫn tìm kiếm thư viện. Các trình đóng gói DLL giống
nhau có thể được sử dụng với tất cả các phiên bản.
dirCrSysPKINet.dll là một lớp thư viện lớp .NET gồm nhiều lớp
2.4.2. Sử dụng với C và C++
Để sử dụng với một chương trình C hoặc C++, bao gồm các tập tin diCrPKI.h với mã nguồn và liên kết của bạn với các thư viện diCrPKI.lib. Chỉ những yêu cầu non-ANSI C cái mà trình biên dịch của bạn hỗ trợ quy ước gọi the_stdcall để gọi hàm Win32 API từ một DLL Win32. Các mẫu chương trình C PKI_Examples.c được cung cấp và phân phối thực hiện một loạt các bài kiểm thử bằng cách sử dụng các vector kiểm tra. Có những ví dụ được lấy cho từng hàm. 2.4.3. Sử dụng với .NET: C# và VB.NET
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
1. Co py thư viện dotnet diCrSysPKINet vào một thư mục thuận tiện C:\Program Files\CryptoSysPKI\DotNet)
40
2. Trong ứng dụng của bạn, thêm một tham chiếu tới thư viện
=> Project > Add Reference
tab.NET, chọn Browse để tìm và chọn file thư viện
=> Trong diCrSysPKINet.dll
=> Chọn OK và wizard sẽ thêm tham chiếu của lớp thư viện vào project của bạn.
3. Với C#, thêm dòng “using CrytoSysPKI;”, Với VB.NET thêm “Imports
CryptoSysPKI” vào chương trình của bạn.
2.4.4. Phát hành an toàn
1. Các hàm và phương thức trong CryptoSys PKI cung cấp mật mã nguyên thủy
dự định được sử dụng như là một phần của một ứng dụng có liên quan đến an toàn. Đó là do bạn lập trình để đảm bảo rằng khóa, mật khẩu và các dữ liệu cá nhân
khác được giữ bí mật, và để đảm bảo các chính sách bảo mật thích hợp và các thủ
tục được thực hiện bởi người dùng cuối.
2. CryptoSys PKI là một thư viện liên kết động (DLL) 32-bit cung cấp dịch vụ hóa để ứng dụng chạy trên hệ điều hành Microsoft Windows. Trên Windows, nó
được thiết kế để hoạt động và hỗ trợ đa luồng. Trong các điều khoản FIPS 140-2,
CryptoSys PKI là một module độc lập đa chip, bao gồm các file diCrPKI.dll. Nó
được thiết kế để đáp ứng bảo mật mức 1 của FIPS 140-2. Ranh giới mật mã cho
CryptoSys PKI được định nghĩa như sự đính kèm của máy tính mà trên đó các
module được cài đặt mật mã. Là một sản phẩm phần mềm tinh khiết, CryptoSys
PKI không cung cấp bảo mật vật lý cho chính nó. Các máy tính chính nó phải được
bảo mật vật lý tương ứng.
3. Các hàm mà cho thấy rằng chúng tạo ra các tập tin sẽ ghi đè lên bất kỳ tập tin
hiện có cùng tên mà không có cảnh báo.
4. Không có tập tin nào khác, tạm thời hoặc vĩnh viễn, được tạo ra bởi bộ công
cụ này.
5. Không có hàm giao dịch nào trong bộ công cụ DLL. Các bộ công cụ sẽ không bao giờ thử cố gắng để "quay về" (dial home) hay thực hiện bất kỳ nỗ lực nào để tạo ra một khe thông tin liên lạc.
6. Phiên bản phát triển của bộ công cụ làm cho không thể cố gắng để đọc
hoặc viết bất cứ thứ gì tới cơ quan đăng ký của Windows theo các hoạt động bình
thường. Tuy nhiên, các thiết lập đăng ký tùy chọn có thể được thực hiện và, nếu có,
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
sẽ được đọc và thực hiện trên module, nếu một lỗi nghiêm trọng xảy ra.
41
7. Phiên bản dùng thử tạo ra và cập nhật các mục đăng ký trong HKCU \
Software \ DI Management và đọc các mục được tạo ra bởi những tiện ích thiết lập
trong HKLM \ Software \ DI Management. Đừng cố gắng thay đổi những mục này.
8. Phiên bản phát triển được phân phối đến người dùng cuối không yêu
cầu bất kỳ mục đăng ký nào trên máy tính của người dùng.
9. Ngoại trừ cho các hàm X509_CertIsValidNow, không có hàm nào khác
kiểm tra được việc thực hiện thời hạn hiệu lực của chứng chỉ X.509 trong bộ công cụ này.
10. Xin hãy đọc phần “An toàn khóa” dưới đây:
2.4.5. An toàn khóa
Các mẫu trong bộ công cụ này cho phép bạn làm nhiều hoạt động mức thấp với các khóa RSA. Thiết kế ban đầu chỉ cho phép khóa bí mật được lưu như một tập
tin trong định dạng mã hóa. Để đáp ứng nhiều yêu cầu từ người dùng, đã có thêm
nhiều chức năng cho phép bạn nhập và lưu khóa bí mật trong một nhiều định dạng
khác nhau mà không được mã hóa, bao gồm XML và OpenSSL tương thích với các
định dạng PEM.
Sử dụng các hàm này trong các bài test của bạn bằng mọi phương tiện, nhưng
nếu bạn đang sử dụng bộ công cụ này để làm cho một ứng dụng được sử dụng bởi
người dùng cuối ít kinh nghiệm, hãy làm theo các hướng dẫn sau đây:
Không cho người dùng của bạn có khả năng lưu một khóa bí mật không
được mã hóa. Chỉ cần nói không.
Đừng bao giờ lưu sự chế tạo khóa bí mật vào đĩa ở dạng không được mã hóa. Điều đó cũng bao gồm các định dạng “nội bộ” (internal). Hãy nhớ rằng không
bao giờ, ngay cả khi thử nghiệm.
Sử dụng hàm WIPE_Data để xóa chuỗi khóa bí mật nội bộ ngay sau khi
bạn đã hoàn tất việc sử dụng nó.
Với mật khẩu cũng sử dụng như trên
Nếu bạn có thể lưu dữ liệu bí mật như là một file trung gian, sử dụng
WIPE_File để xóa nó ngay lập tức sau đó.
Không bao giờ in ra chuỗi đại diện “internal” tương ứng của việc chế tạo
một khóa bí mật.
Không bao giờ mã cứng khóa bí mật và mật khẩu.
Thực thi một chính sách để người dùng buộc phải sử dụng mật khẩu mạnh
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
cho các khóa riêng.
42
Và xây dựng một hàm để phát hiện khi nào người sử dụng bị mắc kẹt như
lưu ý Post-It trên màn hình của họ với các mật khẩu khóa riêng trên đó.
2.4.6. Các tùy chọn an toàn cho khóa bí mật được mã hóa
Khóa bí mật được lưu trữ mặc định trong định dạng PKCS-8, được bảo vệ
bằng password. Thuật toán mặc định là “pbeWithSHAAnd3-KeyTripleDES-CBC”
từ PKCS-5
Xếp hạng gần đúng cho các giải thuật mã hóa ngày càng tăng tính bảo mật:
1. "pbeWithMD2AndDES-CBC" 2. "pbeWithMD5AndDES-CBC" 3. "pbeWithSHA1AndDES-CBC" 4. ...big gap!... 5. "pbeWithSHAAnd3-KeyTripleDES-CBC" (mặc định) 6. "pkcs5PBES2" + "des-EDE3-CBC" 7. "pkcs5PBES2" + "AES128-CBC" 8. "pkcs5PBES2" + "AES192-CBC" 9. "pkcs5PBES2" + "AES256-CBC"
Thuật toán ít an toàn pbeWithxxxAndDES-CBC sử dụng DES chỉ cung cấp
trong trường hợp bạn cần sự tương thích với hệ thống cũ hơn. Không nên sử dụng
chúng nếu bạn thực sự không cần.
Giải thuật PBES2 sử dụng hàm điều chế khóa PBKDF2 PKCS-5 với
hmacWithSHA1 như là một hàm mặc định psuedo-random (PRF). Để sử dụng hàm
message digest mạnh hơn từ các họ SHA-2 trong PRF, thêm một trong những lựa
chọn sau:
1. PKI_HASH_SHA224 cho hmacWithSHA224 2. PKI_HASH_SHA256 cho hmacWithSHA256 3. PKI_HASH_SHA384 cho hmacWithSHA384 4. PKI_HASH_SHA512 cho hmacWithSHA512
Hãy nhớ rằng an toàn của tất cả các giải thuật được giới hạn bởi độ mạnh của mật khẩu được sử dụng. Ngoài ra, các hệ thống khác có thể không nhất thiết hỗ trợ
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
tất cả các lựa chọn cung cấp ở đây.
43
2.4.7. Sinh số ngẫu nhiên ( Random Number Generator)
a) Sử dụng một tập tin mầm ( seed file) Sử dụng chức năng RNG_Initialize để xác định một tập tin khởi đầu với
một số lượng tối thiểu của entropy để khởi tạo các PRNG. Tập tin này được cập
nhật tự động khi được sử dụng. Ta có thể gọi tùy chọn RNG_UpdateSeedFile theo
thời gian trong ứng dụng của ta, và sử dụng RNG_MakeSeedFile để tạo ra tập tin
mầm mới. Sự an toàn của phương thức này cũng tốt như các an toàn mà ta có trên
các tập tin mầm. Nếu kẻ tấn công điều khiển các tập tin mầm, nó không có nghĩa là
họ điều khiển được dữ liệu đầu ra ngẫu nhiên, nó chỉ có nghĩa là sử dụng một tập tin
mầm không được tăng cường tính an toàn mạnh của PRNG này.
b). Yêu cầu ngƣời dùng nhập vào tổ hợp phím ngẫu nhiên Sử dụng hàm RNG_BytesWithPrompt khi tạo dữ liệu ngẫu nhiên để buộc
người sử dụng tạo entropy bằng cách sử dụng tổ hợp phím ngẫu nhiên và di chuyển
chuột. RNG_MakeSeedFile còn sử dụng như một dấu nhắc. Điều này cho ta biết
rằng việc di chuyển chuột và tổ hợp phím trên bàn phím của người dùng là an toàn.
c). Thêm entropy của riêng ta Nếu ta có mã nguồn entropy độc lập của riêng ta, thêm "additional input" vào
tiến trình RNG như một "mầm" khi sử dụng hàm RNG_Bytes. Ta có thể thêm đầu
vào với 128 bit, khi đó đầu ra từ RNG sẽ có ít nhất 128 bit an toàn mạnh.
Người dùng cung cấp entropy (nó giống như một mầm) được bổ sung thêm
“additional input” vào tiến trình sinh. Nó không ảnh hưởng đến nhóm tích lũy và
không thể được sử dụng bởi những kẻ tấn công để điều khiển đầu ra.
Làm thế nào để kẻ tấn công biết ít về user-supplied entropy. Sử dụng thời gian
hiện thời là không thể. Nếu ta có thể cung cấp 32 byte (các byte phải được chọn
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
ngẫu nhiên từ 0 đến 255) dữ liệu trong đó kẻ tấn công không biết gì và sau này không thể phát hiện ra, sau đó ta thêm 128 bit an toàn mạnh. Dưới đây là một ví dụ trong C# về cách ta có thể sử dụng để tạo ra entropy user-supplied RNG khi tạo ra một cặp khóa RSA mới. (Mật khẩu phải được nhập một cách riêng biệt, không mã cứng như thế này!) int r; byte[ ] seed; int nbits = 512; string publicKeyFile = @"C:\Test\mykeypub.bin"; string privateKeyFile = @"C:\Test\mykeypri.bin";
44
Rsa.PublicExponent.Exp_EQ_65537, 1000, sbPassword.ToString(), Rsa.PbeOptions.Default, false, seed);
StringBuilder sbPassword = new StringBuilder("password"); // 1. sinh một vài entropy user-derived sử dụng bàn phím seed = Rng.BytesWithPrompt(64,"",Rng.Strength.Default); Debug.Assert(seed.Length > 0, "Failed to create a seed"); // 2. tạo file chứa cặp khóa RSA mới, thêm mầm này vào trong tiến trinh r = Rsa.MakeKeys(publicKeyFile, privateKeyFile, nbits, Console.WriteLine("Rsa.MakeKeys returns {0} (expected 0)", r); 2.4.8. Xác định những định danh riêng biệt
Để xác định một định danh riêng biệt cho một chứng chỉ X.509 hoặc yêu cầu
chứng chỉ. Ta sử dụng một chuỗi các loại thuộc tính type=value, các cặp cách nhau
bằng dấu chấm phẩy (";"). Định dạng chung là:
Type=value( ; type=value)
CN commonName (tên thông dụng) O organizationName (tên tổ chức)
OU organizationalUnit (đơn vị tổ chức)
C countryName (tên nước)
ST or S stateOrProvinceName (tên bang)
L localityName (tên khu vực)
E emailAddress (deprecated) (địa chỉ thư điện tử)
SN surname [Added in v3.3...] (tên họ)
G givenName (tên được đặt)
T title (tiêu đề) DC domainComponent (thành phần miền)
Các loại được hỗ trợ là:
Các ví dụ về sự xác định định danh riêng biệt:
"C=US;O=Example Organisation;CN=Test User 1" "CN=MyUser ; O=My Org ; OU=Unit ; C=AU ; L=My Town ; S=NSW ; E=myuser@my.org"
Giá trị thuộc tính có thể chứa bất kỳ ký tự hợp lệ nào ngoại trừ dấu chấm phẩy
";" (ký tự ASCII 0x3B, Unicode U+003 B) và dấu bằng "=" (ký tự ASCII 0x3D,
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Unicode U+003 D).
45
Mã hóa mặc định: Các mã hóa mặc định là IA5String cho các thuộc tính
emailAddress và PrintableString cho tất cả các thuộc tính khác. Nếu chuỗi đầu vào
bao gồm các ký tự không hợp lệ cho các mã hóa, thì sau đó T61String (TeletexString) sẽ được sử dụng. Chứng chỉ được tạo ra với T61String có thể không
được chấp nhận là hợp lệ bởi một số cấu hình. Để mã hóa UTF-8, xác định cờ
PKI_X509_UTF8.
2.4.9. Tham số mở rộng X509
Tham số strExtensions có thể được dùng để đặt các chi tiết cao cấp hơn trong chứng chỉ được tạo mới thực hiện bằng cách sử dụng hàm X509_MakeCert và X509_MakeCertSelf. Nó là một tham số tùy chọn. Nếu không trống, nó phải có một địa chỉ email RFC822 hoặc thêm một phần mở rộng subjectAltName đơn một hoặc
nhiều thuộc tính type=value cách nhau bằng dấu chấm phẩy (;). Thuộc tính hợp lệ
của các cặp giá trị là:
rfc822Name=string; để thiết lập địa chỉ e-mail trong phần mở rộng
subjectAltName, ví dụ: rfc822Name=myname@testorg.com.
serialNumber=hex-digits; để ghi đè lên số serial thiết lập bởi nCertNum với
một số nguyên lớn hơn và không giới hạn, trong dạng cơ số 16, ví dụ
serialNumber=12deadbeefcafe0123. Nếu chữ số đầu tiên là lớn hơn 7, nó sẽ đặt
trước bởi một số “0” để đảm bảo số nguyên này được lưu giữ như là một giá trị rõ ràng.
subjectKeyIdentifier=hex-digits; Để thiết lập phần mở rộng subjectAltName
với một octet nhị phân được xác định trong dạng cơ số 16, ví dụ
subjectKeyIdentifier=fedcba9876543210.
notAfter=iso-time-string; Để ghi đè lên thời hạn hiệu lực thiết lập bởi
YearsValid với ngày và giờ cụ thể theo chuẩn ISO, ví dụ: notAfter = 2020/12/31 hoặc notAfter = 2.020-12-31T14: 03:59. Nếu không đặt thời gian, nó sẽ cho giá trị mặc định là 23:59:59.
notBefore=iso-time-string; Để ghi đè lên thời gian bắt đầu mặc định một phút trước một ngày giờ cụ thể theo chuẩn ISO, ví dụ: notBefore = 2008/12/31. Nếu không có thời gian nó sẽ mặc định là 00:00:01.
Một số ví dụ về chuỗi đầu vào hợp lệ cho tham số strExtensions:
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
"AliceRSA@example.com" "rfc822name=AliceRSA@example.com"
46
"serialNumber=46346BC7800056;subjectKeyIdentifier=77D2B4D1B74C8A8AA3 CE" "rfc822Name=me@here.com;notAfter=2020-12-31T12:00:59" "rfc822Name=AliceRSA@example.com;notBefore=1999-09- 19T01:08:47;notAfter=2039-12-31"
2.4.10. Danh sách một số hàm trong CryptoSysPKI
1. Hàm CMS
CMS_MakeEnvData - Tạo một đối tượng dữ liệu được đóng phong bì mã hóa bởi CMS cho một hoặc nhiều người nhận bằng cách sử dụng chứng chỉ X.509 của họ.
CMS_MakeSigData - Tạo một đối tượng dữ liệu được ký CMS sử dụng
khóa riêng của người gửi.
CMS_MakeSigDataFromString - sử dụng dữ liệu trực tiếp từ một
chuỗi thay vì một tập tin.
CMS_MakeSigDataFromSigValue - sử dụng một giá trị chữ ký được
tính toán trước.
CMS_MakeDetachedSig - Tạo một đối tượng dữ liệu ký CMS "detached signature" (chữ ký độc lập) từ message digest của nội dung.
CMS_ReadSigData - Đọc nội dung từ một file đối tượng dữ liệu ký
CMS tập tin.
CMS_ReadSigDataToString - ghi nội dung dữ liệu vào một chuỗi thay
vì một tập tin.
CMS_GetSigDataDigest - Xuất message digest từ một tập tin đối tượng
dữ liệu ký CMS và xác minh chữ ký.
CMS_VerifySigData – kiểm tra các chữ ký và nội dung của một tập tin
đối tượng dữ liệu ký CMS.
CMS_QuerySigData - Các câu hỏi cho một tập tin đối tượng dữ liệu ký
CMS về các thông tin được lựa chọn.
2. Các hàm khóa công khai RSA
RSA_MakeKeys - Tạo ra một cặp khóa RSA và lưu như một tập tin
quan trọng nào và tập tin EncryptedPrivateKeyInfo PKCS-8.
RSA_ReadEncPrivateKey - Đọc chuỗi khóa bí mật từ một tập tin
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
EncryptedPrivateKeyInfo PKCS-8.
47
RSA_ReadPrivateKeyInfo - Đọc chuỗi khóa riêng từ một tập tin
PrivateKeyInfo (không được mã hóa).
RSA_SaveEncPrivateKey - Lưu một chuỗi khóa bí mật vào một tập tin
EncryptedPrivateKeyInfo PKCS-8.
RSA_SavePrivateKeyInfo - Lưu một chuỗi khóa bí mật vào một tập tin
PrivateKeyInfo PKCS-8.
RSA_GetPrivateKeyFromPFX - Xuất một khoá riêng từ
PKCSShroudedKeybag PKCS-12.
RSA_ReadPublicKey - Đọc chuỗi khóa công khai từ một tập tin
RSAPublicKey PKCS-1.
RSA_SavePublicKey - Lưu một khoá công khai trong một tập tin
RSAPublicKey PKCS-1.
RSA_GetPublicKeyFromCert – Xuất một khóa công khai từ một giấy
chứng nhận X.509.
RSA_KeyBits - Trả về độ dài của khoá, theo bit cho chuỗi khóa công
khai hoặc bí mật.
RSA_KeyBytes - Trả về độ dài của khóa theo dạng byte cho chuỗi khóa
công khai và bí mật.
RSA_KeyHashCode - Trả về một mã băm của một chuỗi khóa công
khai hay bí mật.
RSA_KeyMatch – xác minh rằng một cặp chuỗi khóa công khai và bí
mật được so khớp.
3. Hàm RSA gốc
RSA_RawPublic - chuyển đổi dữ liệu gốc bằng cách sử dụng khóa
công khai RSA.
RSA_RawPrivate – chuyển đổi dữ liệu gốc bằng cách sử dụng một khóa
riêng RSA.
RSA_EncodeMsg - Tạo ra một khối tin được mã hóa eme hoặc EMSA
mã hóa khối tin theo PKCS # 1.
4. Hàm chứng chỉ X509
X509_MakeCert - Tạo chứng chỉ X.509.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
X509_MakeCertSelf - Tạo một chứng chỉ X.509 tự ký.
48
X509_CertRequest - Tạo ra một yêu cầu ký chứng chỉ PKCS-10 (CSR).
X509_VerifyCert – Kiểm tra một chứng chỉ X.509 được ký bởi công ty
phát hành của nó.
X509_CertThumb - Tính toán message digest của một chứng chỉ X.509.
X509_CertIsValidNow – kiểm tra chứng chỉ X.509 hiện tại có hợp lệ
hay không.
X509_CertExpiresOn - Trả về chuỗi chứa ngày tháng và thời gian
chứng chỉ hết hạn.
X509_CertSubjectName - Xuất ra tên của chủ thể từ chứng chỉ X509.
X509_QueryCert – Truy vấn một file chứng chỉ X.509 cho các thông
tin được lựa chọn.
X509_ReadStringFromFile - Tạo ra một chuỗi Base64 của file chứng
chỉ X.509 .
X509_SaveFileFromString - Tạo ra một file chứng chỉ X509 mới từ
một chuỗi Base64.
5. Hàm PFX
PFX_MakeFile - Tạo ra một file PFX đơn giản (PKCS-12) từ chứng chỉ
X509 và (tùy chọn) file khóa riêng đã mã hóa.
PFX_VerifySig – Kiểm tra chữ ký một file PFX (PKCS-12).
6. Các hàm mật mã khối
CIPHER_Bytes - Mã hóa / giải mã một mảng các byte bằng cách sử
dụng thuật toán và chế đọ mã hóa khối.
CIPHER_File - Mã hóa / giải mã một tập tin bằng cách sử dụng thuật
toán và chế độ mã hóa khối.
CIPHER_Hex - Mã hóa / giải mã một chuỗi cơ số 16 bằng cách sử dụng
thuật toán và chế độ mã hóa khối.
CIPHER_KeyWrap – Đóng gói một khóa mã hóa nội dung với một
khóa mã hóa khóa.
CIPHER_KeyUnwrap – Mở gói một khóa mã hóa nội dung với một
khóa mã hóa khóa.
7. Các hàm băm Message Digest
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
HASH_Bytes - Tạo ra một digest băm mật mã ở định dạng byte từ dữ liệu byte
49
HASH_File - Tạo ra một digest băm mật mã ở định dạng byte từ một tập tin.
8. Các hàm HMAC
HMAC_Bytes - Tạo ra một HMAC keyed-hash ở định dạng byte từ dữ
liệu byte.
HMAC_HexFromBytes - Tạo ra một HMAC keyed-hash trong định
dạng cơ số 16 từ dữ liệu byte.
HMAC_HexFromHex - Tạo ra một HMAC keyed-hash trong định dạng
cơ số 16 từ dữ liệu được mã hoá dạng cơ số 16.
9. Các hàm chuyển đổi mã hóa
CNV_B64StrFromBytes - mã hóa dữ liệu byte vào một chuỗi mã hóa Base64.
CNV_BytesFromB64Str - giải mã một chuỗi mã hóa Base64 thành byte.
CNV_B64Filter - Loại bỏ các ký tự không phải base64 từ một chuỗi.
CNV_HexStrFromBytes - Mã hóa dữ liệu byte vào chuỗi thập cơ số 16.
CNV_BytesFromHexStr - giải mã một chuỗi cơ số 16 thành các byte.
10. Các hàm chuyển đổi tập tin nhị phân và PEM
PEM_FileFromBinFile - Chuyển đổi một tập tin nhị phân vào một tập tin PEM.
PEM_FileToBinFile - Chuyển đổi các nội dung của một tập tin PEM
vào một tập tin nhị phân.
11. Các hàm sinh số ngẫu nhiên
RNG_Bytes - Tạo ra một tập hợp ngẫu nhiên của dữ liệu byte.
RNG_BytesWithPrompt - như trên với một dấu nhắc để nhập tổ hợp
phím ngẫu nhiên.
RNG_Number - Tạo ra một số ngẫu nhiên trong một dải nhất định.
RNG_Initialize - khởi tạo các RNG từ một tập tin mầm.
2.5. Các hoạt động chính trong hệ thống PKI
Các hoạt động cơ bản cần phải thực hiện trong một hệ thống PKI có thể tóm
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
tắt trong mô hình sau:
50
Hình 2.5. Tóm tắt quá trình hoạt động cơ bản trong hệ thống PKI
2.5.1. Giai đoạn khởi tạo chứng chỉ
Hình 2.6. Giai đoạn khởi tạo
Trước khi các thực thể có thể tham gia vào các dịch vụ, chúng cần được khởi
tạo. Việc khởi tạo bao gồm:
- Đăng ký thực thể cuối
- Sinh cặp khóa
- Tạo chứng thư và phân phối khóa – chứng thư
- Phổ biến chứng thư và sao lưu khóa nếu được áp dụng
Quá trình đăng ký có thể có nhiều kịch bản khác nhau. Là quá trình trong đó
định danh của thực thể được thiết lập và kiểm tra. Mức độ kiểm tra tùy thuộc vào
chính sách chứng thư.
Quá trình sinh cặp khóa:
- Tức là quá trình sinh cặp khóa bí mật – công khai
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
- Có thể được sinh trước quá trình đăng ký hoặc trong trả lời trực tiếp cho quá
51
trình đăng ký thực thể cuối
- Trong PKI toàn diện, các khóa có thể được sinh tại thực thể cuối, trong RA,
hoặc trong CA.
Các nhân tố có thể ảnh hưởng đến việc chọn vị trí sinh cặp khóa bao gồm:
khả năng, hiệu suất, tính đảm bảo, phân nhánh pháp lý và cách sử dụng khóa định
sẵn. Vị trí sinh cặp khóa là quan trọng và trong tất cả các trường hợp thì người sử
dụng phải có trách nhiệm lưu trữ và đảm bảo bí mật cho khóa riêng của mình.
Trường hợp cặp khóa do CA tạo ra thì CA phải có cơ chế, phương tiện đặc
biệt và trách nhiệm đảm bảo bí mật tuyệt đối khóa riêng của người dùng.
Tạo chứng thư và phân phối khóa – chứng thư:
- Bất kể khóa sinh tại vị trí nào, trách nhiệm tạo chứng thư thuộc về CA được
cấp phép.
- Nếu khóa công khai được sinh bởi thành phần khác CA thì khóa công khai
đó phải được chuyển đến CA một cách an toàn.
- Khi khóa công khai được sinh bởi thành phần khác CA thì khóa công khai đó
phải được chuyển đến CA một cách an toàn.
- Khi khóa và chứng thư liên quan đã được sinh ra, nó cần được phân phối hợp lý.
- Các yêu cầu phân phối khóa và chứng thư cụ thể phụ thuộc vào
nhiều yếu tố bao gồm: nơi mà các khóa được sinh ra, mục đích sử dụng của chứng
thư, các ràng buộc về chính sách.
Phổ biến chứng thư:
- Khi khóa bí mật và chứng thư khóa công khai tương ứng đã được
phân phối thì chứng thư được phổ biến.
- Các phương pháp phổ biến: phân phối thủ công hoặc lưu chứng thư
kho công cộng để hỗ trợ việc tải về trực tuyến theo yêu cầu.
- Sao lưu khóa:
Nếu cặp khóa bí mật – công khai được sử dụng cho việc đảm bảo tính bí mật,
giai đoạn khởi tạo có thể bao gồm cả việc sao lưu khóa và chứng thư bởi bên thứ ba
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
tin cậy.
52
Việc sao lưu khóa còn tùy thuộc vào chính sách trong từng môi
trường cụ thể.
2.5.2. Giai đoạn sau phát hành
Khi khóa bí mật và chứng thư số được phân phối, giai đoạn sau phát hành
của việc quản lý khóa – chứng thư được bắt đầu. Giai đoạn này bao gồm:
- Tải chứng thư từ một kho ở xa ( khi được yêu cầu)
Thực thể cuối đưa ra yêu cầu lấy chứng thư để dùng
Có thể xuất phát từ hai yêu cầu sử dụng riêng biệt:
Để mã hóa dữ liệu được gửi tới thực thể cuối khác thường là mã hóa khóa đối
xứng để gửi cho người nhận.
Để kiểm tra chữ ký số từ một thực thể cuối khác.
Liên quan đến tính sẵn sàng truy cập chứng thư của thực thể đầu cuối
- Kiểm tra tính hợp lệ của chứng thư số
Tính toàn vẹn của chứng thư được kiểm tra bởi vì chứng thư được ký số bởi CA
phát hành
Tính toàn vẹn chỉ là một trong những số phép kiểm tra cần thực hiện trước khi
chứng thư được coi là hợp lệ, bao gồm:
Chứng thư đã được phát hành bởi nơi tin cậy được xác nhận
Tính toàn vẹn của chứng thư được đảm bảo
Chứng thư vẫn trong thời gian hợp lệ
Chứng thư chưa bị hủy bỏ
Chứng thư phù hợp với chính sách
- Khôi phục khóa khi cần thiết
Việc sao lưu và khôi phục khóa trong PKI là rất cần thiếtSao lưu khôi phục khóa
thường gắn liền với quá trình quản lý vòng đời khóa – chứng thư
- Cập nhật khóa tự động
Các chứng thư được gán 1 thời gian sống cố định khi phát hành. Khi một chứng
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
thư số gần hết hạn, cần phải phát hành cặp khóa
53
mới và chứg thư mới tương ứng. Đó chính là cập nhật khóa. Thực chất là chạy lại
quá trình khởi tạo và cần lưu ý. Trong PKI, việc cập nhật khóa cần phải được tự
động ở mức tối đa.
2.5.3. Giai đoạn hủy bỏ chứng thư
Quản lý vòng đời khóa, chứng thư kết thúc bằng giai đoạn hủy bỏ. Giai đoạn
này bao gồm: hết hạn chứng thư, hủy bỏ chứng thư, lịch sử khóa, lưu trữ các khóa.
- Hết hạn chứng thư:
Các chứng thư được gán một khoảng thời gian hợp lệ cố định
Khi chứng thư hết hạn có ba khả năng có thể xảy ra với thực thể cuối: Không ảnh hưởng gì đến thực thể cuối không trực tiếp tham gia vào PKI Sau khi hết hạn, việc đổi mới chứng thư được thực hiện ( đặt thời gian hợp lệ mới, ra hạn thêm) Cập nhật chứng thư được thực hiện ( thay bằng khóa mới, chứng chỉ mới)
Hình 2.7. Giai đoạn hủy bỏ chứng chỉ
Hủy bỏ chứng thư đúng lúc trước khi nó hết hạn về thời gian
Việc hủy bỏ chứng thư chỉ xuất phát từ một số nhân tố sau đây:
Khóa bí mật bị nghi ngờ
Sự thay đổi trạng thái công việc hoặc kết thúc thuê bao PKI
- Lịch sử khóa
Các chứng thư được phát hành với khoảng thời gian hợp lệ nhất định
Các khóa mã dần hết hạn nhưng không có nghĩa là tất cả các dữ liệu đã được
mã hóa bằng khóa đó sẽ không khôi phục lại được
Vì vậy cần lưu trữ an toàn và tin cậy các khóa cần thiết để giải mã, ngay cả
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
khi chứng thư tương ứng hết hạn. Quá trình này tạo thành lịch sử khóa
54
- Lưu trữ khóa
Là cất giữ khóa một cách an toàn và tin cậy trong thời gian lâu dài
Thông thường được hỗ trợ bởi CA hoặc bên thứ 3 tin cậy khác.
2.5.4. Các hoạt động phục hồi
Các hoạt động phục hồi được thực hiện khi các đối tượng sử dụng đánh mất
thông tin mà nó lưu trữ. Ví dụ, như đã nêu ở phần trên, các đối tượng sử dụng có
thể có một số phương tiện lưu trữ an toàn cá nhân; khi phương tiện lưu trữ này bị
hỏng thì nó cần phải nhờ đến CA để phục hồi các thông tin bị mất.
Việc phục hồi thông tin chủ yếu được tập trung vào việc phục hồi các cặp khoá. Đối với các CA và RA, việc lưu trữ thông tin backup về khoá của các đối
tượng là không bắt buộc. Khi các đối tượng sử dụng cần phục hồi các cặp khoá của
mình, ta cần phải có thêm một số giao thức chuyển đổi để hỗ trợ việc phục hồi
khoá. Trong phạm vi đồ án, em sẽ không đề cập đến các giao thức này.
2.6 Kết chƣơng
Trong chương 2, em đã giới thiệu được Bộ công cụ kiến trúc CryptoSys PKI [7] là một bộ thư viện dạng giao diện lập trình ứng dụng cho hệ thống Windows cho
phép người dùng tạo ra và đọc các thông điệp an toàn mật mã được mã hóa. Nó
cung cấp độ mật mạnh sử dụng công nghệ không cấp bằng sáng chế. Đồng thời đề
cập đến một số hàm được sửa đổi trong phiên bản 3.0 trở lên. Ngoài ra em cũng giới
thiệu một số thuật toán hỗ trợ và không hỗ trợ trong Cryptoys PKI. Cuối cùng là để
cài đặt trên một hệ thống thử nghiệm hoặc hệ thống phát triển, sử dụng chương trình
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
setup.exe được cung cấp và phân phối.
55
CHƢƠNG 3. XÂY DỰNG CHƢƠNG TRÌNH THỬ NGHIỆM
3.1. Mục tiêu phát biểu bài toán
Mục tiêu chính của chương trình là: Xây dựng một hệ thống PKI đơn giản.
Sau khi người dùng tiến hành thủ tục xin cấp chứng thư số thì hệ thống nếu thấy
hợp lệ sẽ sinh cặp khóa công khai, khóa bí mật và phát hành chứng thư cho người
dùng. Ngoài ra, để minh họa việc ứng dụng chứng thư số, Module liên lạc an toàn
cũng được xây dựng, Module này cho phép 2 người dùng có thể sử dụng chứng thư
số đã được phát hành để truyền tin bảo mật và đảm bảo tính xác thực.
Chứng thư số khóa công khai này phải được xác thực rằng chính do CA tin
cậy tạo ra. Trong hệ thống PKI này cũng chứa danh sách chứng thư hết hạn, do đó
người dùng có thể kiểm tra xem chứng thư số của mình có còn hạn sử dụng hay
không. T iếp sau đó là ứng dụng chứng thư số để trao đổi thông tin an toàn sử dụng
khóa công khai trong chứng thư có được để mã hóa dữ liệu gửi đi trong kênh truyền
công cộng với Module liên lạc an toàn.
3.2. Sơ đồ hoạt động của chƣơng trình
Hình 3.1. Sơ đồ hoạt động của chương trình
User yêu cầu cấp phát chứng thư thông qua một hệ thống PKI (ở đây là trung
tâm CA) hệ thống này nhận yêu cầu và sinh ra chứng thư cho User. Ở đây khi User
yêu cầu cấp chứng thư số thì User sẽ gửi thông tin về bản thân và khóa công khai
của mình tới RA, sau đó RA gửi thông tin của user và ký yêu cầu chấp thuận đến
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
trung tâm CA. CA tạo chứng thư khóa công khai, ký bằng khóa bí mật của CA và
56
lưu chứng chỉ vừa được phát hành vào Kho chứng chỉ của CA, sau đó CA gửi
chứng thư trở lại RA và RA cấp chứng thư cho người sử dụng.
3.3. Một số chức năng chính và lựa chọn môi trƣờng công cụ
Lựa chọn môi trường công cụ
Việc lưa chọn môi trường và công cụ phát triển sẽ trả lời câu hỏi: Hệ thống sẽ
hoạt động trong điều kiện nào và ta được trang bị những gì để xây dựng hệ thống đó.
Một hệ thống PKI trong thực tế bao gồm cả con người và máy móc. Phạm vi
ứng dụng và các tình huống xảy ra trong hệ thống cũng đa dạng. Tuy nhiên, trong
phạm vi luận văn này, em xác định những đối tượng trong hệ thống là các user. Hệ
thống PKI được triển khai và xây dựng trên nền tảng hệ điều hành Windows trên
các máy PC. Mặc dù vậy, việc đảm bảo tương thích tối đa với các phiên bản sớm
hơn của Windows sẽ luôn được chú trọng. Lý do của việc lựa chọn hệ điều hành
này là vì chúng hỗ trợ tốt cho bộ thư viện CryptoSys PKI. Hơn nữa, đây cũng là
một dòng hệ điều hành phổ biến, dễ phát triển và thử nghiệm các ứng dụng.
Ngôn ngữ được lựa chọn để xây dựng hệ thống server phân phối khoá là C#
và công cụ phát triển là bộ Visual studio 2012, đây là bộ công cụ hỗ trợ rất tốt quá
trình mã hoá, giải mã và đóng gói dữ liệu. Vì trong mô hình xây dựng hệ thống PKI
yêu cầu rất nhiều lần quá trình mã hoá và giải mã, từ đó việc lựa chọn công cụ này
là hoàn toàn phù hợp.
Một số chức năng chính: Giao diện chính
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 3.2. Giao diện chính của chương trình
57
Trong hệ thống này bao gồm các chức năng chính đó là: Yêu cầu cấp phát
chứng thư số, yêu cầu kiểm tra chứng thư, cập nhật chứng thư, danh sách hủy bỏ và
dowload chứng thư số.
Giao diện người dùng yêu cầu cấp phát chứng thư:
Hình 3.3. Giao diện chức năng cấp phát chứng chỉ
Khi yêu cầu cấp phát chứng thư số, người yêu cầu phải cung cấp các thông
tin cơ bản như: Họ tên, ngày sinh, địa chỉ, Cơ quan công tác,… cho RA. Sau đó RA
sẽ xem xét, nếu thông tin của người dùng hợp lệ thì sẽ gửi lên cho CA để bắt đầu quá trình thực hiện cấp chứng thư số. Người quản trị sẽ điền thông tin của User vào
sau đó kiểm tra xem thông tin đã đúng hay chưa. Nếu đúng thì tiếp tục thực hiện
những việc cấp chứng thư số.
Khi tiến hành cấp chứng thư CA sinh ra cặp khoá công khai và khoá bí mật
của User. CA sinh ra chứng thư số với các trường thông tin cơ bản như sau: Số
serial, Người phát hành, số hiệu, tên chủ thể, ngày cấp phát, ngày hết hạn, khoá công khai của chủ thể, chữ ký của CA.Với Module mật mã, cặp khoá công khai và khoá bí mật của thuật toán RSA được sinh ra.
Chữ ký của CA được thực hiện như sau: Ban đầu dựa trên những thông tin của User, CA tính giá trị băm trên bản ghi dữ liệu gồm các trường thông tin của chứng thư số (như số serial, tên chủ thể, ngày cấp phát, ngày hết hạn, khoá công
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
khai của chủ thể,…) (Hàm băm được sử dụng là MD5 có trong Module mật mã). Và sau đó, giá trị “băm” này được mã hoá bởi khoá bí mật của CA cho ta giá trị được gọi là chữ ký của CA.
58
Hình 3.4. Giao diện yêu cầu tạo chứng chỉ
Chứng thư số vừa được tạo ra sẽ được lưu vào kho chứng thư số của CA và
gửi cho người dùng tương ứng.
Khi chứng thư đã được cấp, người dùng có thể xem thông tin và tải chứng
thư tại trang Dowload chứng thư .
Hình 3.5. Giao diện danh sách chứng thư được cấp Người dùng bất kỳ có thể dễ dàng kiểm tra xem một chứng thư số nào đó có
hợp lệ do CA cung cấp hay không bằng cách nhập file chứng thư của mình vào, hệ
thống sẽ so sánh chứng thư nhập vào với chứng thư có trong kho sau đó gửi thông
báo tới người dùng.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 3.6. Giao diện kiểm tra chứng thư số
59
Khi ta có một chứng thư và muốn kiểm tra chứng thư này có phải do CA
cung cấp không và nó đã hết hạn chưa, chúng ta chỉ đường dẫn của chứng thư đó
(nơi mà ta lưu trữ tệp chứng chỉ) và yêu cầu kiểm tra.
Với Module mật mã, tất cả các trường trong chứng thư (trừ trường chữ ký số
của CA) cũng được gộp lại và tiến hành “băm” (theo giải thuật MD5). Giá trị này
được so sánh với giá trị khi dùng giải thuật RSA để ký chữ ký số của CA (việc kiểm
tra này dựa trên khoá công khai của CA). Khi hai giá trị này bằng nhau, tức là
chương trình xuất ra một dòng thông báo “Chứng chỉ này do CA cung cấp” ngược lại xuất ra thông báo “Chứng chỉ này không phải do CA cung cấp”.
Khuôn mẫu của một chứng thư được tạo ra bởi các module mật mã với các
trường:,
Hình 3.7. Chứng chỉ số do CA cấp Khi chứng chỉ số hết hạn, người dùng có thể yêu cầu CA cập nhật lại chứng
thư số của mình. Chứng thư số sẽ được ra hạn thêm và thay đổi cặp khóa mới. Nếu
chứng thư đã được cập nhật thì hệ thống sẽ thông báo lại “Cập nhật thành công”.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Hình 3.8. Giao diện cập nhật chứng thư số hết hạn
60
CA sẽ có một danh sách các chứng chỉ bị hủy bỏ (CRLs) trong đó chứa các
chứng thư bị thu hồi (vì một lý do nào đó: do hết hạn, do bị lộ khóa bí mật,…)
Hình 3.9. Giao diện kiểm tra chứng thư bị thu hồi
3.4. Ứng dụng chứng thƣ số sử dụng hệ thống PKI để bảo mật
3.4.1. Ứng dụng truyền tin an toàn
Ứng dụng truyền tin an toàn được xây dựng theo mô hình hoạt động như sau:
Hình 3.10. Giao diện chương trình ứng dụng truyền tin bảo mật
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Ứng dụng truyền tin này có hai chức năng chính là: Bảo mật và không bảo mật.
61
Với ứng dụng truyền không bảo mật, khi chạy chương trình các socket lắng
nghe liên tục ở các cổng được thiết lập. Ví dụ: ở hình trên socket gửi dữ liệu qua
qua người gửi và nhận dữ liệu qua bên người nhận.
Với ứng dụng truyền tin bảo mật, cũng như trong ứng dụng truyền không bảo
mật, các socket cũng lắng nghe ở những cổng được thiết đặt. Nhưng với module
mật mã, trước khi dữ liệu được gửi đi thì nó được mã hoá bằng giải thuật RSA với
khoá công khai của người nhận (khoá này được lấy từ chứng thư số của người nhận
trong kho chứng thư số của hệ thống PKI) và khi nhận thông điệp dữ liệu này được
giải mã bởi giải thuật RSA với khoá bí mật của người nhận .
3.4.2.Ứng dụng xác thực người dùng và kiểm tra tính toàn vẹn
Sơ đồ hoạt động của ứng dụng xác thực người dùng sử dụng chứng thư số:
Hình 3.11. Sơ đồ hoạt động của ứng dụng xác thực và kiểm tra tính toàn vẹn sử
dụng chứng thư số
Người gửi A: dùng khóa bí mật của mình để “Ký số” (mã hóa) lên một mẫu
tin (thông điệp) (hoặc giá trị băm của thông điệp) bằng khóa công khai của mình và
gửi cho người nhận B.
Người nhận B: Sau khi nhận được mẫu tin và chữ ký của người gửi A. Đầu
tiên sẽ yêu cầu chứng thư số của người gửi từ kho chứa chứng thư, kiểm tra chứng
thư số, nếu hợp lệ thì tính giá trị băm của mẫu tin nhận được với cùng thuật toán
băm mà người gửi sử dụng, lấy khóa công khai của người gửi A từ chứng thư số
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
vừa kiểm tra tính hợp lệ để kiểm tra chữ ký bằng cách giải mã giá trị chữ ký lên bản
62
băm nhận được từ A và so sánh với giá trị băm vừa tính được từ mẫu tin nhận được.
Nếu bằng nhau thì có thể tin rằng thông điệp là đúng của người gửi A và thông điệp
cũng không bị sửa đổi.
3.5 Đánh giá kết quả thử nghiệm
Mục tiêu chính của chương trình là: Xây dựng một hệ thống PKI đơn giản.
Sau khi người dùng tiến hành thủ tục xin cấp chứng thư số thì hệ thống nếu thấy
hợp lệ sẽ sinh cặp khóa công khai, khóa bí mật và phát hành chứng thư cho người
dùng. Ngoài ra, để minh họa việc ứng dụng chứng thư số, Module liên lạc an toàn
cũng được xây dựng, Module này cho phép 2 người dùng có thể sử dụng chứng thư
số đã được phát hành để truyền tin bảo mật và đảm bảo tính xác thực.
Xây dựng chương trình tạo hệ thống PKI cấp phát chứng thư số tương đối thuận
lợi dựa chủ yếu vào các hàm các thuật toán hỗ trợ trong thư viện Cryptosys PKI.
Việc cài đặt nhằm mục đích cấp phát chứng thư số khoá công khai an toàn đến
người sử dụng cũng như là việc xác thực các chứng thư tránh giả mạo đạt hiệu quả.
Chương trình truyền tin được bảo mật, ứng dụng chứng thư số truyền các
mẫu tin ngắn thể hiện quá trình truyền thông an toàn giữa các user trong hệ thống sử
chứng thư số .
Những hạn chế của chƣơng trình:
Về mặt đưa vào ứng dụng trong thực thế: Phải thiết lập khá nhiều những
tham số làm bất tiện cho người sử dụng. Ví dụ: Chương trình truyền tin phải thiết
lập các cổng nhân và cổng gửi cũng như IP của máy cần truyền thông điệp.
Về mặt kỹ thuật: Tạo các trường trong chứng thư là chỉ mới là những trường
cơ bản nhất của một chứng thư số, chưa tạo ra được một chứng thư số thực sự áp
dụng vào những ứng dụng khác. Hệ thống PKI được xây dựng mới chỉ có một số
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
chức năng cơ bản như: Cấp phát/hủy bỏ, kiểm tra chứng thư
63
KẾT LUẬN
Những công việc đã thực hiện:
Trình bày cơ sở lý thuyết về mật mã hóa thông tin:
Trình bày những khái niệm, thuật toán mật mã được sử dụng trong quá trình làm
chương trình.
Vấn đề về hệ thống PKI: Trình bày những thành phần chính của một hệ thống PKI.
Các dịch vụ của PKI bao gồm xác thực , toàn vẹn và bảo mật. Các kiến trúc của một
trung tâm chứng thực CA. Các hoạt động chính trong hệ thống PKI để cấp phát hay
hủy bỏ chứng thư số.
Các tiêu chuẩn PKCS, X.509: Trình bày các tiêu chuẩn quốc tế về khoá công khai và chứng
chỉ số được sử dụng để đảm bảo tính an toàn trong quá trình xây dựng trương trình.
Tìm hiểu về bộ thư viện Crptosys PKI : Các thuật toán hỗ trợ sử dụng trong chương
trình như mật mã đối xứng, mật mã công khai, hàm băm,… các hàm như RSA, mã hóa
3DES, sinh số ngẫu nhiên,…
Xây dựng chương trình
Tạo 1 website mô phỏng hệ thống PKI cấp phát chứng thư số: dựa chủ yếu vào
các hàm các thuật toán hỗ trợ trong thư viện Cryptosys PKI được cài đặt nhằm mục
đích cấp phát chứng thư số khoá công khai an toàn đến người sử dụng cũng như là việc
xác thực các chứng thư tránh giả mạo.
Chương trình truyền tin bảo mật ứng dụng chứng thư số: Một ứng dụng truyền các
mẫu tin ngắn thể hiện quá trình truyền thông an toàn giữa các user trong hệ thống sử
chứng thư số .
Những hạn chế của chƣơng trình:
Về mặt đưa vào ứng dụng trong thực thế: Phải thiết lập khá nhiều những tham
số làm bất tiện cho người sử dụng. Ví dụ: Chương trình truyền tin phải thiết lập các
cổng nhận và cổng gửi cũng như IP của máy cần truyền thông điệp.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Về mặt kỹ thuật: Tạo các trường trong chứng thư là chỉ mới là những trường
64
cơ bản nhất của một chứng thư số, chưa tạo ra được một chứng thư số thực sự áp dụng
vào những ứng dụng khác. Hệ thống PKI được xây dựng mới chỉ có một số chức năng
cơ bản như: cấp phát/hủy bỏ, kiểm tra chứng thư
Hƣớng phát triển của chƣơng trình
Hoàn thiện giao diện hệ thống Web cấp phát chứng thư, tiếp tục xây dựng một
số chức năng cho phù hợp với một CA theo chuẩnthông dụng trong thực tế.
Xây dựng chương trình xuất ra các Certificate để phục vụ cho các ứng dụng
như: HTTPS hay VPN, mail … và nhiều lĩnh vực khác.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Mở rộng CA nhằm mục đích liên kết với những hệ thống CA khác.
65
Tài liệu tham khảo
Tiếng Việt:
[1]. Nguyễn Bình, Hoàng Thu Phương – Cơ sở lý thuyết mật mã ,Giáo trình/ Học
viện kỹ thuật Mật Mã, Hà Nội,2006.
[2]. Lê Mỹ Tú, Trần Duy Lai - Chứng thực điện tử, Giáo trình/Học viện kỹ thuật
Mật Mã, Hà Nội, 2006.
[3]. Lê Quang Tùng - Tổng quan về hệ thống chứng thực điện tử PKI Trung tâm
chứng thực điện tử, 2011
Tiếng Anh:
[4]. Suranjan Choudhu - PKI Implementation And Design, tháng 3,năm 2002
[5]. YongLee, JeailLee, JooSeokSong - Design and implementation of wireless PKI
technology suitable, 2007
[6]. MS Press Windows Server 2010 PKI and Certificate Security
www.cryptosys.net/pki
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
[7]. Scott DormaScott Dorman - Teach Yourself Visual C# 2010 in 24 Hours,2010
66
PHỤ LỤC. CHƢƠNG TRÌNH MÔ PHỎNG HỆ THỐNG PKI
Phụ lục này trình bày về đoạn code chương trình cấp phát, kiểm tra, cập
nhật cũng như danh sách hủy bỏ chứng thư số.
Đầu tiên, khi người dùng yêu cầu cấp phát chứng thư số, CA sẽ sinh
cặp khóa công khai và khóa bí mật của User.CA sinh ra chứng thư số
Sau khi cấp chứng thư thành công, chứng thư sẽ tự động được lưu trong
kho, người dùng có thể tải chứng thư về sử dụng.
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
67
Khi hệ thống cấp phát chứng thư thành công, người dùng có thể tiến
hành kiểm tra xem chứng thư mình tải về có do đúng CA cấp hay không.
Khi chứng chỉ hết hạn, người dùng gửi yêu cầu đến CA xin cấp lại
khóa và ra hạn thêm cho chứng thư
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
68
CA cũng có một danh sách chứa các chứng thư số hết hạn bị thu hồi
do: cặp khóa bị lộ, hết hạn sử dụng,... người dùng kiểm tra tình trạng chứng
thư số của mình:
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
69
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn