Cơ sở dữ liệu chứa password của chúng tôi đã bị đột nhập, nhưng đừng lo, mật khẩu của bạn đã được mã hóa. Chúng ta rất thường hay nghe những lời nói như thế này khi một dịch vụ online bị hack hay vô tình khiến password của người dùng bị rò rỉ lên mạng. Ngay cả một công ty lớn như Yahoo mà cũng có thể trở thành nạn nhân thì những công ty nhỏ hơn sẽ ra sao? Nhưng hãng đã nói là password mã hóa rồi vậy thì còn gì đâu mà lo? Không, vẫn còn nhiều thứ cần lo lắm, đặc biệt là khi bạn đã từng đăng ký tài khoản với dịch vụ vừa bị tấn công.
Password nên được lưu trữ như thế nào?
Khi bạn tạo một account mới, bạn được yêu cầu nhập password. Password này không được lưu trữ nguyên vẹn mà sẽ được xử lý (hash) để tạo thành một chuỗi kí tự dài ngoằng bất kì, ví dụ cụm từ duyluandethuong sẽ trở thành TYewfbhfgfwifwhfewf. Người ta chỉ lưu chuỗi dài ngoằng này vào cơ sở dữ liệu thay vì lưu password của bạn. Rồi cứ mỗi lần bạn đăng nhập, web hay app sẽ so sánh chuỗi trong cơ sở dữ liệu với chuỗi mới được xử lý từ password bạn nhập vào, nếu khớp thì bạn được vào tiếp, còn không thì sẽ báo lỗi. Theo nguyên tắc, web và app sẽ không bao giờ được lưu password của bạn xuống ổ đĩa cứng.
Cái hay của chuỗi hash này đó là nó không thể dịch ngược lại thành chuỗi gốc được, không bao giờ. Vậy nên người ta mới chọn cách này để đảm bảo hacker không bao giờ biết mật khẩu người dùng. Nó khác với việc mã hóa, vốn có thể dịch ngược lại cụm từ nguyên gốc. Chuỗi hash cũng sẽ thay đổi giá trị khi chuỗi gốc thay đổi dù chỉ một bit.
Password nên được lưu trữ như thế nào?
Khi bạn tạo một account mới, bạn được yêu cầu nhập password. Password này không được lưu trữ nguyên vẹn mà sẽ được xử lý (hash) để tạo thành một chuỗi kí tự dài ngoằng bất kì, ví dụ cụm từ duyluandethuong sẽ trở thành TYewfbhfgfwifwhfewf. Người ta chỉ lưu chuỗi dài ngoằng này vào cơ sở dữ liệu thay vì lưu password của bạn. Rồi cứ mỗi lần bạn đăng nhập, web hay app sẽ so sánh chuỗi trong cơ sở dữ liệu với chuỗi mới được xử lý từ password bạn nhập vào, nếu khớp thì bạn được vào tiếp, còn không thì sẽ báo lỗi. Theo nguyên tắc, web và app sẽ không bao giờ được lưu password của bạn xuống ổ đĩa cứng.
Cái hay của chuỗi hash này đó là nó không thể dịch ngược lại thành chuỗi gốc được, không bao giờ. Vậy nên người ta mới chọn cách này để đảm bảo hacker không bao giờ biết mật khẩu người dùng. Nó khác với việc mã hóa, vốn có thể dịch ngược lại cụm từ nguyên gốc. Chuỗi hash cũng sẽ thay đổi giá trị khi chuỗi gốc thay đổi dù chỉ một bit.
Hacker khi trộm được password của bạn cũng không thể biết mật khẩu thật sự của bạn là gì. Thay vào đó, hắn ta sẽ so sánh chuỗi hash lưu trong database vừa ăn cắp với các chuỗi hash của những password phổ biến, dạng như iloveyou hay 1234567890. Việc so sánh này có thể mất thời gian kha khá nhưng cũng có thể chỉ rất nhanh tùy trình độ của hacker.
Cái nguy hiểm của chuỗi hash đó là nếu bạn dùng cùng 1 thuật toán hash, 1 password ở nhiều website khác nhau sẽ sinh ra cùng một chuỗi hash giống hệt nhau. Hay trong cùng 1 website, nếu hai người dùng chọn password giống nhau thì hash cũng sẽ tương tự nhau nên không an toàn, hacker có thể đoán biết được password tài khoản ngân hàng của bạn trong khi hắn chỉ hack vào database của một cửa hàng sách online mà thôi.
Để ngăn ngừa chuyện này, người dùng dùng thêm salt. Thay vì chỉ tạo chuỗi hash từ password, người ta sẽ nối thêm một số kí tự vào đầu hoặc cuối password trước khi hash, đây chính là "salt". Ví dụ: password deptraikhoaito khi nối salt sẽ thành deptraikhoaitoduyluan, lúc đó cái hash ra rõ ràng khác với password ban đầu rồi. Salt có thể là username, có thể là ngày tạo tài khoản, v.v. Mỗi người dùng đều có salt riêng của họ nên ngay cả khi password giống thì kết quả sau khi hash vẫn khác nhau. Tất cả những thứ này đều do server quản lý, bạn không cần làm gì thêm. Đây cũng là lý do vì sao các dịch vụ online thường khuyên bạn là không nên lo lắng khi password của họ bị rò rỉ.
Hash và salt rồi vậy sao phải lo?
Nếu web hay app làm tốt và tuân theo đầy đủ các tiêu chuẩn thì sẽ không vấn đề gì, nhưng nếu họ chỉ đơn thuần hash mà không salt thì sẽ dễ bị hacker đoán ra mật khẩu ngay. Đừng tưởng chuyện này dễ và ai cũng làm. Năm 2012, LinkedIn từng bị trộm mất 6,5 triệu password đã hash mà không salt. Công ty lớn còn như vậy thì các công ty nhỏ ra sao?
Mà một khi password hash không salt bị rò rỉ, biết đâu có một web hay app nào khác cũng chơi theo cách tương tự. Như vậy là hacker đã đoán được phần nào password của bạn, nếu đối chiếu với danh sách các mật khẩu phổ biến mà hacker nắm trong tay thì việc tìm lại được pass gốc là chuyện hoàn toàn khả thi. Khi đã có pass gốc, có trời mới biết hacker dự tính làm gì tiếp theo.
Nên làm gì trong trường hợp website bạn dùng bị rò rỉ mật khẩu?
Trước tiên hãy lên web đó đổi password sau khi nhận được thông báo từ công ty chủ quản web hoặc app. Đừng vội vàng đổi pass ngay khi bạn nghe tin web bị hack, biết đâu hacker vẫn còn cài cắm một số thứ gì đó trong server của web thì sao? Sẽ cần thời gian để đội ngũ quản trị website dọn dẹp và chắc chắn hệ thống của họ đã sạch.
Quảng cáo
Thứ hai, nếu có dịch vụ nào dùng chung password với web hay app vừa bị hack, hãy đổi pass luôn của tài khoản đó. Điều này đặt biệt hữu ích nếu bạn dùng chung password giữa nhiều website với nhau. Những thứ bạn nên đổi pass đầu tiên là:
- Mật khẩu đăng nhập tài khoản ngân hàng online
- Mật khẩu email
- Mật khẩu đăng nhập vào các dịch vụ của nội bộ công ty
- Facebook và các mạng xã hội mà bạn có tham gia (vì đây là mục tiêu hay bị hack)
Bạn cũng nên cân nhắc kích hoạt bảo mật 2 lớp cho các tài khoản quan trọng, ví dụ như email, Dropbox chứa file làm việc, Facebook... Tính năng này có nghĩa là sau khi bạn nhập password bình thường, bạn sẽ được hỏi thêm một số code nhắn qua SMS hoặc email. Chuỗi code này chỉ có bạn mới nhận được, hacker có biết chính xác password thì cũng không cách gì vào tới bên trong. Facebook là cái bạn nên bật đầu tiên vì hiện tại mình thấy rất nhiều bạn than thở bị hack tài khoản hoặc có tin nhắn 2 lớp hiện ra trong khi bạn đó chẳng đụng gì tới account cả.
Tham khảo: HowToGeek