Tìm hiểu về các cách lưu trữ mật khẩu người dùng

Vu
Edumall Engineering
3 min readNov 18, 2019

Hiện nay có 5 cách phổ biến để lưu mật khẩu người dùng:

  • Lưu trữ trực tiếp plantext vào database
  • Encrypt/Decrypt mật khẩu
  • Hash và lưu mật khẩu
  • Kết hợp hash và salt
  • Sử dụng thuật toán bcrypt

Chúng ta sẽ đi sâu vào ưu nhược điểm của từng cách này.

1. Lưu trực tiếp plantext vào database

Tài khoản và mật khẩu sẽ được lưu trực tiếp vào db dưới dạng text.

Ưu điểm: Dễ triển khai, nếu người dùng quên mật khẩu ta có thể gửi lại cho người dùng

Nhược điểm: Khi bị tấn công, mật khẩu người dùng sẽ bị lộ. Điểm quan trọng ở đây là việc người dùng thường sử dụng cùng một mật khẩu cho nhiều trang web. Do vậy hacker có thể sử dụng lại tài khoản và mật khẩu của khác đăng nhập trên web khác. Sẽ rất nguy hiểm nếu trang web đó chứa các thông tin quan trọng của khách hàng.

2. Encrypt/Decrypt mật khẩu

Mật khẩu sẽ được mã hoá trước khi lưu vào db. Khi người dùng đăng nhập ta sẽ giải mã và so sánh với mật khẩu người dùng nhập vào.

Ưu điểm: So với cách 1, khi db bị lộ hacker sẽ khó lấy được mật khẩu do mật khẩu đã được mã hoá.

Nhược điểm: Vì hàm mã hoá và giải mã sẽ được lưu trong source code. Do vậy khi source code bị lộ thì hàm mã hoá và giải mã cũng bị lộ dẫn đến việc giải mã mật khẩu cũng đơn giản.

3. Hash và lưu mật khẩu

Dùng hàm MD5 để mã hoá mật khẩu, mật khẩu đã MD5 không thể dịch ngược lại thành plantext.

Ưu điểm: Khi db bị chiếm quyền hacker đọc được thông tin người dùng thì cũng không thể biết được mật khẩu của người dùng là gì.

Nhược điểm: Do cùng một string khi MD5 đều thu được một hash giống nhau. Do vậy hacker sẽ mang chuỗi MD5 đó so sánh với các hash khi MD5 các mật khẩu thông dụng(như 123456, iloveyou….) nếu giống nhau có thể suy ngược được dạng plantext của mật khẩu đó.

4. Kết hợp hash và salt

Trước khi md5 mật khẩu sẽ được cộng với một string(salt), sau đó md5 chuỗi cuối cùng

Ưu điểm: Giải quyết được nhược điểm của cách 3

Nhược điểm: Cách này vẫn có nhược điểm đó là salt được dùng giống nhau nên nếu lộ thì nó sẽ trở thành nhược điểm như ở cách 3

5. Sử dụng thuật toán bcrypt

Sử dụng thuật toán Blowfish để sinh ra mã salt cho từng password người dùng nhập vào.

Là biện pháp bảo mật nhất hiện tại, khắc phục được các hạn chế của các cách trên. Tuỳ theo tình hình hiện tại nếu thời điểm đó có cách siêu máy tính có thể tính được rất nhiều phép tính một lúc thì ta chỉ cần tăng độ dài của mã salt nhập vào. Độ phức tạp sẽ tăng lên rất nhiều lần.

P/s: Trên đây là các biện pháp để lưu trữ và bảo mật password mà giới công nghệ hiện đang dùng. Mỗi cách đều có ưu nhược điểm riêng. Do vậy khi sử dụng một hệ thống nào đừng trông đợi họ bảo mật cho tài khoản của mình mà hãy chủ động sử dụng một mật khẩu mạnh để hạn chế việc lộ mật khẩu của bản thân.

--

--