1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

30 700 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 401,31 KB

Nội dung

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 1

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

Trang 2

2.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 3

5.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 4

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

Trang 5

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 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 6

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ữ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 7

Plaintext (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 8

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 để đượ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 9

3 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 10

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ã đượ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 11

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ệ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 12

Hà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 13

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á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 14

khó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 15

Hì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

Ngày đăng: 24/05/2015, 09:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w