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ín
Trang 1PHÒ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
Trang 22.1 Khái niệm về mã hóa 2
2.2 Một số thuật ngữ về mã hóa thông tin 2
2.3 Khái niệm về chìa khóa 4
2.3.1 Password 4
2.3.2 Key Derivation Function 4
2.3.3 Keylength 4
3 THUẬT TOÁN MÃ HÓA 5
3.1 Cổ điển 5
3.1.1 Substitution 5
3.1.2 Transposition 5
3.2 Hiện đại 5
3.2.1 Symmetric cryptography 5
3.2.2 Asymmetric cryptography 6
3.2.3 So sánh đối xứng và bất đối xứng 7
3.2.4 Hàm hash 7
3.3 Một số thuật toán nổi tiếng 9
3.3.1 One-time Pad (OTP) 9
3.3.2 DES 9
3.3.3 Advance Encryption Standard (AES) 12
3.3.4 RSA 12
3.3.5 MD5 13
4 MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG HỆ THỐNG THÔNG TIN MÃ HÓA 16
4.1 Brute-force attack (exhaustive key search) 16
4.2 Frequency analysis 16
4.3 Differential cryptanalysis 16
5 PHẦN MỀM MÃ HÓA/GIẢI MÃ DỮ LIỆU 18
5.1 Giới thiệu về phần mềm 18
5.2 Mục tiêu 18
Trang 35.3.3 .NET Framework Cryptography Namespace 20
5.4 Sử dụng phần mềm 20
5.4.1 Chức năng Kiểm tra file 20
5.4.2 Chức năng Mã hóa file (và giải mã) 21
5.4.3 Chức năng Mã hóa chuỗi 23
6 KẾT LUẬN 24
TÀI LIỆU THAM KHẢO 25
Trang 4Hì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
Trang 51 PHẦN MỞ ĐẦU
Ngay từ xa xưa, con người đã biết đến truyền thông cũng như tầm quantrọng của việc bảo vệ những thông tin quý giá trước kẻ thù Điều đó thúc đẩynhiều bộ óc trong lịch sử phát minh ra các phương pháp sử dụng mật mã để giảiquyế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êncác hệ thống công nghệ thông tin - viễn thông Khi khoa học ngày càng pháttriển, mật mã cũng được sử dụng trong những hệ thống quan trọng cần độ bảomậ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õ (cleartext) sang dạng mờ (cipher text) và ngược lại Đây là một phương pháp hỗ trợ rấttố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 đitrên mạng, áp dụng mã hoá sẽ khiến cho nội dung thông tin được truyền đi dướidạ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ệctì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ápgiả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
Trang 62 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ữngcá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ộ
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ấncô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àngphò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ậtthô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
Trang 7Plaintext (cleartext): dữ liệu gốc (chưa được mã hóa).
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ầngnghĩ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ươngphá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ã
Trang 82.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 để đượccấ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ìakhó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à keyderivation, 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ôngkiể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ẩuban đầ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 caohơ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 bitnhư sau: 3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dướidạ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ìakhó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ấncông kiểu brute-force
Trang 93 THUẬT TOÁN MÃ HÓA
Ở đây ta dùng hai đối tượng Sender và Receiver để mô tả cho các đốitượng gởi và nhận
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ộtchì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 (hayprivate 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ânhay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ vớimộ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ốnnói gì Vì thế bắt buộc Sender phải thông báo cho Receiver về chìa khóa và thuậttoá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ộtcá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
Trang 10dẫn tới khả năng bị người thứ ba xem trộm chìa khóa và có thể giải mã đượcthô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ỗikhố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, đượcdù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ốikhô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ỗikhố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ậtdùng để giải mã (private key) Một thông điệp sau khi được mã hóa bởi chìa côngkhai 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ạinà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 trachắc chắn chìa khóa đó chính là của Receiver chứ không của ai khác (thông quachứng chỉ điện tử - digital certificate), Sender dùng nó để mã hóa thông điệp củamì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ứcthông điệp đó đúng là dành cho Receiver Sender và Receiver trong trường hợpnà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
Trang 11ngườ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ệnviệ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
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ơngấp hằng trăm, hằng ngàn lần mộtthuật toán khóa đối xứng có độ antoà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 đốixứng khó bị lộ chìa khóa hơn Tuy nhiên khi mã hóa thông tin người tathườ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ậttoá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”, MessageAuthentication Code (MAC), fingerprint - vân tay hay một đoạn message
Trang 12Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệubất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
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ôngtin 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ềnhay 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ệuthành một dạng mật mã), quá trình hashing chỉ tính toán và đưa ra thông số hashvalue 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ểmtra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiệnnhững thay đổi cho dù là nhỏ nhất
SHA-1 (Secure Hash Algorithm) và MD5 là hai hàm hash thông dụngnhất và được sử dụng trong rất nhiều hệ thống bảo mật
Trang 133.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ánduy nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tàinguyê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àykhó có thể thỏa mãn được Giả sử Sender muốn mã hóa chỉ 10MB dữ liệu bằngOTP thì phải cần một chìa khóa có độ dài 10MB Để tạo ra một số ngẫu nhiênlớn như vậy Sender cần một bộ tạo số ngẫu nhiên thực (TRNG - True RandomNumber 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ậtgiảm xuống gần bằng zero hay cùng lắm chỉ tương đương với một thuật toándò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 tinLiê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
Trang 14khóa tương đối ngắn và các nghi ngờ về cửa sau để Cơ quan An ninh quốc giaHoa 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 tintưở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, đầuthập niên 1990, xuất phát từ những lo ngại về độ an toàn và tốc độ thấp khi ápdụng bằng phần mềm, giới nghiên cứu đã đề xuất khá nhiều thuật toán mã hóakhố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).
Trang 15Hình 3.1 Cấu trúc thuật toán Feistel dùng trong DESDES 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ốithô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