Cơ bản về mã hóa mật khẩu

Chúng tôi rất vui mừng được chia sẻ kiến thức sâu sắc về từ khóa Bcrypt la gi để tối ưu hóa nội dung trang web và tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích từ khóa và chiến lược hiệu quả. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi để cập nhật kiến thức mới.

  1. Tại sau ta cần phải mã hóa mật khẩu?
  2. Cơ bản về băm mật khẩu
  3. Giới thiệu về Bcrypt

Hẳn mọi lập trình viên đều không lạ lẫm gì với việc mã hóa mật khẩu. Nó là một bước quan trọng được chấp nhận ta đảm bảo thông tin người dùng được an toàn trong cả trong tình huống cơ sở tài liệu của tất cả chúng ta bị tổn hại. Đã có rất nhiều tình huống ứng dụng web bị lộ thông tin người dùng. Điều này sẽ còn đáng lo ngại hơn nữa nếu như thông tin mật khẩu của tất cả chúng ta không được mã hóa một cách cẩn thận. Có không ít người sử dụng cùng một mật khẩu cho hồ hết các tài khoản của họ. Để lộ một mật khẩu và tất cả những tài khoản khác đều bị nguy cơ đánh cắp. Vì vậy ta không bao giờ nên lưu trữ mật khẩu dưới dạng một đoạn text thuần tuý.

Bạn Đang Xem: Cơ bản về mã hóa mật khẩu

Một trong những cách phổ thông nhất để xử lý vấn đề này là thực hiện băm mật khẩu.

Hashing

Băm mật khẩu là một cách tiếp cận khá phổ thông trong việc xử lý vấn đề bảo mật thông tin mật khẩu. Hàm băm là hàm một chiều được chấp nhận ta thực hiện chuyển đổi mật khẩu ban sơ thành một chuỗi thể hiện cho nó và không thể giải thuật ngược. Mỗi giá trị băm sẽ chỉ tương ứng với một mật khẩu. Tất cả chúng ta sẽ lưu vào cơ sở tài liệu giá trị kết quả của hàm băm. Khi thực hiện xác thực người dùng, khối hệ thống sẽ thực hiện mã hóa nguồn vào của người dùng, so sánh với cơ sở tài liệu để kiểm tra và đưa ra kết quả.

VD: “HelloWorld” sau khoản thời gian băm sử dụng thuật toán băm md5 sẽ cho kết quả giống như sau “68e109f0f40ca72a15e05cc22786f8e6”.

Với công nghệ máy tính hiện nay, việc giải thuật hàm băm là điều không thể. Tuy nhiên, nếu tất cả chúng ta không cẩn thận, vẫn có các phương pháp kẻ mạo có thể đã dành mật khẩu nếu hắn ta nắm trong tay mã hash. Hai phương pháp tiến công phổ thông là:

  • Rainbow table attacks (tiến công sử dụng từ vị mật khẩu được tính toán từ trước) .
  • Brute Force attacks (tiến công thử mọi tình huống có thể).

Xem Thêm : Là một game thủ, bạn chắc chắn cần biết game RPG là gì?

Để xử lý vấn đề này ta sẽ đi vào tìm hiểu về SaltingStretching.

Salting

Như đã đề cập ở trên, việc băm mật khẩu thuần tuý là không đủ, để xử lý tiến công tính toán trước ta sử dụng Salt. Salting là hành động thêm vào bên cạnh mật khẩu ban sơ một đoạn tài liệu trước lúc băm.

Salting tuy đơn giản nhưng vô cùng mạnh mẽ. Nó đã nâng độ phức tạp của mật khẩu lên một tầm cao mới do mật khẩu ban sơ đã trở thành dài thêm hơn nữa và đồng nghĩa với đó là độ phức tạp lơn hơn rất nhiều. Bằng phương pháp thêm salt, ta đã khiến cho tất cả những phương pháp tiến công sử dụng tính toán trước trở thành vô dụng. Mỗi tài khoản người dùng khi tạo sẽ tiến hành khởi tạo một dãy salt tình cờ duy nhất lúc đăng ký. Hai tài khoản có cùng mật khẩu sẽ không còn có chung giá trị băm trả về. Vì nó chỉ được sử dụng để xử lý vấn đề tính toán trước việc tạo ra một khối hệ thống riêng để lưu trữ salt là không cấp thiết và thông thường ta sẽ lưu trực tiếp trong cùng bảng.

Stretching

Bên cạnh Rainbow table attacks, brute force cũng là một hình thức tiến công khá phổ thông. Nếu việc tính toán không thực sự phức tạp kẻ tiến công có thể nhanh chóng lắp ghép và thử mọi trường hợp để tìm ra mật khẩu người dùng. Đến đây ta sẽ đi vào tìm hiểu về khái niệm stretching.

Stretching là phương pháp để tăng độ phức tạp của thuật toán băm khiến việc brute force qua mọi trường hợp trở thành không khả khi. Để đạt được điều này thông thường ta sẽ lặp quá trình băm hàng ngàn lần. Việc này khiến cho tất cả những người dùng biết mật khẩu tốn thêm một tẹo thời kì nhưng sẽ tốn kẻ tiến công gấp rất nhiều lần để tìm ra kết quả. So với một mật khẩu an toàn việc brute force để tìm ra chúng là gần như không thể.

Bcrypt là một hàm mã hóa mật khẩu được thiết kế bởi Niels Provos và David Mazières dựa trên các thuật toán mã hóa Blowfish và được giới thiệu lần đầu tại USENIX trong năm 1999. Nó là sự việc phối hợp của tất cả ba khái niệm ta vừa tìm hiểu “hashing” “streching” và “salting”.

Thông thường một dãy hashing của bcrypt sẽ sở hữu dạng như sau:

Xem Thêm : Pin PISEN là gì? Tìm hiểu về hệ sinh thái Pin PISEN đồ sộ

$[algorithm]$[cost]$[22 characters salt][31 characters hash]

VD: “HelloWorld” sử dụng Bcrypt sẽ cho kết quả

$2y$10$RT2Pnlx7aaG2EDHy8SgdIunndkeiLB.kUTzSdVoKgL2x/TEr1tkZG |__|__|_____________________|_______________________________| Alg Cost Salt Hash

Trong số đó: 2y: thuật toán băm 10: ngân sách (2^10 hay 1024 vòng lặp) RT2Pnlx7aaG2EDHy8SgdIu: 16-byte (128-bit) salt được encode base64 về 22 kí tự.nndkeiLB.kUTzSdVoKgL2x/TEr1tkZG: 24-byte (192-bit) mã băm được encode base64 về 31 kí tự.

Vậy với mã hash như trên mật khẩu của tất cả chúng ta sẽ chạy tổng số 2 mũ 10 lần (1024 vòng lặp) sử dụng salt RT2Pnlx7aaG2EDHy8SgdIu, mật khẩu “HelloWorld” kết phù hợp với thuật toán mã hóa blowfish $2y$ để cho tất cả chúng ta kết quả như trên.

Vậy qua đây tất cả chúng ta đã đi vào tìm hiểu tại sau phải mã hóa mật khẩu, các phương pháp thức tiến công phổ thông, cùng với đó là các phương pháp thức để phòng chống lại nó sử dụng salt và stretching, cuối cùng ta đi vào giới thiệu hàm băm bcrypt để thấy các khái niệm đã nêu trên sử dụng trong thực tế. Đây là nội dung bài viết trước hết của em trên Viblo, nếu còn gì thiếu sót xin mọi người góp ý.

https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html https://culttt.com/2013/01/21/why-do-you-need-to-salt-and-hash-passwords/ https://www.bmc.com/blogs/salting-stretching-passwords/

You May Also Like

About the Author: v1000