Tải bản đầy đủ (.pdf) (65 trang)

Nghiên cứu các thuật toán mã hóa khóa công khai và ứng dụng trong chữ ký điện tử

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.05 MB, 65 trang )


Số hóa bởi trung tâm học liệu














































ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CNTT & TT THÁI NGUYÊN





Trƣơng Mạnh Cƣờng



LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH





NGHIÊN CỨU CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG
KHAI VÀ ỨNG DỤNG TRONG CHỮ KÝ ĐIỆN TỬ

Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01











THÁI NGUYÊN - 2014


Số hóa bởi trung tâm học liệu











ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CNTT & TT THÁI NGUYÊN




Trƣơng Mạnh Cƣờng





LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH





NGHIÊN CỨU CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG
KHAI VÀ ỨNG DỤNG TRONG CHỮ KÝ ĐIỆN TỬ







GIÁO VIÊN HƢỚNG DẪN


PGS.TS BÙI THẾ HỒNG





THÁI NGUYÊN - 2014

Số hóa bởi trung tâm học liệu

MỤC LỤC
DANH MỤC CÁC CHỮ TIẾNG ANH VIẾT TẮT 5
DANH MỤC CÁC HÌNH 6
MỞ ĐẦU 7
1. Lý do nghiên cứu đề tài 7
7
8
8
8
CHƢƠNG 1. TỔNG QUAN VỀ CÁC THUẬT TOÁN MÃ HÓA
KHÓA CÔNG KHAI 9
1.1 Khái niệm mã hóa khóa công khai 9
1.1.1 Mật mã hóa khóa đối xứng 9
1.1.2 Mật mã hóa khóa công khai 9
1.2 Các thuật toán mật mã hóa khóa công khai 13
1.2.1 Thuật toán RSA 13
1.2.2 Trao đổi và thỏa thuận khóa Diffie-Hellman 17
1.2.3 Hệ mã ElGammal 19
1.3 So sánh ƣu nhƣợc điểm của các thuật toán 21

1.3.1 Ưu điểm 21
1.3.2 Hạn chế 22
CHƢƠNG 2: HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ 24
2.1 Hàm băm 24
2.1.1 Tổng quan về hàm băm 24
2.1.2 Một số hàm băm được sử dụng phổ biến 29
2.1.2.1 Họ hàm băm SHA (Secure Hash Algorithm) 29
2.1.2.2 Họ hàm băm MD (Message-Digest algorithm) 32
2.2 Chữ ký điện tử 39
2.2.1 Tổng quan về chữ ký điện tử 39
2.2.2 Định nghĩa chữ ký điện tử 42

Số hóa bởi trung tâm học liệu

2.2.3 Một số qui ước trong chữ ký điện tử 43
2.3 Những vấn đề trao đổi cặp khóa đặt ra trong thực tế 44
2.3.1 Sự tương tự với bưu chính 44
2.3.2 Mối quan hệ giữa khóa công khai với thực thể sở hữu khóa . 47
2.3.3 Các vấn đề liên quan tới thời gian thực 47
CHƢƠNG 3: XÂY DỰNG ỨNG DỤNG 52
3.1 Phát triển ứng dụng 52
3.1.1 Sơ đồ hệ thống và chức năng của ứng dụng 52
3.1.1.1 Sơ đồ hệ thống 52
3.1.1.2 Chức năng của ứng dụng 53
3.1.2 Phân tích ứng dụng 54
3.1.2.1 Tạo khóa công khai và bí mật bằng thuật toán RSA 54
3.1.2.2 Băm dữ liệu bằng hàm băm MD5 54
3.1.3.3 Mã hóa giá trị băm bằng khóa bí mật 54
3.1.4.4 Giải mã bằng khóa công khai và kiểm tra tính toàn vẹn của văn
bản 54

3.2. Cài đặt ứng dụng 55
3.2.1. Giới thiệu chương trình 55
3.2.2. Một số giao diện chính trong chương trình 55
3.2.2.1 Giao diện chương trình 55
3.2.2.2 Tạo file khóa công khai và bí mật, lưu file khóa 56
3.2.2.3 Lựa chọn văn bản 56
3.2.2.4 Ký văn bản 57
3.2.2.5 Giải mã chữ ký 57
58
GIẢI THÍCH MỘT SỐ THUẬT NGỮ 59
TÀI LIỆU THAM KHẢO 60


Số hóa bởi trung tâm học liệu

DANH MỤC CÁC CHỮ TIẾNG ANH VIẾT TẮT
NIST National Institute of Standards and Technology
RSA R. Rivest, A. Shamir, L. Adleman
MITM Man-In-The-Middle attack
MD Message-Digest algorithm
SHA Secure Hash Algorithm
MAC Message Authentication Code
PKCS Public Key Cryptography Standards























Số hóa bởi trung tâm học liệu

DANH MỤC CÁC HÌNH

STT
TÊN HÌNH
TRANG
1
Hình 1.1: Kênh liên lạc
9
2
Hình 2.1: Hoạt động của một hàm băm tiêu biểu
21
3
Hình 2.2: Mô hình ký gửi thông điệp sử dụng hàm băm

25
4
Hình 2.3: Mô hình xác minh chữ ký, kiểm tra tính toàn
vẹn của thông điệp
26
5
Hình 2.4: Mô hình chữ ký điện tử
40
6
Hình 3.1: Sơ đồ hệ thống ứng dụng
53
7
Hình 3.2: Giao diện chương trình
55
8
Hình 3.3: Giao diện tao cặp khóa
56
9
Hình 3.4: Giao diện lựa chọn văn bản cần ký
56
10
Hình 3.5: Giao diện ký văn bản đã lựa chọn bằng khóa
bí mật
57
11
Hình 3.6: Giao diện giải mã văn bản đã ký bằng khóa
công khai
57








Số hóa bởi trung tâm học liệu

MỞ ĐẦU
1. Lý do nghiên cứu đề tài
Bảo mật thông tin luôn là nhu cầu cần thiết trong các lĩnh vực tình
báo, quân sự, ngoại giao, thông tin thương mại. Bảo mật thông tin cũng
là một vấn đề đã được nghiên cứu từ xưa đến nay.
Bảo mật thông tin là duy trì tính bảo mật, tính toàn vẹn, tính sẵn sàng.
Tính bảo mật là đảm bảo thông tin chỉ được tiếp cận bởi những người được
cấp quyền trao đổi thông tin. Tính toàn vẹn của thông tin là bảo vệ sự chính
xác, hoàn chỉnh của thông tin và thông tin chỉ được thay đổi bởi những
người được cấp quyền. Tính sẵn sàng của thông tin là những người được
quyền sử dụng có thể truy xuất thông tin khi họ cần. Để đảm bảo được các
yêu cầu về thông tin trên thì rất nhiều người trong nước và thế giới đang tập
trung nghiên cứu và tìm mọi giải pháp để đảm bảo an toàn, an ninh cho các
giao dịch điện tử trên máy tính.
Giao dịch điện tử ở Việt Nam hiện nay đã và đang được quan tâm.
Những giao dịch điện tử xuất hiện cùng với sự phổ dụng của máy tính và
mạng Internet. Đã có những luật, văn bản dưới luật cho lĩnh vực an toàn
thông tin trong giao dịch điện tử như: Quốc hội thông qua luật thương mại,
luật giao dịch điện tử Thủ tướng Chính phủ đã ban hành Quyết định số
1073/QĐ-TTg ngày 12/7/2010 phê duyệt kế hoạch tổng thể phát triển thương
mại điện tử giai đoạn 2010 – 2015
Cùng với xu thế chung của đất nước, cũng là yêu cầu đặt ra với chính
công việc của mình, học viên đã chọn đề tài về an toàn thông tin, mà ở đây

cụ thể là áp dụng các thuật toán mã hóa khóa công khai, hàm băm, chữ ký
điện tử, làm mục tiêu nghiên cứu. Mong muốn những tìm tòi của mình có thể
xây dựng được ứng dụng phục vụ cho cơ quan, đơn vị nơi học viên công tác.
2.
Nghiên cứu các giải thuật mã hóa khóa công khai.
Nghiên cứu về chữ ký điện tử, tìm hiểu về hàm băm và các giải thuật
về hàm băm.

Số hóa bởi trung tâm học liệu

Cài đặt thử nghiệm một giải thuật sinh chữ ký điện tử.

Một số thuật toán sinh khóa công khai, khóa bí mật;
Một số hàm băm thường sử dụng hiện nay;
Chữ ký điện tử.
4. Ph
Tìm hiểu dựa trên cơ sở lý thuyết, các thuật toán hay về sinh
khóa công khai, khóa bí mật đã có từ trước. So sánh để thấy
những ưu điểm, những hạn chế của từng thuật toán.
Từ cơ sở đó có thể cải tiến, hoặc triển khai ứng dụng cài đặt
một giải thuật tối ưu nhất vào thực tiễn.
Trong quá trình triển khai ứng dụng nêu lên những hạn chế của
đề tài và những khó khăn trong thực hiện đề tài.
Đề xuất hướng phát triển của đề tài trong thời gian tới.
ăn
Ngoài phần mở đầu và kết luận đề tài có cơ cấu gồm 3 chương:
Chương 1 : Tổng quan về các thuật toán mã hóa khóa công khai
Chương 2: Hàm băm và chữ ký điện tử
Chương 3: Xây dựng ứng dụng.




Số hóa bởi trung tâm học liệu

CHƢƠNG 1. TỔNG QUAN VỀ CÁC THUẬT TOÁN
MÃ HÓA KHÓA CÔNG KHAI
1.1 Khái niệm mã hóa khóa công khai
1.1.1 Mật mã hóa khóa đối xứng
Trong mật mã học, các thuật toán khóa đối xứng (symmetric key
algorithms) là một lớp các thuật toán mật mã hóa trong đó các khóa dùng
cho việc mật mã hóa và giải mã có quan hệ rõ ràng với nhau (có thể dễ dàng
tìm được một khóa nếu biết khóa kia).
Khóa dùng để mã hóa có liên hệ một cách rõ ràng với khóa dùng để
giải mã có nghĩa chúng có thể hoàn toàn giống nhau, hoặc chỉ khác nhau nhờ
một biến đổi đơn giản giữa hai khóa. Trên thực tế, các khóa này đại diện cho
một bí mật được phân hưởng bởi hai bên hoặc nhiều hơn và được sử dụng để
giữ gìn sự bí mật trong kênh truyền thông tin
Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã
luồng (stream ciphers) và mật mã khối (block ciphers). Mật mã luồng mã
hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật
mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit.
Những thuật toán mã hóa khóa đối xứng nổi tiếng là DES và AES.
Các thuật toán đối xứng thường không được sử dụng độc lập. Trong
thiết kế của các hệ thống mật mã hiện đại, cả hai kiểu mật hóa khóa đối xứng
và khóa bất đối xứng thường được sử dụng phối hợp để tận dụng các ưu
điểm của chúng.
1.1.2 Mật mã hóa khóa công khai
Là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông
tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó. Điều
này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với

nhau là khóa công khai và khóa cá nhân (hay khóa bí mật).
Thuật ngữ "mật mã hóa khóa bất đối xứng" thường được dùng đồng
nghĩa với "mật mã hóa khóa công khai" mặc dù hai khái niệm không hoàn
toàn tương đương. Có những thuật toán mật mã khóa bất đối xứng không có

Số hóa bởi trung tâm học liệu

tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã
hóa và giải mã) đều cần phải giữ bí mật.
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật
trong khi khóa công khai được phổ biến công khai. Trong 2 khóa, một dùng
để mã hóa và khóa còn lại dùng để giải mã. Điều quan trọng đối với hệ thống
là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai.
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục
đích:
Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải
mã được.
Tạo chữ ký số: cho phép kiểm tra một văn bản có phải đã được tạo
với một khóa bí mật nào đó hay không.
Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin
mật giữa 2 bên.
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối
lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi
điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng.
Có thể hình dung hệ mật này tương tự như sau. A đặt một vật vào một
hộp kim loại và rồi khoá nó lại bằng một khoá số do B để lại. Chỉ có B là
người duy nhất có thể mở được hộp vì chỉ có người đó mới biết tổ hợp mã
của khoá số của mình.
Thuật toán mã hóa công khai là thuật toán được thiết kế sao cho khóa
mã hóa là khác so với khóa giải mã. Mà khóa giải mã hóa không thể tính

toán được từ khóa mã hóa. Khóa mã hóa gọi là khóa công khai (public key),
khóa giải mã được gọi là khóa riêng (private key).





Số hóa bởi trung tâm học liệu

Hình 1.1: Kênh liên lạc








Đặc trưng nổi bật của hệ mã hóa công khai là cả khóa công khai
(public key) và bản tin mã hóa (ciphertext) đều có thể gửi đi trên một kênh
thông tin không an toàn.
Trong hầu hết lịch sử mật mã học, khóa dùng trong các quá trình mã
hóa và giải mã phải được giữ bí mật và cần được trao đổi bằng một phương
pháp an toàn khác (không dùng mật mã) như gặp nhau trực tiếp hay thông
qua một người đưa thư tin cậy. Vì vậy quá trình phân phối khóa trong thực tế
gặp rất nhiều khó khăn, đặc biệt là khi số lượng người sử dụng rất lớn. Mật
mã hóa khóa công khai đã giải quyết được vấn đề này vì nó cho phép người
dùng gửi thông tin mật trên đường truyền không an toàn mà không cần thỏa
thuận khóa từ trước.
Năm 1874, William Stanley Jevons xuất bản một cuốn sách mô tả

mối quan hệ giữa các hàm một chiều với mật mã học đồng thời đi sâu vào bài
toán phân tích ra thừa số nguyên tố (sử dụng trong thuật toán RSA). Tháng 7
năm 1996, một nhà nghiên cứu đã bình luận về cuốn sách trên như sau:
Trong cuốn The Principles of Science: A Treatise on Logic and
Scientific Method được xuất bản năm 1890, William S. Jevons đã phát hiện
nhiều phép toán rất dễ thực hiện theo một chiều nhưng rất khó theo chiều
ngược lại. Một ví dụ đã chứng tỏ mã hóa rất dễ dàng trong khi giải mã thì
không. Vẫn trong phần nói trên ở chương 7 (Giới thiệu về phép tính ngược)
tác giả đề cập đến nguyên lý: ta có thể dễ dàng nhân các số tự nhiên nhưng
Khóa giải mã
A
Bộ mã hóa
Bộ giải mã
B
Khóa mã hóa
Oscar

Số hóa bởi trung tâm học liệu

phân tích kết quả ra thừa số nguyên tố thì không hề đơn giản. Đây chính là
nguyên tắc cơ bản của thuật toán mật mã hóa khóa công khai RSA mặc dù
tác giả không phải là người phát minh ra mật mã hóa khóa công khai.
Thuật toán mật mã hóa khóa công khai được thiết kế đầu tiên bởi
James H. Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh)
vào đầu thập kỷ 1970. Thuật toán sau này được phát triển và biết đến dưới
tên Diffie-Hellman, và là một trường hợp đặc biệt của RSA. Tuy nhiên
những thông tin này chỉ được tiết lộ vào năm 1997.
Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống
mật mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa
công khai. Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph

Merkle về phân phối khóa công khai. Trao đổi khóa Diffie-Hellman là
phương pháp có thể áp dụng trên thực tế đầu tiên để phân phối khóa bí mật
thông qua một kênh thông tin không an toàn. Kỹ thuật thỏa thuận khóa của
Merkle có tên là hệ thống câu đố Merkle.
Thuật toán đầu tiên cũng được Rivest, Shamir và Adleman tìm ra vào
năm 1977 tại MIT. Công trình này được công bố vào năm 1978 và thuật toán
được đặt tên là RSA. RSA sử dụng phép toán tính hàm mũ môđun (môđun
được tính bằng tích số của 2 số nguyên tố lớn) để mã hóa và giải mã cũng
như tạo chữ ký số. An toàn của thuật toán được đảm bảo với điều kiện là
không tồn tại kỹ thuật hiệu quả để phân tích một số rất lớn thành thừa số
nguyên tố.
Kể từ thập kỷ 1970, đã có rất nhiều thuật toán mã hóa, tạo chữ ký số,
thỏa thuận khóa được phát triển. Các thuật toán như ElGamal (mật mã) do
Netscape phát triển hay DSA do NSA và NIST cũng dựa trên các bài toán
lôgarit rời rạc tương tự như RSA. Vào giữa thập kỷ 1980, Neal Koblitz bắt
đầu cho một dòng thuật toán mới: mật mã đường cong elliptic và cũng tạo ra
nhiều thuật toán tương tự. Mặc dù cơ sở toán học của dòng thuật toán này
phức tạp hơn nhưng lại giúp làm giảm khối lượng tính toán đặc biệt khi khóa
có độ dài lớn.

Số hóa bởi trung tâm học liệu

Vấn đề về độ an toàn của thuật toán mật mã hóa khóa công khai
Về khía cạnh an toàn, các thuật toán mật mã hóa khóa bất đối xứng
cũng không khác nhiều với các thuật toán mã hóa khóa đối xứng. Có những
thuật toán được dùng rộng rãi, có thuật toán chủ yếu trên lý thuyết; có thuật
toán vẫn được xem là an toàn, có thuật toán đã bị phá vỡ Cũng cần lưu ý là
những thuật toán được dùng rộng rãi không phải lúc nào cũng đảm bảo an
toàn. Một số thuật toán có những chứng minh về độ an toàn với những tiêu
chuẩn khác nhau. Nhiều chứng minh gắn việc phá vỡ thuật toán với những

bài toán nổi tiếng vẫn được cho là không có lời giải trong thời gian đa thức
(Xem thêm: Lý thuyết độ phức tạp tính toán). Nhìn chung, chưa có thuật
toán nào được chứng minh là an toàn tuyệt đối (như hệ thống mật mã sử
dụng một lần). Vì vậy, cũng giống như tất cả các thuật toán mật mã nói
chung, các thuật toán mã hóa khóa công khai cần phải được sử dụng một
cách thận trọng.
1.2 Các thuật toán mật mã hóa khóa công khai
1.2.1 Thuật toán 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ả.
Thuật toá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
quá 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ã hóa khoá công khai như
sau: giả sử B muốn gửi cho A một thông tin mật mà B muốn duy nhất A có
thể đọc được. Để làm được điều này, A gửi cho B một chiếc hộp có khóa đã
mở sẵn và giữ lại chìa khóa. B nhận chiếc hộp, cho vào đó một tờ giấy viết

Số hóa bởi trung tâm học liệu

thư bình thường và khóa lại (như loại khoá thông thường chỉ cần sập chốt lại,
sau khi sập chốt khóa ngay cả B 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 đó B gửi chiếc hộp lại cho A và
A 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.
Tạo khóa
Giả sử A và B cần trao đổi thông tin bí mật thông qua một kênh không
an toàn (ví dụ như Internet). Với thuật toán RSA, A đầ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:
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.
2 Tính: .
3 Tính giá trị hàm số Ơle
4 Chọn một số tự nhiên sao cho và là số nguyên tố cùng
nhau với .
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.
o Bước 5 có thể viết cách khác: Tìm số tự nhiên sao cho

cũng là số tự nhiên. Khi đó sử dụng giá trị
Từ bước 3, sử dụng
thay cho
Khóa công khai bao gồm:
n – môđun và e - số mũ công khai (cũng gọi là số mũ mã hóa).
Khóa bí mật bao gồm:
n – môđun và d - số mũ bí mật (cũng gọi là số mũ giải mã).

Số hóa bởi trung tâm học liệu

Mã hóa
Giả sử B muốn gửi một thông điệp M cho A. Đầu tiên B chuyển M
thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại

M) được thỏa thuận trước. Sau đó, B yêu cầu A gửi cho mình khóa công khai
của A gồm n và e.
B sẽ tính c là bản mã hóa của m theo công thức:

Có thể dễ dàng tính được c bằng cách sử dụng phương pháp tính hàm
mũ (theo môđun) bằng thuật toán bình phương và nhân. Cuối cùng B gửi c
cho A.
Giải mã
A nhận c từ B và tính được m từ c theo công thức sau:

Biết m, A tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình
giải mã hoạt động vì ta có
.
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ)
nên:



Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung
Quốc, ta có:
.
hay:
.





Số hóa bởi trung tâm học liệu


Ví dụ tạo khóa công khai và khóa bí mật:
Sau đây là một ví dụ với những số cụ thể. Ở đây chúng ta sử dụng
những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị
đủ lớn.
1. Chọn các số nguyên tố: p=17 & q=11.
2. Tính n = pq, n = 17×11=187
3. Tính Ф(n)=(p–1)(q-1)=16×10=160
4. Chọn e : gcd(e,160)=1; Lấy e=7
5. Xác định d: de=1 mod 160 và d < 160
Giá trị cần tìm là d=23, vì 23×7=161= 1×160+1
6. In khoá công khai KU={7,187}
7. Giữ khoá riêng bí mật KR={23,187}
8. Hủy bỏ các giá trị bí mật p = 17 và q = 11
Ví dụ mã hóa, giải mã dựa trên cặp khóa công khai, bí mật:

Cho mẩu tin M = 88 (vậy 88<187)
Mã C = 88
7
mod 187 = 11
Giải mã M = 11
23
mod 187 = 88
Có thể dùng định lý phần dư Trung Hoa để giải mã cho nhanh như sau:
a. Tính 11
23
mod 11 = 0
b. Tính 11
23
mod 17 = (-6)
23

mod 17 = (-6)
16
(-6)
4
(-6)
2
(-6)

mod 17 = 3
Vì (-6)
2
mod 17 = 2, nên (-6)
4
mod 17 = 4, (-6)
8
mod 17 = -1
(-6)
16
mod 17 = 1
c. 11
-1
mod 17 = (-6)
-1
mod 17 = 14 nên c
2
= 11(11
-1
mod 17) = 11
(14 mod 17) = 154


Số hóa bởi trung tâm học liệu

Vậy M = (3.154) mod 187 = 462 mod 187 = 88
Độ an toàn của thuật toán RSA
Độ an toàn của thuật toán RSA dựa vào độ khó giải của việc tính
Ф(N) và điều này đòi hỏi chúng ta cần phân tích N ra thừa số nguyên tố.
Thuật toán phân tích số nguyên tố hiệu quả nhất hiện nay là Berent-Pollard,
chúng ta hãy xem bảng thống kê sau để thấy được tốc độ hoạt động của nó:
Số chữ số trong hệ thập phân của N
Số các thao tác bit để phân tích N
20
7.20e+03
40
3.11e+06
60
4.63e+08
80
3.72e+10
100
1.97e+12
120
7.69e+13
Các nghiên cứu về phân tích các số nguyên tố lớn hiện nay tiến triển
rất chậm, các tiến bộ lớn nhất cũng chỉ cải tiến về thuật toán và có thể nói
rằng trừ khi có các đột phá trong việc phân tích các số 1024 bit, RSA là thuật
toán an toàn trong thời điểm này.
Trên thực tế việc để cài đặt RSA cần phải thực hiện các thao tác
modulo với các số 300 chữ số (hay 1024 bit) mà hiện nay các máy tính mới
chỉ thao tác với các số nguyên 128 bit, điều này dẫn đến nhu cầu về các thư
viện số học nhân chính xác để làm việc với các số nguyên lớn này. Ngoài ra

việc sử dụng RSA cần tới các số nguyên tố lớn nên chúng ta cũng phải có
một cơ sở dữ liệu các số nguyên tố.
1.2.2 Trao đổi và thỏa thuận khóa Diffie-Hellman
Thuật toán thỏa thuận khóa Diffie-Hellman là một thuật toán dùng để
trao đổi khóa chứ không dùng để mật mã hóa dữ liệu. Tuy nhiên Diffie-
Hellman lại có ích trong giai đoạn trao đổi khóa bí mật của các thuật toán
mật mã đối xứng. Thuật toán thỏa thuận khóa Diffie-Hellman thúc đẩy việc
nghiên cứu đề xuất các mã khoá công khai, một trong những vấn đề quan

Số hóa bởi trung tâm học liệu

trọng liên quan trực tiếp đến tính an toàn của các thuật toán mật mã đối
xứng là vấn đề thống nhất khoá bí mật giữa các thực thể thông tin.
Giả sử A và B muốn liên lạc sử dụng hệ mật khoá bí mật. Để thoả
thuận mật khoá K chung cho cả hai bên qua một kênh không an toàn mà
không ai khác có thể biết được, A và B có thể dùng thủ tục thoả thuận
khoá Diffie -Hellman sau:
Thuật toán:
Khởi tạo Diffie Hellman
Mọi người dùng thỏa thuận dùng tham số chung:
o Số nguyên tố rất lớn q hoặc đa thức.
o α là căn nguyên tố của mod q.
Mỗi người dùng (A chẳng hạn) tạo khoá của mình:
o Chọn một khoá mật (số) của A: x
A
< q
o Tính khoá công khai của A: y
A
= α
x

A
mod q.
o Mỗi người dùng thông báo công khai khoá của mình y
A.
Trao đổi khoá Diffie Hellman
Khoá phiên dùng chung cho hai người sử dụng A, B là K
AB

K
AB
= α
x
A.
x
B
mod q
= y
A
x
B
mod q (mà B có thể tính)
= y
B
x
A
mod q (mà A có thể tính)
K
AB
được sử dụng như khoá phiên trong sơ đồ khoá riêng giữa A và B
A và B lần lượt trao đổi với nhau, họ có khoá chung K

AB
cho đến khi họ
chọn khoá mới.
Kẻ thám mã cần x, do đó phải giải tính logarit rời rạc
Ví dụ:
Hai người sử dụng A & B muốn trao đổi khoá phiên:
• Đồng ý chọn số nguyên tố q=353 và α=3
• Chọn các khoá mật ngẫu nhiên:

Số hóa bởi trung tâm học liệu

A chọn x
A
=97, B chọn x
B
=233
• Tính các khoá công khai:
y
A
=3
97
mod 353 = 40 (A)
y
B
=3
233
mod 353 = 248 (B)
• Tính khoá phiên chung:
K
AB

= y
B
x
A
mod 353 = 248
97
= 160 (A)
K
AB
= y
A
x
B
mod 353 = 40
233
= 160 (B)
1.2.3 Hệ mã ElGammal
Hệ mã ElGammal a Diffie-
Hellman. 1985. Tính an toàn
của nó dựa trên tính khó giải của bài toán logarit rời rạc. Nhược điểm chính
của nó là kích thước thông tin sau khi mã hóa gửi đi sẽ tăng gấp đôi so với
thông tin gốc. Tuy nhiên so với thuật toán RSA, ElGammal không có nhiều
rắc rối về vấn đề bản quyền sử dụng. Trong thuật toán ElGammal một thông
điệp bất kỳ có thể có nhiều chữ ký hợp lệ khác nhau.
Thuật toán:
Ban đầu chọn một số nguyên tố lớn p và hai số nguyên tùy ý nhỏ hơn
p là a (a là một phần tử nguyên thủy của Z
*
p
) và x (x là của người nhận, bí

mật), sau đó tính:
y = a
x
mod p
Để mã hóa một thông điệp M (là một số nguyên trên Z
p
) thành bản mã
C người gửi chọn một số ngẫu nhiên k nhỏ hơn p và tính khóa mã K:
K = y
k
mod p
Sau đó tính cặp bản mã:
. C
1
= a
k
mod p
.C
2
= K.M mod p
Và gửi bản mã C = (C1,C2) đi (lưu ý là sau đó k sẽ bị hủy).
Để giải mã thông điệp đầu tiên ta cần tính lại khóa mã hóa thông
điệp K:

Số hóa bởi trung tâm học liệu

K = C
1
x
mod p = a

kx
mod p
Sau đó tính M bằng cách giải phương trình sau:
M = C
2
.K
-1
mod p
Việc giải mã bao gồm việc tính lại khóa tạm thời K (rất giống với mô
hình của Diffie – Hellman đưa ra). Khóa công khai của hệ mã (p,a,y), khóa
bí mật là x.
Ví dụ: Cho hệ mã ElGammal có P = 97, a = 5, x = 58.
- Tìm khóa của hệ mã này.
- Mã hóa bản rõ M = 3 với k được chọn bằng 36.
Trước hết ta tính y = 5
58
mod 97 = 44, từ đó suy ra K
p
= (P,a,y) =
(97,5,44) và K
s
= (58)
Để mã hóa thông điệp M = 3 ta tính khóa K = 44
36
mod 97 = 75 sau
đó tính:
. C
1
= 5
36

= 50 mod 97
. C
2
= 75.3 mod 97 = 31 mod 97
Vậy bản mã thu được là C = (50,31)
Vấn đề đối với hệ mã công khai nói chung và ElGammal nói riêng là
tốc độ (do phải làm việc với số nguyên lớn), bên cạnh đó dung lượng bộ nhớ
dành cho việc lưu trữ các khóa cũng lớn. Với hệ mã ElGammal chúng ta cần
gấp đôi bộ nhớ để chứa bản mã so với các hệ mã khác. Ngoài ra do việc sử
dụng các số nguyên tố nên việc sinh khóa và quản lý khóa cũng khó khăn
hơn so với các hệ mã khối. Trên thực tế các hệ mã khóa công khai thường
được sử dụng kết hợp với các hệ mã khối (mã hóa khóa của hệ mã) hoặc để
mã hóa các thông tin có dung lượng nhỏ và là một phần quan trọng của một
phiên truyền tin nào đó.
Thám mã với hệ mã ElGmamal:
Để thực hiện thám mã hệ mã ElGammal chúng ta cần giải bài toán
logarit rời rạc. Ở đây chúng ta sẽ xem xét thuật toán có thể áp dụng để giải
bài toán này.
Thuật toán Shank:

Số hóa bởi trung tâm học liệu

Thuật toán này còn có tên gọi khác là thuật toán cân bằng thời gian –
bộ nhớ (time – memory trade off), có nghĩa là nếu chúng ta có đủ bộ nhớ thì
có thể sử dụng bộ nhớ đó để giảm thời gian thực hiện của thuật toán xuống.
Input: số nguyên tố p, phần tử nguyên thủy a của Z
p
*
, số nguyên y
Output: tìm x sao cho a

x
mod p = y
Thuật toán:
Gọi m = [(p-1)
1/2
] (lấy phần nguyên)
Bước 1: tính a
mj
mod p với 0 <= j <= m-1
Bước 2: sắp xếp các cặp (j, a
mj
mod p) theo a
mj
mod p và lưu vào
danh sách L
1

Bước 3: tính ya
-I
mod p với 0 <= I <= m-1
Bước 4: sắp xếp các cặp (i, ya
-i
mod p) theo a
mj
mod p và lưu vào
danh sách L
2
Bước 5: tìm trong 2 danh sách L
1,
L

2
xem có tồn tại cặp (j, a
-i
mod p)
và (i, ya
-i
mod p) nào mà a
mj
mod p = ya
-I
mod p (tọa độ thứ hai của cặp bằng
nhau)
Bước 6: x = (mj + i) mod (p - 1). Kết quả này có thể kiểm chứng từ
công thức a
mj
mod p = ya
-i
mod p => a
mj + i
mod p = y mod p => x = (mj + i)
mod (p - 1).
Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)
1/2
], với giá trị
của m, chúng ta cần tính các phần tử thuộc hai danh sách L
1,
L
2
đều là các
phép toán lũy thừa phụ thuộc vào j và i, i và j lại phụ thuộc vào m nên có thể

nhận thấy là thuật toán này chỉ có thể áp dụng trong trường hợp mà p nhỏ.
1.3 So sánh ƣu nhƣợc điểm của các thuật toán
1.3.1 Ưu điểm
- Thuật toán RSA: Thực tế triển khai cho đến nay chứng tỏ rằng hệ
mã RSA là rất an toàn. Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của
toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài
toán RSA. Nếu 2 bài toán trên là khó (không tìm được thuật toá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.

Số hóa bởi trung tâm học liệu

Phá mã một phần phải được ngăn chặn bằng các phương pháp chuyển đổi
bản rõ an toàn.
- Thuật toán Diffie-Hellman: Có ích trong giai đoạn trao đổi khóa bí
mật của các thuật toán mật mã đối xứng. Tính an toàn trong trao đổi
khóa dựa trên việc khó giải của bài toán logarit rời rạc, Tuy nhiên, thuật
toán này không ngăn chặn được các tấn công theo phương thức người xen
giữa Man-In-The-Middle (MITM). Có thể hiểu nôm na về kiểu tấn công này
như là một kẻ nghe trộm. MITM hoạt động bằng cách thiết lập các kết nối
đến máy tính nạn nhân và lấy cắp các thông tin trao đổi giữa họ. Trong
trường hợp bị tấn công, nạn nhân cứ tin tưởng là họ đang truyền thông một
cách trực tiếp với nạn nhân kia, trong khi đó sự thực thì các luồng truyền
thông lại bị thông qua máy tính của kẻ tấn công. Kết quả là các máy tính này
không chỉ có thể giải mã được các dữ liệu nhạy cảm mà nó còn có thể gửi
xen vào cũng như thay đổi luồng dữ liệu để kiểm soát sâu hơn những nạn
nhân của nó.
- Hệ mã ElGammal giống nh -
.
1.3.2 Hạn chế
- Hệ mã RSA có nhược điểm là mã hoá chậm, cho nên thường dùng để

mã hoá các bản tin ngắn, trao đổi chìa khoá của các hệ mã đối xứng, đặc biệt
là trong giao thức xác nhận chủ thể.
-Thuật toán Diffie-Hellman: dùng để trao đổi khóa chứ không dùng để
mật mã hóa dữ liệu.
- ElGammal: n
,
ElGammal .

Số hóa bởi trung tâm học liệu

Nhận xét chung:
Kỹ thuật mật mã bất đối xứng hoàn toàn có thể đáp ứng được những
yêu cầu về bảo mật hệ thống như trong kỹ thuật mật mã đối xứng, mặc dù
tốc độ thực thi của mã bất đối xứng thường thấp hơn do bản chất thuật toán
dựa trên các thao tác số học chứ không dựa trên các thao tác xử lý bit. Hơn
nữa, mã bất đối xứng chỉ phù hợp với việc thực thi bằng phần mềm.
Mật mã bất đối xứng đảm bảo được 2 yêu cầu cơ bản của thông tin là
tính bí mật và tính toàn vẹn.







Số hóa bởi trung tâm học liệu

CHƢƠNG 2: HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ
2.1 Hàm băm
2.1.1 Tổng quan về hàm băm

Giới thiệu hàm băm
Hàm băm (hash function) là một giải thuật nhằm sinh ra các giá trị
băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi kí tự, một đối
tượng trong lập trình hướng đối tượng, v.v ). Giá trị băm đóng vai gần như
một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp nhận hiện
tượng trùng khóa hay còn gọi là đụng độ và cố gắng cải thiện giải thuật để
giảm thiểu sự đụng độ đó.
Hàm băm có nhiệm vụ băm thông điệp được đưa vào theo một thuật
toán h một chiều nào đó, rồi đưa ra một giá trị băm, có kích thước cố định.
Do đó người nhận không biết được nội dung hay độ dài ban đầu của thông
điệp đã được băm bằng hàm băm.
Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội
dung thông điệp từ giá trị băm này.

Hình 2.1: Hoạt động của một hàm băm tiêu biểu
Các yêu cầu của hàm băm
Nén thông tin bất kỳ về kích thước cố định, và giả thiết hàm băm là
công khai và không dùng khoá. Hàm băm chỉ phụ thuộc thông tin.
Hàm băm được sử dụng để phát hiện thay đổi của thông tin. Hàm băm
có thể sử dụng nhiều cách khác nhau với thông tin, Hàm băm thường được
kết hợp dùng để tạo chữ ký trên thông tin.

Số hóa bởi trung tâm học liệu

Có thể áp dụng cho mọi thông tin có kích thước tuỳ ý. Tuy nhiên phải
tạo đầu ra h có kích thước cố định, thường là 128 bit đến 1024 bit.
Dễ tính h = H(M) cho mọi mẫu tin M, hàm H tính toán nhanh, hiệu
quả phụ thuộc chặt vào thông tin M và không tính toán ngược lại.
Cho trước h không thể tìm được (rất khó) x sao cho H(x) = h. Tính
chất này gọi là tính chất một chiều, chiều tìm nghịch ảnh rất khó khăn, tuy

chiều tìm ảnh lại dễ dàng.
Cho x không thể tìm được y sao cho H(y) = H(x). Đây là tính chất
chống đỡ va chạm yếu, không tìm được thông điệp có cùng Hàm băm với
thông tin đã cho; và không thể tìm được x, y sao cho H(y) = H(x). Đây gọi
là tính chất chống đỡ va chạm mạnh, đây là yêu cầu cao hơn tính chống đỡ
va chạm yếu.
Đặc trƣng của hàm băm
Hàm băm h là hàm một chiều (one-way hàm băm) với các đặc tính:
- Với thông điệp đầu vào x thu được giá trị băm z = h(x) là duy nhất.
- Nếu dữ liệu trong thông điệp x thay đổi để thành thông điệp x’ thì
h(x’) h(x) => Hai thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng
khác nhau.
Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm
=> Với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể
(thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h.
Vai trò hàm băm trong mật mã hiện đại
Được dùng để xác thực tính nguyên vẹn dữ liệu;
Được dùng trong quá trình tạo chữ kí số trong giao dịch điện tử;
Vai trò cơ bản của các hàm băm mật mã là một giá trị băm coi như
ảnh đại diện thu gọn, đôi khi gọi là một dấu vết (imprint), vân tay số (digital
fingerprint), hoặc tóm lược thông báo (message digest) của một xâu đầu vào,
và có thể được dùng như là một định danh duy nhất với xâu đó;
Các hàm băm thường được dùng cho toàn vẹn dữ liệu kết hợp với các
lược đồ chữ kí số;

×