Chuyên mục
Hỏi Đáp

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

  1. tại sao chúng ta cần mã hóa mật khẩu?
  2. thông tin cơ bản về băm mật khẩu
  3. giới thiệu về bcrypt

Rõ ràng, tất cả các lập trình viên đều không xa lạ với mã hóa mật khẩu. đó là một bước quan trọng cho phép chúng tôi đảm bảo rằng thông tin người dùng được bảo mật ngay cả trong trường hợp cơ sở dữ liệu của chúng tôi bị xâm phạm. Đã có nhiều tình huống ứng dụng web bị rò rỉ thông tin người dùng. điều này sẽ còn đáng lo ngại hơn nếu thông tin mật khẩu của chúng tôi không được mã hóa cẩn thận. có nhiều người sử dụng cùng một mật khẩu cho hầu hết các tài khoản của họ. lộ mật khẩu và tất cả các tài khoản khác đều có nguy cơ bị đánh cắp. do đó, chúng ta không bao giờ nên lưu trữ mật khẩu dưới dạng văn bản thuần túy.

Một trong những cách phổ biến nhất để giải quyết vấn đề này là thực hiện băm mật khẩu.

băm

Băm mật khẩu là một cách tiếp cận khá phổ biến để giải quyết vấn đề bảo mật mật khẩu. hàm băm là một hàm một chiều cho phép chúng ta chuyển đổi mật khẩu ban đầu thành một chuỗi đại diện cho nó và không thể được giải mã ngược lại. mỗi băm sẽ tương ứng với một mật khẩu duy nhất. Chúng tôi sẽ lưu trữ giá trị băm kết quả trong cơ sở dữ liệu. khi thực hiện xác thực người dùng, hệ thống sẽ mã hóa thông tin người dùng nhập vào, so sánh với cơ sở dữ liệu để xác minh và đưa ra kết quả.

ví dụ: “helloworld” sau khi sử dụng thuật toán băm md5 sẽ cho kết quả sau “68e109f0f40ca72a15e05cc22786f8e6” .

Với công nghệ máy tính ngày nay, không thể bẻ khóa hàm băm. tuy nhiên, nếu chúng ta không cẩn thận, vẫn có những cách kẻ mạo danh có thể lấy được mật khẩu nếu chúng có hàm băm. Hai phương pháp tấn công phổ biến là:

  • tấn công bảng cầu vồng .
  • tấn công bạo lực (tấn công tất cả các trường hợp có thể xảy ra).

Để giải quyết vấn đề này, chúng ta sẽ tìm hiểu về ngâm muối kéo dài .

mặn

Như đã đề cập ở trên, chỉ băm mật khẩu là không đủ, để xử lý cuộc tấn công tính toán trước, chúng tôi sử dụng muối. muối là hành động thêm một phần dữ liệu vào mật khẩu ban đầu trước khi băm.

muối rất đơn giản nhưng cực kỳ hiệu quả. đã đưa độ phức tạp của mật khẩu lên một cấp độ hoàn toàn mới vì mật khẩu ban đầu trở nên dài hơn và do đó phức tạp hơn nhiều. bằng cách thêm muối, chúng tôi đã vô hiệu hóa tất cả các cuộc tấn công tiền máy tính. mỗi tài khoản người dùng tại thời điểm tạo sẽ được khởi tạo với một chuỗi muối ngẫu nhiên duy nhất tại thời điểm đăng ký. hai tài khoản có cùng mật khẩu sẽ không có cùng giá trị băm. vì nó chỉ được sử dụng để giải quyết vấn đề tính toán trước nên việc tạo một hệ thống riêng để lưu trữ muối là không cần thiết và thông thường chúng tôi sẽ lưu trữ trực tiếp trong cùng một bảng.

kéo dài

Ngoài các đòn đánh cầu vồng, bạo lực cũng là một hình thức tấn công khá phổ biến. nếu việc tính toán không quá phức tạp, kẻ tấn công có thể nhanh chóng tập hợp và thử tất cả các trường hợp để tìm ra mật khẩu của người dùng. ở đây chúng ta sẽ tìm hiểu về khái niệm kéo dài.

Phần mở rộng là một cách để tăng độ phức tạp của thuật toán băm bằng cách làm cho vũ phu không thể xảy ra trong mọi trường hợp. để đạt được điều này, chúng tôi thường lặp lại quá trình băm hàng nghìn lần. điều này khiến người dùng mất nhiều thời gian hơn để tìm hiểu mật khẩu, nhưng lâu hơn nữa để kẻ tấn công tìm ra kết quả. đối với một mật khẩu mạnh, hầu như không thể sử dụng vũ lực để tìm chúng.

bcrypt là một chức năng mã hóa mật khẩu được thiết kế bởi niels provos và david mazières dựa trên mã hóa blowfish và được giới thiệu lần đầu tiên tại usenix vào năm 1999. nó là sự kết hợp của cả ba khái niệm. chúng ta vừa học “băm”, “streching” và “salting”. “.

thường thì một mã băm bcrypt sẽ trông như thế này:

ví dụ: “helloworld” sử dụng bcrypt sẽ dẫn đến

trong đó: 2y: thuật toán băm 10: cost (2 ^ 10 hoặc 1024 vòng) rt2pnlx7aag2edhy8sgdiu: mã hóa muối 16 byte (128 bit) trong base64 đến 22 ký tự. nndkeilb.kutzsdvokgl2x / ter1tkzg – Băm mã hóa Base64 từ 24 byte (192 bit) đến 31 ký tự.

do đó, với hàm băm ở trên, mật khẩu của chúng ta sẽ được thực thi tổng cộng 2-10 lần (1024 vòng) bằng cách sử dụng muối rt2pnlx7aag2edhy8sgdiu, mật khẩu “helloworld” kết hợp với thuật toán mã hóa blowfish $ 2y $ để có được kết quả trên.

vì vậy, ở đây chúng ta sẽ tìm hiểu lý do tại sao chúng ta cần mã hóa mật khẩu, các phương pháp tấn công phổ biến, cùng với các cách khắc phục nó bằng cách sử dụng muối và kéo dài, cuối cùng chúng ta sẽ giới thiệu hàm băm bcrypt để xem các khái niệm ở trên trong sử dụng trong thực tế. đây là bài viết đầu tiên của mình trên viblo, nếu có gì sai sót xin vui lòng góp ý.

Trả lời

Email của bạn sẽ không được hiển thị công khai.