Trang chủ‎ > ‎RCE‎ > ‎[Crypter]‎ > ‎

Benina's Crypto Tuts

29.05.2010

29.05.2010 [Crypto] Thuật toán MD5


Tác giả: Benina

Toàn tập link download: http://megashare.vn/dl.php/1226924
===============================================================================

Sau
bao ngày ngâm cứu , tốn kém bao nhiêu là nước mũi (do bị cảm) và bao
nhiêu là nước mắt (do vừa hút thuốc vừa đọc màn hình vi tính), hôm nay
benina xin “trình làng” kết quả “công trình ngâm cứu” dài hơi này. Đó
là thuật tóan MD5

Theo benina, các bạn newbie trước khi làm quen
với cách tạo keygen, ngòai việc biết code bằng một ngôn ngữ lập trình
nào đó như ASM chẳng hạn , các bạn nên học qua các thuật tóan mã hóa.
Vì việc học cho tốt ASM, chưa chắc các bạn tạo keygen được. Luyện đọc
code ASM cho tốt là một việc nên làm, nhưng đọc code giỏi cũng chưa
chắc các bạn nắm hết ý nghĩa của đọan code để tạo keygen. Vì các soft
mới sau này ( nhất là các soft lớn) họ dùng các cách mã hóa làm phức
tạp quá trình crack. Khi ta ko nắm vững một số thuật tóan mã hóa , thì
dù cho bạn có thiệt là giỏi , bạn cũng phải mất rất nhiều thời gian để
code một keygen. Nhưng nếu bạn nắm được thuật tóan mã hóa của nó… thì
đến lúc “gặp mặt” nhau, “tay nắm mặt mừng” và …. “Hi, chào MD5” .hihi.
Lúc đó, keygen là “chiện nhỏ như con thỏ”.

================================================================================

Đây
ko phải là “cách học làm sang”, benina chưa bao giờ học gì quá sức
mình. Mà thiết nghĩ, đây là điều căn bản mà các Newbie cần phải có để
bắt đầu đi vào con đường “tội lỗi chuyên nghiệp”. Tôi chưa thấy các bạn
quan tâm lắm về các thuật tóan. Học thuật tóan chúng ta học được rất
nhiều điều. Nó giống như các bảng cửu chương mà lúc tiểu học chúng ta
đã thuộc nằm lòng. Chúng ta phải học thuộc các lọai thuật tóan mã hóa,
quen với nó, thấy nó làm việc, trò chuyện với nó , nói chung là tạo
tình “bằng hữu thắm thiết”….để khi gặp nó, hay con cháu của nó, hoặc
một cái gì lai căn nó thì chúng ta biết ngay …đó là người “bà con”đã
quen biết. Đó là những gì benina muốn nói với các bạn newbie.

Dẫn nhập đầu tiên mà benina muốn nói với các bạn về MD5 là:

Mỗi
một người có một “dấu lăn tay” (fingerprint) riêng ko ai giống ai đúng
ko các bạn?. Lúc 15 tuổi tui làm giấy CMND cho đến nay “dấu lăn tay”
của tui vẫn vậy. Và có khi nào bạn hỏi: Ai đã tạo ra nó thế?!. Xin trả
lời: đó là do Ông Trời tạo ra bạn ạ!!!.(lãng xẹt) Hihi

Từ những
ý tưởng đó , con người mới nghĩ ra việc : tại sao chúng ta ko làm Ông
Trời một phen. Chúng ta thử tạo ra “dấu lăn tay” cho 1 cái gì đó để
phân biệt chúng với nhau. Ví dụ như tên của mỗi người chẳng hạn (các
bạn nên có khái niệm tên (name) là một chuổi các ký tự được gọi là
string). Hêhêhê . Do vậy , trong IT người ta bắt đầu nghiên cứu các
“cái máy” tạo ra “dấu lăn tay” cho các chuổi string. Một trong những
“cái máy” đó là “Thuật toán MD5” mà chúng ta sắp nghiên cứu đây.

“Dấu
lăn tay” do Thuật tóan MD5 (gọi tắt là MD5) từ một string gọi là
message digest (tín hiệu digest, gọi tắt là md) hay còn gọi là “MD5
hashes” (gọi tắt là hashes). Một tín hiệu hashes là một chuổi các ký tự
hexa ( bao gồm số 0-9 và a-f, các số hex ấy mà!!. Về nguyên tắt tạo ra hashes là :

-Bất cứ string nào cũng điều có duy nhất một hashes, ko bao giờ có 2 hashes cho 1 string

-Hai string khác nhau thì có 2 hashes khác nhau, ko bao giờ trùng nhau.

-Hảy
nhớ điều này: từ 1 hashes ta tìm ngược lại string của nó được ko? Điều
này ko bao giờ làm được. Ko một “máy” nào làm được.Chúng ta nên nhớ
điều này.

Đó là những gì mà thuật tóan MD5 làm ra.

TUT
này chúng ta ko tìm hiểu sâu thật sâu về MD5, như là tại sao làm như
thuật tóan thì đáp ứng các điều kiện trên vừa nói, đó là việc của các
nhà phát minh, các nhà tóan học.Chúng ta chỉ tìm hiểu cách thực hiện
của MD5 mà thôi. Từ đó chúng ta có thể ứng dụng nó để nhận dạng ra
chương trình nào sử dụng MD5, và sau đó ….keygen nó …hihi

Sau đây tui xin trích dẫn một số tài liệu về MD5 mà tui tìm hiểu được trên Net. Các bạn đọc từ từ nhé ko thôi bị mắc nghẹn à.

MỘT SỐ THÔNG TIN CĂN BẢN:

MD5 LÀ GÌ ?

MD
để chỉ cho “message digest” (Lấy 2 chử đầu). MD5 là một thuật tóan lấy
một tín hiệu vào có chiều dài bất kỳ và đưa ra một tín hiệu digest có
chiều dài cố định (128-bit, 32 ký tự hexa), được làm ra từ 1 giá trị
hexa (chú ý : mỗi ký tự hex là 4 bit, do đó 128bit là 32 ký tự hex).
OK, bây giờ nói rõ hơn một chút : MD5 là cách căn bản để lấy chùm ký tự
( là digits, alphabeic hay gì khác ), được gọi là string nhập vào, và
thay đổi chúng thành một chùm ký tự dài 32 ký tự , được gọi là tín hiệu
digest (message digest) hay hashes của string được nhập vào, chuổi 32
ký tự này được tạo ra từ các ký tự hexa ( những digits: 0-9 và các chử
a-f). Điều này có nghĩa là, với một string nhập vào có chiều dài bất kỳ
, MD5 sẽ luôn luôn cài đặt “một vài thứ” để thành một chuổi string dài
32 ký tự, mà các ký tự là các ký tự hexa. Tín hiệu digest sẽ ko có
khỏang trống, hay dấu hoặc kép hay bất cứ thứ gì khác 0-9 và a-f trong
tín hiệu hashes được xuất ra.

MD5 hashes có tiện dụng là những
hashes tạo ra trông khác nhau hòan tòan từ những tín hiệu nhập vào hơi
hơi giống nhau. Ví dụ sau sẽ làm rỏ hơn về điều này:

Mã:
• The MD5 hash of jim is 5e027396789a18c37aeda616e3d7991b

• The MD5 hash of Jim is d54b3c8fcd5ba07e47b400e69a287966

• The MD5 hash of Jimmy is 495b3121d23f5988b133882b36aa7214

Như
bạn thấy đó, có ba tín hiệu nhập vào “hơi hơi giống nhau” nhưng các tín
hiệu MD5 hashes xuất ra hòan tòan khác nhau. Ví dụ này cũng chứng minh
hai ký tự j và J là 2 ký tự khác nhau . Do đó chúng ta thấy “máy đẻ” ra
MD5 hashes là lọai rất nhạy cảm. Ở đây cần chú ý thêm là trong ví dụ
thứ 3 chỉ thêm vào 2 ký tự (my) ở cuối chuổi của ví dụ 2 , và hashes
của nó đã thay đổi hòan tòan. Vì vậy chúng ta ko thể có hashes của
chuổi “Blehlo” từ hashes của chuổi “Bleh” bằng cách “vá viếu” thêm vài
ký tự – thay đổi trong chuổi string nhập vào thì tín hiệu hashes của nó
cũng sẽ thay đổi hòan tòan. Và ở đây cũng nên chú ý với 3 string nhập
vào có chiều dài ko giống nhau nhưng các hash sinh ra đều có chiều dài
là 32 ký tự (bao gồm các số 0-9 và a-f), ở ví dụ sau cùng ta cũng thấy
chuổi string nhập vào dài hơn 2 ký tự so với 2 string trước nhưng chuổi
hash của nó cũng chỉ có 32 ký tự chử số hex.

Mặc dù tín hiệu MD5
hashes xuất ra ngẫu nhiên từ string nhập vào , nhưng thật ra chúng ta
có một kiểu mẫu tạo hashes MD5(một thuật tóan MD5) được sử dụng để
“quay” string nhập vào thành một md hay một hashes. Nếu bạn muốn sử
dụng nó thì bạn có thể đọc ở tut này ở phần sau . Bởi vì MD5 được sử
dụng một thuật tóan giống nhau cho mỗi lần tính tóan nên MD5 hashes của
chuổi jim luôn luôn là

5e027396789a18c37aeda616e3d7991b

Trong
thực tế , một số chương trình còn thêm vào một vào vài lọai thuật tóan
khác khi md được sinh ra , làm cho MD5 cực kỳ thông dụng và là 1 công
cụ rất mạnh. Nhưng có lẻ điều quan trọng nhất là trong thực tế MD5 được
dùng như một cách tạo hashes hay ta gọi là hash chuổi ( biến chuổi
thành 1 chuổi “vớ vẫn” nào đó)……

Tôi xin nói thật, những điều tui tìm hiểu được trên đây làm cho tui vô cùng “đắc ý”. Tóm lại chúng ta cần biết như sau:

-MD5:
là một thuật tóan biến đổi 1 chuổi string thành 1 tín hiệu “message
digest” hay còn gọi là “MD5 hashes”. Đó là một tín hiệu 128 bits – 32
ký tự hexa.

-hash một chuổi string là biến một string thành một tín hiệu message digest

-Thủ
tục (procedure) hay hàm (function) trong chương trình để hash chuổi gọi
là “máy sinh” MD5 hashes hay còn gọi nôm na là “máy hash”.

Bây giờ chúng ta sẽ bước sang một câu hỏi khác rất quan trọng.

CHÚNG TA “DỊCH NGƯỢC” LẠI MỘT TÍN HIỆU MD5 HASHES NHƯ THẾ NÀO ?

Như
trên tui đã nói : từ 1 hashes ta tìm ngược lại string của nó được ko?
Điều này ko bao giờ làm được. Ko một “máy” nào làm được.

Vậy ở
đây câu trả lời là : “Bạn không thể” . Cách hash một string có nghĩa là
tín hiệu md xuất ra bằng thuật tóan MD5 là ko thể đảo ngược. Không thể
biết cách tìm ra chuổi origin từ tín hiệu MD5 hashes. Vì như ví dụ ở
phần trước, những chuỗi có vẽ giống nhau nhưng tín hiệu md sinh ra hòan
tòan khác nhau Tức là chúng ta ko thể nào “decode” (dịch ngược) được
một chuổi MD5 hashes. Chỉ có một cách có được chuổi origin là bằng cách
“brute force cracking”. Tức là phải duyệt qua rất nhiều tổ họp các ký
tự của chuổi vào cho đến khi một trong những chuổi md được tạo ra của
chúng bằng với chuổi md cần tìm origin. Tuy nhiên , với khả năng máy
tính thời nay muốn làm điều này phải mất rất nhiều năm. Mặt khác ở đây
chúng ta cần chú ý đó là tín hiệu MD5 hashes được thiết kế ra là “độc
nhất vô nhị”. Trên lý thuyết cũng có khả năng 2 chuổi khác nhau có tín
hiệu md giống nhau nhưng khả năng này rất rất nhỏ (1/(16^32) hay vào
khỏang (3.4E+38). Bởi vậy có một lần tui tham gia forum HVA và có người
sử dụng chương trình tìm password cho tập tin WINRAR bị mất password và
bác Comp đã kiến nghị ko nên dùng chương trình đó là lý do trên. Vì khả
năng tìm ra password rất “dài hơi” và máy tính chắc chạy vài tuần của
chưa tìm ra. Hảy bỏ ý định đó đi các bạn.

MD5 ĐƯỢC SỬ DỤNG CHO VIỆC GÌ ?

Chính các đặc điểm của MD5 làm cho nó thường được ứng dụng trong một số trường hợp như sau:

-Nó
thường được dùng để checksum tòan bộ file. Các nhà phát triển ứng dụng
thường dùng MD5 trong việc cho phép download file trên NET. Họ sẽ cho
“xuất bản” một tín hiệu md của file download. Khi chúng ta tải file về
, thì file chúng ta vừa download sẽ có một tín hiệu 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ì OK, ko có vấn đề. Nếu hai tín hiệu md này khác nhau, có thể có
trong file download có virut hay cái gì đó tương tự.

-Một ứng dụng thường được dùng nữa là hash một password. Được dùng cho việc bảo mật một ứng dụng, hay những gì tương tự …v….v….

Đây là một số thông tin căn bản chúng ta cần biết qua khi bắt đầu tìm hiểu về thuật tóan MD5. Ở đây tui cần nói thêm một chút:

-Chúng
ta chỉ có thể tạo ra tín hiệu message digest từ một chuổi string ( đây
được gọi là quá trình “encode”).Chúng ta ko thể “dịch ngược” một
message digest ra một string origin (quá trình “dịch ngược” gọi là
“decode”). Khi tìm hiểu về MD5, tui có hỏi trên Forum HVA về các soft
dùng MD5, và có một người trả lời là “bạn cần soft encode hay decode”.
Và hacnho trả lời giúp tui : dĩ nhiên là encode. Thật tình tui ko thể
nào chịu nổi lọai người này. Họ chỉ biết trình diễn kiến thức. Đây ko
phải là “văn hóa” khi tham gia một forum. Mong mọi người nên chân thành
với nhau nhiều hơn.

-Một số người sai lầm khi hiểu rằng “MD5
hashes “ là thuật tóan tựa như MD5 ,tức là thuật tóan trên nền tản MD5
biến đổi đi đôi chút. (Các thuật tóan này tôi gọi nôn na là thuật tóan
“Lai căn MD5”). Điều này sai lầm , benina chỉ xin nhắc lại : MD5 hashes
= message digest.

-Đứng về mặt cracking, một số người khi chưa
tìm hiểu kỹ MD5 và thấy decode ko được nên cho rằng các soft dùng thuật
tóan MD5 là ko keygen được “bất khả xâm phạm” . Lại thêm một sai lầm
nữa. Vì sau vậy?. Vì nếu 1 soft được bảo vệ bằng đúng “chính xác thuật
tóan MD5” thì quá dễ để tìm ra số serial vì chúng ta đã biết chính xác
thuật tóan này diễn ra như thế nào. Vì vậy các soft chỉ dùng thuật tóan
“lai căn MD5” , hay lồng các thuật tóan khác với thuật tóan MD5. Vì vậy
các bạn muốn tìm các soft trong thực tế sử dụng MD5 rất khó. (có thể
nói là ko có vì ko coder nào ngu đến như vậy!.
Tui chỉ tìm được một soft có thuật tóan khá giống thuật tóan MD5 mà
thôi. Thực ra tui tìm trên Net thấy có 2 soft có thuật tóan “sát” với
MD5, nhưng ko còn đường download trên Net nữa vì quá cũ. Tui phải ra
tiệm bán các đĩa CD, và tìm được 1 Soft (mô phật! hên thiệt). Trong quá
trình tìm hiểu MD5, tui cũng thu thập được một số soft có thuật tóan
“Lai căn MD5”.Rồi tui sẽ share cho các bạn.

=========================================================================

TÌM HIỂU THUẬT TÓAN MD5

=========================================================================

Đây là tài liệu của R. Rivest , tay này ko phải cracker, lão đang làm việc tại MIT (một cái tên rất nổi tiếng phải ko các bạn!.
Tài liệu này được viết từ năm 1992. Nhưng đến hôm nay chúng ta mới học
, thật là lạc hậu. Nhưng còn hơn là ko biết gì phải ko các bạn.

The MD5 Message-Digest Algorithm

(Tôi ko dịch câu này, MD có nghĩa là message-digest)

Tài
liệu này cung cấp cho cộng đồng Internet. Nó ko định rõ chuẩn Internet
nào cả. Có thể phân phối rộng rãi cho mọi người.. Vì vậy hôm nay chúng
ta mới học được nó đây

Bảng mục lục:

Ghi chú:1. Executive Summary(bảng tóm tắt ) 1

2. Terminology and Notation (thuật ngữ và ký hiệu) 2

3. MD5 Algorithm Description (Mô tả thuật tóan MD5) 3

4. Summary (Tóm tắt) 6

5. Differences Between MD4 and MD5 (Sự khác nhau giữa MD4 và MD5) 6

References(Tham khảo) 7

APPENDIX A – Reference Implementation(tham khảo bổ sung) 7

Security Considerations (áp dụng cho bảo mật) 21

Author’s Address (Địa chỉ tác giả) 21

1. Bảng tóm tắt các mối quan hệ:

Đây
là tài liệu mô tả thuật tóan MD5 message-digest.Thuật tóan này “bắt
lấy” các thông điệp nhập vào có chiều dài bất kỳ và đưa ra kết quả như
là "fingerprint"(dấu lăn tay) or "message digest" chứa trong 128 bit
(32 ký tự hexa).Và người ta đã ước đóan rằng sẽ ko có ai tính tóan được
một kết quả thứ 2 giống message-digest như thế hay cho ra kết quả một
thông điệp bất kỳ nào giống như message-digest đó. Thuật tóan MD5 được
dùng trong các ứng dụng tín hiệu digital, ở đó một file rất lớn đã được
nén bằng một kiểu an tòan trước khi nó được mã hóa với một khóa riêng
(bí mật), dưới hệ thống mã hóa khóa được công khai giống như RSA.

Thuật
tóan MD5 được thiết kế để tăng tốc độ tính tóan nhanh hơn trên máy
32bit. Hơn nữa thụât tóan MD5 không cần phải thay đổi nhiều trong các
tables, thuật tóan có thể được code ngắn gọn một cách nhanh chóng.

Thuật
tóan MD5 là một phần mở rộng của thuật tóan MD4. MD5 chậm hơn ko đáng
kể so với MD4, nhưng nó “bảo mật “ hơn trong thiết kế. MD5 được thết kế
ra vì lý do người ta có cảm giác rằng MD4 có lẽ chỉ được chấp nhận để
sử dụng một cách nhanh chóng hơn trong việc “sắp đặt” ranh giới review
đang tồn tại. Vì MD4 được thiết kế nhanh một cách ngọai lệ, nên nó đứng
trên “bờ vực rũi ro” đối với các cuộc tấn công bí mật hết sức hiệu quả.
MD5 đã “khóa” được việc này. Nó giúp thêm một chút cho việc bảo mật tối
đa.Nó trộn vài ám thị được làm bởi các reviewers khác, và chứa thêm các
optimizations. Thuật tóan MD5 được đặt trong các public domain cho việc
review và có thể chấp nhận như một chuẩn standard.

2. Thuật ngữ và ký hiệu:

Trong
văn bản này “word” có số lượng là 32-bit và một “byte” có số lượng là
8-bit. Một dãy bit tương tự, và cũng là một dãy byte (mỗi một nhóm
8-bit là một byte). Với bit có vị trí thứ tự high của mỗi byte được
liệt kê đầu tiên. Tương tự vậy, một dãy các byte cũng giống như là một
dãy 32-bit words, mỗi một nhóm liên tục 4 byte là một word, với byte có
thứ tự low được cho trước tiên.

Chú ý:

x_i được biểu thị
như là “x sub i”. Nếu chỉ số dưới (subscript) là một biểu thức, thì
chúng ta sẽ hình dung trong đầu chúng ta như sau: x_{i+1}. Tương tự ,
chúng ta dùng ^ cho chỉ số trên (superscripts) (số mũ) , x^i là “x mũ
i” (x lũy thừa i).

Dấu “+” là phép cộng các words .

X<<< style="font-weight: bold;">3. Mô tả thuật tóan MD5

Chúng
ta bắt đầu bằng cách giả sử chúng ta có một tín hiệu input có chiều dài
b-bit, và chúng ta muốn tìm tín hiệu md của nó . Ở đây b là một số
nguyên ko dấu bất kỳ ; b có thể bằng zero, không cần thiết b là một bội
số của 8, và nó có thể lớn tùy ý. Chúng ta hình dung các bits của tín
hiệu input được viết như dưới đây:

Mã:
m_0 m_1 … m_{b-1}

[22.03.2010] [Crypto] Mã hoá thông tin bằng thuật giải Blowfish

22.03.2010

===========================================================================
Ặc ặc, keke.
(Đó là những từ cảm thán mà tui học được trên NET. Tui yêu NET và con người ảo của NET ở chổ này . hihi. )
Gác kiếm đã lâu đang ngâm trầm cái khác, híhí , bài này cũng
đã viết lâu rồi (từ lúc mới wen NINI trên NET có send cho ẻm
đọan vào đề :) ). Hôm nay lục ra ,thấy cũng giống như một bài
luận nên post cho các bạn xem chơi. Đọan analysis thuật tóan và
cracking cắt bỏ. Mong các bạn thông cảm vì em đã ….lỡ dại
…gác rồi 

==========================================================================

VÀO ĐỀ:

Lúc bé, tui thường ở nhà với bà nội , vì mẹ tôi phải đi dạy học xa. Và
tui là một trong những đứa cháu nội được yêu thương nhất . Bà nội tui
lúc nào cũng muốn những điều tốt lành cho tôi. Bà thường mong muốn: Nếu
lớn lên tôi sẽ được làm nghề “gỏ dây thép”, vì nghề này chỉ ngồi ở
trong mát lại lương cao.Và ngày hôm nay khi nghiên cứu về mã hóa bổng
tôi rất nhớ đến bà. TUT này ngòai việc chia sẽ cho các bạn, tui cũng
muốn gởi tặng linh hồn Nội tôi. Rất rất nhớ bà !!!.huhu

Thưa các bạn, thật ra viết tut ko cần dài dòng như benina hay làm.
Nhưng vì đối tượng đọc tut mà benina muốn share là các newbie như
benina vậy. Thật là vất vả cho newbie khi trên các diễn đàn cracker
tiếng Việt chưa nhiều tài liệu hướng dẫn cụ thể. Và thường , các newbie
ko biết bắt đầu từ đâu . Vì vậy bắt buộc benina biết gì thì sẽ share
ngay cho các bạn. Thật là vui vẽ khi chúng ta cùng tiến bộ.

Như trên tui có nói, bà nội tui rất thích nghề “gỏ dây thép”. Vì những
năm 60, kỹ thuật còn lạc hậu so với bây giờ, nghề “gỏ dây thép” rất
sang trọng, là một nghề “ngồi mát ăn bát vàng”. Nghề này chỉ có làm một
việc là nhận 1 message text (như thư từ chẳng hạn), sau đó chuyển thông
tin text đó thành 1 chuổi mật mã 0,1 theo một quy luật gọi là khóa
“Key” và rồi “gỏ” tín hiệu 0,1 đó bằng 1 công cụ đặc biệt để chuyển
đi bằng sóng điện từ (nên được gọi là gỏ dây thép). Người nhận tín hiệu
bên kia ghi lại chuổi mã hóa 0,1 và dựa vào khóa “key” qui định mà
chuyển ra tín hiệu text. Đấy là qui trình chuyển 1 tín hiệu mã hóa. Ví
dụ này để các bạn dể hình dung ra cách mã hóa tin hiệu text như thế nào
và nó cũng là một ví dụ thật “thô sơ” cho thuật tóan mã hóa
Blowfish.


GIỚI THIỆU VÀ THUẬT NGỮ

Trong chu trình mã hóa, plaintext là tín hiệu mà bạn chuyển đi. Tín
hiệu này có thể là một bản báo cáo kiểm tra sức khỏe, một bức thư
tình…. Hay một cái gì đó mà nó có thể được diễn tả ra thành một luồng
bits. Quá trình mã hóa là biến tín hiệu plaintext thành ciphertext (văn
bản đã mã hóa), và quá trình giải mã thì ngược lại chuyển ciphertext
thành plaintext
Thông thường người ta hay nói rằng, thuật tóan mã hóa có 2 lọai ,
symmetric (đối xứng) và public (công khai). Thuật tóan đối xứng như
Blowfish chẳng hạn , dùng khóa bí mật giống nhau (same secret key)
để mã hóa và giải mã. Bạn phải giấu key một cách bí mật chỉ cho người
nhận và gởi tín hiệu biết mà thôi. Ví dụ như chúng ta thường sử
dụng một password trong IT,thì chỉ có người nhận và người gởi
biết mà thôi.

Thuật tóan mã hóa khóa công khai (public) là dùng 2 key, một cho mã
hóa, khóa kia cho giải mã. Khóa được dùng cho mã hóa gọi là “public
key” (khóa công khai) không cần giữ bí mật. Người gởi tín hiệu dùng
khóa này để gởi tín hiệu của họ. và người nhận tín hiệu dùng khóa giải
mã bí mật hay còn gọi là “private key” (khóa riêng) để đọc tín hiệu
nhận được. Khóa public key nó “locks” tín hiệu, còn khóa private key
thì “unclocks” tín hiệu: một tín hiệu được mã hóa bằng public key, thì
ko ai ngọai trừ người giữ khóa private key có thể giải mã được tín
hiệu. RSA là một thuật tóan mã hóa public key thông dụng.

Ở đây tui xin lấy một ví dụ để mô tả kiểu mã hóa key public
và symmetric như sau (ko biết đúng ko nhe nhưng dễ hình
dung,hihi). Nếu các bạn nào có đi du lịch ở khách sạn, hay gia
đình khá giả chắc các bạn sẽ biết và đã từng xem truyền
hình cáp. Thực ra nó cũng giống như lọai truyền hình bình
thường, không phải nối cáp từ đài phát hình đến truyền hình
của ta như là cái tên của nó dễ làm ta nhằm lẩn. Nó chỉ
khác ở chổ, truyền hình bình thường, các bạn cứ tường tượng
tín hiệu của nó là lọai tín hiệu được mã hóa đối xứng,
tức là tín hiệu hình ảnh được mã hóa bằng một chuổi tín
hiệu được truyền qua sóng điện từ đến truyền hình của ta.
Lúc đó truyền hình sẽ giải mã chuổi tín hiệu đó thành hình
ảnh bằng 1 khóa giống nhau (same secret key) khi mã hóa và giải
mã. Đây là lọai mã hóa đối xứng symmetric . Còn truyền hình
cáp thì khác, đài phát hình sẽ mã hóa hình ảnh bằng một
khóa “public key” mà tất cả các ăn-ten truyền hình nào cũng
nhận được. Nhưng bạn phải có một đầu giải mả tín hiệu (hình
dáng giống như một cái đầu máy DVD), có nhiệm vụ giải mã
tín hiệu truyền hình đã mã hóa thành tín hiệu hình ảnh
thông qua một khóa riêng “private key” kết hợp với khóa “public
key” để giải mả. Đó chính là lọai thuật tóan mã hóa công
khai.

Vậy muốn giải mã một tín hiệu mã hóa bằng thuật tóan
symmetric ta phải biết khóa “same secret key” . Và muốn giải mã
một tín hiệu mã hóa bằng thuật tóan public key chúng ta bắt
buộc phải biết khóa “private key”

Ngòai ví dụ trên, các thuật tóan mã hóa còn được sử dụng
rất nhiều trong thực tế như : tín hiệu điện thọai di động, hay
một vi chương trình cập nhật nâng cấp mà chúng ta thường thấy
,nó sẽ gởi 1 tín hiệu về trang chủ của soft để báo có cần
nâng cấp soft ko khi có 1 bản upgrade mới,hoặc được sử dụng
trong Embedded systems, vân..vân…nhiều lắm.

Phần lớn thuật tóan đáng tin cậy nhất đã được xuất bản free để cho
phân tích (analysis) thỏai mái, bởi vì khóa bảo mật của chúng
được sử dụng trong thực tế kiểm chứng rất an tòan. Một thuật tóan
tốt nó giống như “ một cái hầm chứa tiền của nhà băng ”: Cái hầm này
được làm rất hòan chỉnh , nó là lọai tốt nhất , bạn ko thể vào bên
trong hầm mà ko có khóa. Blowfish chính là thuật tóan lọai này,
nó rất đáng tin cậy đã được public công khai.

Đôi khi một thuật tóan mã hóa bị giới hạn ko free, có nghĩa là chính
thuật tóan này được giử bí mật. Chính vì vậy bạn sẽ ko bao giờ biết
chắc rằng thuật tóan bị giới hạn đó thật sự yếu kém như thế nào, bởi
vì người phát triển ko cho bất cứ ai một cơ hội để phân tích nó.

Thuật tóan có thể được sử dụng bảo mật những lọai dữ liệu khác
nhau. Đôi khi bạn muốn dữ liệu được “tòan vẹn” khi gởi đi, và tin
chắc rằng người nhận sẽ nhận được những thông tin giống đúng như bạn
đã gởi,lúc đó bạn cũng phải sử dụng đến thuật tóan mã hóa.
Thuật tóan mã hóa cũng cung cấp những “xác nhận”, cho biết chắc
rằng một tín hiệu đến từ một người nào đó đã gởi nó đến
….đó là một vài mục đích sử dụng của thuật tóan mã hóa
.Một ứng dụng nữa của các thuật tóan mã hóa nói chung và
Blowfish nói riêng là bảo mật phần mềm , ko cho các cracker chôm
chỉa. Nó sẽ mã hóa chuổi password (là plaintext) thành chuổi
mã hóa ciphertext. Và sao đó sẽ xử lý chuổi ciphertext này

Trên đây là những giới thiệu sơ khởi về thuật tóan mã hóa và
các ứng dụng của nó trong thực tế nhằm mục đích khởi xứng
cho việc ứng dụng vào cracking mà chúng ta quan tâm . Tui xin
tóm tắt lại các ý chính trên để chúng ta bắt đầu đi vào
phần chính của vấn đề là phân tích thuật tóan Blowfish và
ứng dụng trong cracking như thế nào:

-plaintext là tín hiệu mà bạn chuyển đi
-Ciphertext: tín hiệu mã hóa
-Thuật tóan mã hóa có 2 lọai , symmetric (đối xứng) và public (công khai)
– Thuật tóan đối xứng (symmetric) như Blowfish chẳng hạn , dùng khóa bí mật giống nhau (same secret key) để mã hóa và giải mã
– Thuật tóan mã hóa khóa công khai (public) là dùng 2 key, một cho mã
hóa, khóa kia cho giải mã. Khóa được dùng cho mã hóa gọi là “public
key” (khóa công khai) không cần giữ bí mật.Khóa được dùng cho giải
mã là “private key” (khóa riêng). RSA là một thuật tóan mã hóa
public key thông dụng
– Vậy muốn giải mã một tín hiệu mã hóa bằng thuật tóan
symmetric ta phải biết khóa “same secret key” . Và muốn giải mã
một tín hiệu mã hóa bằng thuật tóan public key chúng ta bắt
buộc phải biết khóa “private key”
-Encryption algorithm thuật tóan mã hóa ở đây khác thuật tóan
hash chuổi MD5 là: Thuật tóan mã hóa sẽ mã hóa ra 1 Ciphertext
và có thể giải mã ngược lại 1 ciphertext thành 1 plaintext.
Còn thuật tóan MD5 thì sẽ hash chuổi thành 1 tín hiệu MD nhưng
ko thể biến đổi từ 1 chuổi MD về tín hiệu gốc.

Benina 2004

Comments