Tải bản đầy đủ (.docx) (26 trang)

Nghiên cứu mã hóa RSA và chữ ký số

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.55 MB, 26 trang )

BAN CƠ YẾU CHÍNH PHỦ

HỌC VIỆN KỸ THUẬT MẬT MÃ

Báo cáo: Thực tập cơ sở chuyên ngành

Chuyên đề:
Mật mã khóa công khai RSA và Chữ ký số

Giảng viên hướng dẫn:
Sinh viên thực hiện:





Nguyễn Bảo Thanh Huy – AT141028
Phạm Đồn Anh Duy – AT140913
Nguyễn Phi Dương– AT140910
Lương Quang Hoàng Duy– AT140912

TP. HỒ CHÍ MINH, THÁNG 1 NĂM 2021

1


MỤC LỤC

2



LỜI NÓI ĐẦU
Hệ mật RSA được phát minh bởi Ron Rivest, Adi Shamir và Len Adleman
và được công bố lần đầu vào tháng 8 năm 1977. Hệ mật này được sử dụng phổ
biến nhằm mục đích đảm bảo tính riêng tư, tính xác thực cho dữ liệu số. Ngày nay,
RSA được triển khai trong nhiều hệ thống thương mại. Nó được sử dụng bởi web
server và web browser để bảo mật dữ liệu trên đường truyền, được sử dụng để đảm
bảo bí mật và xác thực cho thư điện tử, được sử dụng để bảo vệ các phiên đăng
nhập từ xa, và là trái tim của các hệ thống thanh tốn bằng thẻ điện tử. Tóm lại, ở
đâu cần đảm bảo an tồn cho dữ liệu số thì ở đó thường là có sử dụng RSA.
Sự phát triển của khoa học mật mã gắn liền với sự đấu tranh giữa những
người lập mã và những người thám mã. Kể từ khi ra đời, hệ mật RSA được nghiên
cứu bởi nhiều nhà khoa học khác nhau và nhiều tấn công lên RSA đã được tìm ra.
Để hiểu rõ hơn về hệ mật RSA và chữ ký số thì chúng mình đã thực hiện
chun đề “Mã hóa khóa cơng khai RSA và chữ ký số”
Mục tiêu đặt ra khi thực hiện chuyên đề là:
1.
2.
3.
4.
5.
6.

Mật mã khóa cơng khai
Thuật tốn RSA và tạo khóa
Phép tính số lớn
Mã hóa và giải mã bằng RSA
Chữ ký số
Chứng chỉ X.509

Sau thời gian thực hiện, các mục tiêu về cơ bản đã đạt được. Tuy nhiên mật

mã là lĩnh vực khoa học phức tạp, thời gian thực hiện tương đối ngắn nên chắc
chắn không tránh khỏi thiếu sót. Rất mong được sự góp ý của các thầy cô, cũng
như các bạn học viên để chuyên đề này được hoàn thiện hơn.

3


CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ HỆ MẬT RSA
1.1. Lịch sử ra đời RSA
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên
vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán
lấy từ 3 chữ cái đầu của tên 3 tác giả.
Trước đó, vào năm 1973, Clifford Cocks, một nhà tốn học người Anh làm
việc tại GCHQ, đã mô tả một thuật tốn tương tự. Với khả năng tính tốn tại thời
điểm đó thì thuật tốn này khơng khả thi và chưa bao giờ được thực nghiệm. Tuy
nhiên, phát minh này chỉ được cơng bố vào năm 1997 vì được xếp vào loại tuyệt
mật.
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983
(Số đăng ký 4,405,829). Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm
2000. Tuy nhiên, do thuật toán đã được cơng bố trước khi có đăng ký bảo hộ nên
sự bảo hộ hầu như khơng có giá trị bên ngồi Hoa Kỳ. Ngồi ra, nếu như cơng
trình của Clifford Cocks đã được cơng bố trước đó thì bằng sáng chế RSA đã
không thể được đăng ký.
1.2. Hoạt động của thuật tốn RSA
1.2.1. Mơ tả sơ lược
Thuật tốn RSA có hai khóa: khóa cơng khai (hay khóa cơng cộng) và khóa
bí mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong q trình
mã hóa và giải mã. Khóa cơng khai được cơng bố rộng rãi cho mọi người và được
dùng để mã hóa. Những thơng tin được mã hóa bằng khóa cơng khai chỉ có thể
được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi người đều có thể

mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được.
Ta có thể mơ phỏng trực quan một hệ mật mã khố cơng khai như sau : Bob
muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc
được. Để làm được điều này, Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn
và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình
thường và khóa lại (như loại khố thơng thường chỉ cần sập chốt lại, sau khi sập
chốt khóa ngay cả Bob cũng không thể mở lại được-không đọc lại hay sửa thơng
tin trong thư được nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với
chìa khóa của mình và đọc thơng tin trong thư. Trong ví dụ này, chiếc hộp với khóa
mở đóng vai trị khóa cơng khai, chiếc chìa khóa chính là khóa bí mật.

4


1.2.2. Tạo khóa
Giả sử Alice và Bob cần trao đổi thơng tin bí mật thơng qua một kênh khơng
an tồn (ví dụ như Internet). Với thuật tốn RSA, Alice đầu tiên cần tạo ra cho
mình cặp khóa gồm khóa cơng khai và khóa bí mật theo các bước sau:
p
q
p≠q
1. Chọn 2 số nguyên tố lớn và với
, lựa chọn ngẫu nhiên và độc
lập.
n = p ×q
2. Tính:
n ϕ ( n ) = ( p − 1) ( q − 1)
3. Tính giá trị hàm số Ơle của :
.
1 < e < ϕ ( n)

e
4. Chọn mộtϕ số
và là số nguyên tố cùng
( n )tự nhiên sao cho
nhau với
.
d ×e ≡ 1 mod ϕ ( n )
d
5. Tính: sao cho
.
Một số lưu ý:
 Các số nguyên tố thường được chọn bằng phương pháp thử xác suất.
 Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng.
λ = LCM ( p − 1, q − 1)
 Đối
thay cho
ϕ ( n )với
= ( bước
p − 1) (3,q PKCS
− 1) #1 v2.1 sử dụng
, trong đó LCM (Least Common Multiple) là hàm
tìm bội số chung nhỏ nhất.
( n, e )
e
Khi đó, khóa cơng khai là bộ ( n, d, với
được
gọi là số mũ công khai, hay
)
d
số mũ mã hóa; cịn khóa bí mật là bộ

, với được gọi là số mũ bí mật, hay
số mũ giải mã. Một dạng khác của khóa bí mật là bộ bao gồm:
p
q

và là hai số nguyên tố chọn ban đầu,
d mod ( p − 1)
d mod ( q − 1)
dmp1
dmq1
 −1

(thường được gọi là

),
q mod ( p )
iqmp

(thường được gọi là
)
Dạng khóa bí mật này cho phép thực hiện giải mã và ký nhanh hơn với việc
sử dụng định lý số dư Trung Quốc. Ở dạng này, tất cả thành phần của khóa bí mật
phải được giữ bí mật. Alice
p
qgửi khóa cơng khai cho Bob, và giữ bí mật khóa cá
nhân
của mình. Ở đây,d và giữ
n
e vai trò rất quan trọng. Chúng là các phân tố của
và cho phép tính

p
qkhi biết . Nếu khơng sử dụng dạng sau của khóa bí mật
(dạng CRT) thì

sẽ được xóa ngay sau khi thực hiện xong q trình tạo
khóa.

5


1.2.3. Mã hóa
Giả sử Bob
m muốn gửi thơng
0 ≤ m <điệp
n M cho Alice. Nóimchung, thơng
n điệp M là
e
một số ngun
thỏa mãn
.
Lúc
này
Bob


biết
cũng
như
c
m

do Alice gửi. Bob sẽ tính là bản mã
hóa của
theo công thức:
c = me ( mod n )
(1.1)
Hàm trên có thể tính dễ dàng sử dụng phương pháp tínhc hàm mũ (theo
mơđun) bằng thuật tốn bình phương và nhân. Cuối cùng Bob gửi cho Alice.
1.2.4. Giải mã

c
d
m
c
Alice nhận từ Bob và biết khóa bí mật . Alice có thể tìm được
từ
theo cơng thức sau:
m = c d ( mod n )
(1.1)

( )

Tính đúng đắn củac dcơng
e d giải
= mthức
= medmã (1.1)
mod nđược giải thích như sau:
 Do

ed ≡ 1( mod p − 1)



med ≡ m ( mod p )

p

q

(

)

ed ≡ 1( mod q − 1)

(1.1)

theo định lý Ferma nhỏ, nên:
med ≡ m ( mod q )

(1.1)

 Do

là hai số nguyên tố cùng nhau nên áp dụng định lý số dư
Trung Quốc ta được: ed
m ≡ m ( mod pq )
(1.1)
Tức là

med ≡ m ( mod n )


(1.1)

1.2.5. Ví dụ
Để làm rõ hơn hoạt động của hệ mật RSA, sau đây ta lấy một ví dụ với
những số cụ thể. Tất nhiên, ở đây ta sử dụng những số nhỏ để tiện tính tốn cịn
trong thực tế phải dùng các số có giá trị đủ lớn.
Lấy:
p = 61

– số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)
q = 53

– số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa)
n = pq = 3233

– mô-đun (công bố công khai)
e = 17

– số mũ cơng khai
d = 2753

– số mũ bí mật
6




m = 123

– thơng điệp cần mã hóa


( n, e ) = ( 3233,17 )

ta có2753
khóa
, cịn khóa bí mật là
, d ) =đó,
( nKhi
( 3233,
) cơng khai là cặp
cặp
. Việc mã hóa được thực hiện như sau:
encrypt ( m ) = me ( mod n ) = 12317 ( mod 3233) = 885
Và công thức để giải mã dlà:
decrypt ( c ) = c ( mod n ) = 8852753 ( mod3233 ) = 123
Một lần nữa nhắc lại rằng, các phép tính trên đều có thể được thực hiện hiệu
quả nhờ giải thuật bình phương và nhân.
1.3. Tạo chữ ký số cho văn bản
Thuật tốn RSA cịn được dùng để tạo chữ ký số cho văn bản. Giả sử Alice
muốn gửi cho Bob một văn bản có chữ ký của mình. Để làm việc này,
d Alice tạo ra
một
n giá trị băm (hash value) của văn bản cần ký và tính giá trị mũ (theo mơ-đun
) của nó (giống như khi Alice thực hiện giải mã). Giá trị cuối cùng chính là chữ
ký điện tử của văn bản đang
e xét. Khi Bob nnhận được văn bản cùng với chữ ký điện
tử, anh ta tính giá trị mũ (theo mơ-đun ) của chữ ký đồng thời với việc tính giá
trị băm của văn bản. Nếu hai giá trị này như nhau thì Bob biết rằng người tạo ra
chữ ký biết khóa bí mật của Alice và văn bản đã khơng bị thay đổi sau khi ký.
1.4. Vấn đề an toàn của RSA

Độ an toàn của hệ thống RSA dựa trên hai vấn đề của tốn học: bài tốn
phân tích ra thừa số nguyên tố các số nguyên lớn và bài tốn RSA. Nếu hai bài
tốn trên là khó (khơng tìm được thuật tốn hiệu quả để giải chúng) thì khơng thể
thực hiện được việc phá mã toàn bộ đối với RSA.
e
n
n
e
Bài tốn
RSA

bài
tốn
tính
căn
bậc
theo
mơ-đun
(với
là hợp số),
m = c ( mod n )
( n, e )
m
tức
sao cho
, trong đó
chính là khóa cơng khai và
c là tìm số
n là bản mã. Hiện nay phương pháp triển vọng nhất giải bài toán này là phân tích
ra thừa

d số nguyên tố. Khi thực hiện được điều này, kẻ tấn cơng sẽ tìm ra số mũ
bí mật từ khóa cơng khai và có thể giải mã
p theo
q đúng quy ntrình
= pqcủa thuật tốn.
Nếu kẻ tấn cơng tìm được
tố
và sao cho:d
− 1)
( p −21)số( qngun
e thì có thể dễ
dàng tìm được giá trị
và qua đó xác định
từ . Chưa có một
phương pháp nào được tìm ra trên máy tính để giải bài tốn này trong thời gian đa
thức (polynomial-time). Tuy nhiên người ta cũng chưa chứng minh được điều
ngược lại (sự khơng tồn tại của thuật tốn).
Tại thời điểm năm 2005, số lớn nhất có thể được phân tích ra thừa số ngun
tố có độ dài 663 bít với phương pháp phân tán trong khi khóa của RSA hiện nay
thường có độ dài từ 1024 tới 2048 bít. Một số chun gia cho rằng khóa 1024 bít
7


có thể sớm bị phá vỡ (cũng có nhiều người phản đối việc này). Với khóa 4096 bít
thì hầu như khơng có khả năng bị phá vỡ trong tương
n lai gần. Do đó, người ta
n
thường cho rằng RSA đảm bảo an tồn với điều kiện được chọn đủ lớn. Nếu
có độ dài 256 bít hoặc ngắn hơn, nó có thể nbị phân tích trong vài giờ với máy tính
cá nhân dùng các phần mềm có sẵn. Nếu

có độ dài 512 bít, nó có thể bị phân
tích bởi vài trăm máy tính tại thời điểm năm 1999. Một thiết bị lý thuyết có tên là
TWIRL do Shamir và Tromer mơ tả năm 2003 đã đặt ra câu hỏi về độ an tồn của
khóa 1024 bít. Vì vậy hiện nay người ta khuyến cáo sử dụng khóa có độ dài tối
thiểu 2048 bít.
Năm 1993, Peter Shor cơng bố thuật tốn Shor chỉ ra rằng: máy tính lượng
tử (trên lý thuyết) có thể giải bài tốn phân tích ra thừa số trong thời gian đa thức.
Tuy nhiên, máy tính lượng tử vẫn chưa thể phát triển được tới mức độ này trong
nhiều năm nữa.
1.5. Các vấn đề đặt ra trong thực tế
1.5.1. Quá trình tạo khóa

p

q

Việc tìm ra 2 số ngun tố đủ lớn
và thường được thực hiện bằng cách
thử xác suất các số ngẫu nhiên có độ lớn phù hợp (dùng phép kiểm tra nguyên tố
cho phép loại bỏ hầu hết các hợp số).
p
q
Hai số và cịn cần được chọn khơng q gần nhau để phòng
1)
( p − 1) trường
( q −hợp
phân tích n bằng phương phápn phân tích Fermat. Ngồi ra, nếu
và p
q
có thừa số ngun tố nhỏ thì cũng có thể dễ dàng bị phân tích và vì thế


cũng cần được thử để tránh khả năng này.
Bên cạnh đó, cần tránh sử dụng các phương pháp tìm số ngẫu nhiên mà kẻ
tấn cơng có thể lợi dụng để biết thêm thông tin về việc lựa chọn (cần dùng các bộ
tạo số ngẫu nhiên tốt). Yêu cầu ở đây là các số được lựa chọn cần đồng thời ngẫu
nhiên và không dự đoán được. Đây là các yêu cầu khác nhau: một số có thể được
lựa chọn ngẫu nhiên (khơng có kiểu mẫu trong kết quả) nhưng nếu có thể dự đốn
được dù chỉ một phần thì an ninh của thuật tốn cũng khơng được đảm bảo. Một ví
dụ là bảng các số ngẫu nhiên do tập đoàn Rand xuất bản vào những năm 1950 có
thể rất thực sự ngẫu nhiên nhưngp kẻ tấnq cơng cũng có bảng này. Nếu kẻ tấn cơng
đốn được một nửa chữ số của
hay thì chúng có thể dễ dàng tìm ra nửa cịn
lại (theo nghiên cứu của Donald Coppersmith vào năm 1997)
d
Một điểm nữa cần nhấn mạnh
p là khóa bí mật q phải2qđủ lớn. Năm 1990,
Wiener
(khá phổ biến) và
d < n1/4 chỉ
/ 3 ra rằng nếu giá trị của d nằm
n trong
e khoảng và
thì có thể tìm ra được từ và .

8


e
Mặc dù đã từng có giá trị là 3 nhưng hiện nay các số mũ nhỏ khơng cịn
được sử dụng do có thể tạo nên những lỗ hổng. Giá trị thường dùng hiện nay là

65537 vì được xem là đủ lớn và cũng không quá lớn ảnh hưởng tới việc thực hiện
hàm mũ.
Tốc độ RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật
toán mã hóa đối xứng khác. Trên thực tế, Bob sử dụng một thuật tốn mã hóa đối
xứng nào đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để
giải mã (thơng thường khóa ngắn hơn nhiều so với văn bản).
Phương thức này cũng tạo ra những vấn đề an ninh mới. Một ví dụ là cần
phải tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công sẽ bỏ qua
RSA và tập trung vào việc đốn khóa đối xứng.
1.5.2. Phân phối khóa
Cũng giống như các thuật tốn mã hóa khác, cách thức phân phối khóa cơng
khai là một trong những yếu tố quyết định đối với độ an toàn của RSA. Q trình
phân phối khóa cần chống lại được tấn cơng đứng giữa (man-in-the-middle attack).
Giả sử Eve có thể gửi cho Bob một khóa bất kỳ và khiến Bob tin rằng đó là khóa
(cơng khai) của Alice. Đồng thời Eve có khả năng đọc được thơng tin trao đổi giữa
Bob và Alice. Khi đó, Eve sẽ gửi cho Bob khóa cơng khai của chính mình (mà Bob
nghĩ rằng đó là khóa của Alice). Sau đó, Eve đọc tất cả văn bản mã hóa do Bob
gửi, giải mã với khóa bí mật của mình, giữ một bản sao đồng thời mã hóa bằng
khóa cơng khai của Alice và gửi cho Alice. Về nguyên tắc, cả Bob và Alice đều
không phát hiện ra sự can thiệp của người thứ ba. Các phương pháp chống lại dạng
tấn công này thường dựa trên các chứng thực khóa cơng khai (digital certificate)
hoặc các thành phần của hạ tầng khóa cơng khai (public key infrastructure - PKI).
1.6. Kết luận
Vấn đề còn tồn đọng của hệ mật mã khóa đối xứng được giải quyết nhờ hệ
thống khóa 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óa cơng
khai đều dựa vào các giả thiết liên quan đến các bài tốn khó nên đa phần 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óa 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 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óa cơng khai
được cơng bố một cách cơng khai trên mạng nên việc đảm bảo rằng “khóa đượ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ã
9


khóa 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…

10


CHƯƠNG 2. PHÉP TỐN CÁC SỐ LỚN
Thuật tốn RSA liên quan đến các phép tính trên số lượng lớn. Các phép tính
này khơng thể được thực hiện trực tiếp bằng cách sử dụng các toán tử số học đơn
giản trong các chương trình, bởi vì các tốn tử đó chỉ có thể hoạt động trên các
kiểu dữ liệu thơng thường, chẳng hạn như kiểu số nguyên 32 bit và số nguyên dài
64 bit. Các con số liên quan đến thuật tốn RSA thường dài hơn 512 bit. Ví dụ, với
hai số nguyên 32 bit a và b, chúng ta chỉ cần sử dụng a * b trong chương trình. Tuy
nhiên, nếu chúng là những con số lớn, chúng ta không thể làm như vậy nữa. Để
khắc phục điều đó, chúng ta cần sử dụng một thuật toán (tức là một hàm) để tính
tốn các con số cực lớn.
Có một số thư viện có thể thực hiện các phép tốn số học trên các số ngun
có kích thước tùy ý. Ở đây, chúng ta có thể dùng thư viện BigInteger có sẵn trong
Netbean. Để sử dụng thư viện này, chúng ta sẽ xác định từng số dưới dạng
BigInteger, rồi sử dụng các API do thư viện cung cấp cho các hoạt động khác nhau,
chẳng hạn như phép cộng, phép nhân, phép lũy thừa, phép tốn mơ-đun, v.v.
2.1. BigInteger APIs



Khởi tạo một biến BigInteger



Có một số cách để gán giá trị cho biến BigInteger



In ra một số BigInteger



Tính res = a – b và res = a + b



Tính res = a*b
11




Tính res = a*b mod n



Tính res = mod n




Tính res = mod n

2.2. Một số ví dụ
Dưới đây là một ví dụ đầy đủ. Trong ví d ụ này, ta sẽ kh ởi t ạo ba bi ến
BigInteger, a, b và n; sau đó chúng ta tính các giá trị a ∗ b và ( mod n).

12


CHƯƠNG 3. MÃ HÓA VÀ GIẢI MÃ BẰNG RSA
3.1. Lấy khóa cá nhân
Cho p, q và e là ba số nguyên tố. Cho n = p * q. (e, n) sẽ được sử dụng làm
khóa cơng khai. Và ta sẽ tính khóa bí mật d. Các giá trị thập lục phân của p, q và e
được liệt kê như sau.
p = F7E75FDC469067FFDC4E847C51F452DF
q = E85CED54AF57E53E092113E62F436F4F
e = 0D88C3
Lưu ý rằng mặc dù p và q được sử dụng trong tác vụ này là những con số
khá lớn, nhưng chúng không đủ lớn để được bảo mật. Trên thực tế, những con số
này ít nhất phải là dài 512 bit (cái được sử dụng ở đây chỉ có 128 bit).
Dưới đây là quá trình lấy khóa bí mật

Và đây là kết quả

13


3.2. Mã hóa tin nhắn
Gọi (e, n) là khóa cơng khai. Ta sẽ mã hóa thơng báo "A top secret!". Đầu

tiên, ta cần chuyển đổi chuỗi ASCII thành BigInteger.
Các khóa công khai được liệt kê như sau (hệ thập lục phân). Khóa bí mật d
cũng sẽ được cung cấp để giúp xác minh kết quả mã hóa.
n = DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4
D0CB81629242FB1A5
e = 010001
M = A top secret!
d = 74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AAC
BC26AA381CD7D30D
Dưới đây là quá trình mã hóa

Và đây là kết quả

14


3.3. Giải mã tin nhắn
Ở đây, chúng ta sẽ dùng khóa cơng khai (n, e), khóa bí mật d và cả bản mã
đã nhận được sau khi mã hóa thơng báo "A top secret!" ở phần 3.2; các giá trị đều
theo hệ thập lục phân được liệt kê như sau:
n = DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4
D0CB81629242FB1A5
e = 010001
C = 6FB078DA550B2650832661E14F4F8D2CFAEF475A0DF3A75CA
CDC5DE5CFC5FADC
d = 74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AAC
BC26AA381CD7D30D
Dưới đây là quá trình giải mã

Và đây là kết quả

Kết quả sau khi giải mã trùng khớp với thông báo ban đầu, cho thấy q
trình mã hóa và giải mã đã chính xác
3.4. Kết luận
Sau khi kết thúc chương 3, ta có thể nắm rõ q trình lấy khóa bí mật cừng
với q trình mã hóa và giải mã, tuy nhiên ở trên chỉ là một ví dụ đơn giản với các
15


khóa 128bits. Trên thực tế, hiện nay, để đảm bảo tính bí mật và độ an tồn đa phần
các chun gia đã sử dụng những khóa có độ lớn 2048 bits, thậm chí là 3072 bits.

16


CHƯƠNG 4. CHỮ KÝ SỐ VÀ CHỨNG CHỈ X.509
4.1. Chữ ký số
Để hiểu rõ hơn về chữ ký số, ta có thể xem ví dụ sau đây:
Ví dụ: Alice muốn gửi một văn bản S kèm một chữ ký số cho Bob. Alice sẽ
dùng khóa bí mật (d,n) của mình để mã hóa văn bản S sau khi đã được băm (gọi
là ) : C = mod n
Sau đó gửi chữ ký C và văn bản S cho Bob.
Bob sẽ kiểm tra xem đó có phải do Alice gửi hay khơng bằng cách dùng
khóa cơng khai (e,n) của Alice để giải mã chứ ký: M = mod n
Sau khi có được M, Bob sẽ băm nội dung S để nhận được giá trị băm (gọi
là ) sau đó so sánh M và , nếu cả hai trùng khớp thì có thể xác nhận nội dung do
Alice gửi.
4.1.1. Tạo chữ ký tin nhắn
Vấn đề đặt ra ở đây là Alice cần gửi một lá thư cho Bob nhưng lo sợ các vấn
đề bị giả mạo, vì thế Alice sẽ dùng khóa bí mật của mình để tạo một chữ ký số để
giúp Bob có thể xác minh người gửi chính là Alice. Khóa bí mật dược dùng để tạo

chữ ký số cho lá thư có nội dung “I love you 2000” dược liệt kê như sau:
n = DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4
D0CB81629242FB1A5
d = 74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AAC
BC26AA381CD7D30D
Quá trình mã hóa và tạo chữ ký cho lá thư:

17


Và đây là kết quả

Sau khi mã hóa thành cơng, ta có thể gửi nội dung kèm chữ ký :
S = I love you 2000
C = 4794A2D0FE27DF3075BCDEF00F039ECC61CBEF956C4147F
4A26063C8CFEF27C9
Tiếp theo, ta sẽ thử thay đổi nội dung cần gửi một ít để xem chữ ký sẽ được
thay đổi như thế nào; ở đây, ta sẽ thay đổi nội dung thành “I love you 3000”. Sau
khi thực hiện q trình mã hóa và tạo chữ ký như trên, ta được kết quả như sau:

Dễ dàng nhận thấy nội dung của chữ ký đã thay đổi hồn tồn; từ đó cho
thấy mức độ an tồn và bí mật của hệ mật RSA được ứng dụng vào chữ ký số.
4.1.2. Xác minh chữ ký số
Bây giờ, Bob đã nhận được một lá thư có nội dung “I love you 2000” và chữ
ký số C từ Alice; Bob sẽ tiến hành kiểm tra xem đó thực sự có phải do Alice gửi
hay khơng bằng cách dùng khóa cơng khai của Alice để xác minh chữ ký số
Sau đây là quá trình xác minh chữ ký số của Bob

18



Và đây là kết quả

Vậy là Bob có thể xác nhận lá thư đó là do Alice gửi rồi!!!
4.2. Xác thực chứng chỉ X.509
Trong phần này, chúng ta sẽ xác minh thủ công chứng chỉ X.509. X.509
chứa dữ liệu về khóa cơng khai và chữ ký của người phát hành trên dữ liệu. Chúng
ta sẽ tải xuống chứng chỉ X.509 thực từ web máy chủ, lấy khóa cơng khai của nhà
phát hành, sau đó sử dụng khóa cơng khai này để xác minh chữ ký trên chứng chỉ.
Đầu tiên, Tải xuống chứng chỉ từ máy chủ web thực. Ở đây, ta sẽ sử dụng
máy chủ www.facebook.com. Ta có thể tải xuống chứng chỉ bằng trình duyệt hoặc
sử dụng lệnh sau:
Kết quả của lệnh chứa hai chứng chỉ. Chứng chỉ đầu tiên là chứng chỉ của
máy chủ www.facebook.com. Chứng chỉ thứ hai thuộc về một trung gian CA.
Trong phần này, chúng ta sẽ sử dụng chứng chỉ của CA để xác minh chứng chỉ máy
chủ.

19


Tiếp theo, sao chép và dán từng chứng chỉ (văn bản giữa dịng có chứa
"BEGIN CERTIFICATE" và dịng chứa "END CERTIFICATE", bao gồm cả hai
dòng này) vào một tệp. Tệp chưa chứng chỉ đầu tiên là c0.pem và tệp chứa chứng
chỉ thứ hai là c1.pem.

Kế tiếp, ta cần trích xuất khóa cơng khai (e, n) từ chứng chỉ của tổ chức phát
hành. Openssl có cung cấp các lệnh để trích xuất các thuộc tính nhất định từ các
chứng chỉ x509. Chúng ta có thể trích xuất giá trị của n bằng -modulus. Khơng có
lệnh cụ thể để trích xuất e, nhưng chúng ta có thể in ra tất cả các trường và có thể
dễ dàng tìm thấy giá trị của e.

Ta sẽ dùng lệnh sau để trích xuất n:

20


Kết quả thu được:

Lệnh sau đây để in tất cả các trường, từ đó chúng ta có thể tìm được e:

Từ kết quả thu được, ta có thể dễ dàng trích xuất được e:

Sau đó, Ta sẽ trích xuất chữ ký từ chứng chỉ của máy chủ. Khơng có lệnh
mở cụ thể nào cho trích xuất trường chữ ký. Tuy nhiên, như phía trên, ta có thể in
tất cả các trường và dễ dàng tìm thấy chữ ký, để làm được việc đó, ta dùng lệnh
sau:

Từ kết quả thu được, ta có thể dễ dàng trích xuất được chữ ký chứng chỉ của

máy chủ:
Sau khi loại bỏ các ký tự “:” và “space”, ta được chuỗi Hexa của chữ ký như
sau:

21


Kế đến, ta sẽ giải nén phần thân chứng chỉ của máy chủ. Tổ chức phát hành
chứng chỉ (CA) tạo chữ ký cho chứng chỉ máy chủ bằng cách tính tốn hàm băm
của chứng chỉ trước, sau đó ký hàm băm theo mơ hình bên dưới:
Chứng chỉ


Nội dung
tóm lược

Thuật tốn băm

Tóm lược được
mã hóa

Chữ ký

Mã hóa

Dùng khóa bí mật của người gửi

Để xác minh chữ ký, ta cần thực hiện theo mơ hình sau:
Chứng chỉ

Tóm lược được
mã hóa

Thuật tốn băm

Giải mã

Nội dung
tóm lược

Nội dung
tóm lược


Dùng khóa cơng khai của người gửi
Nếu nội dung của 2 bản tóm lược trùng khớp thì có thể xác nhận đó chính là
chữ ký của người gửi.
Để làm được việc đó, ta cũng cần tạo băm từ một chứng chỉ. Vì hàm băm
được tạo trước chữ ký được tính tốn, ta cần loại trừ khối chữ ký của chứng chỉ khi
22


tính tốn băm. Tìm ra phần nào của chứng chỉ được sử dụng để tạo hàm băm là
một việc khá khó khăn nếu khơng có hiểu biết về định dạng của chứng chỉ. Chứng
chỉ X.509 được mã hóa bằng tiêu chuẩn ASN.1 (Abstract Syntax Notation.One), vì
vậy nếu chúng ta có thể phân tích cú pháp cấu trúc ASN.1, chúng ta có thể dễ dàng
trích xuất bất kỳ trường nào từ chứng chỉ. Openssl có một lệnh được gọi là
asn1parse, có thể được sử dụng để phân tích cú pháp chứng chỉ X.509.

Kết quả thu được khá dài nên sẽ được tóm tắt như sau:

……..

Trường bắt đầu từ (4) là phần thân của chứng chỉ được dùng để tạo hàm
băm; trường bắt đầu từ (1303) là khối chữ ký. Hiệu số của chúng là các số ở đầu
các dòng. Trong trường hợp này, phần thân chứng chỉ nằm từ độ lệch 4 đến 1302,
trong khi khối chữ ký là từ 1303 đến cuối tệp. Đối với chứng chỉ X.509, độ lệch
bắt đầu luôn giống nhau (tức là 4), nhưng kết thúc phụ thuộc vào độ dài nội dung
của một chứng chỉ. Chúng ta có thể sử dụng tùy chọn -strparse để lấy trường từ độ
lệch 4, điều này sẽ cung cấp cho chúng ta phần nội dung của chứng chỉ, ngoại trừ
khối chữ ký.

Kết quả ta được phần nội dung của chứng chỉ đã được lưu vào file c0_body.bin
Khi chúng ta có được phần thân của chứng chỉ, chúng ta có thể tính tốn

băm của nó bằng cách sử dụng lệnh sau:
23


Kết quả nhận được:

Cuối cùng, giờ đây ta đã có tất cả thơng tin, bao gồm cả khóa cơng khai của
CA (n,e), chữ ký và nội dung chứng chỉ của máy chủ được liệt kê lại bên dưới như
sau:
Khóa cơng khai n và e:

Chữ ký :

Và nội dung chứng chỉ sau khi đã được băm:

24


Ta sẽ chứng thực chữ ký thơng qua chương trình sau:
Và đây là kết quả thu được:

Dễ dàng nhận thấy kết quả thu được trùng khớp với nội dung chứng chỉ sau
khi đã được băm. Vậy chúng ta đã xác thực chữ ký thành công.

25


×