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. Phần chính còn lại , các bạn lên hệ với Den_bien . Benina(REA) Hehhehehe bác BENINA ơi, bác muốn tìm SOFT sử dụng MD5 nguyên thuỷ hay Modify cứ liên hệ em em có đủ hàng cho bác làm dài dài :D . Nhân tiện nói về MD5 em cũng góp thêm chút : 1 - Đối với các chương trình khi ta dùng PEiD kiểm tra thấy có sử dụng thuật toán MD5 thì các bác hãy căn cứ vào địa chỉ PEiD cho mà tìm đến và đặt BreakPoint ngay tại đó . Nếu chương trình sử dụng thuật toán này trong quá trình mã hoá thì ta cực kỳ may mắn, khỏi tìm đâu xa mất công, cứ từ đó truy ngược ra để tìm đến ĐOẠN CODE CHÍNH . 2 - Khi áp dụng dạng thuật toán mã hoá một chiều như MD5, SHA thì thông thường ta phải khai báo 3 thông số : MD5Init ( hay MD5Start ), MD5Update, và MD5Fiinish. Trong đó : > MD5Init ( hay MD5Start ) : giá trị mặc định ban đầu. Giá trị này có thể bị thay đổi ( và thường được thay đổi ) . > MD5Update : đoạn này sẽ xác định chuỗi tham gia vào quá trình mã hoá và chiều dài chuỗi . > MD5Fiinish : quá trình mã hoá và trả về giá trị HASH . Quá trình này tôi chưa tìm thấy SOFT nào bị thay đổi thông số cả, vì nếu thay đổi, thực tế là ta hầu như không có khả năng tìm ra :D . 3 - Đối với các chương trình sử dụng thuật toán mã hoá một chiều như MD5, SHA, vào quá tình mã hoá SERIAL thì có vài điều quan trọng cần phải chú ý : > Phải xác định cho được MD5Init ( hay SHAInit ) có bị biến đổi hay là giữ nguyên thuỷ ? > Chuỗi được sử dụng vào quá trình mã hoá tạo HASH là chuỗi gì, chuỗi được xác định trong MD5Update ? Hai điều này cực kỳ quan trọng trong dạng thuật toán này, vì kết quả của quá trình mã hoá hoàn toàn dựa vào hai thông số này . Nếu ta xác định được hai thông số trên một cách chính xác, thì việc còn lại là chỉ cần INCLUDE các thư viện của các chương trình mã hoá tương ứng vào và dùng thui :D. Moonbaby(REA) MD5 Algorithm 2 ( tiếp theo ) Vài lời trút giận : huhu ban đầu em định "độc chiếm" cái thằng MD5 này, nhưng không ngờ bác benina làm ăn thế nào lãi để lão Yêu quái "gài hàng", hack vào máy tính "trôm" luôn cái bí kíp này ( mà xui 1 cái là bác benina lại không để password mới đau chứ), không những thế ả Yêu quái còn "lan truyền" thông tin này, làm cho "bí kíp" không còn là "bí kíp" nữa. Thôi thì "mình vì mọi người" , hôm nay em xin share ra cho các bác đọc vậy (em xin nói trước là hơi bị dài, bác nào không theo nổi thì ráng chịu đấy) À, còn 1 điều nữa em xin nhờ các bác edmin là nên cộng point cho bác benina với loạt tut này (ít nhất là 50 point) để xứng với công sức "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)" của bác í ================================================== == tác giả : benina người post : the_lighthouse :tongue: 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: 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