MD5 - Cái này bác bị nhầm từ khái niệm.
Thực ra nói cái này là mã hóa làm cho bác nhầm từ đó. Bác cứ tưởng là cứ "mã" thì phải giải. Nhưng thực ra là không phải. Chính xác ra ta phải gọi thuật này là thuật "hash".
Hash có thể hình dung đơn giản (như bác yêu cầu) như thế này. Bác có một tập hợp A gồm toàn xúc xích. Bây giờ bác "nhặt" bất kỳ 1 cái xúc xích của tập A - đưa cho em. Em từ tập A em cho vào một cái máy gọi là máy md5() - nó ra được A' - một con bò. Giả sử cái máy này cứ thấy cái xúc xích đen và lệch bên phải 20.5 độ thì sẽ nhả ra một con bò loang lổ (còn nếu lệch 21 độ thì sẽ ra một con bò khác hẳn màu nâu). Tức là cứ cái xúc xích như thế nhét vào máy md5() là ra con bò như thế. Biết được cái xúc xích thì sẽ biết được con bò bằng cách nhét vào máy md5(). Nhưng biết được con bò thì chưa chắc biết được cái xúc xích . Lúc đó mã ấy gọi là mã 1 chiều - hay là hash.
Thế thì md5 để làm gì? Giả sử thế này. Bác có cái xúc xích của bác. Bi giờ bác gọi cửa em em ở trong nhà. Làm cách nào em nhận ra bác? Em sẽ bắt bác đứng ngoài cửa và nhét cái xúc xích của bác vào cái máy md5 của em và kiểm tra con bò tuồn ra từ cái máy đó (tất nhiên cái đầu tuồn bò của em đặt trong nhà) - xem cái con bò của bác có màu lông loang lổ không (điều mà em biết chắc chắn do đã ghi lại từ khi bác đăng ký). Nếu đúng là con bò loang lổ thì em cho vào, còn không thì biến!
Khi bác đăng ký, nếu em chụp hình cái xúc xích mà thằng khác ăn trộm được cái ảnh hình xúc xích của bác thì khi đó bác có thể bị lộ ra là xúc xích của bác màu nâu, cong, lệch . Còn nếu em chỉ ghi lại hình con bò loang lổ thì việc ăn trộm chả nghĩa lý gì. Nó không thể suy ra được cái xúc xích từ hình con bò.
Đại khái md5 là thế....
Còn DES thì em không biết - nhưng nếu mà muốn mã giải được thì nó phải là Base64 hay GPG/PGP - bác có thể tham khảo mã nguồn của Gnu PG chạy trên POSIX bằng cách google từ GPG.
~~~
Mã hóa mình cũng cần hiểu một khái niệm nữa là "salt". "salt" chính là cách để làm cho md5 an toàn hơn. Cho ví dụ, ngẫu nhiên mà hai người đăng ký với em có 2 cái xúc xích giống hệt nhau. Kết quả là hai xúc xích sau khi qua cái máy md5 của em nó sẽ ra 2 con bò giống hệt nhau.
Nếu một kẻ đánh cắp được cái gallery bò của em mà nhìn thấy con bò của ông A giống con bò của ông B sẽ assume được rằng là nếu ta tìm ra được xúc xích của ông A thì ta cũng tìm luôn được xúc xích của ông B. Điều này là rất nguy hiểm vì việc ông A chả may hoặc cố í khoe hàng lại bị ảnh hưởng tới ông B là người không liên quan tý nào cả.
Muốn thế thì em sẽ order thêm cho cái máy md5 của em là "Đề nghị cái máy bẻ lệch xúc xích của ông A đi 5 độ, với ông B là 10 độ". Như vậy dù 2 cái mật khẩu giống nhau, nhưng kết quả thì lại khác nhau. Và điều này hạn chế được nhược điểm em đã nói ở trên của hash password.
~~~~~~~~~~~~~`
Khóa công và khóa tư thì lại là chuyện khác.
Thằng PGP lại có cách tiếp cận bài toán khác, hoàn toàn khác với hash. Hash là hoàn toàn không giải được:
Xúc xích ----md5----> Bò
Còn cái PGP thì lại là giải được
Xúc xích ----PGP-Public-key---> Xúc xích' ----PGP-Private-key---> Xúc xích
Điều kỳ diệu ở đây là, khác với cách mọi người nghĩ là "Chìa nào khóa nấy" thì mã hóa PGP dùng chìa khóa một đằng chìa giải một nẻo.
Đây là một bài minh họa rất súc tích về PGP/GPG em chôm từ mạng về:
Trích:
Để đảm bảo độ bí mật, người ta đã áp dụng nguyên lý số nguyên tố. Như chúng ta biết, số nguyên tố rất đặc biệt vì chúng là một số nguyên chỉ chia hết cho 1 và chính nó. Ta dễ dàng thực hiện phép nhân giữa các số nguyên tố với nhau. Ví dụ, ai cũng có thể nhân được 319489 x 242483 = 774707470337. Nhưng quá trình ngược lại lại rất phức tạp. Ví dụ để kiểm tra xem số 267281174273 có phải là số nguyên tố hay không, ta phải mất rất nhiều thời gian với hàng loạt phép tính mới có thể phát hiện được số này là kết quả của phép nhân giữa 274177 với 974849. Mà đây mới chỉlà những số có ít chữ số. Các bạn hình dung nếu kết quả ban đầu là một số có 20, 30 hay 50 chữ số thì khối lượng các phép toán sẽ khổng lồ đến mức nào!
Ngược lại với các phương pháp hai chiều hay còn gọi là đối xứng, mô hình số nguyên tố cho phép dễ dàng mã hóa thông tin nhưng dường như là không thực hiện được quá trình ngược lại. Ví dụ, chúng ta có thể chọn hai số nguyên tó p và q bất kỳ sau đó nhân chúng với nhau để thu được kết quả N. N chính là mật mã và ai cũng có thể biết được mật mã này và sử dụng nó để khóa một thông tin ai đó gửi cho bạn nhưng không ai biết được kết quả N là phép nhân hai số p và q (hai yếu ốt không thể thiếu để giải mã và chỉ có bạn biết) nên không thể đọc được thông tin mã hóa của bạn. Phương pháp này vừa dễ thực hiện mà độ bảo mật lại rất cao.
Dựa trên nguyên tắc này, các nhà lập trình và quản lý mạng máy tính đã nghĩ ra một hệ thống mã hóa đáp ứng được hai yêu cầu cơ bản là dễ sử dụng và độ bảo mật cao của các thông tin trên mạng Internet mang tên RSA (*) (RSA là tên viết tắt của các thành viên sáng lập: Rivest, Shamir và Adleman). Năm 1991, Phil Zimmermann cũng đã nghĩ ra một phiên bản khác hiệu quả hơn đặt tên là PGP (Pretty Good Privacy). Tất cả mọi người đều có thể truy cập vào PGP thông qua Internet để khóa thông tin của mình.
__________________
Nhân tiện đây nói luôn về việc "giải mã" mật mã file RAR hay ZIP. Nhiều bác kêu ca là chương trình giải mã chậm quá. Các thằng RAR hay ZIP nó đều mã dựa trên những thứ như thế này hết. Nên không còn cách nào khác là hùng hục mà đi thử từng cái một
Các bác có file RAR hay ZIP hay là có cái mật khẩu đã bị mã hóa MD5 đều giống như việc bác có được 1 con bò trong tay. Để tìm được cái xúc xích nào đã làm ra con bò đó, không cách nào khác là phải thử từng cái xúc xích lại cho lại vào md5 xem nó ra cái con bò nào. Việc làm này, có khi là không bao giờ thành công vì rằng lượng xúc xích thì nhiều, mà thời gian sức lực lại có hạn.
Người ta đã nghĩ cách để hạn chế số lần thử sai bằng cách dùng dictionary, tức là chỉ kiểm tra những thằng giai làng: Chỉ kiểm tra những từ trong từ điển và sự kết hợp có thể giữa chúng, vd, BLuESky chẳng hạn thế. Nhưng hiệu quả cũng không nhiều.
Hiểu được md5 cũng có ích khi các bác bị mất mật khẩu. Các bác có thể suy ra là không thằng webmaster nào nó lại đi lưu cái mật khẩu trơn chưa mã hóa (hình cái xúc xích) của các bác vì thế chính nó (thường) là cũng không biết mật khẩu của bác là gì - mà nó dùng cách mã hóa một chiều (hash) rồi so khớp như em trình bày ở trên. Vì thế để lấy lại mật khẩu đã mất là điều không tưởng. Chỉ có thể reset nó mà thôi
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment