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

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề TÌM HIỂU CÁC THUẬT TOÁN MÃ HÓA

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 (419.66 KB, 27 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
PHÒNG ĐÀO TẠO SĐH-KHCN&QHĐN
TIỂU LUẬN THUẬT TOÁN VÀ
PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ
TÌM HIỂU CÁC THUẬT TOÁN MÃ HÓA
VÀ CHƯƠNG TRÌNH MINH HỌA
GVHD: PGS. TS. Đỗ Văn Nhơn
HVTH: Võ Thị Thúy Lan
MSHV: CH1301096
TP. Hồ Chí Minh, tháng 10/2014
MỤC LỤC

DANH MỤC HÌNH ẢNH
Hình 2.1 Sơ đồ khái quát về một hệ thống mật mã
Hình 3.1 Cấu trúc thuật toán Feistel dùng trong DES
Hình 3.2 Quá trình trong một vòng xử lý
Hình 5.1 Mô hình lớp thừa kế
Hình 5.2 Các thuật toán mã hóa .NET Framework hỗ trợ
Hình 5.3 System.Security.Crytography
Hình 5.4 Kết quả kiểm tra tính toàn vẹn của file
Hình 5.5 Kết quả mã hóa dữ liệu
Hình 5.6 Kết quả giải mã dữ liệu
Hình 5.7 Kết quả mã hóa chuỗi dữ liệu
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
1. PHẦN MỞ ĐẦU
Ngay từ xa xưa, con người đã biết đến truyền thông cũng như tầm quan
trọng của việc bảo vệ những thông tin quý giá trước kẻ thù. Điều đó thúc đẩy
nhiều bộ óc trong lịch sử phát minh ra các phương pháp sử dụng mật mã để giải
quyết những thách thức trong việc bảo vệ dữ liệu. Cho đến ngày nay, mật mã
luôn gắn liền với việc bảo đảm an toàn thông tin khi lưu giữ hay truyền tải trên


các hệ thống công nghệ thông tin - viễn thông. Khi khoa học ngày càng phát
triển, mật mã cũng được sử dụng trong những hệ thống quan trọng cần độ bảo
mật cao như: ngân hàng, bưu chính, thương mại, quân sự, tình báo, ngoại giao…
Theo đó, từ những cách viết mật mã thô sơ vào thời kỳ sơ khai, những thuật toán
mã hóa được phát triển ngày một nhiều và có độ bảo mật cao hơn.
Mã hóa là nghiên cứu các cách thức chuyển đổi thông tin từ dạng rõ (clear
text) sang dạng mờ (cipher text) và ngược lại. Đây là một phương pháp hỗ trợ rất
tốt trong việc chống lại những truy cập bất hợp pháp tới dữ liệu được truyền đi
trên mạng, áp dụng mã hoá sẽ khiến cho nội dung thông tin được truyền đi dưới
dạng mờ và không thể đọc được đối với bất kỳ ai cố tình muốn lấy thông tin đó.
Nhận thấy được tầm quan trọng của việc bảo vệ dữ liệu, thông qua việc
tìm hiểu các công cụ sẵn có để áp dụng các thuật toán nhằm mã hóa/giải mã
thông tin dữ liệu. Bài báo cáo sẽ đề cập đến 2 phần chính:
• Tìm hiểu về các thuật toán mã hóa.
• Giới thiệu phần mềm mã hóa/giải mã dữ liệu sử dụng thư viện
mật mã của .NET Framework
Em xin chân thành cảm ơn Thầy PGS. TS. Đỗ Văn Nhơn đã cung cấp cho
em những kiến thức quý giá và thiết thực trong môn Thuật toán và phương pháp
giải quyết vấn đề làm cơ sở nền tảng cho em thực hiện bài báo cáo này.
HVTH: Võ Thị Thúy Lan-CH1301096 4
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
2. MỘT SỐ KHÁI NIỆM
2.1. Khái niệm về mã hóa
Cryptography (hay crypto) - mật mã học - ngành khoa học nghiên cứu về
việc giấu thông tin. Cụ thể hơn, mật mã học là ngành học nghiên cứu về những
cách chuyển đổi thông tin từ dạng “có thể hiểu được” thành dạng “không thể hiểu
được” và ngược lại.
Cryptography giúp đảm bảo những tính chất sau cho thông tin:
• Tính bí mật (confidentiality): thông tin chỉ được tiết lộ
cho những ai được phép.

• Tính toàn vẹn (integrity): thông tin không thể bị thay đổi
mà không bị phát hiện.
• Tính xác thực (authentication): người gửi (hoặc người
nhận) có thể chứng minh đúng họ.
• Tính không chối bỏ (non-repudiation): người gửi hoặc
nhận sau này không thể chối bỏ việc đã gửi hoặc nhận thông tin.
Mật mã có rất nhiều ứng dụng trong thực tế như bảo vệ giao dịch tài chính
(rút tiền ngân hàng, mua bán qua mạng), bảo vệ bí mật cá nhân Nếu kẻ tấn
công đã vượt qua tường lửa và các hệ thống bảo vệ khác thì mật mã chính là
hàng phòng thủ cuối cùng cho dữ liệu của chúng ta.
2.2. Một số thuật ngữ về mã hóa thông tin
Cryptosystem (viết tắt của cryptographic system): hệ thống mã hóa thông
tin, có thể là phần mềm như PGP, Ax-Crypt, Truecrypt giao thức như SSL,
IPsec hay đơn giản là một thuật toán như DES.
Encrypt (encipher): mã hóa - quá trình biến đổi thông tin từ dạng ban
đầu - có thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí mật
thông tin đó.
Decrypt (decipher): giải mã - quá trình ngược lại với mã hóa, khôi phục
lại thông tin ban đầu từ thông tin đã được mã hóa.
Plaintext (cleartext): dữ liệu gốc (chưa được mã hóa).
HVTH: Võ Thị Thúy Lan-CH1301096 5
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Ciphertext: dữ liệu đã được mã hóa.
Lưu ý: Từ text (hay message) ở đây được dùng theo quy ước, được hiểu là
tất cả những dữ liệu được mã hóa (hay giải mã) chứ không chỉ là văn bản chữ
như nghĩa thông thường. Khi dịch ra Tiếng Việt, từ “văn bản” và từ “thông điệp”
cũng tuân theo quy ước tương tự.
Cipher (hay cypher): thuật toán dùng để thực hiện quá trình mã hóa hay
giải mã. Trong bài này gọi tắt là thuật toán.
Key: chìa khóa - thông tin dùng cho quy trình mã hóa và giải mã.

Code: cần phân biệt code trong mật mã học với code trong lập trình hay
code trong Zip code Trong cryptography, code (mã) có ý nghĩa gần như là
cipher (thuật toán). Chúng chỉ khác nhau ở chỗ: code biến đổi thông tin ở tầng
nghĩa (từ, cụm từ) còn cipher biến đổi thông tin ở tầng thấp hơn, ví dụ chữ cái
(hoặc cụm chữ cái) đối với các thuật toán cổ điển hay từng bit (hoặc nhóm bit)
đối với các thuật toán hiện đại.
Cryptanalysis: nếu coi mật mã học là việc cất dữ liệu vào một cái hộp
sau đó dùng chìa khóa khóa lại, thì cryptanalysis là ngành nghiên cứu những
phương pháp mở hộp để xem dữ liệu khi không có chìa khóa.
Hình 2.1 Sơ đồ khái quát về một hệ thống mật mã
HVTH: Võ Thị Thúy Lan-CH1301096 6
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
2.3. Khái niệm về chìa khóa
2.3.1. Password
Password: mật khẩu, là một hay nhiều từ mà người dùng phải biết để được
cấp quyền truy cập.
Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ an toàn
để được dùng trực tiếp trong thuật toán. Vì vậy, trong bất cứ hệ thống mã hóa dữ
liệu nghiêm túc nào cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa
khóa có độ an toàn thích hợp. Bước tạo chìa khóa này thường được gọi là key
derivation, key stretching hay key initialization.
2.3.2. Key Derivation Function
Là một hàm hash được thiết kế sao cho chìa an toàn hơn đối với tấn công
kiểu brute-force hay cổ điển. Hàm này được thực hiện lại nhiều lần trên mật khẩu
ban đầu cùng với một số ngẫu nhiên để tạo ra một chìa khóa có độ an toàn cao
hơn. Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là iteration.
Ví dụ: Một mật khẩu là “pandoras B0x”, cùng với salt là “230391827”, đi
qua hàm hash SHA-1 1000 lần cho kết quả là một chìa khóa có độ dài 160 bit
như sau: 3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dưới
dạng số thập lục phân).

2.3.3. Keylength
Hay còn gọi là Keysize: Độ dài (hay độ lớn) của chìa khóa. Nói một chìa
khóa có độ dài 128 bit có nghĩa chìa đó là một số nhị phân có độ dài 128 chữ số.
Một thuật toán có chìa khóa càng dài thì càng có nhiều khả năng chống lại tấn
công kiểu brute-force.
HVTH: Võ Thị Thúy Lan-CH1301096 7
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
3. THUẬT TOÁN MÃ HÓA
Ở đây ta dùng hai đối tượng Sender và Receiver để mô tả cho các đối
tượng gởi và nhận.
3.1. Cổ điển
3.1.1. Substitution
Substitution: thay thế - phương pháp mã hóa trong đó từng kí tự (hoặc
từng nhóm kí tự) của văn bản ban đầu được thay thế bằng một (hay một nhóm) kí
tự khác. Tuy không còn được sử dụng nhưng ý tưởng của phương pháp này vẫn
được tiếp tục trong những thuật toán hiện đại.
3.1.2. Transposition
Transposition: hoán vị - phương pháp mã hóa trong đó các kí tự trong văn
bản ban đầu chỉ thay đổi vị trí cho nhau còn bản thân các kí tự không hề bị biến
đổi.
3.2. Hiện đại
3.2.1. Symmetric cryptography
Mã hóa đối xứng, tức là cả hai quá trình mã hóa và giải mã đều dùng một
chìa khóa. Để đảm bảo tính an toàn, chìa khóa này phải được giữ bí mật. Vì thế
các thuật toán loại này còn có tên gọi khác là secret key cryptography (hay
private key cryptography), tức là thuật toán mã hóa dùng chìa khóa riêng (hay bí
mật). Các thuật toán loại này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân
hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với
một bên thứ hai.
Ví dụ: Giả sử nếu Sender chỉ gửi thông điệp đã mã hóa cho Receiver mà

không hề báo trước về thuật toán sử dụng, Receiver sẽ chẳng hiểu Sender muốn
nói gì. Vì thế bắt buộc Sender phải thông báo cho Receiver về chìa khóa và thuật
toán sử dụng tại một thời điểm nào đó trước đấy. Sender có thể làm điều này một
cách trực tiếp (mặt đối mặt) hay gián tiếp (gửi qua email, tin nhắn ). Điều này
HVTH: Võ Thị Thúy Lan-CH1301096 8
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
dẫn tới khả năng bị người thứ ba xem trộm chìa khóa và có thể giải mã được
thông điệp Sender mã hóa gửi cho Receiver.
Mã hóa đối xứng có thể phân thành hai nhóm phụ:
- Block ciphers: thuật toán khối - trong đó từng khối dữ liệu trong văn bản
ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Độ dài mỗi
khối gọi là block size, thường được tính bằng đơn vị bit. Ví dụ thuật toán 3-Way
có kích thước khối bằng 96 bit.
Ví dụ: 3DES, RC5, RC6, 3-Way, CAST, Camelia, Blowfish, MARS,
Serpent, Twofish, GOST
- Stream ciphers: thuật toán dòng - trong đó dữ liệu đầu vào được mã hóa
từng bit một. Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được
dùng khi khối lượng dữ liệu cần mã hóa chưa được biết trước (ví dụ trong kết nối
không dây). Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi
khối là 1 bit.
Ví dụ: RC4, A5/1, A5/2, Chameleon
3.2.2. Asymmetric cryptography
Mã hóa bất đối xứng, sử dụng một cặp chìa khóa có liên quan với nhau về
mặt toán học, một chìa công khai dùng để mã hoá (public key) và một chìa bí mật
dùng để giải mã (private key). Một thông điệp sau khi được mã hóa bởi chìa công
khai sẽ chỉ có thể được giải mã với chìa bí mật tương ứng. Do các thuật toán loại
này sử dụng một chìa khóa công khai (không bí mật) nên còn có tên gọi khác là
public-key cryptography (thuật toán mã hóa dùng chìa khóa công khai).
Quay lại với Sender và Receiver, nếu Sender muốn gửi một thông điệp bí
mật tới Receiver, Sender sẽ tìm chìa công khai của Receiver. Sau khi kiểm tra

chắc chắn chìa khóa đó chính là của Receiver chứ không của ai khác (thông qua
chứng chỉ điện tử - digital certificate), Sender dùng nó để mã hóa thông điệp của
mình và gửi tới Receiver. Khi Receiver nhận được bức thông điệp đã mã hóa thì
sẽ dùng chìa bí mật của mình để giải mã nó. Nếu giải mã thành công thì bức
thông điệp đó đúng là dành cho Receiver. Sender và Receiver trong trường hợp
HVTH: Võ Thị Thúy Lan-CH1301096 9
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
này có thể là hai người chưa từng quen biết. Một hệ thống như vậy cho phép hai
người thực hiện được giao dịch trong khi không chia sẻ trước một thông tin bí
mật nào cả.
Một trong những hạn chế của các thuật toán mã hóa bất đối xứng là tốc độ
chậm, do đó trong thực tế người ta thường sử dụng một hệ thống lai tạp trong đó
dữ liệu được mã hóa bởi một thuật toán đối xứng, chỉ có chìa dùng để thực hiện
việc mã hóa này mới được mã hóa bằng thuật toán bất đối xứng.
3.2.3. So sánh đối xứng và bất đối xứng
Mã hóa đối xứng Mã hóa bất đối xứng
Khóa
Giải mã và mã hóa với cùng một
chìa hoặc có quan hệ rõ ràng với
nhau (có thể suy ra một chìa nếu
biết chìa còn lại)
Mã hóa bằng một chìa công khai
(Public key), giải mã bằng chìa bí
mật (Private key)
Tốc độ
Các thuật toán đối xứng nói chung
đòi hỏi công suất tính toán ít hơn
các thuật toán khóa bất đối xứng
(asymmetric key algorithms).
Một thuật toán khóa bất đối xứng

có khối lượng tính toán nhiều hơn
gấp hằng trăm, hằng ngàn lần một
thuật toán khóa đối xứng có độ an
toàn tương đương.
An toàn
Cả hai thuật toán đều đảm bảo an toàn dữ liệu. Tuy nhiên khi cần truyền
dữ liệu trên diện rộng (qua mạng internet) thì thuật toán mã hóa bất đối
xứng khó bị lộ chìa khóa hơn. Tuy nhiên khi mã hóa thông tin người ta
thường sử dụng phương pháp lai tạp, nghĩa là kết hợp giữa đối xứng và
bất đối xứng (dùng đối xứng để mã hóa dữ liệu và dùng bất đối xứng để
mã hóa key của phép đối xứng và gởi kèm theo dữ liệu)
Bảng 3.1 So sánh đối xứng và bất đối xứng
3.2.4. Hàm hash
Hashing là một phương thức mật mã nhưng nó không phải là một thuật
toán mã hoá. Đúng như vậy, hashing chỉ sử dụng một chứng chỉ số duy nhất được
biết đến với tên như “hash value - giá trị hash”, “hash - băm”, Message
Authentication Code (MAC), fingerprint - vân tay hay một đoạn message.
Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu
bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
HVTH: Võ Thị Thúy Lan-CH1301096 10
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Ví dụ: từ “Illuminatus” đi qua hàm SHA-1 cho kết quả
E783A3AE2ACDD7DBA5E1FA0269CBC58D. Ta chỉ cần đổi “Illuminatus”
thành “Illuminati” (chuyển “us” thành “i”) kết quả sẽ trở nên hoàn toàn khác
(nhưng vẫn có độ dài cố định là 160 bit)
A766F44DDEA5CACC3323CE3E7D73AE82.
Dữ liệu đầu vào có thể là một file, một ổ đĩa, một quá trình truyền thông
tin trên mạng hay một bức thư điện tử. Thông số hash value được sử dụng để
phát hiện khi có sự thay đổi của dữ liệu đầu vào. Nói cách khác, hashing sử dụng
nó để phát hiện ra dữ liệu có toàn vẹn trong quá trình lưu trữ hay trong khi truyền

hay không.
Không như các phương thức mật mã khác (chúng sẽ làm thay đổi dữ liệu
thành một dạng mật mã), quá trình hashing chỉ tính toán và đưa ra thông số hash
value của dữ liệu và không thay đổi dữ liệu ban đầu.
Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này
tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà
suy ra ai là chủ của nó được.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là
hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.
Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá
trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai
đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm
tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện
những thay đổi cho dù là nhỏ nhất.
SHA-1 (Secure Hash Algorithm) và MD5 là hai hàm hash thông dụng nhất
và được sử dụng trong rất nhiều hệ thống bảo mật.
HVTH: Võ Thị Thúy Lan-CH1301096 11
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
3.3. Một số thuật toán nổi tiếng
3.3.1. One-time Pad (OTP)
Xuất hiện từ đầu thế kỉ 20 và còn có tên gọi khác là Vernam Cipher, OTP
được mệnh danh là cái chén thánh của ngành mã hóa dữ liệu. OTP là thuật toán
duy nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tài
nguyên vô tận (tức là có thể chống lại kiểu tấn công brute-force). Để có thể đạt
được mức độ bảo mật của OTP, tất cả những điều kiện sau phải được thỏa mãn:
• Độ dài của chìa khóa phải đúng bằng độ dài văn bản cần mã hóa.
• Chìa khóa chỉ được dùng một lần.

• Chìa khóa phải là một số ngẫu nhiên thực.
Mới nghe qua có vẻ đơn giản nhưng trong thực tế những điều kiện này
khó có thể thỏa mãn được. Giả sử Sender muốn mã hóa chỉ 10MB dữ liệu bằng
OTP thì phải cần một chìa khóa có độ dài 10MB. Để tạo ra một số ngẫu nhiên
lớn như vậy Sender cần một bộ tạo số ngẫu nhiên thực (TRNG - True Random
Number Generator). Các thiết bị này sử dụng nguồn ngẫu nhiên vật lý như sự
phân rã hạt nhân hay bức xạ nền vũ trụ. Hơn nữa việc lưu trữ, chuyển giao và bảo
vệ một chìa khóa như vậy cũng hết sức khó khăn.
Dễ dàng hơn, Sender cũng có thể dùng một bộ tạo số ngẫu nhiên ảo
(PRNG - Pseudo Random Number Generator) nhưng khi đó mức độ bảo mật
giảm xuống gần bằng zero hay cùng lắm chỉ tương đương với một thuật toán
dòng như RC4 mà thôi.
Do có những khó khăn như vậy nên việc sử dụng OTP trong thực tế là
không khả thi.
3.3.2. DES
DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ
liệu) là một phương pháp mật mã hóa được FIPS (Tiêu chuẩn Xử lý Thông tin
Liên bang Hoa Kỳ) chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này
được sử dụng rộng rãi trên phạm vi thế giới. Ngay từ đầu, thuật toán của nó đã
gây ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài
khóa tương đối ngắn và các nghi ngờ về cửa sau để Cơ quan An ninh quốc gia
HVTH: Võ Thị Thúy Lan-CH1301096 12
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Hoa Kỳ (NSA) có thể bẻ khóa. Do đó, DES đã được giới nghiên cứu xem xét rất
kỹ lưỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher)
và các phương pháp thám mã tương ứng.
Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng.
Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Thuật toán được tin
tưởng là an toàn trong thực tiễn có dạng Triple DES (thực hiện DES ba lần), mặc
dù trên lý thuyết phương pháp này vẫn có thể bị phá. Từ cuối thập niên 1980, đầu

thập niên 1990, xuất phát từ những lo ngại về độ an toàn và tốc độ thấp khi áp
dụng bằng phần mềm, giới nghiên cứu đã đề xuất khá nhiều thuật toán mã hóa
khối để thay thế DES. Những ví dụ tiêu biểu bao gồm: RC5, Blowfish, IDEA
(International Data Encryption Algorithm - Thuật toán mã hóa dữ liệu quốc tế),
NewDES, SAFER, CAST5 và FEAL. Hầu hết những thuật toán này có thể sử
dụng từ khóa 64 bit của DES mặc dù chúng thường được thiết kế hoạt động với
từ khóa 64 bit hay 128 bit. Gần đây DES đã được thay thế bằng AES (Advanced
Encryption Standard - Tiêu chuẩn Mã hóa Tiên tiến).
HVTH: Võ Thị Thúy Lan-CH1301096 13
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Hình 3.1 Cấu trúc thuật toán Feistel dùng trong DES
DES là thuật toán mã hóa khối, nó xử lý từng khối thông tin của bản rõ có
độ dài xác định và biến đổi theo những quá trình phức tạp để trở thành khối
thông tin của bản mã có độ dài không thay đổi. Trong trường hợp của DES, độ
dài mỗi khối là 64 bit. DES cũng sử dụng khóa để cá biệt hóa quá trình chuyển
HVTH: Võ Thị Thúy Lan-CH1301096 14
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
đổi. Nhờ vậy, chỉ khi biết khóa mới có thể giải mã được văn bản mã. Khóa dùng
trong DES có độ dài toàn bộ là 64 bit. Tuy nhiên chỉ có 56 bit thực sự được sử
dụng, 8 bit còn lại chỉ dùng cho việc kiểm tra. Vì thế, độ dài thực tế của khóa chỉ
là 56 bit.
3.3.3. Advance Encryption Standard (AES)
Tháng 12 năm 1997, viện tiêu chuẩn và công nghệ Mỹ (NIST - National
Institute of Standard and Technology) kêu gọi phát triển một thuật toán mới thay
thế cho 3DES (một biến thể an toàn hơn của DES với chìa khóa dài 112 bit).
Thuật toán được chọn phải là thuật toán khối có kích thước khối là 128 bit, hỗ trợ
chìa khóa có kích thước 128 bit, 192 bit và 256 bit.
15 thuật toán được gửi đến từ nhiều nơi trên thế giới, 5 thuật toán lọt vào
vòng hai: Rijndael, Twofish, Serpent, RC6 và MARS. Tháng 11 năm 2001,
Rijndael được chọn làm AES (một phần nhờ có tốc độ nhanh hơn so với các đối

thủ), chính thức thay thế DES trong vai trò chuẩn mã hóa dữ liệu.
3.3.4. RSA
Trong mật mã học, RSA là một thuật toán mã hóa khóa 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ã
hóa. 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 khóa 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 diiều kiện độ dài khóa đủ lớn.
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 tiên của 3 tác giả.
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và
khóa bí mật (hay khóa cá nhân). Mỗi khóa là những khoá 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
HVTH: Võ Thị Thúy Lan-CH1301096 15
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
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 :
Receiver muốn gửi cho Sender một thông tin mật mà Receiver muốn duy nhất
Sender có thể đọc được. Để làm được điều này, Sender gửi cho Receiver một
chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa. Receiver 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ả Receiver 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 đó Receiver
gửi chiếc hộp lại cho Sender. Sender 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.3.5. MD5

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị
băm là 128bit. 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).
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 bits. Thông điệp đưa vào sẽ được cắt thành các khối 512 bits.
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 nó sẽ 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.
HVTH: Võ Thị Thúy Lan-CH1301096 16
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
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 chiều F
có thể sử dụng. Mỗi vòng sử dụng một hàm khác nhau.
Hình 3.2 Quá trình trong một vòng xử lý
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ố thập lục phân gồm 32 số liên tiếp.
MD5 có 2 ứng dụng quan trọng:
1/ 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
HVTH: Võ Thị Thúy Lan-CH1301096 17
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
MD5. Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói 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.
2/ 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).
4. MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG HỆ THỐNG THÔNG TIN MÃ
HÓA
Bất cứ ai cũng có thể tạo ra một hệ thống thông tin mã hóa cho riêng
mình. Nhưng để có một hệ thống an toàn và hiệu quả đòi hỏi người thiết kế phải
có kiến thức toán học sâu sắc, có kinh nghiệm về bảo mật và am hiểu các phương
pháp tấn công.
HVTH: Võ Thị Thúy Lan-CH1301096 18
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
4.1. Brute-force attack (exhaustive key search)
Phương pháp tấn công bằng cách thử tất cả những chìa khóa có thể có.
Đây là phương pháp tấn công thô sơ nhất và cũng khó khăn nhất.
Theo lý thuyết, tất cả các thuật toán hiện đại đều có thể bị đánh bại bởi
brute-force nhưng trong thực tiễn việc này chỉ có thể thực hiện được trong thời
gian hàng triệu, thậm chí hàng tỉ năm. Vì thế có thể coi một thuật toán là an toàn
nếu như không còn cách nào khác để tấn công nó dễ hơn là brute-force.
Ví dụ : Thuật toán DES có độ dài chìa khóa là 56 bit . Nếu ai đó muốn “bẻ
khoá” DES bằng cách thử hàng loạt chìa (brute-force attack) thì sẽ phải thử
khoảng hơn 70 triệu tỉ lần .
4.2. Frequency analysis
Thống kê tần suất, chỉ có thể áp dụng được đối với các thuật toán cổ điển

dùng phương pháp thay thế, ví dụ phương pháp Caesar. Để thực hiện phương
pháp này ta cần một lượng văn bản đã mã hóa đủ lớn để phép thống kê được
chính xác. Ngoài ra còn phải biết ngôn ngữ sử dụng trong văn bản ban đầu, nếu
văn bản ban đầu là Tiếng Anh thì nhiều khả năng kí tự xuất hiện nhiều nhất trong
văn bản đã mã hóa là do chữ e mã hóa thành, kí tự nhiều thứ nhì bắt nguồn từ
chữ a
4.3. Differential cryptanalysis
Eli Biham và Adi Shamir tìm ra phương pháp này vào khoảng cuối những
năm 1980, nó thường được sử dụng để tấn công các thuật toán khối (block
cipher). Phương pháp này dựa trên việc phân tích những biến đổi của hai văn bản
gốc có liên quan khi được mã hóa bởi cùng một chìa.
Còn rất nhiều phương pháp khác như Mod-n cryptanalysis, Linear
cryptanalysis, Birthday attack, Algebraic attack mà bất cứ ai thiết kế hệ thống
mã hóa cũng phải chú ý tới.
HVTH: Võ Thị Thúy Lan-CH1301096 19
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
5. PHẦN MỀM MÃ HÓA/GIẢI MÃ DỮ LIỆU
5.1. Giới thiệu về phần mềm
Chương trình được xây dựng bằng ngôn ngữ C# trên phần mềm Microsoft
Visual Studio 2012 với dung lượng nhẹ, không chiếm nhiều tài nguyên máy tính
khi sử dụng. Sử dụng được trên hầu hết các máy tính dùng từ Windows XP trở
lên.
Đặc điểm của phần mềm là giao diện đơn giản, trực quan, dễ sử dụng và
thân thiện với người dùng.
5.2. Mục tiêu
- Mã hóa văn bản dữ liệu nhằm tránh sự xâm nhập trái phép.
- Bảo đảm tính toàn vẹn dữ liệu khi giải mã.
- Sử dụng các thuật toán có độ bảo mật cao, khó phá giải nếu không có mã
khóa.
- Tích hợp mật khẩu nhằm bảo vệ tối đa dữ liệu.

- Phát hiện nếu thông tin dữ liệu đã bị thay đổi.
5.3. Sơ lược về .NET Crytography namespace
5.3.1. Mô hình mật mã của .NET Framework
- Cung cấp nhiều cài đặt của các thuật toán mã hóa chuẩn.
- Dễ sử dụng và an toàn.
- Dễ mở rộng thông qua tính kế thừa, tính thiết kế luồng và tính cấu hình
cho mật mã.
 Tính kế thừa
Hệ thống bảo mật của .NET Framework được cài đặt trên mô hình lớp
thừa kế có phân cấp sau:
Hình 5.1 Mô hình lớp thừa kế
HVTH: Võ Thị Thúy Lan-CH1301096 20
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
 Tính Thiết kế hướng luồng
Thiết kế hướng luồng được sử dụng cho các thực thi của thuật toán đối
xứng và băm.
Phần lõi là lớp CryptoStream (kế thừa từ lớp Stream).
Các đối tượng mật mã đều hỗ trợ CryptoStream interface để điều khiển
phần truyền nhận dữ liệu.
Có thể liên kết nhiều đối tượng mật mã với nhau và thực thi nhiều thao tác
trên dữ liệu mà không cần lưu trữ trung gian.
 Tính Cấu hình cho lớp mật mã
Việc cấu hình mật mã cho phép chuyển hướng một thực thi cụ thể của một
thuật toán sang một tên thuật toán.
Bổ sung thực thi phần cứng hay phần mềm của một thuật toán và ánh xạ
nó thay thế cho một thuật toán đã chọn của .NET Framework.
Thiết lập mặc định sẽ được sử dụng cho thuật toán nếu nó không được chỉ
định thay thế trong tập tin cấu hình.
5.3.2. Các thuật toán mã hóa .NET Framework hỗ trợ
Hình 5.2 Các thuật toán mã hóa .NET Framework hỗ trợ

5.3.3. .NET Framework Cryptography Namespace
Hình 5.3 System.Security.Crytography
5.4. Sử dụng phần mềm
5.4.1. Chức năng Kiểm tra file
Input: dữ liệu đã bị mã hóa (ciphertext)
Output: Kiểm tra file có tồn tại hay không? Tạo file kiểm tra kèm theo.
Kiểm tra nội dung dữ liệu trong file có bị thay đổi hay không?
HVTH: Võ Thị Thúy Lan-CH1301096 21
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Phương pháp: sử dụng hàm băm (Hash)
Hình 5.4 Kết quả kiểm tra tính toàn vẹn của file
5.4.2. Chức năng Mã hóa file (và giải mã)
Input: dữ liệu trơn (plaintext) cần được mã hóa hoặc dữ liệu đã bị mã hóa
(ciphertext) cần được giải mã
Output: dữ liệu sau khi được mã hóa (ciphertext) hoặc văn bản rõ
(plaintext) tìm được
Phương pháp: sử dụng giải thuật đối xứng
HVTH: Võ Thị Thúy Lan-CH1301096 22
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Hình 5.5 Kết quả mã hóa dữ liệu
HVTH: Võ Thị Thúy Lan-CH1301096 23
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Hình 5.6 Kết quả giải mã dữ liệu
5.4.3. Chức năng Mã hóa chuỗi
Input: chuỗi dữ liệu trơn (plaintext)
Output: dữ liệu sau khi được mã hóa (ciphertext)
Phương pháp: sử dụng giải thuật mã hóa bất đối xứng RSA
HVTH: Võ Thị Thúy Lan-CH1301096 24
Thuật toán và phương pháp giải quyết vấn đề GVHD: PGS.TS. Đỗ Văn Nhơn
Hình 5.7 Kết quả mã hóa chuỗi dữ liệu

HVTH: Võ Thị Thúy Lan-CH1301096 25

×