[BCRYPT] Một số loại mã hóa thường dùng MD5, SHA, Bcrypt (ok)
https://viblo.asia/p/mot-so-loai-ma-hoa-thuong-dung-ByEZkgV2ZQ0
Một số loại mã hóa thường dùng
This post has been more than 2 years since it was last updated.
Bài viết này dễ giới thiệu cũng như so sánh một chút về các loại mã hóa, giúp bạn có sự lựa chọn phù hợp tùy vào yêu cầu và tính chất của dự án.
1. Mã hóa Bcrypt
Một thời gian trở lại đây, Bcrypt được biết đến nhiều hơn như là một thuật toán chuyên được dùng để mã hóa password an toàn hơn MD5, SHA. Vì sao Bcrypt lại an toàn hơn? Thứ nhất trong khi chuỗi mã hóa của MD5 hay SHA là cố định đối với 1 chuỗi dữ liệu nhưng với Bcrypt lại là một chuỗi ngẫu nhiên, không cố định. Đồng thời, ta có thể tùy chỉnh thời gian tạo ra 1 chuỗi mã hóa (salt), thời gian này càng lâu thì mật khẩu mã hóa càng an toàn. Điều này có nghĩa là kiểu tấn công brute force khó mà thực hiện được đối với kiểu mã hóa này.
Kiểu Bcrypt này có thể được sử dụng trong nhiều ngôn ngữ lập trình, tuy nhiên có những ngôn ngữ được hỗ trợ sẵn và những ngôn ngữ lại không. Đối với những ngôn ngữ không hỗ trợ sẵn thì bạn phải import thêm thư viện để có thể sử dụng.
Dưới đây, sẽ đưa ra ví dụ sử dụng Bcrypt với Java và Nodejs.
Java: cần sử dụng thêm thư viện JBcrypt
Gensalt quy định số vòng lặp để tạo ra chuỗi mã hóa, có thể chỉ định từ 4-30 vòng. Số vòng lặp càng cao, thời gian tạo ra chuỗi mã hóa càng lâu và password sẽ càng an toàn.
Nodejs: cài thêm gói bcrypt
Mở termianal lên và gõ câu lệnh:
npm install bcrypt
Gói này hỗ trợ cả 2 phương thức đồng bộ và bất đồng bộ, tuy nhiên để đỡ mất thời gian hơn thì người ta thường dùng phương thức bất đồng bộ.
Phương thức bất đồng bộ:
Phương thức đồng bộ:
Hy vọng với 3 phương thức mã hóa ở trên các bạn có thể lựa chọn được phương thức phù hợp nhất với dự án của mình, tùy theo yêu cầu của khách hàng về độ bảo mật của dự án.
2. Mã hóa MD5
Có lẽ đây là loại mã hóa quen thuộc và hay dùng nhất đối với mọi người.
MD5 (Message-Digest algorithm 5) là một hàm băm mật mã theo chuẩn RFC 1321. Các chương trình mã hoá MD5 thường được gọi là MD5Sum. Ví dụ mã hóa MD5:
Khi thay đổi dù chỉ 1 chữ thì toàn bộ chuỗi mã hóa cũng thay đổi
Chuỗi mã hóa của ký tự rỗng là:
MD5 có giá trị 128-bit từ dữ liệu đầu vào, thường được dùng để check độ tin cậy của tập tin. Thông thường máy chủ tập tin sẽ cung cấp một MD5 để so sánh với MD5 được cài trong tập tin. MD5 được thiết kế vào năm 1991 để thay thế cho hàm băm trước đó là MD4 (đã được chứng minh là không an toàn). Sau này, MD5 cũng bị tìm thấy nhiều lỗ hổng nhưng vẫn được sử dụng rộng rãi đến hiện tại. Với những người không tin tưởng MD5 thì họ có thể sử dụng SHA hoặc Bcrypt. Để bẻ khóa MD5 chỉ cần lên google search là ra ngay kết quả, tuy nhiên bạn có thể tham khảo một số tool tại đây.
3. Mã hoán SHA
SHA (Secure Hash Algorism) bao gồm 5 thuật giải : SHA-1, SHA-224, SHA-256, SHA384, SHA-512; được phát biểu theo nguyên văn của FIPS là (tạm dịch):
Cho một giá trị băm nhất định được tạo nên bởi một trong những thuật giải SHA, việc tìm lại được đoạn dữ liệu gốc là không khả thi.
Việc tìm được hai đoạn dữ liệu khác nhau có cùng kết quả băm tạo ra bởi một trong những thuật giải SHA là không khả thi. Bất cứ thay đổi nào trên đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị băm hoàn toàn khác với xác suất rất cao.
Tuy nhiên, hiện nay cả 2 ý phát biểu trên đang dần bị phủ định do hiện tại SHA-1 đã bị 3 người mật mã học Trung Quốc phát triển thành công thuật giải dùng để tìm ra 2 đoạn dữ liệu nhất định có cùng kết quả băm tạo ra bởi SHA-1, đồng thời trên mạng cũng đã phát triển những tool có thể bẻ khóa được SHA-1. Đối với SHA-2 (tên gọi chung của 4 loại SHA sau) thì hiện tại chưa tìm ra được lỗ hổng nào, tuy nhiên vì SHA2 và SHA1 khá tương đồng nhau về thuật giải nên người ta dự đoán trong tương lai SHA2 cũng sẽ trở nên không an toàn và được thay thế bởi một thuật giải khác. Bạn có thể bắt đầu tìm ra lỗ hổng của SHA-2 cũng như phát minh ra một thuật giải khác thay thế giống như người ta đã phát minh ra SHA-1 để thay thế cho MD5 vậy. NIST cũng đã khởi đầu một cuộc thi phát triển thuật giải băm mới an toàn hơn SHA, giống như quy trình phát triển chuẩn mã hóa tiên tiến (Advanced Encryption Standard hay AES)
Một số ví dụ của SHA: SHA-1:
Khi thay đổi chỉ 1 ký tự, mã băm hoàn toàn thay đổi
SHA-1 của giá trị rỗng:
SHA-256:
Khi thay đổi 1 ký tự:
SHA-256 của ký tự rỗng
• Dành cho những bạn muốn tìm hiểu thêm lỗ hổng của SHA-1: http://ictnews.vn/cntt/bao-mat/giai-ma-ve-lo-hong-bao-mat-cua-ham-bam-sha-1-ma-google-moi-tim-ra-149837.ict
Last updated
Was this helpful?