Chương <br />
6. <br />
Mã <br />
hóa <br />
công <br />
khai <br />
<br />
Public <br />
Key <br />
Cryptography <br />
<br />
Lương <br />
Ánh <br />
Hoàng <br />
<br />
<br />
hoangla@soict.hut.edu.vn <br />
<br />
<br />
Nội <br />
dung <br />
<br />
6.1 <br />
Mã <br />
hóa <br />
với <br />
OpenSSL <br />
RSA <br />
<br />
6.2 <br />
Chữ <br />
ký <br />
số <br />
<br />
6.3 <br />
Biểu <br />
diễn <br />
khóa <br />
<br />
6.4 <br />
Kết <br />
nối <br />
SSL <br />
<br />
6.5 <br />
Hạ <br />
tầng <br />
khóa <br />
công <br />
khai <br />
<br />
<br />
<br />
<br />
102 <br />
<br />
<br />
6.1 <br />
Mã <br />
hóa <br />
với <br />
OpenSSL <br />
RSA <br />
<br />
<br />
• Mã <br />
hóa <br />
bất <br />
đối <br />
xứng <br />
<br />
<br />
• Là <br />
các <br />
giải <br />
thuật <br />
sử <br />
dụng <br />
một <br />
cặp <br />
khóa <br />
cho <br />
việc <br />
mã <br />
hóa <br />
và <br />
giải <br />
mã <br />
<br />
• Dữ <br />
liệu <br />
được <br />
mã <br />
hóa <br />
bằng <br />
khóa <br />
công <br />
khai <br />
sẽ <br />
được <br />
giải <br />
mã <br />
bằng <br />
<br />
khóa <br />
bí <br />
mật <br />
và <br />
ngược <br />
lại. <br />
<br />
• Các <br />
giải <br />
thuật <br />
thông <br />
dụng: <br />
RSA, <br />
DSA, <br />
Dif}ie-‐Hellman. <br />
<br />
• Không <br />
sử <br />
dụng <br />
trực <br />
tiếp <br />
để <br />
mã <br />
hóa <br />
dữ <br />
liệu <br />
vì <br />
tốc <br />
độ <br />
rất <br />
chậm. <br />
<br />
• Thường <br />
được <br />
sử <br />
dụng <br />
để <br />
<br />
• Trao <br />
đổi <br />
khóa <br />
đối <br />
xứng <br />
trong <br />
phiên <br />
truyền <br />
mật <br />
<br />
• Chữ <br />
ký <br />
số <br />
<br />
• Xác <br />
nhận <br />
danh <br />
tính <br />
<br />
• … <br />
<br />
<br />
103 <br />
<br />
<br />
6.1 <br />
Mã <br />
hóa <br />
với <br />
OpenSSL <br />
RSA <br />
<br />
<br />
• OpenSSL <br />
RSA <br />
<br />
• Thường <br />
được <br />
sử <br />
dụng <br />
trao <br />
đổi <br />
khóa <br />
<br />
• Lưu <br />
trữ <br />
tất <br />
cả <br />
thông <br />
tin <br />
về <br />
một <br />
khóa <br />
dưới <br />
cấu <br />
trúc <br />
RSA. <br />
<br />
• Tệp <br />
tiêu <br />
đề <br />
rsa.h <br />
<br />
• Sinh <br />
cặp <br />
khóa <br />
đối <br />
xứng <br />
bằng <br />
hàm <br />
<br />
<br />
<br />
<br />
RSA <br />
*RSA_generate_key(int <br />
bits, <br />
<br />
<br />
// <br />
Kích <br />
thước <br />
khóa: <br />
1024,2048… <br />
<br />
<br />
<br />
<br />
<br />
<br />
unsigned <br />
long <br />
exp,// <br />
Số <br />
mũ: <br />
3, <br />
17, <br />
65537 <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
void <br />
(*cb)(int, <br />
int, <br />
void), <br />
<br />
// <br />
Callback <br />
<br />
<br />
<br />
<br />
<br />
<br />
void <br />
*cb_arg); <br />
<br />
<br />
<br />
<br />
<br />
104 <br />
<br />
<br />
6.1 <br />
Mã <br />
hóa <br />
với <br />
OpenSSL <br />
RSA <br />
<br />
<br />
• Mã <br />
hóa <br />
với <br />
khóa <br />
công <br />
khai <br />
<br />
• Sử <br />
dụng <br />
hàm <br />
RSA_public_encrypt: <br />
<br />
<br />
int <br />
RSA_public_encrypt(int <br />
l, <br />
// <br />
Chiều <br />
dài <br />
dữ <br />
liệu <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
unsigned <br />
char <br />
*pt, <br />
// <br />
Xâu/số <br />
cần <br />
mã <br />
<br />
<br />
<br />
<br />
<br />
<br />
unsigned <br />
char <br />
*ct, <br />
// <br />
Kết <br />
quả <br />
<br />
<br />
<br />
<br />
<br />
<br />
RSA <br />
*r, <br />
<br />
<br />
<br />
<br />
<br />
<br />
// <br />
Cấu <br />
trúc <br />
RSA<br />
<br />
<br />
<br />
<br />
<br />
int <br />
p); <br />
<br />
<br />
<br />
<br />
<br />
// <br />
Kiểu <br />
padding <br />
<br />
<br />
Kết <br />
quả <br />
trả <br />
về: <br />
chiều <br />
dài <br />
xâu <br />
mã <br />
được.<br />
<br />
<br />
<br />
<br />
105 <br />
<br />
<br />
<br />
<br />
<br />
<br />