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

Tìm hiểu và khai thác các công cụ kẻ khóa md5, des, và thám mã 3 vòng

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 (668.26 KB, 148 trang )

1 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG
KHOA CÔNG NGHỆ THÔNG TIN
---0O0-----0O0----0O0---ĐỀ ÁN: Môn Bảo Mật thông Tin

TÌM HIỂU HỆ MÃ CHUẨN

CÀI ĐẶT MD5, DES VÀ THÁM MÃ 3 VÒNG
GVHD:
NGUYỄN TRỌNG KHÔI
SVTH:
1.
2.
3.

NGUYỄN QUỐC HÙNG
VÕ TRUNG QUYỀN
NGUYỄN THÀNH SƠN

Tháng 5 Năm 2012

Hùng -Trung Quyền- Sơn


2 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

MỤC LỤC

Hùng -Trung Quyền- Sơn




3 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

TÌM HỂU VÀ KHAI THÁC CÔNG CỤ KẺ KHÓA MD5,
DES, 3DES
1 Lời nói đầu
Trước khi các bạn tạo một chương trình bẻ khóa nhằm vào số serial của
chương trình (còn gọi là keygen), ngoài việc biết code bằng một ngôn ngữ lập trình
nào đó, các bạn nên học qua các thuật toán mã hóa. Vì việc học cho tốt ngôn ngữ
lập trình chưa chắc các bạn đã tạo được một keygen. Luyện đọc code cho tốt là một
việc nên làm, nhưng chưa chắc bạn đã nắm hết ý nghĩa của đoạn code đó. Vì các
phần mềm mới sau này họ dùng các cách mã hóa làm phức tạp quá trình bẻ khóa.
Khi ta không nắm vững một số thuật toán mã hóa, thì dù bạn có thiệt là giỏi, bạn
cũng mất nhiều thòi gian để bẻ khóa. Nhưng nếu bạn nắm vững được thuật toán mã
hóa của nó thì “chuyện nhỏ”.
Học thuật toán chúng ta sẽ học được rất nhiều điều. Nó giống như việc học
bảng cửu chương vậy. Chúng ta phải học thuộc các loại thuật toán mã hóa, quen
với nó, thấy nó làm việc, thân thiết với nó để khi gặp nó, hay “hậu duệ” của nó
hoặc cái gì đó gần giống nó chúng ta sẽ không phải bỡ ngỡ.
Mỗi người chúng ta đều có một dấu vân tay riêng, không ai giống ai. Chính tạo
hóa đã tạo ra chúng, từ những ý tưởng đó, con người mới nghĩ ra việc: tại sao
chúng ta không tự tạo ra một “dấu vân tay” cho một cái gì đó để phân biệt chúng
với nhau. Ví dụ như tên người chẳng hạn (tên là chuỗi các kí tự được gọi là String).
Do vậy trong lĩnh vực công nghệ thông tin người ta bắt đầu nghiên cứu các cách để
tạo ra “dấu vân tay” cho các chuỗi String. Một trong những cách đó là thuật toán

Hùng -Trung Quyền- Sơn



4 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

MD5 mà chúng tôi sẽ nói ở dưới đây.
“dấu vân tay” do thuật toán MD5 tạo ra từ một String gọi là message digest
(gọi tắt là md) hay còn gọi là “MD5 hashes” (gọi tắt là hashes)
Bản báo cáo này chỉ tìm hiểu cách thực hiện của MD5, nguyên lý cũng như
thuật toán cụ thể. Từ đó giúp chúng ta nhận dạng ra các chương trình sử dụng MD5
. Giờ chúng ta bắt đầu tìm hiểu về MD5

2
2.1

Giới thiệu về MD5(Message-Digest algorithm)

Giới thiệu:

Từ ý tưởng mỗi người có một dấu vân tay riêng để phân biệt mọi người với nhau
Ronald Rivest đã tạo ra MD5 như một công nghệ tạo dấu vân tay(fingerprint) cho
1 cái gì đó(văn bản,password…)để phân biệt chúng với nhau.
-MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm

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).
2.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
MD5.(ví dụ:khi người sư dụng download một file trên mạng nhà phát triển ứng
dụng sẽ tạo ra một mã MD5 cho file đó.khi chúng ta vừa tải về thì sẽ có một mã
MD5.nếu 2 mã này trùng nhau thì file đó an toàn ngược lại thì có thể file download
có virut hoặc cái gì đó)Hệ điều hành Unix sử dụng MD5 để kiểm tra các gói mà
Hùng -Trung Quyền- Sơn


5 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

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)

2.3 Đặc điểm của MD5
- Từ một đoạn văn bản đầu vào sẽ tạo ra một string gọi là Message Degist
Hay còn gọi là MD5 hash có độ dài cố định được mã hóa dưới dạng hexa.
-Từ một đọan văn bản đầu vào sẽ tạo ra duy nhất một hash đầu ra không bao giờ
có 2 hash cho 1 văn bản.
- Từ một hash đầu ra ta sẽ không bao giờ có thể suy ngược lại được plantext ban
đầu

Hùng -Trung Quyền- Sơn



6 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

3 Thuật giải
3.1 Đầu vào và đầu ra
3.1.1 Đầu vào:

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

3.1.2 Đầu ra:

Hùng -Trung Quyền- Sơn


7 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

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

Hùng -Trung Quyền- Sơn


8 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES


3.2 Giải thuật
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

Hùng -Trung Quyền- Sơn


9 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Quá trình xử lý của một block

Có 4 hàm một chiều F

Hùng -Trung Quyền- Sơn

có thể sử dụng. Mỗi vòng sử dụng một hàm khác nhau.


10 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

Đây là quá trình thực hiện xử lý của 4 hàm F, G, H, I ở trên:
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]
[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 4(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 :
Hùng -Trung Quyền- Sơn



11 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

[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]
Nhận xét: Vòng 4 dùng hàm I, với t từ 49 -> 64 và k =7k mod 16
/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của
nó trước khi vào vòng lặp xử lý block tiếp theo) */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
End /* of loop on i */
Bước 5 : 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)
Hàm băm MD5 ( còn được gọi là hàm tóm tắt thông điệp – masage degests) sẽ
trả về một chuổi số thập lục 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("The quick brown fox jumps over the lazy dog") =
9e107d9d372bb6826bd81d3542a419d6

Hùng -Trung Quyền- Sơn


12 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES


Chỉ cần một thay đổi nhỏ cũng làm thay đổi hoàn toàn chuỗi đầu ra
MD5("The quick brown fox jumps over the lazy
cog")

= 1055d3e698d289f2af8663725127bd4b

Ngay cả một chuổi rổng cũng cho ra một kết quả phức tạp:
MD5("") = d41d8cd98f00b204e9800998ecf8427e

Mã hóa bằng giải thuật MD5
private string EncodeMD5(string pass)
{
MD5CryptoServiceProvider md5 = new
MD5CryptoServiceProvider();
byte[] bs =
System.Text.Encoding.UTF8.GetBytes(pass);
bs = md5.ComputeHash(bs);
System.Text.StringBuilder s = new
System.Text.StringBuilder();
foreach (byte b in bs)
{
s.Append(b.ToString("x1").ToLower());
}
pass = s.ToString();
return pass;
}

4 Bẻ khóa MD5( những lỗ hổng của MD5)
4.1 I Những Lỗ Hổng

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ăm 1996, người ta đã tìm thấy lỗ hổng của nó. Mặc dù lúc đó còn chưa rõ
Hùng -Trung Quyền- Sơn


13 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

ràng 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…
MD5 được thiết kế bởi Ron Rivet. Từ khi thuật toán này được công bố đã
có một số điểm yếu đã được tìm thấy năm 1993 B.den Boer and A.
Bosselaers đã tìm ra một sự va chạm của MD5 và từ đó một loạt các điểm
yếu của MD5 đã được tìm ra
Mọi chuyện bắt đầu từ 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ử. Ngay sau đó, bốn nhà nghiên cứu người
Trung Quốc lại phát hành công trình nghiên cứu chỉ ra cách xuyên phá thuật
toán thứ hai có tên SHA-0.
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!
Một phát hiện thứ ba, được đón đợi và đánh giá rất cao được công bố
trong hội thảo Crypto. Hai nhà nghiên cứu Eli Biham và Rafi Chen của
Viện Công nghệ Israel đã diễn thuyết về cách nhận dạng các hình thức tấn
công vào chức năng bảo mật của thuật toán SHA-0, một thuật toán có sơ
hở.
Những lỗ hổng bảo mật được cho là "nghiêm trọng" bên trong thuật toán
SHA-0 và SHA-1, tuỳ thuộc vào mức độ chi tiết của phần trình bày, có thể
làm chấn động cả ngành bảo mật. Từ trước tới nay, SHA-1 vẫn được coi là

chuẩn mực "vàng"về thuật toán. Nó được tích hợp bên trong rất nhiều chương
trình thông dụng như PGP và SSL, được chứng thực bởi Viện Chuẩn Công
nghệ Quốc gia và là thuật toán chữ ký điện tử duy nhất được Cơ quan Chuẩn
Chữ ký Số của chính phủ Mỹ phê chuẩn.
Cả ba thuật toán MD5, SHA-0 và SHA-1 đều được giới khoa học máy tính
coi là"đa chức năng". Chúng có thể nhận mọi dạng dữ liệu đầu vào, từ tin
nhắn email cho đến hạt nhân (kernel) của hệ điều hành, cũng như tạo ra một
dấu vân tay số duy nhất. Chỉ thay đổi một ký tự bất kỳ bên trong file đầu vào
cũng tạo ra những dấu vân tay hoàn toàn khác nhau. Các ứng dụng bảo mật
đều dựa vào tính năng "dấu vân tay duy nhất" này làm nền. Tuy nhiên, nếu kẻ
tấn công có thể tạo ra một dấu vân tay "Dolly" với một dòng dữ liệu đầu vào
khác, dấu vân tay "sinh sản vô tính" này sẽ khiến phần mềm bị gài backdoor
nhận dạng nhầm. Kết quả là chúng có thể tạo ra chữ ký giả để vét sạch tài
Hùng -Trung Quyền- Sơn


14 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

khoản ngân hàng của người sử dụng khơng may.
Tất nhiên, từ rất lâu, giới nghiên cứu đã hiểu rằng khơng có thuật tốn mã
hố thực tiễn nào là tuyệt đối an tồn và bảo mật. Tuy vậy, họ vẫn nỗ lực thiết
kế ra những thuật tốn mà thời gian cần để tạo ra một dấu vân tay "Dolly" là vơ
tận, với hy vọng kẻ tấn cơng sẽ nản lòng. Thế nhưng nếu những sơ hở tương tự
như của SHA-0 cũng được tìm thấy trong SHA-1, điều này đồng nghĩa với việc
tốc độ giả mạo một dấu vân tay sẽ được đẩy nhanh lên... 500 triệu lần, hồn
tồn trong tầm tay của một mạng máy tính tốc độ cao.
Tuy mức độ tác hại ít trầm trọng hơn song sơ hở bảo mật trong thuật tốn
MD5 có lẽ lại gây hậu quả ngay tức thì. Sản phẩm máy chủ Apache Web
nguồn mở đang sử dụng MD5 để kiểm duyệt những website có mã nguồn chưa
bị chỉnh sửa, từ đó sẽ an tồn khi chạy trong máy. Tương tự, sẽ là cơ sở dữ liệu

Solaris của Sun Microsystems, với khả năng mà theo hãng tự nhận là "xác
minh một file đích thực chứ khơng phải phiên bản bị điều chỉnh để hạ gục hệ
thơng bảo mật''.
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ạo chỉ trong vài giờ với một máy tính đạt chuẩn. "Giờ đây, người ta đã
chứng minh được các thuật tốn này có lỗ hổng. Trước khi kẻ tấn cơng lợi
dụng khai thác được, đã đến lúc phải thơi dần việc sử dụng MD5.'' - nhà
phân tích Hughes của Viện Chuẩn Cơng nghệ Quốc gia nhận định.

I. LẬP MÃ DES
Đây là ví dụ về việc lập mã sử dụng DES. Giả sử ta mã hóa bản rõ sau trong
dạng thập lục phân (Hexadecimal)
0123456789ABCDEF
sử dụng khóa thập lục phân
133457799BBCDFF1
Khóa trong dạng nhò phân không có các bit kiểm tra sẽ là:
00010010011010010101101111001001101101111011011111111000.
p dụng IP, ta nhận được L0 và R0 (trong dạng nhò phân) :
Hùng -Trung Quyền- Sơn


15 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

L0

=

L1 = R0

=


11001100000000001100110011111
111
11110000101010101111000010101
010

16 vòng lập mã được thể hiện như sau:
E(R0) =
K1 =
E(R0) ⊕ K1 =
Output S-hộp =

01111010000101010101010101111010000101010101
0101
00011011000000101110111111111100011100000111
0010
01100001000101111011101010000110011001010010

f(R0,K1) =

0111

L2 = R1 =

01011100100000101011010110010111
00100011010010101010100110111011
11101111010010100110010101000100

E(R1) =
K2 =

E(R1) ⊕ K2 =
Output S-hộp =
f(R1, K2) =
L3 = R2 =
Hùng -Trung Quyền- Sơn

01110101111010100101010000110000101010100000
1001
01111001101011101101100111011011110010011110
0101
00001100010001001000110111101011011000111110
1100
11111000110100000011101010101110


16 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

00111100101010111000011110100011
11001100000000010111011100001001

E(R2) = 1110010110000000000000101011101011101000010100
K3 =
E(R2) ⊕ K3 =
S-box output =

11
0101010111111100100010100100001011001111100110
01
1011000001111100100010001111100000100111110010


f(R2, K3) = 10
L4 = R3 = 00100111000100001110000101101111
01001101000101100110111010110000
10100010010111000000101111110100

E(R3) = 0101000001000010111110000000010101111111101010
K4 =
E(R3) ⊕ K4 =
S-box output =

01
0111001010101101110101101101101100110101000111
01
0010001011101111001011101101111001001010101101

f(R3, K4) = 00
L5 = R4 = 00100001111011011001111100111010
10111011001000110111011101001100
011101110

Hùng -Trung Quyền- Sơn


17 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

E(R4) = 1011101011101001000001000000000000000010000010
K5 =
E(R4) ⊕ K5 =
Xuaát S-hoäp =


10
0111110011101100000001111110101101010011101010
00
1100011000000101000000111110101101010001101000

f(R4, K5) = 10
L6 = R5 = 01010000110010000011000111101011
00101000000100111010110111000011
10001010010011111010011000110111

E(R5) = 1100010101000010010111111101000011000001101011
K6 =
E(R5) ⊕ K6 =
S-box output =

11
0110001110100101001111100101000001111011001011
11
1010011011100111011000011000000010111010100000

f(R5, K6) = 00
L7 = R6 = 01000001111100110100110000111101
10011110010001011100110100101100
11101001011001111100110101101001

E(R6) =
K7 =
E(R6) ⊕ K7 =

11110101001010110000111111100101101010110101001

1
11101100100001001011011111110110000110001011110
0

Hùng -Trung Quyền- Sơn


18 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

S-box output =
f(R6, K7) =
L8 = R7 =

00011001101011111011100000010011101100111110111
1
00010000011101010100000010101101
10001100000001010001110000100111
00000110010010101011101000010000

E(R7) =
K8 =
E(R7) ⊕ K8 =
S-box output =
f(R7, K8) =
L9 = R8 =

0000000011000010010101010101111101000000101000
00
1111011110001010001110101100000100111011111110
11

1111011101001000011011111001111001111011010110
11
01101100000110000111110010101110
00111100000011101000011011111001
11010101011010010100101110010000

E(R8)

= 0110101010101011010100101010010101111100101000

K9

=

E(R8) ⊕ K9

=

S-box output

=

f(R8, K9)

= 00

L10 = R9

= 00010001000011000101011101110111


01
1110000011011011111010111110110111100111100000
01
1000101001110000101110010100100010011011001000

00100010001101100111110001101010
Hùng -Trung Quyền- Sơn


19 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

00100100011111001100011001111010

E(R9) = 0001000010000011111110010110000011000011111101
K10 =
E(R9) ⊕ K10 =
S-box output =

00
1011000111110011010001111011101001000110010011
11
1010000101110000101111101101101010000101101110

f(R9, K10) = 11
L11 = R10 = 11011010000001000101001001110101
01100010101111001001110000100010
10110111110101011101011110110010
E(R10) = 0101101011111110101010111110101011111101101001
K11 =
E(R10) ⊕ K11 =

S-box output =

01
0010000101011111110100111101111011010011100001
10
0111101110100001011110000011010000101110001000

f(R10, K11) = 11
L12 = R11 = 01110011000001011101000100000001
11100001000001001111101000000010
11000101011110000011110001111000

E(R11)
K12

0110000010101011111100000001111110000011111100
01
0111010101110001111101011001010001100111111010

Hùng -Trung Quyền- Sơn


20 | Tìm hiểu và khai thác các công cụ kẻ khóa MD5, DES, 3DES

E(R11) ⊕ K12

01

S-box output


0001010111011010000001011000101111100100000110

f(R11, K12)
L13 = R12

00
01111011100010110010011000110101
11000010011010001100111111101010
01110101101111010001100001011000

E(R12) = 0011101010111101111110101000111100000010111100
K13 =
E(R12)⊕ K13 =
S-box output =

00
1001011111000101110100011111101010111010010000
01
1010110101111000001010110111010110111000101100

f(R12, K13) = 01
L14 = R13 = 10011010110100011000101101001111
11011101101110110010100100100010
00011000110000110001010101011010

E(R13) = 0000111100010110000001101000101010101010111101
K14 =
E(R13)⊕ K14 =
S-box output =


00
0101111101000011101101111111001011100111001110
10
0101000001010101101100010111100001001101110011

f(R13, K14) = 10
L15 = R14 = 01100100011110011001101011110001
Hùng -Trung Quyền- Sơn


21 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

10110111001100011000111001010101
11000010100011001001011000001101

E(R14) = 1110000001010100010110010100101011000000010110
K15 =
E(R14)⊕ K15 =
S-box output =

11
1011111110010001100011010011110100111111000010
10
0101111111000101110101000111011111111111010100

f(R14, K15) = 01
L16 = R15 = 10110010111010001000110100111100
01011011100000010010011101101110
01000011010000100011001000110100


E(R15) = 0010000001101010000001000001101001000001101010
K16 =
E(R15)⊕ K16 =
S-box output =

00
1100101100111101100010110000111000010111111101
01
1110101101010111100011110001010001010110010111

f(R15, K16) = 01
R16 = 10100111100000110010010000101001
11001000110000000100111110011000
00001010010011001101100110010101
Cuối cùng, áp dụng IP-1 cho R16L16 ta nhận được bản mã trong dạng thập lục
phân như sau:
Hùng -Trung Quyền- Sơn


22 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

85E813540F0AB405

II. THÁM MÃ DES
Một phương pháp rất nổi tiếng trong thám mã DES là “thám mã vi sai“
(differential cryptanalysic) do Biham và Shamir đề xuất. Đó là phương pháp thám
với bản rõ được chọn. Nó không được sử dụng trong thực tế để thám mã DES 16
vòng, mà chỉ được sử dụng để thám các hệ DES có ít vòng hơn.
Bây giờ ta sẽ mô tả những ý tưởng cơ bản của kỹ thuật này. Để đạt mục đích
thám mã, ta có thể bỏ qua hoán vò khởi tạo IP và hoán vò đảo của nó (bởi vì điều đó

không cần thiết cho việc thám mã). Như đã nhận xét ở trên, ta xét các hệ DES n
vòng, với n ≤ 16. Trong cài đặt ta có thể coi L0R0 là bản rõ và LnRn như là bản mã.
Thám mã vi sai đòi hỏi phải so sánh x-or (exclusive-or) của hai bản rõ với xor của hai bản mã tương ứng. Nói chung, ta sẽ quan sát hai bản rõ L 0R0 và L0*R0* với
trò x-or được đặc tả L0’R0’ = L0R0 ⊕ L0*R0*. Trong những thảo luận sau ta sẽ sử dụng
ký hiệu (‘) để chỉ x-or của hai xâu bit.
Đònh nghóa 3.1: Cho Sj là một S-hộp (1 ≤ j ≤ 8). Xét một cặp xâu 6-bit là
(Bj,Bj* ). Ta nói rằng, xâu nhập x-or (của Sj) là Bj ⊕ Bj* và xâu xuất x-or (của Sj) là
Sj(Bj) ⊕ Sj(Bj*).
Chú ý là xâu nhập x-or là xâu bit có độ dài 6, còn xâu xuất x-or có độ dài 4.
Đònh nghóa 3.2: Với bất kỳ Bj ’ ∈ (Z2) 6, ta đònh nghóa tập ∆(Bj’) gồm các cặp
(Bj,Bj*) có x-or nhập là Bj’.
Dễ dàng thấy rằng, bất kỳ tập ∆(Bj’) nào cũng có 26 = 64 cặp, và do đó

∆(Bj’) = {(Bj, Bj ⊕ Bj’) : Bj ∈ (Z2) 6 }

Hùng -Trung Quyền- Sơn


23 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

Với mỗi cặp trong ∆(Bj’), ta có thể tính xâu x-or xuất của Sj và lập được phân
bố kết quả. Có 64 xâu xuất x-or, được phân bố trong 24 = 16 giá trò có thể có. Tính
không đồng đều của các phân bố đó là cơ sở để mã thám.
Ví dụ 3.1: Giả sử ta xét S1 là S-hộp đầu tiên và xâu nhập x-or là 110100. Khi
đó
∆(110100) = {(000000, 110100), (000001, 110101), ..., (111111, 001011)}
Với mỗi cặp trong tập ∆(110100), ta tính xâu xuất x-or của S1. Chẳng hạn,
S1(000000) = E16 = 1110, S1(110100) = 1001,
như vậy xâu xuất x-or cho cặp (000000,110100) là 0111.
Nếu thực hiện điều đó cho 64 cặp trong ∆(110100) thì ta nhận được phân bố

của các xâu x-or xuất sau:

000 000 001 001 010 010 011 011 100 100 101 101 110 110 111 111
0

1
0

0
8

16

1

0
6

1
2

0
0

1
0

12

0


1
6

0
0

1
0

0
0

1
0

0
8

1
0

6

Trong ví dụ 3.1, chỉ có 8 trong số 16 xâu x-or xuất có thể có xuất hiện thật
sự. Ví dụ cụ thể này đã chỉ ra sự phân bố rất không đều của các xâu x-or xuất. Nói
chung, nếu ta cố đònh S-hộp Sj và xâu nhập x-or Bj’, thì trung bình có khoảng 75 80% các xâu x-or xuất có thể có xuất hiện thực sự.
Để mô tả các phân bô đó ta đưa ra đònh nghóa sau.
Đònh nghóa 3.3: Với 1 ≤ j ≤ 8 và với các xâu bit Bj’ độ dài 6 và Cj’ độ dài 4,
ta đònh nghóa:

INj(Bj’,Cj’) = {Bj ∈ (Z2)6 : Sj(Bj) ⊕ Sj(Bj ⊕ Bj’) = Cj’}

Nj(Bj’, Cj’) = INj(Bj’, Cj’)
Hùng -Trung Quyền- Sơn


24 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

Bảng sau sẽ cho các xâu nhập có thể có với xâu x-or nhập 110100

Xâu xuất x-or

Các xâu nhập có thể có

0000
0001

000011, 001111, 011110,
011111
101010, 101011, 110111,
111011
000100, 000101, 001110,

0010

010001
010010, 010100, 011010,
011011
100000, 100101, 010110,
101110

101111, 110000, 110001,
111010

0011

000001, 000010, 010101,
100001
110101, 110110

0100

010011, 100111

0101
0110
000000, 001000, 001101,
0111

010111
011000, 011101, 100011,

Hùng -Trung Quyền- Sơn


25 | Tìm hiểu và khai thác các cơng cụ kẻ khóa MD5, DES, 3DES

101001
101100, 110100, 111001,
111100
1000


001001, 001100, 011001,
101101
111000, 111101

1001
1010
1011
1100
1101

000110, 010000, 010110,
011100
110010, 100100, 101000,
110010

1110
1111

000111, 001010, 001011,
110011
111110, 111111

Nj(Bj’, Cj’) tính số các cặp với xâu nhập x-or bằng Bj’ có xâu xuất x-or bằng
Cj’ với S-hộp Sj. Các cặp đó có các xâu nhập x-or được đặc tả và đưa ra cách tính
các xâu xuất x-or có thể nhận được từ tập INj(Bj’, Cj’). Để ý rằng, tập này có thể
phân thành Nj(Bj’, Cj’) /2 cặp, mỗi cặp có xâu x-or nhập bằng Bj’.
Phân bố trong ví dụ 3.1 chứa các trò N1(110100, C1’), C1’∈ (Z2)4. Trong
bảng trên chứa các tập IN(110100, C1’).


Hùng -Trung Quyền- Sơn


×