Tải bản đầy đủ (.doc) (76 trang)

Xây dựng phần mếm quản lý xác thực địa danh các thực thể trên hệ thống

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.14 MB, 76 trang )

Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
MỤC LỤC
DANH MỤC TỪ VIẾT TẮT 5
DANH MỤC HÌNH VẼ 6
CHƯƠNG 1: MỞ ĐẦU 7
CHƯƠNG 2: CÔNG NGHỆ SỬ DỤNG 9
2.1.2.Những trường cơ bản của X.509 10
2.1.3.Những chức năng cơ bản của X.509 11
2.1.4.Chứng chỉ PKCS 12
2.2. Công cụ lập trình 13
CHƯƠNG 3: LÝ THUYẾT TỔNG QUAN VỀ MẬT MÃ 14
VÀ ỨNG DỤNG 14
3.1.1. Khái niệm hệ mật mã 15
3.1.2. Hệ mật mã khó đối xứng 15
3.1.3. Hệ mật mã khó công khai 17
3.1.4. Chữ ký số 21
3.1.5.Hàm băm 25
3.1.6.Nhiều thông điệp nguồn cho cùng 1 kết quả đích sau mã hoá/ ký số 25
CHƯƠNG 4: CHỨNG CHỈ SỐ VÀ HẠ TẦNG KHÓ CÔNG KHAI 28
4.1.1. Giới thiệu 29
4.1.2.Chứng thư số 30
4.1.3. Các thành phần của PKI 31
4.1.4. Tổ chức chứng thực (Certification Authority) 32
4.1.5.Trung tâm đăng ký (Registration Authorities) 33
4.2.1. Chính sách của chứng thư 35
4.2.2.Công bố và gửi thông báo thu hồi chứng thư 35
4.3.1. Phân phối cá nhân 38
4.3.2. Phân phối công khai 38
4.4.1 Chứng thực (certification) 40
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 2


Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
4.4.2 Thẩm tra (validation) 41
4.4.3 Một số chức năng khác 41
4.5.1 Mô hình CA đơn 46
4.5.2 Mô hình phân cấp 47
4.5.3 Mô hình mắt lưới (xác thực chéo) 48
4.5.4. Mô hình Hub và Spoke (Bridge CA) 50
4.5.5 Mô hình Web (Trust Lists) 51
4.5.6. Mô hình người sử dụng trung tâm (User Centric Model) 52
4.6.1.Tạo khó 53
4.6.2. Ký 54
4.6 . Xác nhậ 54
4.6 Sự đúng đắn của giải thuậ 55
4.7. Các ưu điểm của chữ ký số 56
4.7.1.Khả năng xác định nguồn gốc 56
4.7.2.Tính toàn vẹn 57
4.7 3 Tính không thể phủ nhậ 58
4 . Thực hiện chữ ký số khóa công kh 58
c sut ất thấp 60
4.7. 5. Tình trạng hiện tại - luậ 60
iến trìnphổ biến chữ ký số 63
CHƯƠNG 63
Xây dựg thực thể bảng User 72
CHƯƠNG 6 : G 72
nh 75
Hình 6.4 . Đăng nhập 75
KẾ 75
n, thuận tiện hơn 76
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 3
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống

LỜI NÓI ĐẦU
Hiện nay Việt Nam là một nước có nền công nghệ thông tin đang phát triển
mạnh mẽ, nhu cầu trao đổi các bức thư qua email cũng đóng dần trở thành không
thể thiếu trong cuộc sống cũng như công việc. Tuy nhiên, việc đảm bảo nội dung
email không bị ai đó thay đổi trong quá trình gửi, chương trình này được viết ra
nhằm mục đích bảo vệ sự toàn vẹn cho file thông điệp mà ta muốn gửi qua đường
email. Chương trình được viết ra với mong muốn cung cấp đến nhiều người sử dụng
chưa có kinh nghiệm máy tính nhiều và không có điều kiện về kinh tế, như phần lớn
người sử dụng máy tính hiện nay tại nước ta, do vậy chương trình này được thực
hiện trên công cụ mã nguồn mở Netbeans IDE cùng với ngôn ngữ Java với tên
“XÂY DỰNG PHẦN MỀM QUẢN LÝ XÁC THỰC ĐỊNH DANH CÁC
THỰC THỂ TRÊN HỆ THỐNG”.
Xin cảm ơn thầy Trần Duy Hùng đã tận tình hướng dẫn trong thời gian vừa
qua, giúp em có thể hoàn thành chương trình này .Vấn đề mã hóa trên thực tế có rất
nhiều khó khăn và chương trình này cũng chắc chắn không thoát khỏi những lỗi do
thiếu kinh nghiệm, do vậy, mong mọi người đóng góp thêm cho tác giả để chương
trình này ngày càng được hoàn thiện hơn, thực tế hơn trong cuộc sống và thực sự có
thể đến tay người dùng được.
Em xin chân thành cảm ơn
Hà Nội tháng 6 năm 2011
Sinh viên
Nguyễn Hữu Tiến
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 4
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
DANH MỤC TỪ VIẾT TẮT
STT Tên viết tắt Ý nghĩa
1 CA Certificate Authority
2 CKS Chữ Ký Số
3 DSA Digital Signature Algorithm
4 PKI Public Key Infrastructure

5 DES Data Encryption Standard
6 PKCS Public Key Cryptography Standards
7 PGP Pretty Good Privacy
8 ITU International Telecommunication Union
9 RSA Revest Shamir Adleman
10 CLR Certificate Revocation List
11 RA Registration Authority
12 SSL Secure Socket Layer
13 DSS Data Security Standard
14 OCSP Online Certificate Status Protocol
15 IETF Internet Engineering Task Force
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 5
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
DANH MỤC HÌNH VẼ
STT Hình Tên hình Trang
1 Hình 2.1 Các trường cơ bản chứng thư X.509 10
2 Hình 3.1 Mã hóa thông điệp sử dụng khóa công khai 15
3 Hình 3.2 Giải mã thông điệp bằng khóa cá nhân 17
4 Hình 3.3 Mã hóa thông điệp bằng khóa cá nhân S, khóa công
khai P để mã hóa khóa cá nhân S
19
5 Hình 3.4 Băm thông điệp 21
6 Hình 3.5 a – A gửi cho B
b – A mã hóa thông điệp
c – A mã hóa bản băm
22
23
23
7 Hình 3.6 a – B dựng khóa công khai của A để xác minh chữ


b – B băm thông điệp kèm theo
c – B so sánh và xác nhận
23
24
24
8 Hình 4.1 Minh họa 1 chữ ký số 29
9 Hình 4.2 Các thành phần PKI 31
10 Hình 4.3 Khuôn dạng chứng thư bị thu hồi 37
11 Hình 4.4 Dịch vụ kiểm tra online 40
12 Hình 4.5 Đường dẫn chứng thư chéo 45
13 Hình 4.6 Mô hình CA đơn 46
14 Hình 4.7 Mô hình CA phân cấp 47
15 Hình 4.8 Mô hình mắt lưới 49
16 Hình 4.9 Mô hình Hub và spoke 51
17 Hình 4.10 Sơ đồ tạo và kiểm tra chữ ký số 57
18 Hình 5.1 Sơ đồ phân rã chức năng 60
19 Hình 5.2 Nạp và so sánh 2 thông điệp 61
20 Hình 5.3 a – tạo khóa và mã hóa thông điệp
b – nạp khóa và tiến hành giải mã
61
21 Hình 5.4 A mã hóa thông điệp 62
22 Hình 5.5 B xác thực 62
23 Hình 6.1 Giao diên chương trình 65
24 Hình 6.2 Gửi khóa và thông điệp qua email 66
25 Hình 6.3 Danh sách khóa 66
26 Hình 6.4 Đăng nhập 66
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 6
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
CHƯƠNG 1: MỞ ĐẦU
1.1. Lý do chọn đề tài

- Hiện nay, vấn đề bảo mật thông tin rất quan trọng, và việc bị xem và sửa
trộm thông tin các bức thư khi chúng ra gửi qua các chương trình có sẵn đã
tích hợp ví dụ như : outlook express. Do vậy ta cần một thứ gì đó có thể
chứng thực rằng bức thư này gửi từ đúng địa chỉ mà ta biết, và nội dung thư
không hề bị ai đó sửa trong quá trình bức thư chưa tới địa chỉ của ta…
- Dựa trên lý thuyết này, tôi đã thực hiện ý tưởng trên bằng một chương
trình mã hóa thông điệp chuẩn bị gửi đi, bằng khóa riêng của ta (bí mật,
chỉ mình mình biết) và một khóa công khai (có thế công khai cho tất cả
mọi người biết).
- Thông điệp sau khi mã hóa, 1 thông điệp sẽ ở dạng byte(không thể đọc
được), và 1 thông điệp gốc ở dạng message(thông điệp text bình thường, có
thể đọc được). Thông điệp ở dạng byte là thông điệp đã được mã hóa bằng
khóa riêng, và chỉ có thể giải mã bằng khóa công khai.
- Khi gửi thư, ta sẽ gửi cả 2 thông điệp + 1 khóa công khai cho người thứ 2,
khi người thứ 2 nhận được thư, sẽ dựng chương trình load khóa công khai,
sau đó chạy ‘xác thực’, khi chạy phần này, chương trình sẽ tự động giải mã
thông điệp mã hóa đi kèm, sau đó so sánh với thông điệp bản rõ, nếu 2 thông
điệp giống nhau, việc so sánh sẽ thành công, thông điệp sẽ được hiện lên,
nếu thông điệp (1 trong 2 bản) bị sửa, dự chỉ 1 byte đi nữa, cũng coi như đã
bị thay đổi.
- Khi tạo khóa, khóa được tạo ramdom theo thuật toán DSA, đã được hỗ trợ
sẵn trong thư viện “java.security.*”
- Khóa sau khi được tạo, sẽ ở dạng byte, ta chuyển sang dạng hexa, khi lưu
code vào csdl sẽ ra dạng chuẩn như các nhà cung cấp hiện nay đang dùng,
khi tải khóa, sẽ sử dụng chuẩn chứng chỉ x.509 để mã hóa khóa công khai, và
PKCS#8 để mã hóa khóa riêng, sau đó tiến hành ký lên văn bản.
- Code khi tạo ra, sẽ lưu lại vào csdl ( dựng My SQL ), bao gồm tên, địa chỉ,
khóa chung, khóa riêng. Để tiện cho việc lấy ra mã hóa và gửi qua emal.
- Phần gửi qua email, chúng ta sẽ gửi ngay tại chương trình của mình chỉ cần
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 7

Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
điền thông tin về email của mình như user name và password, sau đó điền
địa chỉ email người nhận, và chỉ việc send, người bên kia sẽ nhận được thư
trong hòm mail của người đó.
1.2. Phạm vi đề tài
Phạm vi của đề tài là dành cho tất cả mọi người đã đang và sẽ sử dụng email
để làm việc. Trong khi kinh tế còn eo hẹp và việc vi phạm bản quyền ở nước ta còn
quá cao, chương trình mã nguồn mở là một lựa chọn hoàn hảo để giúp mọi người có
thể tiếp cận với công nghệ cao mà không sợ vi phạm bản quyền.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 8
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
CHƯƠNG 2: CÔNG NGHỆ SỬ DỤNG
2.1. Chứng chỉ(chứng thư) số
Chứng chỉ chứa những thông tin cần thiết như khóa công khai, chủ thể (người
sở hữu) khó công, người cấp và một số thông tin khác. Tính hợp lệ của các thông tin
được đảm bảo bằng chữ ký số của người cấp chứng thư. Người nào muốn sử dụng
chứng chỉ trước hết sẽ kiểm tra chữ ký số trong chứng chỉ. Nếu đó là chữ ký hợp lệ
thì sau đó có thể sử dụng chứng thư theo mục đích mong muốn.Có nhiều loại chứng
chỉ, một trong số đó là:
- Chứng chỉ khó công khai X.509
- Chứng chỉ khó công khai đơn giản (Simple Public Key Certificates - SPKC)
- Chứng chỉ Pretty Good Privacy (PGP)
- Chứng chỉ thuộc tính (Attribute Certificates - AC)
Tất cả các loại chứng thư này đều có cấu trúc định dạng riêng.
2.1.1.Chứng chỉ khóa công khai X.509
Chứng chỉ X.509 v3 là định dạng chứng chỉ được sử dụng phổ biến, và được
hầu hết các nhà cung cấp PKI(Public key Infrastructures ) triển khai.
Chứng chỉ X.509 lần đầu tiên được Hội viễn thông quốc tế (ITU) đưa ra lần
đầu tiên năm 1988 như là một phần của dịch vụ X.500.
Chứng chỉ gồm 2 phần :

- Những trường cơ bản cần thiết có trong chứng chỉ.
- Những trường phụ, được coi là những trường mở rộng, được dựng để xác
định và đáp ứng những yêu cầu bổ sung của hệ thống.
Các thành phần của PKI :
- Certification Authorities (CA ) cấp và thu hồi chứng chỉ.
- Registration Authorities (RA) gắn kết giữa khó công khai và định danh của
người giữ chứng chỉ.
- Clients
- Người sử dụng chứng chỉ PKI hay theo cách khác được xác định như những
thực thể cuối.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 9
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
- Người sử dụng cuối hoặc hệ thống là chủ thể của chứng chỉ PKI.
- Repository
- Hệ thống (có thể phân tán) lưu trữ chứng chỉ và danh sách các chứng chỉ bị
thu hồi.
- Cung cấp cơ chế phân phối chứng chỉ và CRLs đến các thực thể cuối.
2.1.2.Những trường cơ bản của X.509
Hình 2.1 – Các trường cơ bản của chứng thư X.509
Chú thích Các trường cơ bản của chứng thư X.509
- Version: xác định số phiên bản của chứng chỉ.
- Certificate Serial Number: do CA gán, là định danh duy nhất của chứng chỉ.
- Signature Algorithm ID: chỉ ra thuật toán CA sử dụng để ký số chứng chỉ.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 10
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Có thể là thuật toán RSA hay DSA…
- Issuer: chỉ ra CA cấp và ký chứng chỉ.
- Validity Period: khoảng thời gian chứng chỉ có hiệu lực. Trường này xác
định thời gian chứng chỉ bắt đầu có hiệu lực và thời điểm hết hạn.
- Subject: xác định thực thể mà khó công khai của thực thể này được xác nhận.

Tên của subject phải duy nhất đối với mỗi thực thể CA xác nhận.
- Subject public key information: chứa khó công khai và những tham số liên
quan; xác định thuật toán (ví dụ RSA hay DSA) được sử dụng cùng với khó.
- Issuer Unique ID (Optional): là trường không bắt buộc, trường này cho phép
sử dụng lại tên người cấp. Trường này hiếm được sử dụng trong triển khai thực tế.
- Extensions (Optional): chỉ có trong chứng chỉ v.3.
- Certification Authority’s Digital Signature: chữ ký số của CA được tính từ
những thông tin trên chứng chỉ với khó riêng và thuật toán ký số được chỉ ra trong
trường Signature Algorithm Identifier của chứng chỉ.
- Ngoài ra chứng chỉ X.509 còn một số trường mở rộng, phần mở rộng là
những thông tin về các thuộc tính cần thiết được đưa vào để gắn những thuộc tính
này với người sử dụng hay khó công. Những thông tin trong phần mở rộng thường
được dựng để quản lý xác thực phân cấp, chính sách chứng chỉ, thông tin về chứng
chỉ bị thu hồi…Nó cũng có thể được sử dụng để định nghĩa phần mở rộng riêng
chứa những thông tin đặc trưng cho cộng đồng nhất định. Mỗi trường mở rộng
trong chứng chỉ được thiết kế với cờ “critical” hoặc “uncritical”.
- Tính toàn vẹn của chứng chỉ được đảm bảo bằng chữ ký số của CA trên
chứng chỉ. Khó công khai của CA được phân phối đến người sử dụng chứng chỉ
theo một số cơ chế bảo mật trước khi thực hiện các thao tác PKI. Người sử dụng
kiểm tra hiệu lực của chứng chỉ được cấp với chữ ký số của CA và khó công khai
của CA.
2.1.3.Những chức năng cơ bản của X.509
Chứng thực ( certificate ) là chức năng quan trọng nhất của hệ thống PKI. Đây là
quá trình ràng buộc khóa công khai với định danh của thực thể. CA là thực thể PKI
thực hiện chức năng chứng thực. Có 2 phương pháp chứng thực :
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 11
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
- Tổ chức CA tự tạo ra cặp khóa công khai/bí mật và tạo chứng chỉ cho phần
khóa công của cặp khóa
- Người dùng tự tạo cặp khóa và đưa khóa công khai cho CA để CA chứng

thực cho khóa này. Chứng chỉ đảm bảo tính toàn vẹn của khóa công khai và các
thông tin gắn cùng.
- Thẩm tra ( Validation) là quá trình xác định xem chứng chỉ đưa ra có thể sử
dụng đúng mục đích thích hợp hay không, được xem như là quá trình kiểm tra hiệu
lực của chứng chỉ. Bao gồm một số bước :
- Kiểm tra xem liệu có đúng là CA được tin tưởng đã kí số lên chứng chỉ hay
không (xử lý theo đương dẫn của chứng chỉ).
- Kiểm tra chữ ký số của CA trên chứng chỉ để kiểm tra tính toàn vẹn.
- Xác định xem chứng chỉ còn trong thời gian có hiệu lực hay không.
- Xác định xem chứng chỉ đã bị thu hồi hay chưa.
- Xác định xem chứng chỉ đang sử dụng có đúng mục đích, chính sách, giới
hạn hay không (bằng cách kiểm tra các trường cụ thể như mở rộng chính sách
chứng chỉ hay mở rộng việc sử dụng khóa).
2.1.4.Chứng chỉ PKCS
PKCS (tiếng Anh: Public Key Cryptography Standards) là một chuẩn do
phòng thí nghiệm RSA Data Security Inc phát triển. Nó dựa vào các cấu trúc ASN.1
và thiết kế cho phù hợp với chứng chỉ X.09, các tiêu chuẩn này do ANSI thiết kế,
theo đó dữ liệu được chia thành từng khối nhỏ nhất là 8 bit (octet). PKCS hiện tại
bao gồm các chuẩn PKCS#1, PKCS#3, PKCS#5,PKCS#7, PKCS#8, PKCS#9,
PKCS#11, PKCS#12, PKCS#13, PKCS#15. Hiện tại phiên bản của các bản đang là
2.1. Trong đó có thể tìm được các chuẩn để mã hóa dữ liệu, chuẩn này được thiết kế
dựa vào cách mà các thám mã dựng để tấn công vào đoạn mã. Có thể mô tả sơ qua
thế này, trong PKCS#1 có các chuẩn mã hóa - giải mã RSAES - OAEP scheme,
chuẩn tạo chữ ký điện tử - kiểm tra RSASSA - PSS scheme ver2.1, hay trong
PKCS#7 là các chuẩn mã hóa cho password. PKCS#11 là phức tạp nhất, nó là
chuẩn cho việc truyền thông tin trên mạng dưới dạng các gói tin đã mã. Dựng để
trao đổi, di chuyển private certificate keypairs(đã được mã hóa hoặc không).
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 12
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
2.2. Công cụ lập trình

Hiện nay, có rất nhiều IDE hỗ trợ lập trình và nhiều ngôn ngữ khác nhau, tuy
nhiên, NetBeans IDE là lựa chọn số một cho đề tài này, vì nó được tích hợp khá đầy
đủ tính năng, đáp ứng được các yêu cầu trong quá trình thực hiện đồ án.
Về phần tạo khóa, ta sử dụng các gói đã được hỗ trợ sẵn trong java như :
java.sercurity.*,java.sercurity.spec.*. Đây là các gói đã hỗ trợ đầy đủ việc tạo khóa
để mã hóa, cung cấp các tính năng bảo mật và chứng thư cho khóa như X.509 và
PKCS#8.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 13
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
CHƯƠNG 3: LÝ THUYẾT TỔNG QUAN VỀ MẬT MÃ
VÀ ỨNG DỤNG
3.1. Giới thiệu chung
Mật mã đã được con người sử dụng từ lâu đời. 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ụ muốn gửi một văn bản từ một người
gửi A đến một người nhận B, A phải tạo cho văn bản đó một bản mã mật tương ứng
và thay vì gửi văn bản rõ thì A chỉ gửi cho B bản mã mật, B nhận được bản mã mật
và khôi phục lại văn bản rõ để 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ể “lấy trộm” được, nhưng vì đó là bản mật mã nên không đọc hiểu được. Còn
A có thể tạo ra bản mã mật và B có thể giải bản mã mật thành bản rõ để hiểu được
là do hai người đã có một thoả thuận về một chìa khó chung, chỉ với khó chung này
thì A mới tạo được bản mã mật từ bản rõ và B mới khôi phục được bản rõ từ bản
mã mật. Khó chung đó được gọi là khó mật mã. Để thực hiện được một phép mật
mã, ta còn cần có một thuật toán biến bản rõ cùng với khó mật mã thành bản mã
mật và một thuật toán ngược lại biến bản mật cùng với khó mật 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à khó mật 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á khó.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 14
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
3.1.1. Khái niệm hệ mật mã
Hệ mật mã được định nghĩa là một bộ năm (P, C, K, E, D), trong đó:
(1) P là tập hữu hạn các các bản rõ có thể
(2) C tập hữu hạn các bản mã có thể
(3) K là tập hữu hạn các khó có thể
(4) E là tập các hàm lập mã
(5) D là tập các hàm giải mã. Với mỗi k K, có một hàm lập mã ek E,
ek : P → C và một hàm giải mã dk D, dk: C → P sao cho dk(ek(x)) = x , x
P
3.1.2. Hệ mật mã khó đối xứng
Các phương pháp mật mã cổ điển đã được biết đến từ khoảng 4000 năm trước.
Một số kỹ thuật đã được những người Ai Cập sử dụng từ nhiều thế kỷ trước. Những
kỹ thuật này chủ yếu sử dụng hai phương pháp chính là: phép thay thế và phép
chuyển dịch. Trong phép thay thế, một chữ cái này được thay thế bởi chữ cái khác
và trong phép chuyển dịch, các chữ cái được sắp xếp theo một trật tự khác.
Hệ mã chuẩn DES được xây dựng tại Mỹ trong những năm 70 theo yêu cầu
của Văn phòng quốc gia về chuẩn (NBS) và được sự thẩm định của an ninh quốc
gia là một ví dụ về mật mã cổ điển. DES kết hợp cả hai phương pháp thay thế và
chuyển dịch. DES thực hiện mã hoá trên từng khối bản rõ là một xâu 64 bit, có khó
là một xâu 56 bit và cho ra bản mã cũng là một xâu 64 bit. Hiện nay, DES và biến
thể của nó (3DES) vẫn được sử dụng thành công trong nhiều ứng dụng.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 15
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống

Hình 3.1 – Mã thông điệp sử dụng khóa công khai
Trong các hệ mã đối xứng chỉ có một khó được chia sẻ giữa các bên tham gia
liên lạc. Cứ mỗi lần truyền tin bảo mật, cả người gửi A và người nhận B cùng thoả
thuận trước với nhau một khó chung K, sau đó người gửi dựng eK để lập mã cho
thông báo gửi đi và người nhận 12dựng dK để giải mã bản mật mã nhận được.
Người gửi và người nhận có cùng một khó chung K, được giữ bí mật dùng cho cả
lập mã và giải mã. Những hệ mật mã cổ điển với cách sử dụng trên được gọi là mật
mã khó đối xứng hay còn gọi là mật mã khó cá nhân.
Độ an toàn của hệ mật mã đối xứng phụ thuộc vào khó. Nếu để lộ khó thì bất
kỳ người nào cũng có thể mã hoá và giải mã thông điệp.
* Ưu và nhược điểm của hệ mật mã khó đối xứng
Ưu điểm nổi bật của các hệ mật mã khó đối xứng là việc xây dựng một hệ mật
mã có độ bảo mật cao khá dễ dàng về mặt lý thuyết.
Nhưng như nếu không kể đến việc cần có một nguồn sinh khó ngẫu nhiên thì
việc phân phối, lưu trữ bảo mật và thoả thuận khó là một vấn đề khó chấp nhận
được trong mạng truyền thông ngày nay. Trong một mạng có n người dùng, nếu cần
khó cho từng cặp thì cần n(n+1)/2 khó.
Để khắc phục hiện tượng không thể lưu trữ một khối lượng khó quá lớn đáp
ứng được nhu cầu mã dịch, người ta xem xét đến việc sử dụng các hệ mật mã khối
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 16
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
với độ dài không lớn lắm như DES… hoặc các hệ mật mã dòng mà khó được sinh
ra từ một nguồn giả ngẫu nhiên bằng thuật toán.
Mặc dù đã thực hiện việc mã hoá và giải mã bằng các hệ mật mã khối hay
bằng thuật toán sinh khó như đã nêu ở trên thì vấn đề phân phối và thoả thuận khó
vẫn phải được thực hiện. Như vậy phân phối và thoả thuận khó là một vấn đề chưa
thể được giải quyết trong các hệ mật mã khó đối xứng.
Việc phát minh ra phương pháp mã công khai tạo ra một cuộc “cách mạng”
trong công nghệ an toàn thông tin điện tử. Nhưng thực tiễn triễn khai cho thấy tốc
độ mã hoá khối dữ liệu lớn bằng các thuật toán mã hoá công khai chậm hơn rất

nhiều so với hệ mã hoá đối xứng.
Ví dụ, để đạt được độ an toàn như các hệ mã đối xứng mạnh cùng thời, RSA đòi
hỏi thời gian cho việc mã hoá một văn bản lâu hơn gấp hàng ngàn lần. Do đó, thay bằng
việc mã hoá văn bản có kích thước lớn bằng lược đồ khó công khai thì văn bản này sẽ
được mã hoá bằng một hệ mã đối xứng có tốc độ cao như DES, IDEA,…sau đó khó
được sử dụng trong hệ mã đối xứng sẽ được mã hoá sử dụng mật mã khó công khai.
3.1.3. Hệ mật mã khó công khai
Để giải quyết vấn đề phân phối và thoả thuận khó của mật mã khó đối xứng,
năm 1976 Diffie và Hellman đã đưa ra khái niệm về hệ mật mã khó công khai và
một phương pháp trao đổi công khai để tạo ra một khó cá nhân chung mà tính an
toàn được bảo đảm bởi độ khó của một bài toán toán học cụ thể (là bài toán tính
“logarit rời rạc”). Hệ mật mã khó công khai hay còn được gọi là hệ mật mã phi đối
xứng sử dụng một cặp khó, khó mã hoá còn gọi là khó công khai (public key) và
khó giải mã được gọi là khó cá nhân hay khóa riêng (private key). Trong hệ mật
này, khó mã hoá khác với khó giải mã. Về mặt toán học thì từ khó công rất khó tính
được khó cá nhân. Biết được khó này không dễ dàng tìm được khó kia. Khó giải mã
được giữ bí mật trong khi khó mã hoá được công bố công khai. Một người bất kỳ có
thể sử dụng khó công khai để mã hoá tin tức, nhưng chỉ có người nào có đúng khó
giải mã mới có khả năng xem được bản rõ.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 17
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Hình 2.3 – Giải mã thông điệp bằng khóa cá nhân
Người gửi A sẽ mã hoá thông điệp bằng khóa công của người nhận và người
nhận B sẽ giải mã thông điệp với khó cá nhân tương ứng của mình.
* Ưu và nhược điểm của hệ mật mã khó công khai
Vấn đề còn tồn đọng của hệ mật mã khó đối xứng được giải quyết nhờ hệ mật
mã khó công khai. Chính ưu điểm này đã thu hút nhiều trí tuệ vào việc đề xuất,
đánh giá các hệ mật mã công khai.
Nhưng do bản thân các hệ mật mã khó công khai đều dựa vào các giả thiết liên quan
đến các bài toán khó nên đa số các hệ mật mã này đều có tốc độ mã dịch không

nhanh lắm. Chính nhược điểm này làm cho các hệ mật mã khó công khai khó được
dựng một cách độc lập.
Một vấn đề nữa nảy sinh khi sử dụng các hệ mật mã khóa công khai là việc
xác thực mà trong mô hình hệ mật mã đối xứng không đặt ra. Do các khó mã công
khai được công bố một cách công khai trên mạng cho nên việc đảm bảo rằng “khó
được công bố có đúng là của đối tượng cần liên lạc hay không?” là một kẽ hở có thể
bị lợi dụng. Vấn đề xác thực này được giải quyết cũng chính bằng các hệ mật mã
khó công khai. Nhiều thủ tục xác thực đã được nghiên cứu và sử dụng như
Kerberos, X.509… Một ưu điểm nữa của các hệ mật mã khó công khai là các ứng
dụng của nó trong lĩnh vực chữ ký số, cùng với các kết quả về hàm băm, thủ tục ký
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 18
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
để bảo đảm tính toàn vẹn của một văn bản được giải quyết.
Việc phát minh ra phương pháp mã công khai tạo ra một cuộc “cách mạng”
trong công nghệ an toàn thông tin điện tử. Nhưng thực tiễn triễn khai cho thấy tốc
độ mã hoá khối dữ liệu lớn bằng các thuật toán mã hoá công khai chậm hơn rất
nhiều so với hệ mã hoá đối xứng.
Ví dụ, để đạt được độ an toàn như các hệ mã đối xứng mạnh cùng thời,RSA
đòi hỏi thời gian cho việc mã hoá một văn bản lâu hơn gấp hàng ngàn lần. Do đó,
thay bằng việc mã hoá văn bản có kích thước lớn bằng lược đồ khó công khai thì
văn bản này sẽ được mã hoá bằng một hệ mã đối xứng có tốc độ cao như DES,
IDEA,…sau đó khó được sử dụng trong hệ mã đối xứng sẽ được mã hoá sử dụng
mật mã khó công khai. Phương pháp này rất khả thi trong việc mã và giải mã những
văn bản có kích thước lớn như được mô tả trong hình.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 19
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Hình 3.3 – Mã hóa khóa thông điệp bằng khóa cá nhân S và khóa
công khai P để mã hóa khóa cá nhân S
Vấn đề còn tồn đọng của hệ mật mã khó đối xứng được giải quyết nhờ hệ
mật mã khó công khai. Chính ưu điểm này đã thu hút nhiều trí tuệ vào việc đề xuất,

đánh giá các hệ mật mã công khai. Nhưng do bản thân các hệ mật mã khó công khai
đều dựa vào các giả thiết liên quan đến các bài toán khó nên đa số các hệ mật mã
này đều có tốc độ mã dịch không nhanh lắm. Chính nhược điểm này làm cho các hệ
mật mã khó công khai khó được dựng một cách độc lập.
Một vấn đề nữa nảy sinh khi sử dụng các hệ mật mã khóa công khai là việc
xác thực mà trong mô hình hệ mật mã đối xứng không đặt ra. Do các khó mã công
khai được công bố một cách công khai trên mạng cho nên việc đảm bảo rằng “khó
được công bố có đúng là của đối tượng cần liên lạc hay không?” là một kẽ hở có thể
bị lợi dụng. Vấn đề xác thực này được giải quyết cũng chính bằng các hệ mật mã
khó công khai. Nhiều thủ tục xác thực đã được nghiên cứu và sử dụng như
Kerberos, X.509… Một ưu điểm nữa của các hệ mật mã khó công khai là các ứng
dụng của nó trong lĩnh vực chữ ký số, cùng với các kết quả về hàm băm, thủ tục ký
để bảo đảm tính toàn vẹn của một văn bản được giải quyết.
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 20
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
3.1.4. Chữ ký số
Mật mã khó 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ã hoá thông điệp hay tài liệu với khó cá nhân của mình
thì bất kỳ ai cũng có thể giải mã thông điệp với khó công 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ỉ A mới
có khó cá nhân của mình. Quá trình mã hoá thông điệp với khó cá nhân của người
gửi gọi là quá trình “ký số”.
Trong thực tế, quá trình ký số thường khó hơn. Thay bằng việc mã
bản thông điệp gốc với khó cá nhân của người gửi thì chỉ có bản đại diện
thông điệp (bản băm) có độ dài cố định được mã hoá với khó cá nhân của
người gửi và bản băm đã được mã hoá này được gắn vào với thông điệp
gốc. 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ó công của người 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, đồng thời xác thực được người gửi thông tin là ai.
Tính toàn vẹn của thông điệp được đảm bảo vì chỉ thay đổi một bit trong
thông điệp gửi đi thì kết quả hai giá trị băm sẽ khác nhau.
Tính xác thực của người gửi cũng được đảm bảo vì chỉ có người gửi A mới
có khoá cá nhân để mã bản băm. Chữ ký số cũng chứng minh được tính chống chối
bỏ bản gốc vì chỉ có A mới có khoá cá nhân dùng để ký số.
Sơ đồ chữ ký được định nghĩa như sau:
Sơ đồ chữ ký là một bộ năm (P, A, K, S, V), trong đó:
1. P là một tập hữu hạn các văn bản có thể
2. A là một tập hữu hạn các chữ ký có thể
3. K là một tập hữu hạn các khó có thể
4. S là tập các thuật toán ký
5. V là tập các thuật toán kiểm thử
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 21
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
6. Với mỗi k K, có một thuật toán ký sig k S, sig k: P → A và một thuật
toán kiểm thử ver k V, ver k: P x A → {đúng, sai}, thoả mãn điều kiện sau đây
với mọi x P, y A:
RSA cũng là thuật toán được dựng nhiều cho mục đích ký số. Sơ đồ chữ ký
RSA được mô tả như trong hình. Ngoài ra, còn có một số thuật toán công khai khác
được dựng để ký số, ví dụ như chuẩn chữ ký số DSS.
Hình 3.4 Băm thông điệp

Cho n = p*q với p,q là số nguyên tố lớn . Đặt P = A = Zn
K = {(n, p, q, a, b)/ n = p*q, a*b ≡ 1 mod φ(n)}
trong đó (n,b) là công khai, (a, p, q) là bí mật
Với mỗi K = (n, p, q, a, b), mỗi x P, ta định nghĩa:
y = sigK (x) = xa mod n, y A
verK (x, y) = đúng x ≡ yb mod n

Quá trình ký và kiểm tra chữ ký được mô tả trong hình
Giả sử A muốn gửi cho B thông điệp x. A thực hiện các bước sau:
1. A băm thông điệp x (Hình 5 a), thu được bản đại diện z = h(x) – có kích
thước cố định 128 bit hoặc 160 bit.
2. A ký số trên bản đại diện z (Hình 5 b), bằng khóa bí mật của mình, thu
được bản ký số y = sigK (z).
3. A gửi (x, y) cho B (Hình 5 c).
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 22
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Hình 3.5a – A gửi cho B

Hình 3.5b – Mã hóa thông điệp
Hình 3.5c – A mã hóa bản băm
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 23
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Khi B nhận được (x, y). B thực hiện các bước sau:
1. B kiểm tra chữ ký số để xác minh xem thông điệp mà mình nhận được có
phải được gửi từ A hay không bằng cách giải mã chữ ký số y, bằng khóa công khai
của A, được z. (Hình 3.6a)
2. B dựng một thuật toán băm – tương ứng với thuật toán băm mà A dựng –
để băm thông điệp x đi kèm, nhận được h(x). (Hình 3.6b)
3. B so sánh 2 giá trị băm z và h(x), nếu giống nhau thì chắc chắn rằng thông
điệp x – mà A muốn gửi cho B – còn nguyên vẹn, bên cạnh đó cũng xác thực được
người gửi thông tin là ai.
Hình 3.6a – B dựng khóa của công khai của A xác minh chữ ký
Hình 3.6b – B băm thông điệp của A
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 24
Xây dựng phần mềm quản lý, xác thực định danh các thực thể trên hệ thống
Hình 3.6c – B so sánh để xác nhận thông điệp toàn vẹn
3.1.5.Hàm băm

Việc sử dụng các hệ mật mã và sơ đồ chữ ký số thường là mã hóa và ký số
trên từng bit của thông tin, thời gian để mã hóa và ký sẽ tỷ lệ thuận với dung lượng
của thông tin. Thêm vào đó có thể xảy ra trường hợp: với nhiều bức thông điệp đầu
vào khác nhau, sử dụng hệ mật mã, sơ đồ ký số giống nhau (có thể khác nhau) thì
cho ra kết quả bản mã, bản ký số giống nhau (ánh xạ N-1: nhiều – một), như hình
1.10. Điều này sẽ dẫn đến một số rắc rối về sau cho việc xác thực thông tin.
3.1.6.Nhiều thông điệp nguồn cho cùng 1 kết quả đích sau mã hoá/ ký số
Các sơ đồ ký số thường chỉ được sử dụng để ký các bức thông điệp (thông tin)
có kích thước nhỏ và sau khi ký, bản ký số có kích thước gấp đôi bản thông điệp
gốc – ví dụ với sơ đồ chữ ký chuẩn DSS ký trên các bức thông điệp có kích thước
160 bit, bản ký số sẽ có kích thước 320 bit. Trong khi đó trên thực tế, ta cần phải ký
các thông điệp có kích thước lớn hơn nhiều, chẳng hạn vài chục MegaByte. Hơn
nữa, để đáp ứng yêu cầu xác thực sau khi thông tin đến người nhận, dữ liệu truyền
qua mạng không chỉ là bản thông điệp gốc, mà còn bao gồm cả bản ký số (có dung
lượng gấp đôi dung lượng bản thông điệp gốc). Một cách đơn giản để giải quyết vấn
đề trên (với thông điệp có kích thước lớn) này là chặt thông điệp thành nhiều đoạn
SV: Nguyễn Hữu Tiến _ Lớp: 0007B4 25

×