0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Cách Lưu Trữ Mật Khẩu An Toàn Trong Cơ Sở Dữ Liệu: Kinh Nghiệm Từ Cuộc Phỏng Vấn

Đăng vào 5 ngày trước

• 4 phút đọc

Giới Thiệu

Trong thời đại số hiện nay, việc bảo mật thông tin, đặc biệt là mật khẩu người dùng, càng trở nên quan trọng. Bài viết này sẽ chia sẻ câu chuyện từ một buổi phỏng vấn, trong đó có nhiều kiến thức bổ ích về cách lưu trữ mật khẩu an toàn.

Câu Chuyện Phỏng Vấn

Trong buổi phỏng vấn, chúng ta sẽ gặp hai nhân vật chính: người phỏng vấn, ông A, và ứng viên B.

A: Bạn có đề cập rằng bạn có kiến thức vững về bảo mật, bạn có thể mô tả chi tiết hơn không?
B: Vâng, em đã thiết kế module người dùng trong hệ thống, áp dụng kỹ thuật mã hóa mật khẩu trước khi lưu trữ vào cơ sở dữ liệu.

A: Bạn đã sử dụng kỹ thuật mã hóa thay vì hàm băm để lưu trữ dữ liệu?
B: Đúng vậy.

A: Vậy bạn lưu trữ khóa mã hóa ở đâu?
B: Khóa nào ạ?

A: Khóa dùng để mã hóa mật khẩu, và bạn có thể cho biết sự khác biệt giữa mã hóa đối xứng và mã hóa bất đối xứng không?
B:

  • Mã hóa đối xứng sử dụng một khóa duy nhất cho cả việc mã hóa và giải mã.
  • Mã hóa bất đối xứng sử dụng cặp khóa: khóa công khai dùng để mã hóa và khóa riêng tư dùng để giải mã. Khóa công khai có thể công bố, nhưng khóa riêng tư cần được bảo mật.

B: Em không dùng khóa như vậy, mà thay vào đó em thích sử dụng hàm băm.

Thuật Toán Hàm Băm

Hàm băm là một thuật toán mã hóa một chiều, có nghĩa là không thể khôi phục lại mật khẩu từ bản băm. Ngược lại, mã hóa cho phép người dùng có thể giải mã để lấy lại mật khẩu gốc.

A: Tại sao bạn lại chọn sử dụng hàm băm thay vì lưu trữ trực tiếp mật khẩu trong cơ sở dữ liệu?
B: Để đảm bảo tính bảo mật. Nếu có hacker lấy được dữ liệu, họ sẽ không thể biết được giá trị mật khẩu thực sự.

A: Nhưng hacker vẫn có thể sử dụng rainbow table để tìm ra mật khẩu thông qua xung đột băm. Bạn có biết về salt không?
B: Em sử dụng salt để thêm chuỗi ngẫu nhiên vào băm.
A: Nó hoạt động như thế nào?
B: Nếu hacker lấy được dữ liệu mật khẩu trong cơ sở dữ liệu và sử dụng rainbow table, khả năng xảy ra xung đột băm là rất lớn, làm cho mật khẩu gốc trở nên khó đoán hơn.

Rainbow Table

Rainbow table là bảng precomputed được sử dụng để đảo ngược các chuỗi mã hóa về giá trị gốc. Các chuỗi trong bảng được tạo qua nhiều lần áp dụng hàm băm cho các mật khẩu gốc, sau đó sử dụng hàm giảm thiểu và tiếp tục thực hiện băm cho đến khi đạt được cặp (mật khẩu, băm).

Lựa Chọn Thuật Toán Hàm Băm

A: Bạn đã chọn hàm băm nào?
B: Em biết rằng md5 không an toàn, vì vậy em đã chọn bcrypt, SHA-256, và sha3.

Md5 đã được chứng minh là yếu vào năm 2004. Điều tương tự cũng đã được áp dụng cho sha1 vào năm 2005. Hãy cẩn thận trong việc áp dụng hàm băm nhé.

Ví Dụ Triển Khai Trong Java

java Copy
import org.mindrot.jbcrypt.BCrypt;

public class PasswordHashing {
    public static void main(String[] args) {
        String password = "minhDrake";
        String salt = BCrypt.gensalt();

        // Băm mật khẩu với salt
        String hashedPassword = BCrypt.hashpw(password, salt);

        boolean isValidPassword = BCrypt.checkpw("minhDrake", hashedPassword);
        System.out.println("Mật Khẩu Hợp Lệ: " + isValidPassword);
    }
}

Kết Luận

  • Tấn công rainbow table sử dụng để phục hồi các mật khẩu đã được băm. Chúng ta nên sử dụng salt để cải thiện an toàn cho mật khẩu. Mặc dù không gì là hoàn hảo, salt làm tăng thời gian và công sức để phá mã.
  • Về bảo mật khóa, tránh lưu trữ mã nguồn mạnh trên máy chủ, thay vào đó là nên mã hóa chúng và lưu trữ an toàn trên cloud, chẳng hạn như sử dụng secret manager.
  • Sử dụng key derivation function (KDF) để tạo ra chuỗi mới thông qua số lần lặp xác định.

Cảm ơn mọi người đã theo dõi bài viết này. Hy vọng những kiến thức này sẽ giúp ích cho các bạn trong việc bảo mật thông tin cá nhân!

Tham Khảo

Medium: A Basic Question in Security Interview
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào