Mã hóa Khái niệm về hàm băm MD5 Đặc điểm MD5 Ứng dụng Thuật toán Những lỗ hổng và yếu điểm Một số thuật toán mã hóa khác Một số phần mềm kiểm tra MD5... Ví dụ : Từ ngàn xưa ông cha ta đã
Trang 1ĐỀ TÀI
Các vấn đề cần giải quyết
……….
Mã hóa Khái niệm về hàm băm MD5
Đặc điểm MD5 Ứng dụng Thuật toán Những lỗ hổng và yếu điểm Một số thuật toán mã hóa khác Một số phần mềm kiểm tra MD5
Trang 2I- MÃ HÓA LÀ GÌ
a Mã hóa
- Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh ) từ định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã
Ví dụ : Từ ngàn xưa ông cha ta đã biết dùng các cách mã hóa để truyền thông tin
cơ mật như ghi chữ ngược, đọc chữ thông qua gương,dịch chuyển chữ cái…
- Mã hóa (Encryption): Quá trình chuyển đổi dữ liệu gốc thành dữ liệu được mã hóa sao người khác không thể đọc hiểu được (kí hiệu E)
- Giải mã (Decryption): Quá trình ngược lại của mã hóa, biến đổi dữ liệu đã được mã hóa thành dạng gốc ban đầu (kí hiệu D);
- Một hệ thống mã hóa bao gồm các thành phần:
1 Thông tin trước khi mã hóa
2 Thông tin sau khi mã hóa
3 Chìa khóa
4 Phương pháp mã hóa/giải mã
Vì sao chúng ta cần phải mã hóa?
Nhu cầu riêng tư, tính bảo mật
Toàn vẹn của thông tin
Mã hóa cũng là nền tảng của chữ ký điện tử, hệ thống PKI…
II- KHÁI NIệM Về HÀM BĂM MD5
a Hàm băm
- Hash còn được gọi là “hàm băm” hay “bảng băm”
- Hàm băm là một hàm toán học chuyển đổi một thông điệp đầu vào có độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vào thuật toán băm) Dãy bit này được
gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu
- Hàm băm là hàm một chiều nên không thể tái tạo lại thông điệp ban đầu từ một chuỗi băm có sẵn Mọi sự thay đổi dù là nhỏ nhất ở thông điệp đầu vào cũng cho ra
kết quả là một dãy số hoàn toàn khác nhau nên đây là cách tốt nhất để kiểm tra tính
toàn vẹn của một tập tin
Trang 3 Hàm băm là hàm mã hóa 1 chiều
- Cấu trúc của một hàm băm thường có dạng
Thành phần chính của một hàm băm là hàm nén và hàm biến đổi khác Hàm nén đượcthực thi nhiều lần để băm thông điệp ban đầu thành một chuỗi có chiều dài cố định
Trang 4Các hàm biến đổi khác (có thể có hoặc không) nhận chuỗi bit sau lần thực thi cuối cùng của hàm nén và cho kết quả cuối cùng là chuỗi băm của hàm băm
b Hàm băm MD5
- Trong mật mã học, MD5 (viết tắt của tiếng Anh Message-Digest algorithm 5, giải thuật Tiêu hóa tin 5) là một hàm băm mật mã được sử dụng phổ biến với giá trị băm dài 128-bit.Là một chuẩn Internet (RFC 1321), MD5 đã được dùng trong nhiều ứng dụng bảo mật, và cũng được dùng phổ biến để kiểm tra tính toàn vẹn của tập tin.Một bảng băm MD5 thường được diễn tả bằng một số hệ thập lục phân 32 ký tự.
- MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước
đó, MD4 Vào năm 1996, người ta phát hiện ra một lỗ hổng trong MD5; trong khi vẫnchưa biết nó có phải là lỗi nghiêm trọng hay không, những chuyên gia mã hóa bắt đầu
đề nghị sử dụng những giải thuật khác, như SHA-1 (khi đó cũng bị xem là không an toàn) Trong năm 2004, nhiều lỗ hổng hơn bị khám phá khiến cho việc sử dụng giải thuật này cho mục đích bảo mật đang bị đặt nghi vấn
III- ĐặC ĐIểM MD5
Việc tính MD đơn giản, có khả năng xác định được file có kích thước nhiều Gb.
Không có khả năng tính ngược, khi tìm ra MD.
Do bản chất ngẫu nhiên của hàm băm và số lượng cực lớn các giá trị
hashcó thể, nên hầu như không có khả năng hai bản tin phân biệt có cùng giá trịhash.
Giá trị MD phụ thuộc vào bản tin tương ứng.
Một chuổi chỉ có duy nhất một hash.
Giá trị MD phụ thuộc vào tất cả các bit của bản tin tương ứng.
Trang 51 Bảo toàn thông tin
- MD5 được dùng rộng rãi trong các phần mềm trên toàn thế giới để đảm bảo việc truyền tập tin được nguyên vẹn Các nhà phát triển ứng dụng thường dùngMD5 trong
việc cho phép download file Họ sẽ cho “xuất bản” một tín hiệu MDcủa file
download Khi chúng ta tải file về , thì file chúng ta vừa download sẽ có một chuỗi MD:
Nếu tín hiệu này khớp với tín hiệu các nhà phát triển ứng dụng đã “xuất bản” ở trên Thì không có vấn đề
Nếu hai tín hiệu này khác nhau, có thể có trong file download có virut haytập tin đó
đã bị thay đổi
Trang 6
MD5 checksum là kiểm tra 1 dạng hash của file Khi dùng MD5 Checksum trên 1 file
sẽ sinh ra 1 chuỗi MD5 duy nhất ứng với từng file, 2 file trùng nhau về nội dung sẽ có
chung 1 chuỗi MD5, khác nhau dù chỉ 1 bit sẽ có 2 chuỗi MD5 khác nhau Khi down file thường có kèm chuỗi MD5 (nhất là các file dung lượng lớn) để cho người dùng kiểm tra xem file down về có trùng với file gốc hay ko, nếu có lỗi trong quá trình down thì chuỗi MD5 của file được down về sẽ khác với chuỗi MD5 gốc được cung cấp Có thể sử dụng các tool như MD5Summer để tạo và kiểm tra.
Trang 7Quy trình chứng thực của một web server
3 Là nền tảng của chữ kí số
Chữ ký số (khóa công khai) là mô hình sử dụng các kỹ thuật mật mã để gắn với mỗi người sử dụng một cặp khóa công khai - bí mật và qua đó có thể ký các văn bản điện tử cũng như trao đổi các thông tin mật Khóa công khai thường được phân phối thông qua chứng thực khóa công khai Quá trình sử dụng chữ ký số bao gồm 2 quá trình: tạo chữ ký và kiểm tra chữ ký.
Các thuật toán chữ ký số cho phép xác định nguồn gốc, bảo đảm tính toàn vẹn của dữ liệuđược truyền đi, đồng thời nó cũng bảo đảm tính không thể phủ nhận của thực thế đã ký thông tin
V- Thuật toán
http://nsfsecurity.pr.erau.edu/crypto/md5.htmlhttp://www.md5.net/
Trang 8MD5 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
Thực hiện qua các bước sau:
Bước 1: nhồi dữ liệu
- Nhồi thêm các bits sao cho dữ liệu có độ dài l ≡ 448 mod 512 hay l
- n * 512 + 448 (n,l nguyên)
- Luôn thực hiện nhồi dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong muốn Ví
dụ, dữ liệu có độ dài 448 được nhồi thêm 512 bits để được độ dài 960 bits
- Số lượng bit nhồi thêm nằm trong khoảng 1 đến 512
- Các bit được nhồi gồm 1 bit “1” và các bit 0 theo sau
Trang 9Bước 2: thêm vào độ dài
- Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64-bit và được thêm vào cuối chuỗi nhị phân kết quả của bước 1
- Nếu độ dài của khối dữ liệu ban đầu > 264, chỉ 64 bits thấp được sử dụng, nghĩa là giá trị
được thêm vào bằng K mod 264
- Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512 Khối dữ liệu được biểu diễn:
- Bằng một dãy L khối 512-bit Y0, Y1,…, YL-1
- Bằng một dãy N từ (word) 32-bit M0, M1, MN-1 Vậy N = L x 16 (32 x 16= 512)
Bước 3: khởi tạo bộ đệm MD (MD buffer)
- Một bộ đệm 128-bit được dùng lưu trữ các giá trị băm trung gian và kết quả Bộ đệm được biểu diễn bằng 4 thanh ghi 32-bit với các giá trị khởi tạo ở dạng little-endian (byte
có trọngsố nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) như sau:
Trang 10 Trọng tâm của giải thuật là hàm nén (compression function) gồm 4 “vòng” xử lý Các
vòng này có cấu trúc giống nhau nhưng sử dụng các hàm luận lí khác nhau gồm F, G, H
Trang 12T[33] = fffa3942T[34] = 8771f681T[35] = 6d9d6122T[36] = fde5380cT[37] = a4beea44T[38] = 4bdecfa9T[39] = f6bb4b60T[40] = bebfbc70T[41] = 289b7ec6T[42] = eaa127faT[43] = d4ef3085T[44] = 4881d05T[45] = d9d4d039T[46] = e6db99e5T[47] = 1fa27cf8T[48] = c4ac5665
T[49] = f4292244T[50] = 432aff97T[51] = ab9423a7T[52] = fc93a039T[53] = 655b59c3T[54] = 8f0ccc92T[55] = ffeff47dT[56] = 85845dd1T[57] = 6fa87e4fT[58] = fe2ce6e0T[59] = a3014314T[60] = 4e0811a1T[61] = f7537e82T[62] = bd3af235T[63] = 2ad7d2bbT[64] = eb86d391
Vòng 1 (Round 1): Ký hiệu [abcd k s t] là bước thực hiện của phép toán a = b + ((a +
F(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước sau:
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4][ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8][ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12][ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] Giải thích: ví dụ biểu thức thứ 2 là [DABC 1 12 2], tương đương với:
D = A + ((D + F(A,B,C) + X[1] + T[2]) <<< 12) Nhận xét: Vòng 1 dùng hàm F, Với giá trị t từ 1 -> 16 và k từ 1 -> 15
Vòng 2 (Round 2): Tương tự, ký hiệu [abcd k s t] là của biểu thức : a = b + ((a +
G(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước :
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
Nhận xét: Vòng 2 dùng hàm G, với t từ 17 -> 32 và k = 1 + 5k mod 16
Vòng 3 (Round 3):
Tương tự, ký hiệu [abcd k s t] là của biểu thức : a = b + ((a + H(b, c, d) + X[k] + T[t]) <<< s)
Quá trình thực hiện 16 bước:
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]
Trang 13[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]
Nhận xét: Vòng 3 dùng hàm H, với t từ 33 -> 48 và k =5 + 3k mod 16
Vòng (Round 4):
Tương tự, ký hiệu [abcd k s t] là của biểu thức:
a = b + ((a + I(b,c,d) + X[k] + T[t]) <<< s)
Quá trình thực hiện 16 bước :
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
Bước 5 : Xuất kết quả
- Tính kết quả message digest Sau khi thực hiện xong bước 4, thông điệp thu gọn nhận được từ 4 thanh ghi A, B, C, D, bắt đầu từ byte thấp của thanh ghi A và kết thúc với byte cao của thanh ghi D bằng phép nối như sau: Message Digest = A || B || C || D ( || phép toán nối)
- Sau khi xử l hết L khối 512-bit, đầu ra của lần xử l thứ L là giá trị băm 128 bits
VI- Cách sử dụng các giải thuật mã hóa MD5 trong C#
Để sử dụng các giải thuật MD5 hoặc SHA trong C# bạn có thể sử dụng namespace.using System.Security.Cryptography;
a Cách sử dụng
Viết hàm mã hóa:
Mã hóa bằng giải thuật MD5
private string EncodeMD5(string pass)
{
Trang 14MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
Để sử dụng các giải thuật MD5 hoặc SHA trong namespace using
System.Security.Cryptography; Chúng ta phải sử dụng đối tượng SHA1CryptoServiceProvider hoặc MD5CryptoServiceProvider.Hai đối tượng này cho phép bạn có thể băm (Hash) một mảng kiểu byte thông qua hàm ComputeHash.Kết quả trả về sẽ là một mảng kiểu Byte đã được mã hóa.Việc cuối cùng của chúng ta là chuyển thành kiểu dữ liệu String để trả về
b Ứng dụng
Chúng ta thiết kế một demo nhỏ để minh họa cho 2 giải thuật này
Dùng chương trình Visual Studio 2008 để thiết kế một Form có giao diện như sau:Hình mẫu:
Trang 15Yêu cầu chương trình.
Sau khi nhập username và password.Nhấn nút login chương trình sẽ hiển thị một thông điệp cho thấy password đã được mã hóa thành 2 chuỗi khác nhau tương ứng với 2 giải thuật khácnhau
Kết quả sau khi nhập password là admin:
Hướng dẫn thực hiện:
Sau khi đã thiết kế xong giao diện nhấn F7 để coding cho form
B1: Bổ sung namespace còn thiếu.
using System;
using System.Collections.Generic;
Trang 16Bước 2 Viết 2 hàm mã hóa theo mẫu đã thiết kế ở trên có kết quả trả về kiểu string
Bước 3.Khai báo 2 field strUsername và strPassword để lưu trữ thông tin username
và password
Bước 4 Viết code cho sự kiện Click
private void btnLogin_Click(object sender, EventArgs e)
{
strUsername =txtUsername.Text.ToString();
string strPass = txtPassword.Text.ToString().Trim(); ;
string strPasswordMD5 = EncodeMD5(strPass);
string strPasswordSHA1 = EncodeSHA1(strPass);
MessageBox.Show("Bạn đang đăng nhập với User: " + strUsername +
" và \nPass đã được mã hóa MD5 là: " + strPasswordMD5 +
" và \nPass đã được mã hóa SHA1 là: " + strPasswordSHA1
, "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information
);
}
Trang 17Bước 5 Kết thúc
VII- NHữNG Lỗ HổNG VÀ YếU ĐIểM
- Bất cứ thuật toán mã hóa nào rồi cũng bị giải mã
Với MD5,ngay từ năm1996, người ta đã tìm thấy lỗ hổng của nó.Mặc dù lúc đó còn chưa rõ rang lắm nhưng các chuyên gia mã hóa đã nghĩ đến việc phả iđưa ra một thuật giải khác, như là SHA-1…
Và rồi gần đây,giới mã hoá đã xôn xao với thông tin các thuậttoán bên trong nhiều ứng dụng bảo mật thông dụng, như chữ ký điện tử, cũng có lỗ hổng (trong đó có MD5).Mọichuyện bắt đầu từ năm,khi nhà khoa học máy tính người Pháp Antoine Joux phát hiện ra một lỗ hổng trong thuật toán phổ biến MD5, thường dùng trong công nghệ
chữ ký điện tử.Tuy chỉ mới ở giai đoạn nghiên cứu sơ bộ song những phát hiện này có thể tạo điều kiện để kẻ xấu cài những chương trình cửa sau (backdoor) bí mật vào trong
mã máy tính, hoặc giả mạo chữ ký điện tử.Trừ phi một thuật toán mới, bảo mật hơn được
xây dựng và đưa vào sử dụng!
Lỗ hổng mới phát hiện trong MD5 sẽcho phép kẻ tấn công tạo ra file giả mạochỉ trong vài giờ với một máy tính đạt chuẩn.".
- Vì MD5 chỉ dò qua dữ liệu một lần, nếu hai tiền tố với cùng bảng băm được xây nên, thì cùng một hậu tố có thể cùng được thêm vào để khiến cho đụng độ dễ xảy ra Tức là hai
dữ liệu vào (input) X và Y hoàn toàn khác nhau nhưng có thể ra (output) được một md5 hash giống nhau Tuy nhiên xác suất để xảy ra điều này là khá nhỏ
Vì những kỹ thuật tìm đụng độ hiện nay cho phép các trạng thái băm trước đó được xác định một cách ngẫu nhiên, có thể tìm thấy xung đột đối với bất kỳ tiền tố mong muốn nào; có nghĩa là, đối bất kỳ một chuỗi các ký tự X cho trước, hai tập tin đụng độ cóthể được xác định mà đều bắt đầu với X
Trang 18Tất cả những gì cần để tạo ra hai tập tin đụng độ là một tập tin mẫu, với một khối
dữ liệu 128 byte được xếp trên giới hạn 64 byte, có thể thay đổi tự do bằng giải thuật tìm
va chạm
Vừa rồi, một số dự án đã tạo ra "bảng cầu vồng" MD5 có thể dễ dàng tiếp cận trựctuyến, và có thể được dùng để dịch ngược nhiều bảng băm MD5 thành chuỗi mà có thể đụng độ với đầu nhập gốc, thường dùng với mục đích bẻ mật khẩu
VIII- MỘT SỐ THUẬT TOÁN MÃ HÓA KHÁC
Thuật toán Kích thước đầu ra(output size)
Kích thước trạng thái trong
(Internal state size)
Kích thước khối
(Block size)
Độ dài
(Length size)
Kích thước word
(Word size)
Trang 19MD4 (Message-Digest thuật toán 4) là một thông điệp tiêu hóa thuật toán (thứ tư
trong loạt a) được thiết kế bởi Giáo sư Ronald Rivest của MIT vào năm 1990 Nó thực hiện một hàm băm mật mã để sử dụng trong kiểm tra tính toàn vẹn thông điệp.Chiều dài của giá trị băm là
128 bit
SHA (Secure Hash Algorithm hay thuật giải băm an toàn) là năm thuật giải được
chấp nhận bởi FIPS dùng để chuyển một đoạn dữ liệu nhất định thành một đoạn dữ liệu có chiều dài không đổi với xác suất khác biệt cao
Năm thuật giải SHA là SHA-1 ,SHA-224 , SHA-256 , SHA-384, và SHA-512
Thuật giải SHA là thuật giải băm mật được phát triển bởi cục an ninh quốc gia Mĩ (National Security Agency hay NSA) và được xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ
Trong nhiều chuẩn và ứng dụng, hai hàm băm thông dụng nhất là MD5 và SHA-1 Năm 2005, người ta đã tìm ra lỗi bảo mật của cả hai thuật toán trên