Bit entropy là gì, và tại sao chúng tôi không đưa cho bạn một con số phần trăm

Đăng ngày bởi David Carrero

Phần trăm độ mạnh là một ý kiến cá nhân được làm tròn tới hai chữ số thập phân.

Khi một trang web bảo rằng mật khẩu của bạn “an toàn 92 %”, câu hỏi hiển nhiên là: 92 % của cái gì? Đâu là mốc 100 %? Không hề có. Chưa ai công bố cái mật khẩu hoàn hảo để lấy đó làm thước đo cho phần còn lại. Con số kia bước ra từ một phép quy tắc tam suất mà ai đó ứng biến vào một buổi chiều thứ Ba — chữ hoa được ngần này điểm, ký hiệu được ngần kia — và công việc thật sự duy nhất của nó là bật cho bạn cái vạch màu xanh để bạn bấm tiếp.

Bit thì ngược lại, luôn có đúng một ý nghĩa. Và cái ý nghĩa đó là thứ bạn dùng được.

Một bit là một câu hỏi có hoặc không

Toàn bộ ý tưởng gói gọn trong một câu: mỗi bit nhân đôi số lần thử mà một kẻ không biết gì về bạn phải bỏ ra.

Một bit là hai khả năng. Hai bit là bốn. Ba bit, tám. Mười bit là 1.024 và hai mươi bit là hơn một triệu một chút. Con số không tăng dần, nó tự nhân đôi, và chính chuyện nhân đôi là thứ khiến trực giác của chúng ta rơi tự do xuống vực.

Thế nên câu “40 bit tốt gấp đôi 20 bit” sai đến mức gần như buồn cười. Giữa 20 và 40 bit có hai mươi lần nhân đôi, tức là hệ số 2²⁰: 40 bit không gấp đôi 20, mà gấp một triệu lần. Và 60 bit cũng chẳng gấp ba 20: nó gấp một triệu lần 40. Đầu óc chúng ta đọc thang đo này như đọc một cái thước kẻ, mà nó đâu phải thước. Nó là thang kiểu độ Richter của động đất hay decibel của âm thanh, nơi một bước nhỏ xíu trên con số là một cú nhảy khủng khiếp ngoài đời thật.

Đó là toàn bộ lợi thế của bit so với phần trăm. Phần trăm cho bạn một cảm giác. Bit cho bạn một khối lượng công việc.

Chữ ấy từ đâu ra

Chữ entropy áp dụng cho thông tin đến từ một bài báo năm 1948: A Mathematical Theory of Communication, của Claude Shannon.

Cần nói cho chính xác, vì chỗ này hay bị trích dẫn sai: Shannon không hề nghĩ tới mật khẩu. Thời đó chẳng có mật khẩu máy tính nào đáng để nhắc tên. Ông đang làm việc ở Bell Labs với một bài toán rất khác — một thông điệp thật sự chở được bao nhiêu thông tin, và nén được tới đâu trước khi nó vỡ — và ông cần đo một thứ trơn tuột: sự bất định của người ở đầu bên kia.

Phát hiện của ông, nói nôm na, là thông tin và sự bất ngờ chỉ là một. Một thông điệp mà bạn đã biết rồi thì chẳng cho bạn thêm gì. Một thông điệp không tài nào đoán trước được thì cho bạn cực nhiều. Entropy đo lượng bất ngờ có trong cái nguồn sinh ra các thông điệp, và nó được đo bằng bit.

Chuyện thứ đó lại dùng được cho mật khẩu gần như là một tai nạn may mắn. Mật khẩu chính xác là một thông điệp buộc phải không thể đoán trước.

Cái khóa số có bánh xe

Đây là công thức duy nhất của bài, và tôi hứa là nó miễn phí:

H = L × log₂(N)

Tạm quên logarit đi một lát và hãy nghĩ tới mấy cái khóa xe đạp có bánh xe số. Bạn có hai cách làm khó kẻ muốn mở nó:

  • Lắp thêm bánh xe. Đó là độ dài (L): mật khẩu của bạn có bao nhiêu ký tự.
  • Cho thêm ký hiệu lên mỗi bánh xe. Đó là bảng chữ (N): mỗi bánh chỉ có mười chữ số, hay 26 chữ cái, hay cả chữ lẫn số lẫn ký hiệu.

Logarit chỉ làm đúng một việc: dịch “một bánh xe mang bao nhiêu ký hiệu” sang “bánh xe đó đóng góp bao nhiêu bit”. Một bánh xe 26 chữ cái đóng góp khoảng 4,7 bit. Một bánh xe mang cả 95 ký tự in được trên bàn phím đóng góp khoảng 6,6.

Và cái tréo ngoe nằm ở đó. Hãy để ý vị trí của từng thứ trong công thức. Bảng chữ nằm bên trong logarit, bị nén bẹp; độ dài nằm bên ngoài, đứng nhân.

Tăng số ký hiệu trên mỗi bánh lên gần gấp bốn — từ 26 chữ cái lên 95 ký tự — chỉ mua cho bạn chưa tới hai bit mỗi bánh. Lắp thêm một bánh xe thì mua nguyên một log₂(N), rồi lại một lần nữa, rồi lại nữa. Thế nên mười hai chữ cái thường và không gì khác (khoảng 56 bit) thắng tám ký tự có chữ hoa, số và mấy cái ký hiệu mà biểu mẫu nào cũng bắt phải điền (khoảng 53). P@ssw0rd thua nguadungpinbamghim, mà còn thua chẳng sát nút gì cả.

NIST, trong SP 800-63B, đi đường khác nhưng tới đúng chỗ đó: họ ném qua cửa sổ các quy tắc tổ hợp — một chữ hoa, một chữ số, một ký hiệu — và giữ lại độ dài cùng việc đối chiếu mật khẩu với các danh sách bị lộ. Đừng gán vào miệng họ cái họ không nói: lập luận của họ không phải là chuyện công thức này, mà là bắt người ta nhét vào một ký hiệu thì chẳng làm họ khó đoán hơn, chỉ làm họ dễ đoán theo một kiểu khác. Thực tế, chính tài liệu đó tỏ ra hoài nghi với việc ước lượng entropy của một mật khẩu do con người chọn. Hai lối lập luận khác nhau, cùng một kết luận. Độ phức tạp bắt buộc làm việc bên trong logarit. Độ dài làm việc bên ngoài.

Dòng chữ nhỏ mà gần như không ai đọc

Có một cái bẫy, và đây là phần thành thật nhất của tất cả chuyện này: entropy không đo mật khẩu của bạn, nó đo cái quy trình đã sinh ra mật khẩu đó.

4$Kp!9zQ không có 53 bit kia vì trông nó khó nhằn. Nó có 53 bit nếu — và chỉ nếu — nó bước ra từ một cuộc rút thăm thật sự ngẫu nhiên giữa 95 phím. Nếu chính bạn gõ nó ra trong lúc cố tỏ ra ngẫu nhiên thì công thức không áp dụng được: bạn đâu phải một cuộc rút thăm. Bạn đặt chữ hoa lên đầu, con số xuống cuối, và ký hiệu thì là dấu !. Kẻ tấn công bạn không thử đủ 95 lựa chọn ở từng vị trí: nó thử trước những lựa chọn mà con người hay dùng.

Từ đó sinh ra cái bất đối xứng khó chịu của an toàn mật khẩu. Entropy là một trần nhà, không phải một cái sàn. Nếu máy sinh ra nó, cái trần đó là thật. Nếu bạn tự chọn, thứ duy nhất bạn biết là mình đang ở dưới trần, còn dưới bao nhiêu thì chịu.

Thế nên mới có hai công cụ chứ không phải một. Trình tạo mật khẩu rút thăm thật, nên nó mới dám mặt tỉnh bơ đưa bạn xem số bit: nó biết mình có bao nhiêu bánh xe (L), biết mỗi bánh mang bao nhiêu ký hiệu (N) và làm phép nhân ngay trước mặt bạn. Nếu bạn kéo thanh trượt và thấy con số leo lên, đó là bạn đang thấy L đẩy. Còn trình kiểm tra thì không thể làm vậy với một mật khẩu đã tồn tại: nó chẳng biết mật khẩu đó ra đời thế nào, nên nó làm điều duy nhất hợp lý, là đi lục nó trong từ điển, danh sách tên riêng và các mẫu gõ bàn phím, rồi giả định điều tệ nhất.

Những thứ cần mang về

Ba câu:

  • Một bit là một lần nhân đôi. Thêm mười bit là gấp nghìn lần công sức; thêm hai mươi bit, gấp một triệu.
  • Độ dài thì nhân, bảng chữ thì gần như chỉ cộng thêm chút đỉnh. Thêm một từ đáng giá hơn thêm một dấu chấm than.
  • Bit chỉ có giá trị nếu sự ngẫu nhiên là thật. Một cái máy có thể hứa được điều đó. Bạn, gõ tay, thì không.

Shannon đi tìm xem một thông điệp chứa được bao nhiêu bất ngờ. Bảy mươi mấy năm sau, hóa ra đó lại đúng là câu hỏi cần hỏi về một mật khẩu: không phải nó trông có rắc rối hay không, mà là nó mang bao nhiêu bất ngờ bên trong đối với kẻ chẳng quen biết gì bạn.


Nguồn: C. E. Shannon, “A Mathematical Theory of Communication”, Bell System Technical Journal, 1948 · NIST SP 800-63B, Digital Identity Guidelines (Authentication and Lifecycle Management) · trình tạo mật khẩu của password.es, tính H = L × log₂(N) và hiển thị L, N cùng số bit thu được.

← Quay lại blog