Phân biệt Encrypt và Hashing
Trong lĩnh vực bảo mật dữ liệu, hai khái niệm "Encrypt" (mã hóa) và "Hashing" (băm) thường được nhắc đến như những phương pháp bảo vệ thông tin quan trọng. Tuy nhiên, chúng có mục đích và cơ chế hoạt động hoàn toàn khác nhau. Để hiểu rõ hơn, chúng ta hãy cùng phân biệt giữa mã hóa và băm.
Encrypt (Mã hóa)
Mã hoá là quá trình chuyển đổi dữ liệu dạng gốc (plaintext) sang thành một dạng khác không thể đọc được (ciphertext) để bảo vệ dữ liệu khỏi sự truy cập trái phép. Cơ chế hoạt động: Sử dụng các thuật toán mã hoá và một khoá để chuyển dữ liệu plaintext thành ciphertext. Quá trình mã hoá có thể được đảo ngược (giải mã) để khôi phục lại dữ liệu gốc bằng cách sử dụng khoá giải mã. Mã hoá dữ liệu có hai loại chính là mã hoá đối xứng (Symmetric encryption) và mã hoá bất đối xứng (Asymmetric encryption).
1. Symmetric encryption:
Sử dụng một khóa (key) cho cả quá trình mã hóa (encoding) và giải mã (decoding).
Quản lý khoá:
Shared Key (Khóa chia sẻ): Tất cả các bên tham gia vào quá trình truyền thông phải sử dụng cùng một khóa. Khóa này phải được giữ bí mật và chia sẻ an toàn giữa các bên.
Ưu điểm:
Nhanh và hiệu quả hơn Tốt cho việc mã hoá dữ liệu số lượng lớn
Nhược điểm:
Quản lý khóa khó khăn, đặc biệt là có nhiều người dùng và thiết bị Nếu khoá bị lộ, thì hacker có thể giải mã toàn bộ dữ liệu
Ví dụ thuật toán:
AES (Advanced Encryption Standard) DES (Data Encryption Standard).
2. Asymmetric encryption:
Sử dụng cặp khóa công khai (Publish key) và khóa bí mật (Private key); Khóa công khai để mã hoá, khoá bí mật để giải mã.
Quản lý khoá:
One per user (Khóa riêng cho mỗi người dùng): Mỗi người dùng có một cặp khóa riêng của mình. Khóa công khai có thể được chia sẻ rộng rãi, nhưng khóa riêng tư phải được giữ bí mật.
Ưu điểm:
Bảo mật hơn đối với việc truyền khoá, vì khóa công khai có thể được chia sẻ công khai Giải quyết được vấn đề phân phối khoá
Nhược điểm:
Chậm hơn symmetric encryption Không phù hợp với mã hoá dữ liệu số lượng lớn do hiệu xuất thấp
Ví dụ thuật toán:
RSA (Rivest-Shamir-Adleman) ECC (Elliptic Curve Cryptography). Ứng dụng: Bảo vệ dữ liệu truyền tải và lưu trữ (Thông tin nhạy cảm như số thẻ thanh toán)
Hashing (Băm)
Hashing là quá trình chuyển đổi dữ liệu từ dạng gốc thành một giá trị băm cố định. Hashing là quá trình một chiều, nghĩa là không chuyển về dữ liệu gốc từ giá trị băm (Khác với Encrypt có thể đổi ngược). Với một dữ liệu gốc sẽ tạo ra một giá trị băm nhất định, chính vì vậy khi dùng hash mật khẩu lưu vào database thì hacker có thể dùng rainbow table để dò giá trị băm và tìm được dữ liệu gốc. Vì vậy khi thực hiện hash mật khẩu ta cần thêm Salt ngoài ra còn có Pepper, KDF (Key Derivation Function):.
1. Salt
Salt là một giá trị ngẫu nhiên, được thêm vào mật khẩu trước khi thực hiện băm. Salt đảm bảo rằng mỗi mật khẩu, ngay cả giống nhau cũng sẽ cho ra giá trị băm khác nhau. Điều này làm cho rainbow table gần như vô dụng vì hacker phải tạo rainbow table riêng cho mỗi giá trị salt với kích thước vô cùng lớn
async function hashPassword(password) { const salt = await bcrypt.genSalt(saltRounds); const hashedPassword = await bcrypt.hash(password, salt); return hashedPassword; }
2. Pepper
Pepper là một giá trị bí mật, giống như salt, được giữ bí mật và thêm vào mật khẩu trước khi băm. Pepper thường lưu vào các biến môi trường trên máy chủ.
async function hashPassword(password) {
const salt = await bcrypt.genSalt(saltRounds);
const hashedPassword = await bcrypt.hash(password + pepper, salt);
return { salt, hashedPassword };
}
3. KDF (Key Derivation Function)
Các thuật toán như bcrypt, scrypt và Argon2 chính là các KDF mạnh mẽ và an toàn cho băm mật khẩu. Chúng dùng salt và thực hiện nhiều vòng băm để cho quá trình phá mã trở nên tốn kém hơn về thời gian và tài nguyên
Thuật toán băm phổ biến: MD5 (Message Digest Algorithm 5) SHA-256 (Secure Hash Algorithm 256) Bcrypt, Scrypt, Argon2 (các thuật toán băm mật khẩu an toàn). Ứng dụng : Lưu trữ mật khẩu an toàn, kiểm tra tính toàn vẹn của dữ liệu
Khi nào nên sử dụng Encrypt và Hashing?
- Encrypt: Khi bạn cần bảo vệ dữ liệu trong quá trình truyền tải hoặc lưu trữ và cần khả năng giải mã để truy cập dữ liệu gốc. Ví dụ: bảo vệ dữ liệu cá nhân, thông tin tài chính, truyền tải dữ liệu qua mạng.
- Hashing: Khi bạn cần đảm bảo tính toàn vẹn của dữ liệu hoặc lưu trữ mật khẩu an toàn. Ví dụ: lưu trữ mật khẩu người dùng trong cơ sở dữ liệu, kiểm tra dữ liệu tải về có bị thay đổi hay không.
Tổng kết
Cả mã hóa và băm đều là những công cụ quan trọng trong bảo mật thông tin, nhưng chúng phục vụ các mục đích khác nhau và có các cơ chế hoạt động khác nhau. Hiểu rõ sự khác biệt giữa chúng sẽ giúp bạn lựa chọn phương pháp phù hợp để bảo vệ dữ liệu của mình một cách hiệu quả. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về mã hóa và băm, cũng như cách chúng được sử dụng trong bảo mật thông tin. Nếu bạn có bất kỳ câu hỏi hay thắc mắc nào, đừng ngần ngại để lại bình luận bên dưới!
All Rights Reserved