JOKER
Dành cho buổi họp có biên bảnTrả lại lá Joker
Bài viết kỹ thuật

Mã hoá ngay trong trình duyệt: PBKDF2 và AES-GCMMã hoá ngay trong trình duyệt: PBKDF2 và AES-GCM

Dữ liệu được khoá trên máy người dùng trước khi đi bất cứ đâu. Máy chủ có bị lộ thì thứ lộ ra chỉ là chuỗi vô nghĩa.

17/10/20262 phút đọcBảo mậtMật mãWeb Crypto

Mật khẩu không phải là khoá

Mật khẩu người dùng đặt thường ngắn và dễ đoán. Thuật toán mã hoá cần khoá ngẫu nhiên đủ dài. PBKDF2 nối hai thứ đó: nó băm mật khẩu cùng một chuỗi muối ngẫu nhiên lặp đi lặp lại nhiều lần, cho ra khoá 256 bit. Mỗi lần đoán thử mật khẩu, kẻ tấn công cũng phải lặp đủ chừng ấy vòng.

js
const base = await crypto.subtle.importKey('raw', enc.encode(pass), 'PBKDF2', false, ['deriveKey']);
const key = await crypto.subtle.deriveKey(
  { name: 'PBKDF2', hash: 'SHA-256', salt, iterations: 600000 },
  base, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt']);

AES-GCM: khoá kèm con dấu

AES-GCM vừa giấu nội dung vừa gắn một thẻ xác thực. Sửa dù một bit trong bản mã, lúc giải mã thẻ sẽ không khớp và trình duyệt từ chối trả kết quả. Không có chuyện giải ra một nội dung sai mà không ai biết.

js
const iv = crypto.getRandomValues(new Uint8Array(12));
const ct = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, enc.encode(text));
// lưu: muối (16 byte) + iv (12 byte) + bản mã

Những gì trình duyệt làm hộ

  • Web Crypto chạy bằng mã gốc của trình duyệt, nhanh và đã được kiểm định
  • Khoá tạo ra có thể đánh dấu không xuất được, mã JavaScript cũng không đọc ra được
  • Chỉ chạy trên HTTPS, tránh bị chèn mã khi truyền

Dùng vào đâu

Hồ sơ cá nhân, dữ liệu học sinh, tài liệu nội bộ có thể được khoá ngay tại máy người nhập trước khi lưu lên máy chủ. Đổi lại, quên mật khẩu là mất dữ liệu: thiết kế quy trình khôi phục là một phần của bài toán, không phải chuyện để sau.

Chạy thử điều bài viết nói

04Mật mã và bảo mật dữ liệu

Két sắt trong trình duyệt

Một cái két mà chính chúng tôi cũng không mở được.Gõ một bí mật, đặt mật khẩu, khoá lại. Toàn bộ diễn ra trên máy bạn: không một byte nào rời khỏi trình duyệt.

Chạy thí nghiệm