Hãy nghĩ một từ ngẫu nhiên. Ngay bây giờ, từ đầu tiên bật ra trong đầu.
Dù là từ nào đi nữa, nó không hề ngẫu nhiên. Đó là một từ của bạn: thứ gì đó bạn vừa đọc tuần này, một vật đang nằm trước mặt, chữ cái mở đầu tên bạn. Khi người ta yêu cầu một con người tạo ra ngẫu nhiên, thứ nhận lại là tự truyện. Mà tự truyện thì đoán được.
Toàn bộ vấn đề của mật khẩu nằm gọn ở đó. Không phải vì con người lười — dĩ nhiên cũng có phần đó — mà vì chúng ta không có khả năng tạo ra sự ngẫu nhiên. Ta thích vài chữ cái nhất định, ta né các ký tự lặp lại vì thấy “trông không ngẫu nhiên”, ta xen kẽ nguyên âm với phụ âm mà chẳng hay biết, và khi bị đòi một con số, ta lôi ra thứ có sẵn trong tay: ngày tháng, tuổi tác, những con số có ý nghĩa. Kẻ tấn công không cần biết bạn là ai để khai thác điều đó. Chỉ cần biết bạn là người.
Một kỹ sư, năm con xúc xắc và một danh sách
Năm 1995, Arnold G. Reinhold đăng lên trang web của mình một phương pháp mà ông gọi là Diceware. Ý tưởng đơn giản đến mức hơi bực mình khi phải ngồi giải thích: nếu vấn đề là con người không biết chọn ngẫu nhiên, thì hãy tước quyền chọn khỏi tay con người.
Toàn bộ quy trình gói trong ba dòng:
- Bạn gieo năm con xúc xắc và ghi kết quả theo thứ tự. Chẳng hạn ra
4-2-6-1-3. - Bạn tra
42613trong một danh sách. - Đó là từ của bạn. Lặp lại cho từ tiếp theo.
Danh sách có 7.776 mục, và con số ấy không phải bốc đại: đó là 6⁵, tức mọi
kết quả có thể của năm con xúc xắc. Mỗi tổ hợp — từ 11111 đến 66666 — trỏ tới
một mục khác nhau, không mục nào bị bỏ sót cũng không mục nào lặp lại. Danh sách
gốc trộn các từ tiếng Anh ngắn với vài âm tiết, chữ số và ký hiệu rời rạc, chính
vì tìm cho đủ 7.776 từ đẹp khó hơn ta tưởng nhiều.
Điều quan trọng không nằm ở danh sách. Nó nằm ở con xúc xắc.
Vì sao 12,9 bit đúng là 12,9 bit
Đây là phần gần như không ai hiểu, và cũng là phần duy nhất đáng kể.
Entropy của một từ Diceware là log₂(7.776) = 12,9 bit. Đó là số học, không phải bảo mật: có 7.776 kết quả và tất cả đều có xác suất y hệt nhau.
So sánh với chuyện xảy ra khi chính bạn chọn. Nếu tôi bảo bạn lấy một từ từ cuốn từ điển 7.776 từ, phép tính trông có vẻ giống hệt — cũng 7.776 lựa chọn — nhưng không phải, bởi bạn không chọn chúng với xác suất như nhau. Bạn sẽ chọn từ thông dụng, từ bạn thích, từ bạn vừa nhìn thấy hôm nay. Cuốn từ điển đó có 12,9 bit trên giấy và ít hơn nhiều trong đầu bạn, còn kẻ tấn công thì sắp danh sách theo tần suất và thử trước những từ mà người ta hay chọn. Entropy không phải là có bao nhiêu lựa chọn: nó là còn lại bao nhiêu lựa chọn sau khi đã trừ đi những gì kẻ tấn công biết về sở thích của bạn.
Xúc xắc không có sở thích. Chúng cũng chẳng có trí nhớ: con xúc xắc không biết
lần gieo trước đã ra rừng, nên nó không tránh lặp lại, không cố tìm sự đa dạng
và cũng không thấy ngượng khi bật ra hai từ mở đầu giống nhau. Vì thế 12,9 bit
của Diceware là 12,9 bit thật, chứ không phải con số lạc quan in trên tờ rơi
quảng cáo.
Và cũng vì thế phép cộng mới chạy đúng hướng. Mỗi từ cộng thêm:
- Năm từ: khoảng 64 bit.
- Sáu từ: khoảng 77 bit.
- Bảy từ: khoảng 90 bit.
Đó là phép cộng sạch sẽ, không phải phép nhân thần kỳ, bởi mỗi lần gieo đều độc lập với các lần còn lại. Reinhold khuyên đừng xuống dưới năm từ, và dùng sáu từ trở lên cho những thứ thật sự quan trọng. Bạn có thể tự thấy hiệu ứng đó ở trình tạo mật khẩu: thêm một từ luôn cộng đúng bấy nhiêu, và chữ “luôn” ấy chính là toàn bộ phát minh.
Bí mật không nằm ở danh sách
Phản bác tự nó nhảy ra: nếu danh sách công khai thì phá chẳng phải dễ hơn sao?
Không, và nên nói thật chậm chỗ này. 12,9 bit đã giả định sẵn rằng kẻ tấn công có danh sách trong tay. Nó cũng giả định hắn biết bạn dùng Diceware, biết cụm từ của bạn có bao nhiêu từ và biết thứ tự bạn gõ chúng ra. Tất cả những thứ đó đã bị trừ hết. Thứ duy nhất hắn không biết là xúc xắc của bạn đã ra gì, và đó chính là thứ bạn đang đếm khi nói “77 bit”.
Ngược hoàn toàn với những gì ta làm với P@ssw0rd, nơi toàn bộ hy vọng được đặt
vào chuyện chẳng ai nghĩ ra việc thay a bằng @. Người ta nghĩ ra rồi. Đó là
một trong những quy tắc đầu tiên mà bất kỳ công cụ tấn công từ điển nào cũng áp
dụng. Nếu bạn thấy ngứa tay muốn thử, hãy đưa nó vào
công cụ kiểm tra và xem nó trụ được bao lâu.
EFF và các danh sách thay thế
Năm 2016, Electronic Frontier Foundation công bố danh sách từ riêng của họ dành cho các cụm mật khẩu gieo xúc xắc. Danh sách dài vẫn giữ nguyên 7.776 mục — vẫn năm con xúc xắc ấy, vẫn 12,9 bit ấy — nhưng thay đổi nội dung: loại bỏ các âm tiết lạ và ký hiệu, đưa vào những từ thông thường, dễ gõ và dễ phân biệt với nhau. Họ cũng công bố các danh sách ngắn, gồm 1.296 từ (6⁴, bốn con xúc xắc, 10,3 bit mỗi từ): một danh sách gồm những từ ngắn hơn và dễ nhớ hơn, một danh sách khác được thiết kế sao cho mỗi từ phân biệt với các từ còn lại ngay từ những chữ cái đầu và có thể tự động hoàn thành. Đổi lại, mỗi lần gieo đáng giá ít hơn và phải gieo nhiều lần hơn.
Điều thanh lịch ở đây là số học không thay đổi theo khẩu vị của bất kỳ ai. Số mục mới là thứ quyết định. Bạn có thể tự làm danh sách của mình bằng tiếng Mường, tiếng Ê Đê hay tiếng Klingon: miễn là nó có 7.776 mục khác nhau và bạn chọn bằng xúc xắc, mỗi từ vẫn đáng giá 12,9 bit. Thứ duy nhất bạn đang quyết định khi đổi danh sách là kết quả có dễ chịu với bạn tới đâu, chứ không phải nó an toàn tới đâu.
Ba cách làm hỏng chuyện
Diceware hỏng theo ba kiểu, và cả ba đều là cùng một lỗi: con người lại thò tay vào.
- Gieo lại vì “từ này tôi không thích”. Nếu bạn loại bỏ kết quả thì bạn không còn dùng xúc xắc nữa: bạn đang dùng ý thích của mình với một con xúc xắc làm đạo cụ. Ra gì thì lấy nấy.
- Sắp xếp lại các từ cho nghe xuôi tai như một câu. Thứ tự cũng là một phần của lần gieo.
- “Nâng cấp” nó bằng một dấu
!ở cuối và một chữ hoa ở đầu. Chuyện đó chẳng thêm được gì trước một kẻ tấn công vốn biết thừa rằng người ta hay đặt!ở cuối và chữ hoa ở đầu. Nếu buộc phải tuân thủ một chính sách ngớ ngẩn thì cứ làm, nhưng đừng tưởng bạn vừa kiếm thêm được chút an toàn nào: bạn kiếm được nó bằng cách gieo thêm một lần nữa.
Và một lời nhắc mà Reinhold đã đưa ra từ đầu: xúc xắc thường là quá đủ dùng — loại dùng trong sòng bạc chính xác hơn, nhưng không cần thiết — nên gieo trên mặt phẳng nhẵn, và kết quả ra sao thì ghi đúng như vậy.
Tóm lại
Một cụm sáu từ gieo bằng xúc xắc thì gõ lâu hơn P@ssw0rd, dễ nhớ hơn
Tr0ub4dor&3 và đắt hơn nhiều bậc độ lớn để phá so với cả hai. Không phải vì nó
rắc rối hơn — nó chẳng rắc rối gì, chỉ là sáu từ bình thường — mà vì nó là thứ
duy nhất trong mật khẩu của bạn mà bạn không hề quyết định.
Đó là toàn bộ câu chuyện tiếu lâm của Diceware: mật khẩu tốt nhất bạn có thể có là mật khẩu mà ý kiến của bạn không được tham gia.
Nguồn: Arnold G. Reinhold, “The Diceware Passphrase Home Page” và danh sách 7.776 từ của ông (1995) · Electronic Frontier Foundation, các danh sách từ dành cho cụm mật khẩu gieo xúc xắc (2016) · phần số học có thể tự kiểm chứng: 6⁵ = 7.776 và log₂(7.776) ≈ 12,92 bit mỗi từ.