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

Các thuật toán mã hoá, chữ ký điện tử và ứng dụ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 (13.16 MB, 87 trang )

MỤC LỤC
LỜI NÓI ĐẦU .............................................................................................................3
Chương 1 .....................................................................................................................4
LÝ THUYẾT CHUNG VỀ MÃ HOÁ ........................................................................4
1.1.Khái niệm mã hóa............................................................................................ 4
1.2.Lý thuyết mã hoá .............................................................................................. 4
1.2.1.Mã hoá dùng nguồn.....................................................................................5
1.2.2.Mã hoá trên kênh truyền..............................................................................5
1.3.Lý thuyết mật mã.............................................................................................. 6
1.3.1.Sự hình thành của khoa học mật mã ...........................................................7
1.3.2.Sự tiến triển của các hệ mật mã hiện đại .....................................................7
1.4.Các phương thức mã hoá cơ bản.................................................................... 11
1.5.Các chức năng băm nhỏ mã hoá .................................................................... 12
1.6.Các phương thức tạo nên khoá mã hoá ngẫu nhiên ...................................... 13
1.7.Sức mạnh của các thuật toán mã hoá............................................................. 14
1.8.Phá mã và phá mã một hệ thống .................................................................... 15
Chương 2. ..................................................................................................................19
TỔNG QUAN VỀ CÁC HỆ MÃ CƠ BẢN...............................................................19
2.1.Mã hoá công khai............................................................................................ 19
2.1.1.Khái niệm mã hoá công khai .....................................................................19
2.1.2.Ứng dụng của mã hoá công khai ...............................................................20
2.1.3.Độ an toàn..................................................................................................21
2.2.Thuật toán mã hoá RSA ................................................................................. 23
2.2.1.Giới thiệu thuật toán mã hoá RSA .............................................................23
2.2.2.Hoạt động...................................................................................................24
2.2.3.Ví dụ...........................................................................................................26
2.2.4.Quá trình chuyển đổi văn bản rõ ...............................................................27
2.2.5.An ninh ......................................................................................................28
2.3.Thuật toán mã hoá DES ................................................................................. 29
2.3.1.Giới thiệu về thuật toán DES .....................................................................29
2.3.2.Quy trình của thuật toán DES ...................................................................30


2.3.3.An ninh và ứng dụng .................................................................................32
2.4.Sơ đồ chữ kí Elgamal...................................................................................... 34
2.4.1.Giới thiệu và định nghĩa sơ đồ chữ kí Elgamal..........................................34
2.4.2.Các cách giả mạo chữ kí trong sơ đồ chữ kí Elgamal: ..............................35
2.4.3.Cách tấn công sơ đồ chữ kí Elgamal .........................................................37
2.5.Hàm băm mật mã ........................................................................................... 38
2.5.1.Tổng quan về hàm băm..............................................................................38
2.5.2.Ứng dụng ...................................................................................................39
2.5.3.Các phương thức tạo nên khoá mã hoá ngẫu nhiên..................................40
Chương 3 ...................................................................................................................42
CHỮ KÝ ĐIỆN TỬ VÀ CÁC VẤN ĐỀ LIÊN QUAN.............................................42
3.1.Chữ ký điện tử ................................................................................................ 42
3.1.1.Lịch sử hình thành chữ ký điện tử.............................................................42
3.1.2.Mục đích của chữ ký điện tử......................................................................42
3.1.3.Đặc trưng của chữ ký.................................................................................42
3.1.4.Các chuẩn của chữ ký số ...........................................................................42
3.1.5.Định nghĩa chữ ký điện tử .........................................................................43

1


3.1.6.Những hàm hỗ trợ cho chữ ký số...............................................................45
3.1.7.Sự khác biệt của chữ ký điện tử với chữ ký tay..........................................45
3.1.8.Các ưu điểm của chữ ký điện tử.................................................................46
3.1.9.Các yêu cầu của chữ ký..............................................................................47
3.1.10.Mô tả toán học của chữ ký điện tử...........................................................48
3.2.Chứng chỉ số.................................................................................................... 49
3.2.1.Vì sao phải dùng chứng chỉ số? .................................................................49
3.2.2.Chứng chỉ số là gì? ....................................................................................50
3.2.3.Nhà cung cấp chứng thực số CA ...............................................................52

3.2.4.Cơ sở hạ tầng khoá công khai – PKI .........................................................52
3.2.5.Nhà quản lý đăng ký – RA .........................................................................53
3.2.6.Lợi ích của chứng chỉ số............................................................................53
3.3.Một số vấn đề đặt ra trong thực tế............................................................... ..56
3.3.1.Chọn mô hình nhà cung cấp chứng thực số (CA) .....................................56
3.3.2.Chữ ký điện tử theo phương án ký một lần hay ký hai lần ........................57
3.3.3.Cấp chữ ký số có giá trị như con dấu được hay không? ............................59
3.3.4.Vấn đề cơ sở hạ tầng cho giao dịch điện tử nói chung và chữ ký số nói
riêng……………………………………………………………………………….59
3.3.5.Sự đồng bộ .................................................................................................60
3.3.6.Vấn đề nhận thức của người sử dụng........................................................61
Chương 4 ...................................................................................................................62
CÁC KẾT QUẢ CÀI ĐẶT........................................................................................62
4.1.Ngôn ngữ sử dụng........................................................................................... 62
4.1.1.Nền tảng .Net .............................................................................................62
4.1.2.Ngôn ngữ C#..............................................................................................62
4.1.3.Giải thuật MD5 ..........................................................................................63
4.2.Dịch vụ truyền file .......................................................................................... 65
4.2.1.Giới thiệu ...................................................................................................65
4.2.2.Cơ sở lý thuyết............................................................................................66
4.2.3.Một số lệnh của FTP..................................................................................67
4.2.4.Một số ưu điểm của FTP............................................................................68
4.3.Giao diện chương trình................................................................................... 69
4.3.1.Giao diện chính của chương trình.............................................................69
4.3.2.Giao diện tạo khoá RSA.............................................................................70
4.3.3.Giao diện chương trình trước khi mã hoá tài liệu .....................................70
4.3.4.Giao diện chương trình sau khi mã hoá tài liệu ........................................71
4.3.5.Giao diện chương trình sau khi giải mã tài liệu ........................................71
4.3.6.Giao diện chương trình trước khi truyền file.............................................72
4.3.7.Giao diện chương trình sau khi truyền file................................................72

4.4.Kết quả............................................................................................................ 73
4.5.Phụ lục chương trình ...................................................................................... 73
1.Kết quả đạt được ............................................................................................... 86
2.Hạn chế .............................................................................................................. 86
3.Hướng phát triển của đề tài .............................................................................. 86
TÀI LIỆU THAM KHẢO .........................................................................................87
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .........Error! Bookmark not defined.

2


LỜI NÓI ĐẦU
Trong những năm gần đây, sự phát triển vượt bậc của công nghệ thông tin
đã làm tăng số lượng giao dịch thông tin trên mạng Internet một cách đáng kể,
đặc biệt là thư viện điện tử, tin tức điện tử, … Do đó mà số lượng văn bản xuất
hiện trên mạng Internet cũng tăng theo với một tốc độ chóng mặt.
Với lượng thông tin đồ sộ như vậy, một yêu cầu lớn đặt ra với chúng ta là
làm sao để thông tin có thể được truyền tải một cách an toàn và đáng tin cậy. Để
giải quyết vấn đề này, người ta đưa ra một cách vừa đơn giản, vừa hiệu quả là sử
dụng chữ ký số. Việc sử dụng chữ ký số ngày càng có nhiều ứng dụng trong thực
tế, không chỉ giới hạn trong ngành Công nghệ thông tin, ngành Mật mã mà còn
được áp dụng trong một số lĩnh vực khác như trong lĩnh vực ngân hàng để xác
thực người gửi, người nhận, lĩnh vực Viễn thông để sử dụng các thẻ thông
minh,…
Em đã tập trung thực hiện đề tài “Các thuật toán mã hoá, chữ ký điện tử và
ứng dụng” nhằm tìm hiểu và thử nghiệm các phương pháp mã hoá dữ liệu. Trong
đồ án này em tìm hiểu một số thuật toán mã hoá dữ liệu như RSA, DES, chữ ký
điện tử,… và xây dựng chương trình mã hoá sử dụng chữ ký điện tử.
Nội dung của đồ án bao gồm 4 chương:
- Chương 1: Lý thuyết chung về mã hoá

- Chương 2: Tổng quan về các hệ mã cơ bản
- Chương 3: Chữ ký điện tử và các vấn đề liên quan
- Chương 4: Các kết quả cài đặt

3


Chương 1
LÝ THUYẾT CHUNG VỀ MÃ HOÁ

1.1. Khái niệm mã hóa
Trong thực tế, một người muốn gửi thông điệp tới người nhận và không
muốn cho một người nào khác biết được nội dung của nó. Tuy nhiên sẽ xuất hiện
trường hợp một người thứ 3 có thể mở được thông điệp và đọc được nội dung
của nó.
Trong thuật ngữ mã hoá, thông điệp được gọi là plaintext hay cleartext
(tạm dịch là chữ thường). Mã hoá nội dung của thông điệp để che giấu đi nội
dung của nó được gọi là thuật mã hoá. Thông điệp đã được mã hoá gọi là văn bản
mã hoá (ciphertext). Quá trình lấy nội dung của ciphertext gọi là decryption (giải
mã). Mã hoá và giải mã thường sử dụng một key (chìa khoá) và phương thức mã
hoá mà quá trình giải mã chỉ có thể thực hiện được bởi người biết chìa khoá.
Thuật mã hoá là nghệ thuật hay khoa học để giữ cho thông điệp bí mật.
Phá mã là nghệ thuật lấy nội dung văn bản mã hoá mà không cần đến chìa khoá.
Người phá mã gọi là cryptographers và người mã hoá gọi là cryptanalysts.
Thuật mã hoá đi liền với các phương thức bảo mật thông tin, chứng thực,
chữ ký điện tử, tiền tệ điện tử và các ứng dụng khác. Cryptology là một nhánh
của toán học nghiên cứu về các phương thức mã hoá.
1.2. Lý thuyết mã hoá
Lý thuyết mã hóa (tiếng Anh: coding theory) là một ngành của toán học
(mathematics) và khoa học điện toán (computer science) nhằm giải quyết tình

trạng lỗi dễ xảy ra trong quá trình truyền thông số liệu trên các kênh truyền có độ
nhiễu cao (noisy channels), dùng những phương pháp tinh xảo khiến phần lớn
các lỗi xảy ra có thể được chỉnh sửa. Nó còn xử lý những đặc tính của mã
(codes), và do vậy giúp phù hợp với những ứng dụng cụ thể.

4


Có hai loại mã hiệu:
1. Mã hóa dùng nguồn (Mã hoá Entropy (Entropy encoding))
2. Mã hóa trên kênh truyền (Sửa lỗi ở phía trước (Forward error
correction))
Vấn đề thứ nhất chúng ta nói đến là mã hóa dùng nguồn. Ý định của
phương pháp này là nén dữ liệu từ chính nguồn của nó, trước khi truyền đi, giúp
cho việc truyền thông có hiệu quả hơn. Chúng ta chứng kiến thói quen này hằng
ngày trên Internet, nhất là trong cách dùng "zip" nén dữ liệu để giảm lượng dữ
liệu phải truyền, giảm nhẹ gánh nặng cho mạng lưới truyền thông, đồng thời thu
nhỏ cỡ tập tin.
Vấn đề thứ hai là mã hóa trên kênh truyền. Bằng việc cộng thêm những bit
mới vào trong dữ liệu được truyền, còn gọi là bit chẵn lẻ (parity bits), kỹ thuật
này giúp cho việc truyền thông tín hiệu chính xác hơn trong môi trường nhiễu
loạn của kênh truyền thông.
1.2.1. Mã hoá dùng nguồn
* Mục đích của mã hóa dùng nguồn là lấy dữ liệu nguồn và thu nhỏ chúng
lại.
* Nguyên lý:
Entrôpi của nguồn là một đo đạc về tin tức. Căn bản mà nói, mã của
nguồn được dùng để loại bỏ những phần thừa, không cần thiết còn tồn trong
nguồn, để lại phần nguồn với số lượng bit ít hơn, nhưng với nhiều tin tức hơn.
Mỗi loại mã hóa nguồn sử dụng một kỹ thuật khác nhau hòng đạt được

giới hạn entrôpi của nguồn. C(x)  H(x), trong đó H(x) là entrôpi của nguồn (tần
số bit), và C(x) là tần số bit sau khi số liệu đã được nén. Cụ thể là, không có
phương pháp mã hóa nguồn nào có thể tốt hơn giới hạn entrôpi của ký hiệu (the
entropy limit of the symbol).
1.2.2. Mã hoá trên kênh truyền
Mục đích của lý thuyết Mã hóa trên kênh truyền (channel encoding
theory) là tìm những mã có thể truyền thông nhanh chóng, chứa đựng nhiều mã
ký (code word) hợp lệ và có thể sửa lỗi (error correction) hoặc ít nhất phát hiện

5


các lỗi xảy ra (error detection). Các mục đích trên không phụ thuộc vào nhau, và
mỗi loại mã có công dụng tối ưu cho một ứng dụng riêng biệt. Những đặc tính
mà mỗi loại mã này cần còn tuỳ thuộc nhiều vào xác suất lỗi xảy ra trong quá
trình truyền thông.
Từ "Lý thuyết mã hóa đại số" ám chỉ để một chi nhánh của lý thuyết mã
hóa trên kênh truyền, trong đó đặc tính của mã được biểu hiện bằng các đại số và
dựa vào đó mà nghiên cứu sâu hơn.
Lý thuyết mã hóa đại số được chia ra làm hai loại mã chính
1. Mã khối tuyến tính (Linear block codes)
2. Mã kết hợp (Convolutional codes)
Chúng phân tích ba đặc tính sau của mã là:
Chiều
Tổng

dài của mã (code word length)
số các mã ký hợp lệ (total number of valid code words)

Khoảng


cách Hamming tối thiểu giữa hai mã ký hợp lệ (the minimum

Hamming distance between two valid code words)
Mã khối tuyến tính mang tính năng tuyến tính (linearity), chẳng hạn tổng
của hai mã ký nào đấy lại chính là một mã ký; và chúng được ứng dụng vào các
bit của nguồn trên từng khối một.
Mã kết hợp (Convolutional codes) được sử dụng trong các modem dải tần
âm (voiceband modems) (V.32, V.17, V.34) và trong các điện thoại di động
GSM3, cũng như trong các thiết bị truyền thông của quân đội vũ trang và trong
các thiết bị truyền thông với vệ tinh.
1.3. Lý thuyết mật mã
Lý thuyết mật mã (bao gồm cả thám mã) là khoa học nghiên cứu về mã
hoá và giải mã thông tin. Đây là một trong những kỹ thuật đảm bảo an toàn cao
nhất cho những khối lượng lớn dữ liệu trong các hệ thống máy tính cũng như trên
các mạng truyền thông cần được bảo vệ nghiêm ngặt và có tính hiệu quả chống
lại sự trộm và giả mạo thông tin. Lý thuyết này sẽ giúp những kỹ sư và những kỹ
thuật viên làm việc trong nhiều lĩnh vực liên quan tới xử lý thông tin, tìm hiểu,

6


nắm bắt được những nguyên lý, phương pháp và thuật toán cơ bản của lý thuyết
mật mã
1.3.1. Sự hình thành của khoa học mật mã
Mật mã là nghệ thuật viết các thông báo dưới dạng mã hoá (còn gọi là
cách viết bí mật), là một lĩnh vực khiến một số người liên tưởng tới một thế giới
đen tối và bí hiểm của hoạt động gián điệp. Với một số người khác, việc thao tác
và điều khiển các con số lại gợi nhớ tới khoa tướng số và nhiều lĩnh vực bí hiểm
khác. Ngay từ thời xa xưa, không có khả năng giải mã những bí mật của thiên

nhiên, con người tìm thấy niềm vui trong việc thiết kế những hệ mật mã cũng
như trong sự thách đố giải mã những thông tin được mã hoá bởi những người
khác.
Khoa học mật mã trong những năm gần đây trở nên quan trọng, được
quan tâm nghiên cứu và ứng dụng trên nhiều góc độ khác nhau do sự kiện là các
thông tin trên các mạng truyền dữ liệu công cộng thực sự có thể được mọi người
truy cập. Mật mã học hiện đại đã phát triển nhanh chóng, dựa trên những thành
tựu của lý thuyết thông tin, lý thuyết độ phức tạp tính toán, và đặc biệt là lý
thuyết số trong đó có những kết quả đã được thiết lập từ lâu, nay mới có cơ hội
ứng dụng trong thực hành. Cách đây không lâu, một số hệ mật mã tưởng như an
toàn đã bị phá vỡ và phải huỷ bỏ (chẳng hạn các mã ma trận tuyến tính và các
sách mã dựa trên một từ điển).
Ngày nay, khoa học mật mã đã được làm phong phú thêm với các phương
pháp rất an toàn, chắc chắn, được nhiều nhà toán học và tin học nổi tiếng tham
gia nghiên cứu, đã rời bỏ thế giới bí hiểm của những hoạt động tình báo, vượt
qua những thành luỹ của công nghiệp, của thương nghiệp, của tài chính, của
chiến lược chính trị và ngoại giao để thâm nhập mạnh mẽ vào những lĩnh vực
này.
1.3.2. Sự tiến triển của các hệ mật mã hiện đại
1.3.2.1.

Năm mươi năm phát triển

Những người đã xây dựng những kỹ thuật mã hoá hiện được dùng cho các
nhà tin học và cho sự an toàn của những dữ liệu của họ không phải là những

7


người, sau khi qua khỏi cuộc thế chiến thứ hai, đã có được nghệ thuật và kiến

thức đầy đủ về khoa học mật mã. Ngày nay, không thể chối cãi là phần lớn các
công trình trong quân sự được thực hiện trong chiến tranh về truyền và ngăn chặn
các thông báo được mã hoá vẫn còn được giữ kín, chưa công bố. Từ đó tới nay,
các nhà toán học thuộc nhiều quốc gia khác nhau đã bỏ nhiều công sức tìm các
phương pháp và các công cụ ngày càng phức tạp và tin cậy hơn. việc tìm ra
những phương pháp mật mã với độ an toàn hầu như tuyệt đối vẫn là mối quan
tâm của nhiều nhà nghiên cứu trên thế giới, làm việc không những trong quân đội
mà còn trong lĩnh vực ngân hàng và công nghiệp.
Từ khi thuật toán RSA được thiết kế, sử dụng các số nguyên tố, lý thuyết
mật mã hướng tới việc sử dụng các bài toán toán học phức tạp để xây dựng
những thuật toán sao cho thời gian cần cho việc giải mã là quá lớn, không thể
chấp nhận được. Trong những năm 80 của thế kỷ trước, đã xuất hiện 2 hệ mật mã
chuẩn cho tới nay chưa bị phá vỡ: các hệ DES và RSA. Và cũng chỉ trong những
năm gần đây, nhờ vào tốc độ tính toán nhanh của các máy vi tính mà khoa học
mật mã mới trở thành một công cụ được nhiều người sử dụng.
1.3.2.2.

Mô tả không hình thức một hệ thống mật mã.

Để gửi một thông tin bí mật tới một nơi nhận nào đó, ta chọn một thuật
toán tin cậy (chắc chắn), một hay nhiều khóa an toàn và một môi trường truyền
dẫn (một người, một lá thư, hay một mạng truyền thông điện tử công cộng hay
riêng tư). Ta có thể tạo ra vô số các thuật toán mã hóa không khoá, với độ phức
tạp chưa từng thấy và một độ an toàn hầu như hoàn toàn, chừng nào mà thuật
toán còn chưa ai biết. Một người, ít nhiều có am hiểu về mật mã, đều có thể đề
xuất một phương pháp viết mật mã loại thường thường bậc trung”. Và sự thực là
trên thế giới có những lúc đã có rất nhiều những người làm mật mã không
chuyên (tài tử) và bán chuyên nghiệp. Sau này chúng ta sẽ có dịp làm quen với
một số kỹ thuật cơ sở được kết hợp và tổ hợp với nhau để xây dựng những thuật
toán rất tốt.

Trong khi đó, thám báo là khoa học nghiên cứu các phương pháp giải mã để phá
các hệ mật và không gì có thể chứng minh tính an toàn của các hệ mật, là sản

8


phẩm của những người làm mật mã không chuyên, chừng nào mà các chuyên gia
trong lĩnh vực mật mã chưa tuyên bố gì về tính không thể bị phá của những hệ
đó.
Như đã biết, có hai cách chính để giữ cho một thông báo cần gửi đi khỏi
lọt vào tay kẻ thù:
- Ta có thể cất dấu, che dấu thông báo và hy vọng kẻ thù sẽ không tìm
thấy thông báo, và đó là sự che dấu thông báo (steganography). Thí dụ viết thông
báo bằng một loại mực không nhìn thấy. Người nhận sẽ đọc được thông báo bằng
cách cho tác dụng nhiệt hoặc hóa chất đó lên nó.
- Ta có thể xáo trộn thông báo và hy vọng rằng kẻ thù không có khả năng
sắp đặt lại nó về dạng ban đầu, và đó chính là mật mã (cryptography).
Đương nhiên che dấu thông tin và viết mật mã có thể được tổ hợp với
nhau: thông báo có thể được xáo trộn và sau đó được che dấu (cất dấu) để có
thêm an toàn.
Mặt khác, cũng cần biết là mật mã có mối liên hệ chặt chẽ với một bộ
phận của lý thuyết thông tin, cụ thể là lý thuyết mã hoá (coding theory). Lý
thuyết mã hoá bao gồm việc dịch thông tin thuộc loại bất kỳ (văn bản, dữ liệu
khoa học, hình ảnh, âm thanh, vv...) sang một dạng chuẩn cho việc truyền tin và
bảo vệ thông tin đó chống lại sự bóp méo do tiếng ồn ngẫu nhiên. Tuy nhiên, rõ
ràng có một sự khác nhau lớn giữa nhiễu gây bởi tiếng ồn ngẫu nhiên và nhiễu
gây bởi kẻ thù cố ý, và như vậy các kỹ thuật được sử dụng cũng hoàn toàn khác
nhau.
Theo truyền thống, hai bên cần liên lạc với nhau được gọi theo thứ tự là A
(Alice) và B (Bob), còn kẻ trộm tin cố gắng tìm cách đọc thông báo của họ là E

(Eve). A và B truy cập được tới khoá, còn E thì không thể. Các hộp đen có đầu
vào là bản rõ và khoá và có đầu ra là bản mã (trường hợp của A), hay có đầu vào
là bản mã và khoá và có đầu ra là bản rõ (trường hợp của B).
Ý nghĩa của các thuật ngữ như sau:
Bản rõ (Plaintext): Bản rõ không hoàn toàn giống như thông báo cần gửi
đi. Thông báo có thể phải dịch sang một dạng chuẩn nào đó để mã hoá. chẳng

9


hạn, nó bỏ qua các dấu chấm câu, chuyển thành mã ASCII, hoặc một dãy các số,
vv... nhưng không có bí mật gì trong giai đoạn này, và như vậy biết bản rõ tương
đương với biết thông báo.
Bản mã (Ciphertext), chính là cái thực sự được truyền đi. Nói chung A và
B phải giả định là E có thể đặt tay lên bản mã, và họ phải thiết kế hệ thống sao
cho E không có khả năng khôi phục lại được bản rõ.
Khoá (Key): Việc mã hoá/lập mã sử dụng một thông tin thêm nào đó,
được gọi là khoá, có thể được thay đổi theo từng lần truyền. Cả A và B phải có
thông tin về khoá, có thể được thay đổi theo từng lần truyền. Cả A và B phải có
thông tin về khoá để có thể tiến hành mã hoá và giải mã.
Có ba loại phương pháp mã hoá chính:
Dịch chuyển (Transposition): Thứ tự của các chữ trong bản rõ được sắp
xếp lại theo một cách có hệ thống. Trong trường hợp này, khoá là phép hoán vị
được áp dụng cho các vị trí.
Thay thế (Substitution): Các chữ cá thể được thay thế bằng các chữ khác
theo một cách có hệ thống và như vậy có thể phức tạp hơn việc chỉ dùng đúng
một phép hoán vị. Ta có thể áp dụng các hoán vị khác nhau ở các vị trí khác
nhau. Trong trường hợp này khoá là dãy các hoán vị được áp dụng.
Sách mã (Codebook): Các từ đầy đủ trong thông báo được thay thế bằng
các từ khác, với ý nghĩa hoàn toàn khác. Khóa là sách mã, danh sách các từ và

những thay thế của chúng.
Đương nhiên các loại mật mã nêu trên không hoàn toàn tách biệt nhau và
một số hoặc tất cả có thể được cùng dùng với nhau.
Cần lưu ý thêm là từ “mã” trong lý thuyết truyền tin được dùng với nhiều
nghĩa khác nhau. Thường nó có nghĩa là một lược đồ cho việc dịch thông tin từ
một khuôn dạng này sang một khuôn dạng khác. Chẳng hạn như mã Morse
(trước đây thường được dùng trong điện tín (telegraph) và liên lạc radio) sẽ dịch
từ “Code” thành một dãy gồm các dấu chấm và dấu gạch (thường đọc là tạch, tè)

10


Trong khi mã ASCII (được dùng trong truyền thông máy tính và biểu diễn
dữ liệu) sẽ dịch từ “Code” thành bốn số 67, 111, 100, 101, hay trong ký pháp nhị
phân là dãy: 1000011110111111001001100101
Trong khi đó, thuật ngữ “mật mã” được chúng ta hiểu là một hệ mật mã,
hoặc là bản mật mã, là kết quả của việc mã hoá một thông báo với việc sử dụng
một hệ mật.
Trong lý thuyết mật mã, một mã thay một số từ khoá trong thông báo bằng
những từ khác hay bằng những tổ hợp của các ký tự, như được xác định trong
sách mã. Điều này đôi khi đối lập với một hệ mật mã (cách viết bí mật - cipher)
lại thao tác trên các chữ hay các ký tự.
Ví dụ chúng ta hãy xét hệ mật Pig-Latin là một dạng đơn giản của hệ mật
chuyển dịch với các quy tắc lập mã sau:
Với các từ được bắt đầu với một phụ âm đơn, lấy phụ âm đó khỏi từ và
thêm nó vào cuối từ. Sau đó thêm ay vào sau phụ âm. Sau đây là một số thí dụ:
cat = atcay
dog = ogday
Với các từ bắt đầu với hai hoặc nhiều phụ âm, lấy nhóm phụ âm đó khỏi
từ và thêm chúng vào cuối từ. sau đó thêm ay vào cuối từ, ngay sau nhóm phụ

âm vừa được thêm vào. Sau đây là một số thí dụ:
thick = ickthay
flight = ightflay
Với các từ bắt đầu bằng một nguyên âm, hãy thêm yay vào cuối từ thí dụ:
is = isyay
apple = appleyay
1.4. Các phương thức mã hoá cơ bản
Một phương thức mã hoá và giải mã được gọi là mật mã (cipher). Một vài
phương thức mật mã dựa trên bí mật của thuật toán, những thuật toán này chỉ
được chú ý về mặt lịch sử và không phù hợp với thực tại. Một thuật toán mã hoá
hiện đại sử dụng một khoá để điều khiển quá trình mã hoá và giải mã, một thông
điệp có thể được giải mã chỉ khi khoá giải mã đúng với khoá mã hoá.

11


Có 2 lớp của phương thức mã hoá là khoá đối xứng (khoá bí mật) và khoá
không đối xứng (khoá public). Sự khác nhau là thuật toán đối xứng sử dụng cùng
1 khoá cho quá trình mã hoá và giải mã (hoặc khoá giải mã có thể nhận được dễ
dàng từ khoá mã hoá), trong khi đó phương thức bất đối xứng sử dụng các khoá
khác nhau cho quá trình mã hoá và giải mã, và khoá giải mã không thể nhận
được từ khoá mã hoá.
Khoá đối xứng có thể chia thành stream cipher (mã dòng) và block cipher
(mã cụm). Mã dòng có thể mã hoá một bit đơn của plaintext tại một thời điểm,
trong khi đó mã cụm mã hoá một nhóm các bit (thường là 64 bit trong các
phương thức mã hoá hiện đại) và mã hoá chúng chung lại thành một đơn vị đơn.
Mã hoá bất đối xứng (public) cho phép khoá mã được công khai (nó có
thể được công bố trên báo), cho phép mọi người mã hoá với khoá này, trong đó
chỉ có người nhận thực sự (người biết khoá giải mã) mới giải mã được thông
điệp. Khoá mã được gọi là khoá chung (public) và khoá giải mã được gọi là khoá

riêng (private) hay khoá bí mật (secret key).
Phương thức mã hóa hiện đại không còn sử dụng mã hoá bút và giấy. Các
phương thức mã hoá mạnh được thiết kế để thực thi bởi các máy tính hoặc các
thiết bị phần cứng đặc biệt. Trong hầu hết các phương thức mã hoá hiện đại, mã
hoá được thực hiện bởi các phần mềm.
Thông thường mã hoá đối xứng thực thi nhanh hơn trên các máy tính so
với mã hoá bất đối xứng. Trong thực tế chúng thường được sử dụng cùng nhau,
trong đó khoá public được sử dụng để tạo nên khoá mã hoá ngẫu nhiên, và khoá
ngẫu nhiên được dùng để mã hoá thông điệp thực sự sử dụng một thuật toán đối
xứng. Đây thường được gọi là mã hoá lai.
1.5. Các chức năng băm nhỏ mã hoá
Các chức năng băm nhỏ mã hoá được sử dụng trong nhiều trường hợp, ví
dụ như để tính toán trong việc sắp xếp các thông điệp khi tạo nên một chữ kí điện
tử. Một hàm băm đưa các bit của thông điệp thành một giá trị băm có giá trị cố
định. Một hàm băm sẽ làm cho việc tìm lại một thông điệp đã bị băm trở nên cực
kì khó khăn.

12


Các chức năng băm nhỏ thường tạo ra các giá trị băm 128 bit trỏ lên. Con
số 2 mũ 128 lớn hơn rất nhiều số lượng các thông điệp được trao đổi trên toàn
cầu. Lí do tại sao lại cần thiết hơn 128 bit dựa trên birthday paradox. Birthday
paradox chỉ ra rằng sự xắp xếp của 128 bit sẽ gấp đôi so với trường hợp mã hoá
64 bit. Việc bộ nhớ rẻ hơn khiến cho việc mã hoá lớn hơn 128 bit trở thành hiện
thực như 160 bit hiện nay.
Rất nhiều thuật băm nhỏ là miễn phí. Thuật băm nhỏ miễn phí nổi tiếng
nhất là họ MD, như MD4 và MD5. MD4 đã bị phá và MD5 mặc dù đang được
dùng rộng rãi, cũng sẽ bị phá. SHA-1 và RipeMD-160 là những ví dụ tốt khi bạn
muốn nghiên cứu về mã hoá.

1.6. Các phương thức tạo nên khoá mã hoá ngẫu nhiên
Phương thức mã hoá ngẫu nhiên tạo nên các số ngẫu nhiên được sử dụng
trong các ứng dụng mã hoá, ví dụ như các khoá. Các phương thức tạo nên số
ngẫu nhiên trong các ứng dụng ngày nay không thể sử dụng để tạo nên số mã hoá
ngẫu nhiên vì chúng chỉ tạo nên 1 con số ngẫu nhiên tĩnh, không thể chống lại
được phương pháp đoán của những kẻ phá khoá
Trong trường hợp tối ưu, các số ngẫu nhiên được dựa trên tài nguyên vật lí
thực tế ngẫu nhiên mà không thể đoán được. Những nguồn này có thể là tín hiệu
nhiễu trong một thiết bị bán dẫn, tín hiệu bit thấp nhất của một âm thanh đầu vào,
hoặc thời gian trễ giữa các phiên ngắt của các thiết bị hoặc việc gõ bàn phím của
người dùng. Nhiễu từ thiết bị vật lý sau đó được chế thành hàm băm để tạo nên
sự lệ thuộc giữa các bit. Thường là một lượng lớn bit (vài nghìn bít) được sử
dụng để tạo nên sự ngẫu nhiên, và trong một thuật toán mã hoá mạnh mỗi bít
trong nhóm này lại phụ thuộc vào mỗi bit trong nhiễu đầu vào và mọi bit của
nhóm.
Khi tính ngẫu nhiên vật lí không đảm bảo, số ngẫu nhiên giả được sử
dụng. Trường hợp này có thể phiền phức, nhưng thường được dùng trong các
máy tính nói chung. Chúng ta cần có được nhiễu của môi trường có thể là từ thiết
bị bên trong, trạng thái tài nguyên , trạng thái mạng, trễ bàn phím... Điều mấu

13


chốt là dữ liệu không thể đoán được bởi một kẻ tấn công bên ngoài, để đạt được
điều này nhóm số mã hoá phải gồm ít nhất 128 bit.
Một hàm băm ngẫu nhiên mạnh thường bao hàm 1 lượng lớn pool ngẫu
nhiên (nhóm số mã hoá). Các bit trả về từ pool bởi lấy dữ liệu từ pool, thường là
chạy các dữ liệu thông qua hàm băm để tránh làm ảnh hưởng tới nội dung của
pool. Khi cần nhiều bit hơn, pool được trộn lẫn nội dung mã hoá của nó bởi một
thuật mã hoá phù hợp với một khoá ngẫu nhiên (được lấy từ phần trả về của

pool). Trong một chế độ mà mỗi bit của pool phụ thuốc vào mọi bit của pool.
Một nhiễu môi trường được trộn lẫn vào pool để đảm bảo việc đoán giá trị trước
hoặc sau sau khi đã trộn sẽ trở nên khó thành hiện thực.
Mặc dù thuật toán tạo số mã hoá ngẫu nhiên mạnh không phải là khó tạo
nên nhưng thường là bị xem nhẹ và nếu như nó được thiết kế tồi thì sẽ trở thành
điểm yếu đánh chú ý của hệ thống.
1.7. Sức mạnh của các thuật toán mã hoá
Các hệ thống mã hoá tốt luôn luôn được thiết kế để càng khó bẻ gẫy càng
tốt. Trong thực tế có thể xây dựng nên một hệ thống không thể phá vỡ (mặc dù
nó không được phát triển). Sự quan tâm và trình độ luôn phải được chú ý tới.
Mọi kĩ sư cần phải hiểu rõ được các khái niệm về bảo mật và được đào tạo.
Theo lý thuyết, một phương thức mã hoá với một khoá có thể bị bẻ bởi
việc thử mọi khoá theo tuần tự.Nếu sử dụng cách bẻ khoá hàng loạt để thử mọi
khoá, thì sự tính toán tăng lên nhiều lần theo sự tăng lên của độ dài khoá. Một
khoá 32 bit đòi hỏi 2 mũ 32 (khoảng 10 mũ 9) bước thử. Điều này có thể được
thực hiện tại một máy tính cá nhân. Một khoá 40 bit đòi hỏi một máy tính cá
nhân thử trong một tuần lẽ. Một hệ thống mã hoá 56 bit (như DES) đòi hỏi nhiều
máy tính cá nhân hợp tác trong vòng vài tháng nhưng có thể dễ dàng phá bởi một
thiết bị phần cứng đặc biệt. Giá của phần cứng này có thể chấp nhận được đối với
một tổ chức tội phạm, một công ty hàng đầu hay một chính phủ. Khoá 64 bit hiện
nay có thể phá bởi một chính phủ. Khoá 80 bit sẽ bị phá trong vòng vài năm tới,
khoá 128 bit sẽ an toàn trong một tương lai gần. Những khoá lớn hơn vẫn có thể
được dùng hiện nay.

14


Tuy nhiên độ dài khoá không phải là yếu tố duy nhất. Nhiều mã hoá có thể
bị phá không bằng cách thử mọi khả năng (brute force). Nói chung, rất khó để
thiết kế một thuật mã hoá mà không thể bị bẻ. Tự thiết kế một thuật mã hoá của

riêng bạn có thể là thú vị, nhưng không nên dùng trong các ứng dụng thực tế trừ
khi bạn là chuyên gia và biết được chính xác điều bạn đang làm.
Rất khó để giữ bí mật cho mật thuật toán mã hoá bởi một người nào đó
quan tâm có thê thuê một tay bẻ khoá để dịch lại và khám phá ra phương pháp
mã hoá của ta. Thực tế cho thấy đã có nhiều thuật toán mã hoá bị đưa ra công
khai.
Độ dài khoá sử dụng trong khoá public thường dài hơn so với khoá đối
xứng do cấu trúc mở rộng của thuật mã hoá. Vấn đề không phải ở việc đoán khoá
đúng mà là nhận được khoá tương xứng từ khoá public. Đối với RSA , điều này
có thể được thực hiện bằng cách phân tích một số nguyên lơn thành 2 thừa số.
Trong một số hệ thống mã hoá khác cần thiết phải tính toán một tổ hợp loga
thành một số nguyên lớn.
Để có được ý tưởng về sự phức tạp của hệ mã hoá RSA, một tổ hợp 256
bit có thể được phân thành thừa số tại nhà, và một khoá 512 bit có thể phá bởi 1
nhóm nghiên cứu của trường đại học trong vòng vài tháng. Khoá 7689 bit không
an toàn trong một khoảng thời gian dài. Khoá 1024 bit và lớn hơn sẽ là khá an
toàn hiện nay trừ khi xuất hiện những nghiên cứu chống lại RSA, khoá 2048 bit
được cho là an toàn cho những thập kỷ tới.
Thường độ vững chắc của một hệ thống mã hoá bằng với sức mạnh của
thuật toán mã hoá. Thuật toán mã hoá và chính sách sử dụng là những điểm quan
tâm nhất trong việc thử phá vỡ một hệ thống.
1.8. Phá mã và phá mã một hệ thống
Phá mã là nghệ thuật giải mã một thông điệp đã bị mã hoá mà không cần
biết khoá giải mã. Có nhiều kĩ thuật phá mã khác nhau. Dưới đây là những
phương pháp quan trọng nhất:
- Tấn công thông điệp mã hoá: Đây là trường hợp kẻ tấn công không biết gì
về nội dung của thông điệp và chỉ làm việc với văn bản mã hoá. Trong thực tế

15



thường có thể đoán được nội dung của văn bản thô, vì nhiều loại thông điệp có
dạng trường đầu đề cố định. Ngay cả những từ gốc và các tài liệu bắt đầu theo
một cách có thể đoán được. Ví dụ rất nhiều kiểu tấn công cổ điển sử dụng việc
đánh giá tần số xuất hiện của các kí tự mã hoá, tuy nhiên cách này khó hữu dụng
đối với các thuật mã hoá hiện đại.
Các hệ thống mã hoá hiện đại không có điểm yếu đối với kiểu tấn công này,
mặc dù đôi khi chúng có thể có một khuynh hướng tĩnh nào đó.
- Kiểu tấn công know-plaintext: Kẻ tấn công biết hoặc có thể đoán được văn
bản thô trong một vài phần của văn bản mã hoá. Sau đó sẽ giải mã phần còn lại
dựa trên thông tin này. Thực hiện bằng cách xem xét khoá sử dụng để mã hoá dữ
liệu hoặc thông qua các shorcut.
Một trong những cách tấn công know-plaintext nổi tiếng nhất là phương
pháp chia tuyến các khối mã hoá.
- Phương pháp chọn văn bản thô: Kẻ tấn công có khả có được mọi văn bản
anh ta muốn mã hoá với một khoá chưa biết. Anh ta sẽ quyết định khoá sử dụng
mã hoá.
Kiểu tấn công này rất nguy hiểm đối với một vài hệ thống, ví dụ như RSA ,
khi những thuật toán này được dùng, cần rất cẩn trọng để văn bản thô.
- Kiểu tấn công man-in-the-middle (kẻ trung gian): Kiểu tấn công này liên
hệ đến giao thức trao đổi khoá và truyền thông mã hoá. Khi 2 nhóm, A và B trao
đổi khoá để bảo mật quá trình trao đổi thông tin (ví dụ sử dụng Diffie-Helllman),
một đối thủ sẽ tự đưa anh ta vào A và B. Anh ta bắt các tín hiệu A và B trao đổi
với nhau và tạo nên một khóa trao đổi cho A và B riêng rẽ. A và B sử dụng các
khoá riêng rẽ này, mỗi khoá đều được biết bởi kẻ tấn công. Kẻ tấn công có thể
giải mã mọi thông điệp từ A và gửi tới B bằng cách mã hoá nó lần nữa với khoá
mà hắn trao đổi với B. Cả A và B đều tin rằng họ đang truyền thông một cách
bảo mật nhưng thực tế là kẻ tấn công đang nghe được tất cả.
- Cách thông thường để ngăn chặn kiểu tấn công man-in-the-middle là sử
dụng một khoá public có khả năng cung cấp chữ kí điện tử. Để thiết lập, các bên

phải biết được khoá public của nhau. SaKu khi khoá bí mật chung được tạo ra,

16


các bên gửi chữ kí điện tử cho nhau. Kẻ tấn công có thể thử giả mạo chữ kí
nhưng không thành công bởi anh ta không thể giả mạo chữ kí.
Giải pháp này phù hợp với các khoá public phân phối bảo mật. Một ví dụ là
các nhánh chứng thực như X.509 được sử dụng trong IPSec.
- Tương quan giữa khoá bí mật và đầu ra của hệ thống mã hoá là nguồn
thông tin cho kẻ phá mã. Trong những trường hợp dễ nhất, thông tin về khoá bí
mật bị rò rỉ trực tiếp bởi hệ thống mã hoá. Các trường hợp phức tạp hơn đòi hỏi
nghiên cứu sự tương quan giữa hệ thống mã hoá và thông tin đoán khoá mã hoá.
Ví dụ, trong một kiểu tấn công chống lại mã hoá khối kẻ bẻ khoá sẽ thử các
đoạn văn bản thô và các văn bản đã mã hoá. Hắn sẽ đoán các bit khoá của hệ
thống mã hoá dựa trên tương quan giữa chuỗi kí tự nhập vào và chuỗi mã hoá
đầu ra, và sẽ đoán ra các bit khoá tuy nhiên có thể có rất nhiều biến thể khác
nhau.
- Kiểu tấn công sử dụng các phần mềm bên dưới: trong một vài năm trở lại
đây càng ngày càng xuất hiện nhiều các thiết bị mã hoá di động nhỏ được sử
dụng, một kiểu tấn công mới xuất hiện nhằm trực tiếp vào phần cứng thực thi của
hệ thống mã hoá.
Kiểu tấn công sử dụng dữ liệu từ việc đo đạc chính xác các thiết bị mã hoá,
sau đó tìm ra thuật toán mã hoá và khoá sử dụng từ sự đo đạc trên. Ý tưởng này
về cơ bản gần giống như dạng tấn công tương quan. Từ sự so sánh giữa kết quả
đo đạc đầu vào và chuỗi mã hoá đầu ra hắn sẽ đoán ra các bit khoá.
Đã xuất hiện những kiểu tấn công dựa vào những đo đạc về bộ định thời của
thiết bị, công suất sử dụng, và tần số bức xạ. Những thông tin có thể được sử
dụng để tìm ra khoá bí mật hay các thông tin khác lưu trữ trong thiết bị.
Kiểu tấn công này nói chung độc lập với loại thiết bị và có thể ứng dụng

trên mọi loại thiết bị có chế độ bảo vệ lỏng lẻo.
Các thông tin thêm về kiểu tấn công này các bạn có thể tìm hiểu thêm tại
.
- Các lỗi trong hệ thống mã hoá có thể dẫn tới việc tay bẻ khoá có thể tìm ra
được khoá bí mật. Điều thú vị trong các thiết bị mã hoá dẫn tới một vài thuật toán

17


trở nên sai lệch với sự xuất hiện của những lỗi nhỏ trong cấu trúc tính toán bên
trong.
Ví dụ sự thực thi của khoá bí mật RSA rất nhậy cảm với lỗi. Dù chỉ một lỗi
nhỏ trong quá trình tính toán cũng sẽ dẫn tới việc lộ khoá bí mật.
- Máy tính lượng tử: Những nghiên cứu của Peter Shor trong các chuỗi định
thời và các thuật toán loga với máy tính lượng tử đã dẫn tới sự tăng chú ý trong
tính toán lượng tử. Máy tính lượng tử trong những nghiên cứu gần đây cho thấy
sức mạnh rất lớn của nó so với các máy tính hiện nay. Sức mạnh này nhận được
từ cấu trúc tính toán song song do đó thay vì chỉ thực hiện một tính toán tại một
thời điểm nó có thể thực thi nhiều tính toán cùng lúc.
Những nghiên cứu của Shor cho thấy sự đi vào lịch sử của các khoá mã hoá
public tuy nhiên với trường hợp của các khoá private thì sự hiệu quả không cao.
Tính toán lượng tử cũng hứa hẹn nhiều về bảo mật và che giấu dữ liệu tuy
nhiên nó vẫn đang trên đường thu hút sự chú ý hơn là được ứng dụng trong các
application.
- Mã hoá DNA: Với cấu trúc tính toán song song mã hoá DNA đòi hỏi
những tính toán rất lớn trong việc bẻ khoá. Cấu trúc song song tự nhiên khiến
tính toán DNA đòi hỏi một tốc độ tính toán cực cao mà các máy tính serial hiện
nay khó lòng thực hiện nổi.
Một vấn đề đặt ra là mã hoá DNA cũng đòi hỏi tính toán lớn do đó nó tiêu
tốn không ít tài nguyên của hệ thống vận hành.

Có rất nhiều thuật toán mã hoá khác nhau, để hiểu sâu hơn các bạn tìm đọc
các sách sau: “Handbook of Applied Cryptography” của Menezes, van Oorschot,
và Vanstone và quyển “Applied Cryptography” của Schneier.

18


Chương 2.
TỔNG QUAN VỀ CÁC HỆ MÃ CƠ BẢN

2.1. Mã hoá công khai
2.1.1. Khái niệm mã hoá công khai
Mã hoá công khai là một dạng mật mã hoá 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 khoá 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 khoá có quan hệ toán học
với nhau là khoá công khai và khoá cá nhân (hay khoá bí mật).
Thuật toán mã hoá khoá bất đối xứng thường được dùng đồng nghĩa với mã
hoá khoá 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ã khoá bất đối xứng không có tính chất khoá công khai và
bí mật như đề cập ở trên mà cả hai khoá (cho mã hoá và giải mã) đều cần phải
giữ bí mật.
Trong mật mã hoá công khai, khoá cá nhân phải được giữ bí mật trong khi
khoá công khai được phổ biến công khai. Trong 2 khoá, một dùng để mã hoá và
khoá 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 khoá bí mật nếu chỉ biết khoá công khai.
Mã hoá: giữ bí mật thông tin và chỉ có người có khoá 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 trao đổi
thông tin một khoá bí mật nào đó hay không.
Thoả thuận khoá: cho phép thiết lập khoá dùng để trao đổi thông tin mật

giữa hai bên.
Thông thường, các kỹ thuật mật mã hoá khoá công khai đòi hỏi khối lượng
tính toán nhiều hơn các kỹ thuật mã hoá khoá đố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.

19


2.1.2. Ứng dụng của mã hoá công khai
Ứng dụng rõ ràng nhất của mật mã hoá công khai là bảo mật: một văn bản
được mã hoá bằng khoá công khai của một người sử dụng thì chỉ có thể giải mã
với khóa bí mật của người đó.

Chọn một số ngẫu nhiên lớn để sinh cặp khóa

Dùng khoá công khai để mã hóa, nhưng dùng khoá bí mật để giải mã
Các thuật toán tạo chữ ký số khoá công khai có thể dùng để nhận thức. Một
người sử dụng có thể mã hoá văn bản với khoá bí mật của mình. Nếu một người
khác có thể giải mã với khoá công khai của người gửi thì có thể tin rằng văn bản
thực sự xuất phát từ người gắn với khoá công khai đó.

20


Dùng khoá bí mật để ký một thông báo, dùng khoá công khai để xác minh
chữ ký
Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử,
thoả thuận khoá.

Tổ hợp khoá bí mật mình với khoá bí mật của người khác tạo ra khoá dùng

chung chỉ hai người biết

2.1.3. Độ an toàn
Tồn tại khả năng một người nào đó có thể tìm ra được khoá bí mật. Không
giống với hệ thống mật mã sử dụng một lần (one-time pad) hoặc tương đương,
chưa có thuật toán mã hoá khoá bất đối xứng nào được chứng minh là an toàn
trước các tấn công dựa trên bản chất toán học của thuật toán. Khả năng một mối
quan hệ nào đó giữa hai khoá hay điểm yếu của thuật toán dẫn tới cho phép giải

21


mã không cần tới khoá hay chỉ cần khoá mã hoá vẫn chưa được loại trừ. An toàn
của các thuật toán này đều dựa trên các ước lượng về khối lượng tính toán để giải
các bài toán gắn với chúng. Các ước lượng này lại luôn thay đổi tuỳ thuộc khả
năng của máy tính và các phát hiện toán học mới.
Mặc dù vậy, độ an toàn của các thuật toán mật mã hoá khoá công khai cũng
tương đối đảm bảo. Nếu thời gian để phá một mã (bằng phương pháp duyệt toàn
bộ) được ước lượng là 1000 năm thì thuật toán này hoàn toàn có thể dùng để mã
hoá các thông tin về thẻ tín dụng – Rõ ràng là thời gian phá mã lớn hơn nhiều lần
thời gian tồn tại của thẻ (vài năm).
Nhiều điểm yếu của một số thuật toán mật mã hoá khoá bất đối xứng đã
được tìm ra trong quá khứ. Thuật toán đóng gói ba lô là một ví dụ. Nó chỉ được
xem là không an toàn khi một dạng tấn công không lường trước bị phát hiện. Gần
đây, một số dạng tấn công đã đơn giản hoá việc tìm khóa giải mã dựa trên việc
đo đạc chính xác thời gian mà một hệ thống phần cứng thực hiện mã hoá. Vì vậy,
việc sử dụng mã hoá khoá bất đối xứng không thể đảm bảo an toàn tuyệt đối.
Đây là một lĩnh vực đang được tích cực nghiên cứu để tìm ra những dạng tấn
công mới.
Một điểm yếu tiềm tàng trong việc sử dụng khoá bất đối xứng là khả năng bị

tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi
dụng việc phân phối khoá công khai để thay đổi khoá công khai. Sau khi đã giả
mạo được khoá công khai, kẻ tấn công đứng ở giữa hai bên để nhận các gói tin,
giải mã rồi lại mã hoá với khoá đúng và gửi đến nơi nhận để tránh bị phát hiện.
Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khoá
an toàn nhằm đảm bảo nhận thức người gửi và toàn vẹn thông tin. Một điều cần
lưu ý là khi chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục
(hay bắt buộc) nhà cung cấp chứng thực số xác nhận một khoá giả mạo và có thể
đọc các thông tin mã hoá.

22


2.2. Thuật toán mã hoá RSA
2.2.1. Giới thiệu thuật toán mã hoá 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à toán học người Anh làm
việc tại GCHQ, đã mô tả một thuật toán tương tự. Với khả năng tính toán tại thời
điểm đó thì thuật toá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 1977 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 ngoài Hoa Kỳ. Ngoà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ý.
Thuật toán RSA có hai khoá: khóa công khai (hay khoá công cộng) và khoá

bí mật (hay khoá cá nhân). Mỗi khoá là những số cố định sử dụng trong quá trình
mã hoá và giải mã. Khoá công khai được công bố rộng rãi cho mọi người và
được dùng để mã hoá. Những thông tin được mã hoá bằng khoá công khai chỉ có
thể được giải mã bằng khoá bí mật tương ứng. Nói cách khác, mọi người đều có
thể mã hoá nhưng chỉ có người biết khoá cá nhân (bí mật) mới có thể giải mã
được.
Ta có thể mô tả trực quan một hệ mật mã khoá công khai như sau: 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ó khoá đã mở sẵn và giữ lại chìa
khoá. B nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khoá 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 khoá ngay cả
B cũng không 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. A mở hộp với chìa khoá của mình và đọc

23


thông tin trong thư. Trong ví dụ này, chiếc hộp với khoá mở đóng vai trò khoá
công khai, chiếc chìa khoá chính là khoá bí mật.
Trong mật mã học, RSA là một thuật toán mật mã hoá khoá công khai. Đây
là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc
mã hoá. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc
sử dụng khoá công cộng . RSA đang được sử dụng phổ biến trong thương mại
điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khoá đủ lớn.
2.2.2. Hoạt động
Quá trình tạo khoá

2.2.2.1.

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
khoá gồm khoá công khai và khoá bí mật theo các bước sau:
1. Chọn 2 số nguyên tố lớn p và q với p  q, lựa chọn ngẫu nhiên và độc lập.
2. Tính: n = pq.
3. Tính: giá trị hàm số Ơle  (n) = (p-1)(q-1).
4. Chọn một số tự nhiên e sao cho 1 < e <  (n) và là số nguyên tố cùng nhau
với  (n).
5. Tính: d sao cho de  1 (mod  (n)) .
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 (xem

thêm: số học môđun).
Bước

d =

5 có thể viết cách khác: Tìm số tự nhiên x sao cho
x( p  1)(q  1)  1
cũng là số tự nhiên. Khi đó sử dụng giá trị
e

d mod (p-1)(q-1).
Từ bước 3, PKCS#1 v2.1 sử dụng


 = LCM (p-1,q-1) thay cho  = (p-1)(q-1)

Khóa công khai bao gồm:
n, modun
e,

số mũ công khai (cũng gọi là số mũ mã hóa).

24


Khóa bí mật bao gồm:
n, môđun,
d,

xuất hiện cả trong khóa công khai và khóa bí mật.

số mũ bí mật (cũng gọi là số mũ giải mã).
Một dạng khác của khóa bí mật bao gồm:

p

and q, hai số nguyên tố chọn ban đầu,

d

mod (p-1) và d mod (q-1) (thường được gọi là dmp1 và dmq1),

(1/q)


mod p (thường được gọi là iqmp)

Dạng 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 (tiếng Anh: Chinese Remainder Theorem - CRT). Ở
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.
A gửi khóa công khai cho B, và giữ bí mật khóa cá nhân của mình. Ở đây,
p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d
khi biết e. Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ
được xóa ngay sau khi thực hiện xong quá trình tạo khóa.
2.2.2.2.

Quá trình mã hoá

Giả sử B muốn gửi đoạn thông tin 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 thoả
thuận trước. Quá trình này được mô tả ở phần chuyển đổi văn bản rõ.
Lúc này B có m và biết n cũng như e do A gửi, B sẽ tính c là bản mã hoá của
m theo công thức:
C = me mod n
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo
mođun) bằng thuật toán bình phương và nhân. Cuối cùng B gửi c cho A.
2.2.2.3.

Quá trình giải mã

A nhận c từ B và biết khoá bí mật d. A có thể tìm được m từ c theo công
thức sau:
m = cd mod n

Biết m, A tìm lại M theo phương pháp đã thoả thuận trước. Quá trình giải

mã hoạt động vì ta có:
Cd  (me)d  med (mod n)

25


×