You are on page 1of 52

Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

TRƯỜNG ĐẠI HỌC VINH


KHOA CÔNG NGHỆ THÔNG TIN

ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC

Đề tài:
TÌM HIỂU MỘT SỐ THUẬT TOÁN MÃ
HÓA DỮ LIỆU VÀ ỨNG DỤNG

Giáo viên hướng dẫn : ThS. Cao Thanh Sơn


Sinh viên thực hiện : Trần Thị Kim Nhung

VINH – 2011
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

LỜI CẢM ƠN

Em xin gửi lời cảm ơn chân thành tới quý thầy cô giáo khoa Công Nghệ
Thông Tin, trường Đại học Vinh nói chung và thầy cô giáo trong bộ môn Hệ
Thống Thông Tin nói riêng, đã giúp đỡ, tạo điều kiện cho em trong suốt quá
trình làm đề tài.
Đặc biệt em xin chân thành cảm ơn thầy giáo ThS. Cao Thanh Sơn, người
đã giúp đỡ, chỉ bảo, hướng dẫn tận tình cho em trong quá trình làm đề tài.
Trong thời gian làm việc với thầy, em không những học hỏi được nhiều kiến
thức bổ ích về các phương pháp mã hóa và tầm quan trọng của mã hóa dữ liệu
trong thời đại ngày nay mà còn học được tinh thần làm việc, thái độ nghiên
cứu khoa học nghiêm túc của thầy.
Xin gửi lời cảm ơn chân thành đến gia đình, cha mẹ và bạn bè vì đã luôn
là nguồn động viên to lớn, giúp đỡ con vượt qua những khó khăn trong suốt
quá trình làm việc.
Mặc dù em đã cố gắng hoàn thành đề tài với tất cả nổ lực của bản thân
nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Em kính mong nhận
được sự cảm thông và tận tình chỉ bảo của quý thầy cô và các bạn.
Một lần nữa, em xin chân thành cảm ơn và luôn mong nhận được sự đóng
góp quý báu của tất cả mọi người.

Ngày 20 tháng 5 năm 2011


Sinh viên thực hiện
Trần Thị Kim Nhung

2 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

MỤC LỤC
LỜI CẢM ƠN
MỤC LỤC.............................................................................................................................2
MỞ ĐẦU...............................................................................................................................4
CHƯƠNG 1: TỔNG QUAN VỀ HỆ MẬT MÃ...................................................................6
1.1 Khái niệm về mã hóa thông tin..................................................................................6
1.1.1 Khái niệm...........................................................................................................6
1.1.2 Vai trò của mã hóa.............................................................................................6
1.1.3 Các thành phần của hệ mã hóa.........................................................................7
1.2 Tiêu chuẩn để đánh giá hệ mã hóa.............................................................................7
1.2.1 Độ an toàn của thuật toán.................................................................................7
1.2.2 Tốc độ mã hóa và giải mã..................................................................................8
1.2.3 Phân phối khóa..................................................................................................8
1.3 Khóa...........................................................................................................................8
1.3.1 Khái niệm...........................................................................................................8
1.3.2 Ví dụ...................................................................................................................8
1.4 Phân loại các thuật toán mã hóa................................................................................9
1.4.1 Phân loại theo các phương pháp.......................................................................9
1.4.2 Phân loại theo số lượng khóa..........................................................................10
CHƯƠNG 2: MỘT SỐ PHƯƠNG PHÁP MÃ HÓA CỔ ĐIỂN.......................................13
2.1 Hệ mã hóa thay thế...................................................................................................13
2.1.1 Hệ mã hóa CEASAR........................................................................................13
2.1.2 Hệ mã hóa VIGENERE....................................................................................14
2.2 Hệ mã hóa hoán vị..................................................................................................16
2.2.1 Đảo ngược toàn bộ bản rõ...............................................................................16
2.2.2 Mã hóa theo mẫu hình học..............................................................................16
2.2.3 Đổi chỗ cột.......................................................................................................17
2.2.4 Hoán vị các ký tự của bản rõ theo chu kì cố định............................................18
CHƯƠNG 3: MỘT SỐ THUẬT TOÁN MÃ HÓA HIỆN ĐẠI..........................................19
3.1 Thuật toán mã hóa DES............................................................................................19
3.1.1 Lịch sử ra đời...................................................................................................19
3.1.2 Mô tả thuật toán DES......................................................................................19
3.1.3 Giải mã DES....................................................................................................29
3.1.4 Độ an toàn của thuật toán...............................................................................29
3.2 Thuật toán mã hóa RSA...........................................................................................30
2.2.1 Khái quát về RSA............................................................................................30
3.2.2 Mô tả về thuật toán.........................................................................................30
3.2.3 Một số phương pháp tấn công........................................................................34
3.2.4 Đánh giá thuật toán........................................................................................36
3.3. Thuật toán mã hóa MD5..........................................................................................36
3.3.1 Hàm băm MD5..................................................................................................36
3.3.2 MD5..................................................................................................................39
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN...........................................................................48
1. Kết quả đạt được.........................................................................................................48
2. Hướng phát triển.........................................................................................................48
3. Kết luận......................................................................................................................49
TÀI LIỆU THAM KHẢO...................................................................................................50

3 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

DANH MỤC VIẾT TẮT, THUẬT NGỮ


STT Từ viết tắt Giải nghĩa
1 DES Data Encryption Standard
2 AES Advanced Encryption Standard
3 RC Rivest Cipher
4 CATS Carlisle Adams, and Stafford Tavares
5 MD Message Digest
6 SHA Secure Hash Alorithm
Federal Information Processing Standard
7 FIPS
(tiêu chuẩn xử lý thông tin liên bang)
8 RSA Rivest, Shamir, Adleman
9 MIT Học viện công nghệ Massachusetts
10 NSA Cơ quan Bảo mật quốc gia Hoa Kỳ

4 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

DANH MỤC HÌNH VẼ


Hình 1.1: Mô hình mã hóa................................................................................7
Hình 1.2: Mô hình mã hóa khóa bí mật...........................................................10
Hình 1.3: Mô hình mã hóa khóa công khai.....................................................11
Hình 2.1: Hình vuông Vigenere......................................................................15
Hình 3.1: Sơ đồ tổng quát mã hóa DES..........................................................20
Hình 3.2: Sơ đồ tạo khóa.................................................................................21
Hình 3.3: Biểu diễn dãy 64 bit x chia thành 2 thành phần L0,R0.....................23
Hình 3.4: Sơ đồ chi tiết một vòng................................................................23
Hình 3.5: Sơ đồ hoạt động của hàm f..............................................................24
Hình 3.6: Hoán vị mở rộng.............................................................................25
Hình 3.7: Sơ đồ thuật toán RSA...................................................................... 32
Hình 3.8: Mô hình một vòng............................................................................38
Hình 3.9: Sơ đồ vòng lặp của MD5.................................................................40
Hình 3.10: Sơ đồ khối tổng quát......................................................................44
Hình 3.11: Sơ đồ xử lý 512 bit.........................................................................46
Hình 3.12: Ứng dụng MD5 trong đăng ký bản quyền công ty........................48

5 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

MỞ ĐẦU
Lí do chọn đề tài
Trong những năm gần đây, mạng Internet đã trở thành nền tảng chính cho
sự trao đổi thông tin trên toàn cầu. Có thể thấy một cách rõ ràng là Internet đã
và đang tác động lên nhiều mặt của đời sống chúng ta từ việc tìm kiếm thông
tin, trao đổi dữ liệu đến việc hoạt động thương mại, học tập nghiên cứu và
làm việc trực tuyến... Nhờ Internet mà việc trao đổi thông tin cũng ngày càng
tiện lợi, nhanh chóng hơn, khái niệm thư điện tử (email) cũng không còn mấy
xa lạ với mọi người.
Tuy nhiên trên môi trường truyền thông này, ngoài mặt tích cực Internet
cũng tiềm ẩn những tiêu cực của nó đối với vấn đề bảo vệ thông tin.
Do đó, những yêu cầu được đặt ra đối với việc trao đổi thông tin trên
mạng:
 Bảo mật tuyệt đối thông tin trong giao dịch.
 Đảm bảo tính toàn vẹn của thông tin.
 Chứng thực được tính đúng đắn về pháp lí của thực thể tham gia
trao đổi thông tin.
 Đảm bảo thực thể không thể phủ nhận hay chối bỏ trách nhiệm của
họ về những hoạt động giao dịch trên Internet.
Mã hóa thông tin là một ngành quan trọng và có nhiều ứng dụng trong đời
sống xã hội. Ngày nay các ứng dụng mã hóa và bảo mật thông tin đang được
sử dụng ngày càng phổ biến hơn trong các lĩnh vực khác nhau trên Thế giới,
từ các lĩnh vực an ninh, quân sự, quốc phòng…. Cho đến các lĩnh vực dân sự
như thương mại điện tử, ngân hàng…
Trong đề tài này tôi tìm hiểu một số phương pháp mã hóa đang được sử
dụng rộng rãi hiện nay.
Cấu trúc khóa luận như sau:
 Chương 1: Tổng quan về hệ mật mã
 Chương 2: Một số phương pháp mã hóa cổ điển
 Chương 3: Một số thuật toán mã hóa hiện đại

6 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

CHƯƠNG 1: TỔNG QUAN VỀ HỆ MẬT MÃ

1.1 Khái niệm về mã hóa thông tin


1.1.1 Khái niệm
Mã hóa thông tin là chuyển đổi thông tin từ dạng rõ (dạng đọc được) sang
dạng mờ (dạng không thể đọc được) và ngược lại. Nhằm mục đích ngăn chặn
nguy cơ truy cập thông tin truyền đi trên mạng một cách bất hợp pháp. Thông
tin sẽ được truyền đi trên mạng dưới dạng mờ và không thể đọc được với bất
kỳ ai cố tình muốn lấy thông tin đó.
Khi chúng ta có nhu cầu trao đổi thông tin, thì Internet là môi trường
không an toàn, đầy rủi ro và nguy hiểm, không có gì đảm bảo rằng thông tin
mà chúng ta truyền đi không bị đọc trộm trên đường truyền. Vì vậy mã hóa là
biện pháp giúp ta bảo vệ chính mình cũng như thông tin mà ta gửi đi [1, 2, 7].
Ngoài ra mã hóa còn đảm bảo tính toàn vẹn của dữ liệu.
1.1.2 Vai trò của mã hóa
Các hệ mã hóa phải thực hiện được các vai trò sau.
 Các hệ mã hóa phải che dấu được nội dung của văn bản rõ (PlainText)
để đảm bảo sao cho chỉ người chủ hợp pháp của thông tin mới có
quyền truy cập thông tin, hay nói cách khác là chống truy cập không
đúng quyền hạn.
 Tạo các yếu tố xác thực thông tin, đảm bảo thông tin lưu hành trên hệ
thống đến người nhận hợp pháp xác thực.
 Tổ chức các sơ đồ chữ ký điện tử, đảm bảo không có hiện tượng giả
mạo, mạo danh để gửi thông tin trên mạng.
Ưu điểm lớn nhất của các hệ mã hóa là có thể đánh giá được độ phức tạp
của tính toán mà “kẻ địch” phải giải quyết bài toán để có thể lấy được thông
tin của dữ liệu. Tuy nhiên mỗi hệ mã hóa đều có một số ưu và nhược điểm
khác nhau, nhưng nhờ đánh giá được độ phức tạp tính toán, mức độ an toàn
của mỗi hệ mã hóa mà ta có thể ứng dụng cụ thể tùy theo yêu cầu về độ an
toàn [1, 2, 3].

7 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

1.1.3 Các thành phần của hệ mã hóa


Một hệ mã hóa là một bộ 5 (P, C, D, K, E) thõa mã các điều kiện sau.
- P là một tập hợp hữu hạn các bản rõ (PlainText), nó còn được gọi là
không gian bản rõ.
- C là tập hợp hữu hạn các bản mã (CipherText), nó còn được gọi là
không gian bản mã. Mỗi phần tử của C có thể nhận được bằng cách áp
dụng phép mã hóa Ek lên một phần tử của P.
- K là tập hợp hữu hạn các khóa hay còn gọi là không gian khóa. Đối
với mỗi phần tử k của K được gọi là một khóa (Key). Số lượng của
không gian khóa phải đủ lớn để “kẻ địch” không đủ thời gian để thử
mọi khóa (phương pháp vét cạn).
- E và D lần lượt là tập luật mã hóa và giải mã. Với mỗi k của K có
một quy tắc mã hóa ek: PC và một quy tắc giải mã tương ứng d k €
D. Mỗi ek: PC và dk: CP là những hàm mà: dk(ek(x))=x với mọi
bản rõ x € P.

Hình 1.1: Mô hình mã hóa


1.2 Tiêu chuẩn để đánh giá hệ mã hóa
1.2.1 Độ an toàn của thuật toán
Nguyên tắc đầu tiên trong mã hoá là “Thuật toán nào cũng có thể bị phá
vỡ”. Các thuật toán khác nhau cung cấp mức độ an toàn khác nhau, phụ thuộc
vào độ phức tạp để phá vỡ chúng. Tại một thời điểm, độ an toàn của một thuật
toán phụ thuộc [1, 7].
o Nếu chi phí hay phí tổn cần thiết để phá vỡ một thuật toán lớn hơn
giá trị của thông tin đã mã hóa thuật toán thì thuật toán đó tạm thời
được coi là an toàn.

8 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

o Nếu thời gian cần thiết dùng để phá vỡ một thuật toán là quá lâu thì
thuật toán đó tạm thời được coi là an toàn.
o Nếu lượng dữ liệu cần thiết để phá vỡ một thuật toán quá lớn
so với lượng dữ liệu đã được mã hoá thì thuật toán đó tạm thời được
coi là an toàn.
1.2.2 Tốc độ mã hóa và giải mã
Khi đánh giá hệ mã hóa phải chú ý đến tốc độ mã hóa và giải mã. Hệ mã
hóa tốt thì thời gian mã hóa và giải mã nhanh.
1.2.3 Phân phối khóa
Một hệ mã hóa phụ thuộc vào khóa, khóa này được truyền công khai hay
truyền bí mật. Phân phối khóa bí mật thì chi phí sẽ cao hơn so với các thuật
toán mã hóa khóa công khai. Vì vậy đây cũng là một tiêu chí khi lựa chọn hệ
mã hóa.
1.3 Khóa
1.3.1 Khái niệm
Một khóa mã hóa là một phần thông tin đặc biệt được kết hợp với một
thuật toán để thi hành mã hóa và giải mã. Mỗi khóa khác nhau có thể tạo
ra các văn bản mã hóa khác nhau, nếu không chọn đúng khóa thì không
thể mở được tài liệu đã mã hóa trên, cho dù biết được thuật toán trên dùng
thuật toán mã hóa gì, sử dụng khóa càng phức tạp thì độ an toàn của dữ
liệu càng lớn [1, 2, 7].
1.3.2 Ví dụ
Mã hóa nội dung của một bức thư với khóa là “Thay thế mỗi ký tự xuất
hiện trong bức thư bằng ký tự đứng thứ 3 sau nó”. Cùng thật toán trên nhưng
sử dụng khóa là “Thay thế mỗi ký tự xuất hiện trong bức thư bằng ký tự đứng
thứ 4 sau nó”. Như vậy kết quả của một bức thư có nội dung như nhau sau khi
sử dụng hai khóa khác nhau sẽ có hai bản mã khác nhau.

9 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

1.4 Phân loại các thuật toán mã hóa


1.4.1 Phân loại theo các phương pháp
1.4.1.1 Mã hoá cổ điển
Xuất hiện trong lịch sử, thuật toán sử dụng khóa đơn giản, dễ hiểu. Là
phương pháp mà từng ký tự (hay từng nhóm ký tự) trong bản rỏ được thay thế
bằng một ký tự (hay nhóm ký tự) khác tạo nên bản mã [1, 7]. Bên nhận chỉ
cần đảo ngược lại trình tự thay thế trên thì sẽ nhận được bản rõ ban đầu.
Mã hóa cổ điển có hai phương pháp nổi bật là: Mã hóa thay thế và mã hóa
hoán vị.
Các hệ mã hóa thường được sử dụng trong lịch sử là: Hệ mã hóa Ceasar,
Vigenere, Hill…
1.4.1.2 Mã hóa đối xứng
Mã hóa đối xứng hay mã hóa chia sẻ khóa là mô hình mã hóa hai chiều, có
nghĩa là tiến trình mã hóa và giải mã đều dùng chung một khóa. Khóa này
được chuyển giao bí mật giữa hai đối tượng tham gia giao tiếp. Khóa này có
thể được cấu hình trong Software hoặc được mã hóa trong Hardware. Mã hóa
đối xứng thực hiện nhanh nhưng có thể gặp rủi ro nếu khóa bị đánh cắp [1, 7].
Một số thuật toán mã hóa đối xứng nổi tiếng như: DES, AES, RC2, RC4,
RC5, RC6…
Ngoài ra còn một số thuật toán như: Skipjact, Blowfish, CATS-128.
1.4.1.3 Mã hóa bất đối xứng
Mã hóa bất đối xứng là mô hình mã hóa hai chiều sử dụng một cặp khóa là
khóa chung (Public Key) và khóa riêng (Private Key). Trong đó khóa chung
Public Key có thể được công bố rộng rải. Thông thường thông tin được người
gửi sử dụng khóa Public Key để mã hóa và gửi đi. Người nhận thông tin sẽ
dùng khóa Private Key để giải mã. Khóa Private Key chỉ do một người giữ do
đó các phương pháp mã hóa bất đối xứng đảm bảo tính bí mật hơn. Một điều
quan trọng của phương pháp mã hóa này là cặp khóa Public Key và Private
Key phải tương đồng nhau. Có nghĩa là chỉ có Private Key trong cùng một
cặp khóa mới có thể giải mã được dữ liệu đã mã hóa bởi khóa Public Key
tương ứng [1, 2, 7].

10 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Thuật toán mã hóa bất đối xứng nổi tiếng và được sử dụng nhiều nhất hiện
nay là RSA.
Ngoài ra còn một số thuật toán khác như: Hellman, Elgamal…
1.4.1.4 Mã hóa hàm băm
Là cách thức mã hóa một chiều tiến hành biến đổi bản rõ thành bản mã mà
không bao giờ giải mã được. Người ta ví loại mã hóa này như một củ hành
được băm nhuyễn thì sẽ không bao giờ tái tạo lại được củ hành ban đầu.
Trong xử lý hàm băm, dữ liệu đầu vào có thể khác nhau về độ dài, nhưng
độ dài của xử lý băm luôn xác định. Hàm băm được xử lý trong mô hình xác
thực Password [1, 2, 7].
Một số thuật toán mã hóa hàm băm thường dùng như: MD4, MD5,
SHA…
1.4.2 Phân loại theo số lượng khóa
1.4.2.1 Mã hóa khóa bí mật
Mã hóa khóa bí mật là thuật toán mà tại đó khóa giải mã có thể được tính
toán từ khóa mã hóa [1, 2, 7]. Trong rất nhiều trường hợp khóa mã hóa và
khóa giải mã là giống nhau. Thuật toán này yêu cầu người gửi và người nhận
thõa thuận một khóa trước khi thông tin được gửi đi và khóa này phải đảm
bảo tính bí mật. Độ an toàn của thuật này phụ thuộc nhiều vào độ bí mật của
khóa, nếu để lộ khóa thì thì bất kì người nào cũng có thể mã hóa và giải mã
thông tin một cách dễ dàng.

Hình 1.2: Mô hình mã hóa khóa bí mật


Trong đó :
K1 có thể trùng K2.
K1 có thể được tính từ K2.

11 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

K2 có thể được tính từ K1.


Mã hóa khóa bí mật thường được sử dụng cho các trường hợp dễ chuyển
khóa. Tức là người nhận và người gửi có thể trao đổi khóa cho nhau an toàn,
khó bị kẻ khác tấn công. Thường dùng để trao đổi trong văn phòng.
Một số vấn đề liên quan
 Các phương pháp mã hóa khóa bí mật đòi hỏi người mã hóa và người
giải mã phải cùng chung một khóa hoặc là có thể biết khóa của nhau,
khi đó khóa phải được giữ bí mật tuyệt đối. Do đó kẻ địch dễ dàng xác
định được một khóa nếu biết khóa kia.
 Phương pháp này không đảm bảo được sự an toàn nếu có xác suất
cao khóa người gửi bị lộ. Khóa phải được gửi đi trên kênh an toàn nếu
kẻ địch tấn công trên kênh này có thể phát hiện ra khóa.
 Vấn đề quản lý và phân phối khóa là khó khăn và phức tạp, người gửi
và người nhận phải thống nhất với nhau về khóa việc thay đổi khóa là
khó khăn và dễ bị lộ.
1.4.2.2 Mã hóa khóa công khai
Mã hóa khóa công khai là các thuật toán sử dụng khóa mã hóa và khóa
giải mã là hoàn toàn khác nhau. Hơn nữa khóa giải mã không thể tính toán
được từ khóa mã hóa [1, 2, 7].
Khác với mã hóa khóa bí mật, khóa mã hóa của thuật toán mã hóa công
khai được công bố rộng rãi. Một người bất kì có thể sử dụng khóa công khai
để mã hóa thông tin, nhưng chỉ có người nhận thông tin có khóa giải mã phù
hợp với khóa mã hóa để giải mã thông tin đó.
Mô hình mã hóa khóa công khai.

12 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hình 1.3: Mô hình mã hóa khóa công khai

13 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Trong đó :
Khóa mã hóa không thể giống khóa giải mã.
Khóa giải mã không thể được tính từ khóa mã hóa.
Một điều đặc biệt của loại mã hóa này là cả khóa công khai và bản mã có
thể được gửi đi trên kênh không an toàn mà thông tin vẫn không hoặc khó bị
đọc trộm dù biết được khóa mã hóa.
Chính vì mức độ an toàn cao nên mã hóa khóa công khai được sử dụng
trên mạng công khai Internet. Mã hóa khóa công khai có nhiều ứng dụng quan
trọng trong các hệ thống lớn.

14 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

CHƯƠNG 2: MỘT SỐ PHƯƠNG PHÁP MÃ HÓA CỔ ĐIỂN

2.1 Hệ mã hóa thay thế


2.1.1 Hệ mã hóa CEASAR
Hệ mã hóa CEASAR là một ví dụ điển hình cho hệ mã hóa thay thế. Nó
làm việc trong bảng chữ cái tiếng Anh 26 ký tự [1, 7]. Ceasar sử dụng các số
nguyên thay cho các ký tự, đánh số các ký tự trong bảng chử cái theo thứ tự
bảng sau.

Các phép toán số học được thực hiên trên Modul 26 (có nghĩa là 26 tương
ứng với 0, 27 tương ứng với 1, 28 tương ứng với 2,…, 79 = 26x3 + 1 tức 79
tương ứng với 1).
Hệ CAESAR sử dụng thuật toán mã hóa E k, trong đó mỗi ký tự được thay
thế bởi một ký tự khác được xác định bằng cách dịch ký tự cần mã hóa sang
phải k bước theo modul 26.
Ek() = ( + k) MOD 26.
Với  là một ký tự, 0  k  26, MOD là phép chia lấy phần dư.
Thuật toán giải mã tương ứng D k là lùi lại k bước trong bảng chữ cái theo
modul 26.
Dk() = ( - k) MOD 26
Không gian khóa của hệ CEASAR bao gồm 26 số: 0, 1, 2, …, 25.
Ví dụ: Với k = 3, A được thay bằng D, B được thay bằng E,…, W được
thay bằng Z,…, Y được thay bằng B và Z được thay bằng C. Ta có:
Bảng chữ cái gốc.

Bảng chữ cái dùng để mã hóa.

15 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Trong trường hợp này bản rõ “DAI HOC VINH” được mã hóa thành
“GDL KRF YLQK”, (Chú ý: Các ký tự trống trong bảng mã được bỏ đi để
đảm bảo tính an toàn).
Thêm một vài ví dụ minh họa:
E25(IBM) = HAL, E6(MUPiD) = SAVOJ.
E3(HELP) = KHOS, E1(HOME) = IPNF.
Hệ CEASAR là hệ mã hóa cũ và không an toàn vì không gian khóa của nó
rất nhỏ, do đó có thể thám mã theo phương pháp vét cạn. Khóa giải mã có thể
tính ngay ra được từ khóa mã hóa. Do chỉ có 26 khóa nên ta có thể thử lần
lượt các khóa cho đến khi tìm được khóa đúng.
2.1.2 Hệ mã hóa VIGENERE
Hệ mã hóa này được đặt theo tên của một nhà mật mã người Pháp Blaise
De Vigenere (1523 – 1596) [1, 7].
Vinegere cũng giống như Caesar, nhưng ở đây khóa được thay đổi theo
từng bước. Hình vuông VIGENERE được sử dụng để mã hóa và giải mã.

16 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

Hình 2.1: Hình vuông Vigenere


Mỗi cột của hình vuông Vigenere có thể xem như là một hệ CEASAR, với
các khóa: 0, 1, 2,...., 25. Để mã hóa thì bản rõ được đọc từ các hàng và khóa
được đọc từ các cột.

17 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Ví dụ: Mã hóa bản “DAI HOC VINH” với từ khóa “ KHOA KINH TE”.
Đầu tiên ta tìm điểm giao của hàng D cột K ta được N, tiếp tục ta tìm điểm
giao của hàng A cột H ta được H. Cứ như vậy ta được bản mã là “ NHW HYK
IPGL” . Ta sẽ thu được bản mã tưng tự nếu ta đọc bản rõ tưng ứng với cột và
khóa đọc tưng ứng với hàng. Muốn giải mã thông tin vừa mã hóa trên ta thực
hiện bằng cách, ta nhìn vào hàng nào chứa N trong cột K, ta tìm được chữ D,
tương tự nhìn vào hàng nào chứa H trong cột H, ta tìm được chữ A. Cứ như
vậy ta sẽ tìm được bản rõ là “DAI HOC VINH”.

Trong ví dụ trên thì độ dài bản rõ bằng độ dài khóa. Nhưng trong thực tế
độ dài bản rõ thường dài hơn rất nhiều so với khóa. Như vậy để mã hóa hay
giải mã thì ta phải áp dụng từ khóa một cách tuần hoàn. Nghĩa là từ khóa
được lặp đi lặp lại nhiều lần sao cho các ký hiệu trong bản rõ phải được đọc
hết.

Ta thấy rằng trong hệ mã hóa VIGENERE, với khóa có độ dài d thì sẽ có


26d khóa hợp lệ. Vì vậy chỉ cần với giá trị d nhỏ thì phương pháp thám mã vét
cạn cũng đòi hỏi khá nhiều thời gian.

2.2 Hệ mã hóa hoán vị

Hệ mã hóa hoán vị hay còn gọi là hệ mã hóa đổi chỗ. Là hệ mã hóa mà


các ký tự của bản rõ vẫn được giữ nguyên, nhưng thứ tự của chúng được đổi
chỗ vòng quanh [1, 7].

Phương pháp này có các kỹ thuật mã hóa sau.

2.2.1 Đảo ngược toàn bộ bản rõ

Nghĩa là bản gốc được viết theo thứ tự ngược lại từ sau ra trước, để tạo bản
mã. Đây là phương pháp mã hóa đơn giản nhất vì vậy không đảm bảo an toàn.

Ví dụ: PlainText SECURE EMAIL

Bản mã: LIAMEERUCES

2.2.2 Mã hóa theo mẫu hình học

Bản gốc được sắp xếp lại theo một mẫu hình học nào đó, thường là một
mảng hoặc ma trận hai chiều.

18 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Ví dụ: Bản rõ “KHOA CONG NGHE THONG TIN” được viết theo ma
trận 4x5 như sau:

Nếu lấy các ký tự ra theo số thứ tự cột 3, 1, 4, 2, 5 thì ta thu được bản mã
“OGTTKOHNANHIHNEGCGON”.

2.2.3 Đổi chỗ cột

Đầu tiên biểu diễn các ký tự trong ban rõ thành dạng hình chữ nhật theo
cột, sau đó các cột được sắp xếp lại và các chữ cái được lấy ra theo hàng
ngang.

Ví dụ: Bản rõ là “KHOA CONG NGHE THONG TIN” được viết dưới
dạng ma trận 4x5 theo cột như sau:

Vì có 5 cột nên ta có thể sắp xếp lại theo 5!=120 cách khác nhau. Để tăng
độ an toàn có thể chọn một trong các cách sắp xếp lại đó.

Nếu ta chuyển vị trí các cột theo các cột theo thứ tự 3, 5, 2, 4, 1. Rồi lấy
các ký tự ra theo hàng ngang ta sẽ được bản mã là:

“NGCTKGTOHHHINOOENGNA”.

Lưu ý: Các ký tự cách trống được bỏ đi.

19 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

2.2.4 Hoán vị các ký tự của bản rõ theo chu kì cố định

Nếu hàm f là một hoán vị của một khối gồm d ký tự thì khóa mã hóa được
biểu diễn bởi K(d, f).

Do vậy, bản rõ:

M=m1m2...mdmd+1...m2d.

Với mi là các ký tự, và bản mã sẽ được mã hóa thành:

Ek(M)= mf(1)mf(2)…mf(d)md+f(1)…md+f(d).

Trong đó mf(1)mf(2)…mf(d) là một hoán vị của m1m2...md.

Ví dụ: Mã hóa bản rõ “BAO MAT” chọn d=6 và f hoán vị dãy i= 123456
thành f(i)=351462.

Theo bảng trên ta thấy ký tự đầu sau khi hoán vị chuyển đến vị trí thứ 3,
ký tự thứ 2 chuyển tới vị trí thứ 5, ký tự thứ 3 chuyển tới vị trí thứ 1,… Như
vậy sau khi mã hóa ta thu được bản mã là “OABMTA”.

Nếu kích thước bản rõ lớn hơn nhiều so với d thì ta sẽ phải chia bản rõ
thành các khối d ký tự và tiến hành mã hóa theo từng khối. Ví dụ:

Bản rõ “KHOA CONG NGHE THONG TIN”, giả sử d = 6, và f hoán vị


dãy i = 12345 thành f(i) = 35142.

Ta thu được bản mã “OCKAHGGONNTOHHETNIG”

20 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

CHƯƠNG 3: MỘT SỐ THUẬT TOÁN MÃ HÓA HIỆN ĐẠI


3.1 Thuật toán mã hóa DES

3.1.1 Lịch sử ra đời

Khoảng những năm 1970, tiến sĩ Horst Feistel đã đặt nền móng đầu tiên
cho chuẩn mã hóa DES với phương pháp mã hóa Feistel Cipher. Vào năm
1976 Cơ quan Bảo mật quốc gia Hoa Kỳ (NSA) đã công nhận DES dựa trên
phương pháp Feistel là chuẩn mã hóa dữ liệu. Kích thước khóa ban đầu của
DES là 128 bit nhưng tại bản công bố FIPS kích thước được rút xuống 56 bit
để tăng tốc độ xử lý và đưa ra các tiêu chuẩn thiết kế một chuẩn mã hóa dữ
liệu [4, 6].

Nội dung phương pháp mã hóa DES.

DES thực hiện mã hóa dữ liệu qua 16 vòng lặp mã hóa, mỗi vòng sử dụng
một khóa chu kỳ 48 bit được tạo ra từ khóa ban đầu có độ dài 56 bit. DES sử
dụng 8 bảng hằng số S-box để thao tác.

3.1.2 Mô tả thuật toán DES

3.1.2.1 Sơ đồ tổng quát

Phương pháp DES mã hóa khối thông tin x có độ dài 64 bit với khóa k có
độ dài 56 bit thành khối y có độ dài 64 bit.

Nền tảng để xây dựng khối của DES là sự kết hợp đơn giản của các kỹ
thuật thay thế và hoán vị bản rõ dựa trên khóa, đó là vòng lặp. DES sử dụng
16 vòng lặp áp dụng cùng một kiểu kết hợp các kỹ thuật trên khối bản rõ.

Thuật toán chỉ sử dụng các phép toán số học và logic thông thường trên
các số 16 bit, vì vậy nó dễ dàng thực hiện vào những năm 1970 trong điều
kiện về công nghệ phần cứng lúc bấy giờ.

Sơ đồ tổng quát :

21 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Plaintext

IP

L0 R0


K1

L1=R0 R1=L0(R0,K1)


K2

L2=R1 R2=L1(R1,K2)

L15=R14 R15=L14(R14,K15
)

K16

R16=L15(R15,K16) L16=R15

IP -1

Ciphertext

Hình 3.1: Sơ đồ tổng quát mã hóa DES

22 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Quá trình có 16 vòng thực hiện giống nhau trong quá trình xử lý. Ngoài ra
có hai lần hoán vị đầu IP và cuối IP -1, hai hoán vị này được sử dụng với mục
đích đưa thông tin vào và lấy thông tin ra.
Muốn vào vòng mã hóa thì khối thông tin x ban đầu 64 bit được chia làm
hai khối, mỗi khối 32 bit. Hàm f làm biến đổi một nữa của khối đang xử lý
với một khóa con tương ứng với vòng mã hóa.
Trong đầu ra của hàm có hàm f được kết hợp với nửa khối còn lại bằng
phép toán XOR, và hai phần được trao đổi để xử lý trong chu trình kế tiếp.
Cứ thực hiện các vòng như vậy cho tới vòng cuối cùng thì hai phần không
bị tráo đổi nữa, chính vì điều này mà quá trình mã hóa và giải mã là giống
nhau.
3.1.2.2 Tạo khóa
Quá trình mã hóa được thực hiện 16 vòng, mỗi vòng cần một khóa. Như
vậy từ khóa ban đầu tạo ra 16 khóa con cho 16 vòng lặp tương ứng.
Sơ đồ quá trình tạo khóa.

Hình 3.2: Sơ đồ tạo khóa

23 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Theo sơ đồ ta thấy đầu tiên khóa K có độ dài 64 bit, sau đó được giảm
xuống 56 bit bằng cách loại bỏ 8 bit chẵn lẻ. Sự loại bỏ được thực hiên khi đi
qua PC1.
Bảng PC1 :

Như vậy các bit ở vị trí 8, 16, 24, 32, 40, 48, 56, 64 bị loại bỏ. 56 bit thu
được chia làm hai phần, mỗi phần 28 bit, các phần được xử lý độc lập nhau.
Các phần này được dịch 1 hay 2 bit là phụ thuộc vào vòng đó. Số bit dịch
được cho trong bảng sau.

Sau khi dịch bit, 56 bit này được chọn ra 48 bit. Bởi vì sự thực hiện đổi
chỗ thứ tự các bit như là sự lựa chọn một tập con các bit, nó còn được gọi là
hoán vị nén hoặc hoán vị lựa chọn. Sự thực hiện này cung cấp một tập hợp
các bit cùng cỡ với đầu ra của hoán vị mở rộng. Bảng PC2 định nghĩa hoán vị
nén (cũng gọi là hoán vị lựa chọn). Ví dụ, bit ở vị trí 33 của khóa được dịch
chuyển tới vị trí 35 của đầu ra và bit ở vị trí 8 của khóa bị bỏ qua.
Bảng PC2( hoán vị nén).

Như vậy sau khi đi qua PC2 còn lại 48 bit, 48 bit này sẽ được sử dụng làm
khóa K1 để sử dụng trong vòng mã hóa.
Hai phần, mỗi phần 28 bit sau khi được dịch bit ở lần thứ nhất, tiếp tục
dịch bit ở lần thứ 2 và qua bảng PC2 để hoán vị nén 48 bit và làm K2.
Quá trình cứ tiếp tục như vậy ta thu được 16 khóa Ki (i=1…16).

24 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

3.1.2.3 Hoán vị khởi đầu


Mục đích của hoán vị khởi đầu là đổi chỗ các bit của khối dữ liệu vào
thông qua bảng IP. Nó không ảnh hưởng đến sự an toàn của DES.
Với khối dữ liêu vào x 64 bit cho trước, một xâu bit x 0 sẽ được xây dựng
bằng cách hoán vị các bit của x theo phép hoán vị cố định ban đầu IP. Ta viết
x0=IP(x)=L0R0 trong đó L0 gồm 32 bit đầu và R0 gồm 32 bit cuối.

L 0 R 0

x0

Hình 3.3: Biểu diễn dãy 64 bit x chia thành 2 thành phần L0,R0
Bảng hoán vị khởi đầu IP.

3.1.2.4 Mã hóa chi tiết một vòng


Quá trình xử lý các vòng là giống nhau, ta xét quá trình xử lý của một
vòng i với 1 i  16.
L i-1 R i-1

f K i

L i R i

Hình 3.4: Sơ đồ chi tiết một vòng


Ta thấy:
Li = Ri-1
Ri =Li-1  f(Ri-1,Ki)

25 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hàm f có hai tham số là Ri-1 và Ki. Được thực hiện theo sơ đồ sau :

Hình 3.5: Sơ đồ hoạt động của hàm f


Ri-1 được mở rộng từ 32 bit thành 48 bit nhờ sự thay đổi thứ tự của các bit
bằng cách lặp lại một số bit nào đó, nó được hiểu như là một sự hoán vị mở
rộng.
Để xác định ở đầu vào có 32 bit, bit nào được lặp lại và xuất hiện tại vị trí
nào của đầu ra 48 bit người ta xác định như sau:
Đầu vào có 32 bit chia làm 8 bộ, mỗi bộ có 4 bit. Bit đầu tiên và bit cuối
cùng của mỗi bộ tương ứng với 2 bit của khối dữ liệu ra, trong khi bit thứ 2 và
bit thứ 3 của mỗi bộ tương ứng với một bit ở khối dữ liệu ra. Ví dụ, bit ở vị trí
thứ 3 của khối dữ liệu vào được chuyển tới vị trí thứ 4 trong khối dữ liệu ra,
bit thứ 8 trong khối dữ liệu vào thì được chuyển tới vị trí 11 và 13 trong khối
dữ liệu ra.

26 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hộp E.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

48

32

Hình 3.6: Hoán vị mở rộng

Như1 vậy
2 3 164 bit
5 6của 7R 8 được
i
9 10 hoán
11 12 vị13
hai14lần.
15 16 17 18
Mặc dù 19 20 dữ
khối 21 22 23 ra rộng
liệu
24
hơn khối dữ liệu vào, nhưng một khối dữ liệu vào chỉ có duy nhất một khối
dữ liệu ra.
Như vậy E(Ri-1) là một dãy 48 bit. Thực hiện phép toán XOR cho dãy bit
E(Ri-1) với khóa Ki. Ta thu được dãy 48 bit B. Biểu diễn B thành từng nhóm 6
bit B = B1B2B3B4B5B6B7B8.
Sử dụng 8 hộp S = S1, S2, S3, S4, S5, S6, S7, S8. Mỗi hộp Si có kích thước
4 x 16. Mỗi dòng của hộp nhận đủ giá trí từ 015.

27 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Xét dãy 6 bit Bi=b1b2b3b4b5b6. Si(Bi) được xác định bằng giá trị của phần tử
tại dòng m cột n. Trong đó m, n được xác định bằng cách.
Giá trị m được xác định bằng bit b 1 và b6 được kết hợp thành một số 2 bit
nhận giá trị từ 0 đến 3, tương ứng với một hàng trong bảng.
Giá trị n được xác định bằng cách ghép bit b 2b3b4b5 thành một số 4 bit
nhận giá trị từ 0 đến 15, tương ứng với cột trong bảng.
Ví dụ:
B2=111010 ta có m= b1b6 = 10= 2 ; n = b2b3b4b5= 1101= 13.
Phần tử ở vị trí hàng 2 cột 13 là 6, sang giá trị nhị phân là 0110. Như vậy
0110 thay cho 111010.
Như vậy tập dãy 4 bit thu được C ta có dãy C = C 1, C2, C3, C4, C5, C6, C7,
C8.
Dãy 32 bit thu được bằng cách hoán vị hoán vị C theo quy luật P nhất
định. Đây là kết quả của hàm f(R i-1,Ki) XOR với Li-1 tạo thành khối Ri với 32
bit.
Các hộp S.
Hộp S thứ 1.

Hộp S thứ 2.

28 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hộp S thứ 3.

Hộp S thứ 4.

Hộp S thứ 5.

Hộp S thứ 6.

29 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hộp S thứ 7.

Hộp S thứ 8.

Hộp hoán vị P chứa khối dữ liệu 32 bit ra của hộp thay thế S được hoán vị
tiếp trong hộp P. Sự hoán vị này ánh xạ mỗi bit dữ liệu vào tới một vị trí trong
khối dữ liệu ra, không có bit nào được sử dụng hai lần và cũng không bit nào
bị bỏ qua. Nó được gọi là hoán vị trực tiếp.
Hộp hoán vị P.

3.1.2.5 Hoán vị cuối cùng


Hoán vị cuối cùng là nghịch đảo của hoán vị khởi đầu. Được mô tả theo
bảng IP-1.
Tại vòng cuối cùng của mã hóa DES thì nửa trái và nửa phải không được
tráo đổi cho nhau nữa.
Khi đó R16L16 được sử dụng như khối dữ liệu ra của hoán vị cuối cùng.

30 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hoán vị cuối cùng IP-1.

3.1.3 Giải mã DES


Quá trình giải mã hoàn toàn tương tự với quá trình mã hóa. Nhưng quá
trình mã hóa thực hiện hoán vị IP trước hoán vị IP -1, còn giải mã thì thực hiện
hoán vị IP-1 trước hoán vị IP. Các khóa phải được thực hiện trái ngược nhau.
Tức là nếu mã hóa, khóa thực hiện cho các vòng lần lượt là K 1, K2,…, K16, thì
giải mã là K16, K15,…, K2, K1.
Ngoài ra, sau mỗi chu trình tạo khóa các bit được dịch phải thay vì dịch
trái như khi mã hóa, và số bit để dịch được lấy theo chiều ngược lại.
3.1.4 Độ an toàn của thuật toán
Đã có rất nhiều nghiên cứu về độ dài của khóa, số vòng lặp và thiết kế hộp
S. Trong phương pháp mã hóa này chỉ có hộp S là khó hiểu. Mọi tính toán
trong DES đều là tuyến tính ngoại trừ hộp S, các hộp S chứa các thành phần
phi tuyến tính của hệ là yếu tố quan trọng nhất đối với sự an toàn của hệ
thống.
Tính bảo mật của một hệ mã hóa đối xứng phụ thuộc chủ yếu vào hai yếu
tố: Độ phức tạp của thuật toán và độ dài của khóa.
Giã sử phương pháp này an toàn về độ phức tạp của thuật toán. Có nghĩa
là không có phương pháp nào để phá vỡ hệ thống mật mã hơn là cố gắng thử
mọi khóa có thể, còn gọi là phương pháp vét cạn. Nếu khóa có độ dài 8 bit thì
sẽ có 28= 256 khóa. Như vậy muốn tìm ra khóa thì mất nhiều nhất là 256 lần
thử khóa. Thuật toán DES sử dụng khóa có độ dài 56 bit nên có 2 56 khóa. Đây
là con số rất lớn do đó việc tìm kiếm khóa là rất khó khăn. Giả sử có một máy
tính có thể thử một triệu khóa trong một giây, thì nó sẽ cần hơn 2000 năm để
thử hết khóa. Các thành tựu gần đây chỉ ra rằng thời gian cần thiết để giải một
trang mã DES mà không biết khoá là: Sau một vài tháng trên Internet trong

31 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

năm 1997; một vài ngày trên thiết bị phần cứng tăng cường trong năm 1998;
sau 22 giờ nếu kết hợp các biện pháp trong năm 1999. Như vậy vẫn có thể
đoán được bản rõ sau một khoảng thời nhất định, nếu có nguồn lực máy tính
mạnh. Chính vì vậy bây giờ người ta đã xét một vài biến thể của DES nhằm
nâng cao sức mạnh cho DES.
3.2 Thuật toán mã hóa RSA
2.2.1 Khái quát về 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ả [2, 3].
Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh, đã
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 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. 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ý.
3.2.2 Mô tả về thuật toán
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ã khoá công khai như sau:
Nam muốn gửi cho Nga một thông tin mật mà Nam muốn duy nhất Nga có
thể đọc được. Để làm được điều này, Nga gửi cho Nam một chiếc hộp có

32 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

khóa đã mở sẵn và giữ lại chìa khóa. Nam 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 khoá thông thường chỉ cần sập
chốt lại, sau khi sập chốt khóa ngay cả Nam 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 đó Nam gửi chiếc
hộp lại cho Nga. Nga 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.
3.2.2.1 Tạo khóa
Giả sử Nga và Nam 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, Nga đầ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 p và q với p≠q, lựa chọn ngẫu nhiên và
độc lập.
2. Tính: n= p*q.
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 (d*e -1)*k = (n), k là số nguyên dương. Hay d=e-
x * ( p  1) * (q  1)  1
1
mod (n) (hoặc tìm số tự nhiên x sao cho d= e
cũng là số tự nhiên).
Khóa công khai bao gồm:
 n, môđun.
 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, xuất hiện cả trong khóa công khai và khóa bí mật.
 d, số mũ bí mật (cũng gọi là số mũ giải mã).
Nga gửi khóa công khai cho Nam, 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.

33 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

3.2.2.2 Mã hóa
Giả sử Nam muốn gửi đoạn thông tin M cho Nga. Đầu tiên Nam 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. Quá trình này được mô tả ở phần sau:
Lúc này Nam có m và biết n cũng như e do Nga gửi. Nam sẽ tính c là bản
mã hóa của m theo công thức:

Hàm trên có thể tính dễ dàng 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 Nam gửi c cho Nga.
3.2.2.3 Giải mã
Nga nhận c từ Nam và biết khóa bí mật d. Nga có thể tìm được m từ c theo
công thức sau:

Biết m, Nga tìm lại M theo phương pháp đã thỏa thuận trước.
3.2.2.4 Sơ đồ thuật toán

Hình 3.7: Sơ đồ thuật toán RSA

34 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

3.2.2.5 Ví dụ minh họa.


Sau đây là một ví dụ với những số cụ thể. Ở đây 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.
Lấy:

- số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi


p=5
tạo khóa)
- số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo
q=7
khóa)
N = pq = 35 - môđun (công bố công khai)
(n)=(p-1)(q-1)=24. - Giá trị hàm số Ơle
e=5 - số mũ công khai (chọn e thoả điều kiện 1< e< n)
d = 29 - số mũ bí mật (tìm d sao cho ed -1 chia hết cho (n))
Như vậy ta có cặp khóa:
Public Key = (e,n) = (5,35)
Private Key = (d,n) = (29,35)
Áp dụng để mã hoá chuỗi : SECURE
Trong bảng chữ cái, có tất cả 26 ký tự, các ký tự ứng với một con số.
Do đó, ta có bảng sau:
Mã hóa chuổi SECURE.

Nếu tại đây, dữ liệu trên đường chuyển đến người nhận bị một người khác
bắt được, người đó sẽ không biết được nội dung muốn nói điều gì, mà chỉ
nhận được đó chỉ là những con số, không nói lên được điều gì. Nếu muốn đọc
được nội dung, người đó phải có Private Key, mà ứng với Public Key dùng để

35 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

mã hoá dữ liệu trên thì phải có Private Key thích hợp. Do đó, dữ liệu sẽ an
toàn.
Khi dữ liệu đến tay người nhận, muốn khôi phục lại dữ liệu gốc ban đầu,
ta sẽ giải mã lại với n = 35, d = 29.
Giải mã chuỗi SECURE.
Nội dung bị mã hoá M = cd mod n Dữ liệu gốc
24 19 S
10 5 E
33 3 C
21 21 U
23 18 R
10 5 E

3.2.3 Một số phương pháp tấn công


Tính chất an toàn của phương pháp RSA dựa trên cơ sở, chi phí cho việc
giải mã bất hợp lệ thông tin đã được mã hóa sẽ quá lớn nên xem như không
thể thực hiện được.
Vì khóa là công cộng nên việc tấn công bẻ khóa phương pháp RSA thường
dựa vào khóa công cộng để xác định khóa riêng tương ứng. Điều quan trọng là
dựa vào n để tính p, q, từ đó tính được d.
3.2.3.1 Phương pháp sử dụng φ(n)
Giả sử người tấn công biết được giá trị φ(n). Khi đó việc xác định giá trị p,
q được đưa về giải hai phương trình sau.
n = p*q
φ(n) = (p-1)*(q-1)
Thay q = n/p ta được phương trình bậc hai:
p2 + p*( φ(n) - n - 1) + n = 0.
p, q chính là hai nghiệm của phương trình bậc hai này. Tuy nhiên vấn đề
phát hiện được φ(n) còn khó hơn việc xác định hai thừa số nguyên tố của n.
3.2.3.2 Áp dụng thuật toán phân tích ra thừa số

36 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Có nhiều thuật toán để phân tích ra thừa số. Tuy nhiên thuật toán Pollard
p-1, là một trong những thuật toán đơn giải, hiệu quả, dùng để phân tích ra
thừa số nguyên tố của các số nguyên lớn, ở đây ta phân tích số nguyên n dựa
vào phân tích p-1 với p là một ước nguyên tố của n.
Các bước của thuật toán:
Bước 1: Xác định đầu vào là hai số n và b ( n là số nguyên lẻ cần phân
tích, b là một giá trị giới hạn).
Bước 2: Gán a = 2.
Bước 3: for j = 2 to b do
a = aj mod n
Bước 4: Tìm d = gcd(a-1,n). d là ước chung lớn nhất của a-1 và n.
Bước 5: Nếu 1< d < n then
d là thừa số nguyên tố của n (thành công).
Ngược lại
Không xác định được thừa số nguyên tố của n.
Giải thuật này chỉ hiệu quả khi tấn công phương pháp RSA trong trường
hợp n có thừa số nguyên tố p mà p-1 chỉ có các ước số nguyên tố rất nhỏ. Do
đó chúng ta có thể dễ dàng xây dựng một hệ mã hóa công cộng RSA an toàn
đối với giải thuật tấn công p-1. Cách đơn giản là tìm một số nguyên tố p 1 lớn
mà p = 2p1+1 cũng là số nguyên tố, tương tự, tìm q 1 là số nguyên tố lớn mà q
= 2q1+1 là nguyên tố.
3.2.3.3 Bẻ khóa dựa trên tấn công lặp lại
Siimons và Norris đã chỉ ra rằng hệ thống RSA có thể bị tổn thương khi sử
dụng phương pháp tấn công lặp lại liên tiếp. Đó là khi đối thủ biết cặp khóa
công cộng (e,n) và từ khóa C thì họ có thể tính chuổi các từ khóa sau.
C1 = Ce mod n.
C2 = C1e mod n.
........................
Ci = Ci-1e mod n.
Nếu có một phần tử Cj trong chuỗi C1, C2,…, Ci. Sao cho Cj = C thì khi đó
kẻ tấn công sẻ tìm được M = Cj-1 bởi vì.

37 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Cj = Cej-1 mod n.
C = Me mod n.
Ví dụ : Giả sử anh ta biết {e, n, C} = {17, 35, 3}. Người ta sẻ tính.
C1 = Ce mod n = 317 mod 35 = 33.
C2 = C1e mod n = 3317 mod 35 = 3.
Vì C2 = C nên M = C1 =33.
3.2.4 Đánh giá thuật toán
- RSA đơn giản, dễ hiểu, dễ cài đặt.
- Hiệu suất hoạt động: RSA chạy chậm do việc phát sinh khoá công khai,
khoá bí mật hay quá trình mã hoá, giải mã tốn nhiều thời gian vì phải tính toán
trên các số nguyên dương cực lớn, có chiều dài vượt quá khả năng chứa của
thanh ghi nên phải thực hiện lại nhiều lần và sử dụng nhiều đến bộ xử lý. Do
đó, RSA không được sử dụng vào mục đích mã hoá các khối lượng dữ liệu lớn
mà chỉ ứng dụng trong chữ ký điện tử để mã hoá thông điệp ngắn đã qua hàm
băm (hash), giải thuật trao đổi khoá bí mật (khoá dùng cho các hệ thống mã
hoá đối xứng, hay khoá riêng) hay là chỉ mã hoá dữ liệu với số lượng nhỏ.
- Tính bảo mật: Độ an toàn của RSA dựa trên bài toán phân tích ra thừa số
nguyên tố. Do đó, chiều dài của số càng lớn thì càng khó phân tích ra thừa số
nguyên tố.

3.3. Thuật toán mã hóa MD5

3.3.1 Hàm băm MD5

3.3.1.1 Khái niệm

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị
băm là 128 bit. Từng được xem là một chuẩn trên Internet, MD5 đã được sử
dụng rộng rãi trong các chương trình an ninh mạng, và cũng thường được
dùng để kiểm tra tính nguyên vẹn của tập tin.

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm
băm trước MD4 (cũng do ông thiết kế, trước đó nữa là MD2) [5, 8].

3.3.1.2 Ứng dụng

MD5 có 2 ứng dụng quan trọng:

38 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

 MD5 được sử dụng rộng rãi trong thế giới phần mềm để đảm bảo rằng
tập tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm
tra phần mềm bằng MD5 được công bố với thông số kiểm tra phần mềm tải
về bằng MD5. Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói tin mà nó
phân phối, trong khi hệ điều hành Windows sử dụng phần mềm của hãng thứ
ba.

 MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này
là biến đổi một chuỗi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã
đó không thể nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể
hoặc phải mất một khoảng thời gian vô tận (đủ để làm nản lòng các hacker).

3.3.1.3 Thuật giải

MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích
thước cố định 128 bit. Thông điệp đưa vào sẽ được cắt thành các khối 512 bit.
Thông điệp được đưa vào bộ đệm để chiều dài của nó sẽ chia hết cho 512. Bộ
đệm hoạt động như sau:

- Trước tiên chèn bit 1 vào cuối thông điệp.

- Tiếp đó là hàng loạt bit Zero cho tới khi chiều dài của nó nhỏ hơn bội
số của 512 một khoảng 64 bit .

- Phần còn lại sẽ được lấp đầy bởi một số nguyên 64 bit biểu diễn
chiều dài ban đầu của thông điệp. Thuật toán chính của MD5 hoạt động
trên một bộ 128 bit. Chia nhỏ nó ra thành 4 từ 32 bit, ký hiệu là A, B, C
và D. Các giá trị này là các hằng số cố định. Sau đó thuật toán chính sẽ
luân phiên hoạt động trên các khối 512 bit. Mỗi khối sẽ phối hợp với
một bộ. Quá trình xử lý một khối thông điệp bao gồm 4 bước tương tự
nhau, gọi là vòng (“round”). Mỗi vòng lại gồm 16 quá trình tương tự
nhau dựa trên hàm một chiều F, phép cộng module và phép xoay trái…

Hình bên dưới mô tả một quá trình trong một vòng. Có 4 hàm một hiều F
có thể sử dụng. Mỗi vòng sử dụng một hàm khác nhau.

39 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hình 3.8: Mô hình một vòng

Hàm băm MD5 (còn được gọi là hàm tóm tắt thông điệp - message
degests) sẽ trả về một chuỗi số hexa phân gồm 32 số liên tiếp.

Dưới đây là các ví dụ mô tả các kết quả thu được sau khi băm.

MD5("cộng hòa xã hội chủ nghĩa việt nam")

= 7b8e76fac176d53c53cb24843e31e759

Thậm chỉ chỉ cần một thay đổi nhỏ cũng làm thay đổi hoàn toàn kết quả
trả về :

MD5(“ Cộng Hòa Xã Hội Chủ Nghĩa Việt Nam “)

= 4B290F07CAC9A678797B6D23CCD1062B

Ngay cả một chuổi rỗng cũng cho ra một kết quả phức tạp:

MD5(“”) = d41d8cd98f00b204e9800998ecf8427e

40 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

3.3.2 MD5

3.3.2.1 Mô tả

Đầu vào là những khối 512 bit, được chia cho 16 khối con 32 bit. Đầu ra
của thuật toán là một thiết lập của 4 khối 32 bit để tạo thành một hàm Băm
128 bit duy nhất. Đầu tiên, ta chia thông điệp thành các khối 512 bit, với khối
cuối cùng (đặt là x và x <512 bit) của thông điệp, chúng ta cộng thêm một bit
1 vào cuối của x, theo sau đó là các bit 0 để được độ dài cần thiết (512 bit).
Kết quả là thông điệp vào là một chuỗi M có độ dài chia hết cho 512, vì
vậy ta có thể chia M ra thành các N word 32 bit (N word này sẽ chia hết cho
16).

Bây giờ, ta bắt đầu tìm cốt của thông điệp với 4 khối 32 bit A, B, C và D
(được xem như thanh ghi) :

A = 0x01234567

B = 0x89abcdef

C = 0xfedcba98

D = 0x76543210.

Người ta thường gọi A, B, C, D là các chuỗi biến số (chaining variables).

Thông điệp được chia ra thành nhiều khối 512 bit, mỗi khối 512 bit lại
được chia ra 16 khối 32 bit đi vào bốn vòng lặp của MD5. Giả sử ta đặt a, b,
c và d thay cho A, B, C và D đối với khối 512 bit đầu tiên của thông điệp.
Bốn vòng lặp trong MD5 đều có cấu trúc giống nhau. Mỗi vòng thực hiện 16
lần biến đổi: Thực hiện với một hàm phi tuyến của 3 trong 4 giá trị a, b, c và
d sau đó nó cộng kết quả đến giá trị thứ 4, tiếp đó cộng với một khối con 32
bit và một hằng số. Sau đó, nó dịch trái một được bit thay đổi và cộng kết
quả vào một trong 4 giá trị a, b, c hay d. Kết quả cuối cùng là một giá trị
mới được thay thế một trong 4 giá trị a, b, c hay d.

41 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Hình 3.9: Sơ đồ vòng lặp của MD5

Có bốn hàm phi tuyến, mỗi hàm này được sử dụng cho mỗi vòng:

F (X, Y, Z) = (X Ù Y) Ú ((Ø X) Ù Z)

G(X, Y, Z) = (X Ù Z) Ú ((Ø Z) Ù Y)

H (X, Y, Z) = X  Y  Z

I (X, Y, Z) = Y  (X Ú (¬Z))

Quy ước:

X Ù Y Phép toán AND trên bit giữa X và Y.

X Ú Y Phép toán OR trên bit giữa X và Y.

X  Y Phép toán XOR trên bit giữa X và Y.

¬X Phép toán NOT trên bit của X.

X + Y Phép cộng.

X <<< s Các bit của X được dịch chuyển xoay vòng sang trái s vị trí, với
(0 ≤ s < 32)

Những hàm này được thiết kế sao cho các bit tương ứng của X, Y và Z
là độc lập và không ưu tiên, và mỗi bit của kết quả cũng độc lập và ngang

42 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

bằng nhau.

Nếu Mj là một biểu diễn của khối con thứ j (j = 16) và <<<s là phép
dịch trái của s bit, thì các vòng lặp có thể biểu diễn như sau:

FF(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + F(b,c,d) + Mj + ti)<<<s)

GG(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<<s)

HH(a,b,c,d,Mj,s,ti) được biểu diễn a = b+ ((a+H(b,c,d) + Mj + ti) <<< s)

II(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s).

3.3.2.2 Cách thực hiện


Bốn vòng (64 bước) sẽ thực hiện như sau:
Vòng 1:
FF (a, b, c, d, M0, 7, 0xd76aa478)
FF (d, a, b, c, M1, 12, 0xe8c7b756)
FF (c, d, a, b, M2, 17, 0x242070db)
FF (b, c, d, a, M3, 22, 0xc1bdceee)
FF (a, b, c, d, M4, 7, 0xf57c0faf)
FF (d, a, b, c, M5, 12, 0x4787c62a)
FF (c, d, a, b, M6, 17, 0xa8304613)
FF (b, c, d, a, M7, 22, 0xfd469501)
FF (a, b, c, d, M8, 7, 0x698098d8)
FF (d, a, b, c, M9, 12, 0x8b44f7af)
FF (c, d, a, b, M10, 17, 0xffff5bb1)
FF (b, c, d, a, M11, 22, 0x895cd7be)
FF (a, b, c, d, M12, 7, 0x6b901122)
FF (d, a, b, c, M13, 12, 0xfd987193)
FF (c, d, a, b, M14, 17, 0xa679438e)
FF (b, c, d, a, M15, 22, 0x49b40821).

43 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Vòng 2:
GG (a, b, c, d, M1, 5, 0xf61e2562)
GG (d, a, b, c, M6, 9, 0xc040b340)
GG (c, d, a, b, M11, 14, 0x265e5a51)
GG (b, c, d, a, M0, 20, 0xe9b6c7aa)
GG (a, b, c, d, M5, 5, 0xd62f105d)
GG (d, a, b, c, M10, 9, 0x02441453)
GG (c, d, a, b, M15, 14, 0xd8a1e681)
GG (b, c, d, a, M4, 20, 0xe7d3fbc8)
GG (a, b, c, d, M9, 5, 0x21e1cde6)
GG (d, a, b, c, M14, 9, 0xc33707d6)
GG (c, d, a, b, M3, 14, 0xf4d50d87)
GG (b, c, d, a, M8, 20, 0x455a14ed)
GG (a, b, c, d, M13, 5, 0xa9e3e905)
GG (d, a, b, c, M2, 9, 0xfcefa3f8)
GG (c, d, a, b, M7, 14, 0x676f02d9)
GG (b, c, d, a, M12, 20, 0x8d2a4c8a).

Vòng 3:
HH (a, b, c, d, M5, 4, 0xfffa3942)
HH (d, a, b, c, M8, 11, 0x8771f681)
HH (c, d, a, b, M11, 16, 0x6d9d6122)
HH (b, c, d, a, M14, 23, 0xfde5380c)
HH (a, b, c, d, M1, 4, 0xa4beea44)
HH (d, a, b, c, M4, 11, 0x4bdecfa9)
HH (c, d, a, b, M7, 16, 0xf6bb4b60)
HH (b, c, d, a, M10, 23, 0xbebfbc70)
HH (a, b, c, d, M13, 4, 0x289b7ec6)
HH (d, a, b, c, M0, 11, 0xeaa127fa)
HH (c, d, a, b, M3, 16, 0xd4ef3085)
HH (b, c, d, a, M6, 23, 0x04881d05)
HH (a, b, c, d, M9, 4, 0xd9d4d039)
HH (d, a, b, c, M12, 11, 0xe6db99e5)
HH (c, d, a, b, M15, 16, 0x1fa27cf8)
HH (b, c, d, a, M2, 23, 0xc4ac5665).

44 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Vòng 4:

II (a, b, c, d, M0, 6, 0xf4292244)


II (d, a, b, c, M7, 10, 0x432aff97)
II (c, d, a, b, M14, 15, 0xab9423a7)
II (b, c, d, a, M5, 21, 0xfc93a039)
II (a, b, c, d, M12, 6, 0x655b59c3)
II (d, a, b, c, M3, 10, 0x8f0ccc92)
II (c, d, a, b, M10, 15, 0xffeff47d)
II (b, c, d, a, M1, 21, 0x85845dd1)
II (a, b, c, d, M8, 6, 0x6fa87e4f)
II (d, a, b, c, M15, 10, 0xfe2ce6e0)
II (c, d, a, b, M6, 15, 0xa3013414)
II (b, c, d, a, M13, 21, 0x4e0811a1)
II (a, b, c, d, M4, 6, 0xf7537e82)
II (d, a, b, c, M11, 10, 0xbd3af235)
II (c, d, a, b, M2, 15, 0x2ad7d2bb)
II (b, c, d, a, M9, 21, 0xeb86d391).
Những hằng số ti được chọn theo quy luật sau: ở bước thứ i giá trị ti là

phần nguyên của 232*abs(sin(i)), trong đó i = [0..63] được tính theo radian.

Sau tất cả những bước này a, b, c và d lần lượt được cộng với A, B, C và
D để cho kết quả đầu ra và thuật toán tiếp tục với khối dữ liệu 512-bit tiếp
theo cho đến hết thông điệp. Đầu ra cuối cùng là một khối 128 bit của A, B,
C và D, đây chính là hàm Băm nhận được.

45 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

3.3.2.3 Thuật toán và sơ đồ khối

Sơ đồ hoạt động của MD5.

Begin

H0=0x67452301; H1:=0xEFCDAB89
H2:=0x98BADCFE; H3:=0x10325476

Tiền xử lý

Chia thông điệp thành M khối 512 bit

A=H0; B=H1; C=H2; D=H3;

i=1

F
i<=M
T
Xử lý trên mỗi khối 512 bit

H0=H0+A; H1=H1+B;
H2=H2+C; H3=H3+D

i++

MD: H0 H1 H2 H3

End

Hình 3.10: Sơ đồ khối tổng quát

46 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Trong đó

 Tiền xử lý:

 Thêm bit 1 vào cuối thông điệp.

 Thêm vào k bit 0 sao cho độ dài thông điệp nhận được đồng dư 448

(mod 512).

 Thêm 64 bit biểu diễn độ dài của thông điệp gốc.

 Quy trình xử lý mỗi khối 512 bit được thực hiên theo sơ đồ sau

47 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Begin

i =1

Đ f := (B Ù C) Ú ((Ø B) Ù
D)
i <=15
g := i
S
Đ f := (D Ù B) Ú ((Ø D) Ù
C)
i <=31
g := (5×i + 1) mod 16
S
Đ f := B  C  D
g := (3×i + 5) mod 16
i <=47

f := C  (B Ú (Ø D))
g := (7×i) mod 16

tg = D , D = C , C = B
B = ((A + f + K[i] + w[g])
<<< R[i]) + B

Đ
i =i+1
i <=64

End

Hình 3.11: Sơ đồ xử lý 512 bit

48 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

Với R[i] là hệ số quay trái của mỗi chu kì

R[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22,

7, 12, 17, 22, 7, 12, 17, 22}

R[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20,

5, 9, 14, 20, 5, 9, 14, 20}

R[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23,

4, 11, 16, 23, 4, 11, 16, 23}

R[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21,

6, 10, 15, 21, 6, 10, 15, 21

K[i] là hằng số.


for i =0 to 63 do

K[i] := floor(abs(sin(i + 1)) × (2 pow 32))

49 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN


1. Kết quả đạt được

Sau một thời gian tập trung nghiên cứu. Em đã tìm hiểu được một số vấn
đề về mã hóa thông tin. Qua đó biết được rằng mã hóa có vai trò không thể
thiếu trong lĩnh vực an toàn thông tin mạng. Mã hóa có ứng dụng to lớn trong
đời sống xã hội, các lĩnh vực kinh tế, chính trị quân sự của một quốc gia.
Trong đề tài này em đã tìm hiểu được một số vấn đề liên quan đến mã hóa
như sau:
- Tìm hiểu một số khái niệm về mã hóa thông tin.
- Các tiêu chuẩn để đánh giá một hệ mã hóa.
- Một số phương pháp mã hóa cổ điển như: Ceasar, Vigenere.
- Một số phương pháp mã hóa hiện đại nổi tiếng như: DES, RSA, MD5.
- Tìm hiểu ngôn ngữ lập trình C# trên nền tảng .NET
- Xây dựng chương trình mô phỏng sử dụng thuật toán mã hóa RSA.
- Ứng dụng MD5 trong việc đăng ký bản quyền của công ty.

Hình 3.12: Ứng dụng MD5 trong đăng ký bản quyền công ty

50 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

2. Hướng phát triển

Qua quá trình nghiên cứu em biết được các thuật toán mã hóa này đã tạo
nên nhiều ứng dụng to lớn như:

- Chữ ký thư điện tử trong doanh nghiệp, ngân hàng…

- Mã hóa Password.

- Chứng thực người dùng.

- Kiểm tra tính toàn vẹn của phần mền/dữ liệu khi download…

Tuy nhiên đây là lĩnh vực khó, đòi hỏi nhiều thời gian và kiến thức sâu,
Trong tương lai em sẽ tìm hiểu sâu, rộng hơn về các thuật toán mã hóa để có
thể xây dựng thành công một chương trình ứng dụng để mã hóa các tập văn
bản có khích thước lớn, mã hóa đề thi. Tìm hiểu thêm một số ngôn ngữ, các
phần mềm ứng dụng khác để nâng cao và mở rộng phạm vi ứng dụng tính bảo
mật.

3. Kết luận

Trong quá trình nghiên cứu đề tài “Tìm hiểu một số thuật toán mã hóa
dữ liệu và ứng dụng”. Em đã được hiểu hơn về các vấn đề mã hóa dữ liệu.
Tuy nhiên do thời gian và kiến thức còn hạn chế nên khóa luận tốt nghiệp của
em chắc chắn sẽ không tránh khỏi những thiếu sót, em rất mong được sự đóng
góp ý kiến của quý thầy cô giáo và bạn bè để khóa luận của em được hoàn
thiện hơn.

Một lần nữa em xin chân thành cảm ơn.

51 Trang
Tìm Hiểu Một Số Thuật Toán Mã Hóa Dữ Liệu Và Ứng Dụng

TÀI LIỆU THAM KHẢO


[1] Phan Đình Diệu, Lý thuyết mật mã và an toàn thông tin, Đại học Quốc
gia Hà Nội, 1999.

[2] Dương Anh Đức, Trần Minh Triết, Mã hóa và ứng dụng, Khoa Công nghệ
Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia thành
phố Hồ Chí Minh, 2005

[3] Alfred Menezes, Comparing the Security of ECC and RSA, University of
Waterloo, 2000.

[4] E. Biham, A. Shamir, Diffrential cryptanalisis of DES-like cryptosystems,


Jounal of Cryptology, 1991.

[5] R. Rivest, The MD5 Message-Digest Alorithm, MIT Laboratory for


Computer Science and RSA Data Security, Inc, April 1992.

[6] M. Matsui, Linear cryptanalisis method for DES Cipher, Advances in


cryptology, proceedings Eurocrypt, LNCS, T. Helleseth, Ed., Springer-
Verlag, 1994.

[7] Hồ Thuần, Giáo trình “Lý thuyết mật mã và an toàn dữ liệu”,


Trường Đại học Bách Khoa Hà Nội, 2000.

[8] Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu, Collisions for
Hash Functions MD4, MD5, HAVAL-128 and RIPEMD, International
Association for Cryptologic Research, 2004.

52 Trang

You might also like