Điểm:3

Không phải mật khẩu do con người tạo ra được sử dụng với các chức năng phái sinh chính làm giảm tính bảo mật của mã hóa đối xứng sao?

lá cờ et

Kích thước khóa cho AES được chọn là 256 vì đó được coi là kích thước khóa tối thiểu có thể bảo vệ chống lại cuộc tấn công vũ phu - tức là $2^{256}$ cố gắng.

Tuy nhiên, trong thực tế, đối với nhiều ứng dụng, mật khẩu do người dùng chọn được sử dụng để lấy khóa kích thước 256 bằng KDF. Giả sử ứng dụng yêu cầu mật khẩu 8 ký tự - đó là mật khẩu 64 bit - vì vậy lực lượng vũ trang giảm xuống còn $2^{64}$ cố gắng. Và nó có thể còn giảm nhiều hơn vì một byte từ một mật khẩu thông thường có entropy nhỏ hơn nhiều so với một byte từ một khóa. Lực lượng vũ phu có thể được thử theo byte khôn ngoan hơn là khôn ngoan theo bit, do đó làm giảm lực lượng vũ phu xuống thậm chí còn thấp hơn $2^{64}$ cố gắng. Vì vậy, điều này có nghĩa là AES256 với mật khẩu thậm chí 32 ký tự sẽ yếu hơn AES256 với khóa được tạo ngẫu nhiên.

Vậy tại sao đây không phải là một mối quan tâm? Hay tôi đang thiếu một cái gì đó?

Sử dụng KDF chậm sẽ giảm thiểu một số mất bảo mật bằng cách sử dụng mật khẩu do con người chọn thay vì tạo AES-256 ngẫu nhiên - tuy nhiên có bất kỳ phân tích nào về điều này không?

fgrieu avatar
lá cờ ng
Đó là một mối quan tâm. Nhưng có vẻ như bạn đã bỏ sót vấn đề được giảm nhẹ ở một mức độ nào đó với các KDF đặc biệt, cố ý làm chậm mật khẩu, như [Argon2](https://en.wikipedia.org/wiki/Argon2) và trước đó là PBKDF2 lỗi thời. Bạn nên nghiên cứu tuyến phòng thủ này. Vẫn là một câu hỏi hay, đặc biệt nếu bạn nói thêm: các biện pháp giảm thiểu này có thể mang lại bao nhiêu bit bổ sung trên thực tế? Làm thế nào để tiến bộ kỹ thuật ảnh hưởng đến bảo mật của mật mã dựa trên mật khẩu, cho bí mật ngắn hạn và dài hạn?
lá cờ et
@fgrieu - Tôi biết về các KDF chậm luôn được sử dụng (hay đúng hơn là luôn được sử dụng). Tuy nhiên, có bất kỳ phân tích nào về mức độ giảm thiểu mà chúng thực sự cung cấp không - tức là so sánh cuộc tấn công vũ phu trên khóa 256 bit được tạo ngẫu nhiên với khóa 256 được tạo từ mật khẩu n ký tự bằng KDF chậm. Điều này sẽ đưa ra hướng dẫn về việc nên chọn bao nhiêu mật khẩu ký tự và cũng như bao nhiêu vòng mà KDF sẽ mang lại bảo mật chống lại một cuộc tấn công vũ phu trở lại giống như khóa 256 bit
fgrieu avatar
lá cờ ng
Phần trên làm rõ [băm mật khẩu](https://crypto.stackexchange.com/tags/password-hashing/info) có liên quan đến câu hỏi. Tôi đã thêm thẻ này và đề xuất 1) xem lại câu hỏi khác với [_Mật khẩu entropy thấp hơn nhiều so với entropy của các khóa mã hóa. Tại sao điều này được chấp nhận?_](https://crypto.stackexchange.com/q/36851) và những người khác được gắn thẻ [tag:password-hashing]. 2) Sau đó, thay đổi ít nhất đoạn cuối cùng để làm cho nội dung được hỏi chính xác hơn (như bằng cách kết hợp một số nhận xét ở trên) hoặc xóa câu hỏi nếu trùng lặp.
Điểm:5
lá cờ in

Kích thước khóa cho AES được chọn là 256 vì đó được coi là kích thước khóa tối thiểu có thể bảo vệ chống lại cuộc tấn công vũ phu - tức là $2^{256}$ cố gắng.

Điều đó không đúng, $2^{128}$ hoặc - chính xác hơn - kích thước khóa 128 bit cho $2^{127}$ cố gắng ở mức trung bình được coi là nhiều, chắc chắn chống lại bất kỳ cuộc tấn công thực tế nào.

Tuy nhiên, trong thực tế, đối với nhiều ứng dụng, mật khẩu do người dùng chọn được sử dụng để lấy khóa kích thước 256 bằng KDF. Giả sử ứng dụng yêu cầu mật khẩu 8 ký tự - đó là mật khẩu 64 bit - vì vậy lực lượng vũ trang giảm xuống còn $2^{64}$ cố gắng. Và nó có thể còn giảm nhiều hơn vì một byte từ một mật khẩu thông thường có entropy nhỏ hơn nhiều so với một byte từ một khóa.

64 bit là một hy vọng hão huyền, mật khẩu do con người tạo ra trung bình đến khoảng 40 bit. Tất nhiên, ngay cả những mật khẩu 8 ký tự được lựa chọn kỹ lưỡng cũng sẽ thường sử dụng một tập hợp con của ASCII, mà bản thân nó là một tập hợp con của tất cả các giá trị byte có thể. Với tất cả 24 giá trị đặc biệt thường được sử dụng, tôi nhận được tới 86 giá trị trong số 256, tức là $log_2(86) \khoảng 6,43$ bit entropy trên mỗi byte, hoặc $\khoảng 51,41$ bit cho 8 ký tự như vậy. Nhưng đó chỉ là khi phân phối hoàn hảo được giả định và con người rất tệ trong việc tạo ra các giá trị ngẫu nhiên.

Lực lượng vũ phu có thể được thử theo byte khôn ngoan hơn là khôn ngoan theo bit, do đó làm giảm lực lượng vũ phu xuống thậm chí còn thấp hơn $2^{64}$ cố gắng.

Thông thường, bạn sẽ cố gắng chống lại các mật khẩu đã biết trước đó từ các cơ sở dữ liệu bị hỏng hoặc các cuộc tấn công từ điển. Bạn sẽ không cố gắng dù muốn dù không.Các cuộc tấn công khác có thể xảy ra nếu quá trình triển khai bị hỏng, chẳng hạn như nếu không có muối nào được sử dụng trong dẫn xuất khóa.

Vì vậy, điều này có nghĩa là AES256 với mật khẩu thậm chí 32 ký tự sẽ yếu hơn AES256 với khóa được tạo ngẫu nhiên.

Đúng. Mặt sau của khăn ăn sẽ cho bạn thấy rằng bạn đang thiếu $16 \times 1,5 = 24$ bit tại ít nhất.

Vậy tại sao đây không phải là một mối quan tâm? Hay tôi đang thiếu một cái gì đó?

Nó là một to lớn mối quan tâm, nói chung bạn sẽ cố gắng và tránh sử dụng mật khẩu. Nếu không, bạn sẽ sử dụng Hàm dẫn xuất khóa dựa trên mật khẩu áp dụng kéo dài khóa, chẳng hạn như một trong các biến thể Argon2 (PBKDF2, scrypt và bcrypt có thể được biết đến nhiều hơn). Nhưng những điều này chỉ cung cấp một sự bảo vệ nhỏ cho mỗi dẫn xuất khóa. Đó là khoảng 20 bit cho một triệu lần lặp lại (như $log_2(1.000.000)$ là gần 20). Nó chắc chắn sẽ không nâng bạn lên $2^{128}$ cho mật khẩu chung; $40 + 20 = 60$ bit, vì vậy việc phá vỡ mã hóa sẽ rất tốn kém, nhưng không khả thi.

Khi không thể tránh mật khẩu, bạn nên sử dụng trình quản lý mật khẩu, ví dụ: sử dụng. Mật khẩu gồm 12 ký tự được tạo ngẫu nhiên (có thể yêu cầu phải có một số ký hiệu, phòng trường hợp bạn không may mắn). Điều đó sẽ không giúp bạn đạt được gần 128 bit, nhưng nó sẽ đủ để ngăn chặn bất kỳ ai cố gắng sử dụng vũ lực hoặc các kỹ thuật tương tự. Tất nhiên, cũng có thể sử dụng 32 ký tự hex ngẫu nhiên và chỉ cần lưu trữ một khóa, giả sử rằng không có giới hạn về kích thước mật khẩu.

Một thủ thuật đơn giản cho thấy bạn có thể sử dụng $$l_p = \bigg\lceil {l_k - \log_2(i) \over log_2(N)} \bigg\rceil$$ như một cách để biết số lượng ký tự cho mỗi mật khẩu, vì vậy giả sử chúng tôi sử dụng các giá trị ở trên: $$\bigg\lceil {128 - \log_2(1.000.000) \over \log_2(86)} \bigg\rceil = \bigg\lceil {{128 - 20} \over 6,43} \bigg\rceil = 17$$ mật khẩu ký tự mở rộng để đạt 128 bit bằng cách sử dụng KDF với 1.000.000 lần lặp lại, giả sử nó hoàn toàn ngẫu nhiên.

Một cách để tránh điều này là sử dụng mã hóa khóa chung và giữ an toàn cho khóa riêng.Một bước để bảo vệ khóa riêng được sử dụng để giải mã có thể là mã hóa dựa trên mật khẩu, nhưng bạn có thể bắt đầu bằng cách giữ nó trên thẻ nhớ chẳng hạn để kẻ tấn công không có quyền truy cập vào nó khi không cần thiết. Tất nhiên có nhiều cách khác để lưu trữ khóa an toàn.

Lưu ý rằng đây không phải là vấn đề khi có thể thực hiện các biện pháp đối phó. Ví dụ. mã PIN thường chỉ có 4-6 chữ số, nhưng thực tế là bạn chỉ có thể thử ba lần để bảo vệ mã đó trước các cuộc tấn công (mã PUK thường lớn hơn nhiều, vì chúng thường không chặn, vì điều đó có thể dẫn đến tấn công từ chối dịch vụ tấn công). Tuy nhiên, ví dụ: mã hóa tập tin tấn công ngoại tuyến nói chung có thể được giả định.

Điểm:2
lá cờ si

Câu trả lời của Maarten là tốt, nhưng không đề cập đến việc có thể có các cụm mật khẩu có thể đánh máy dễ nhớ của con người với> 128 bit entropy khá dễ dàng. Các xúc xắc hệ thống sử dụng RNG tốt (xúc xắc chất lượng cao hoặc CSPRNG) để chọn "ký tự" từ "bảng chữ cái" khổng lồ: thay vì sử dụng các chữ cái tiếng Anh đơn lẻ (hoặc ký tự ASCII), "ký tự" là toàn bộ từ và "bảng chữ cái" là danh sách gồm 7776 từ (hoặc 1296 từ cho danh sách "ngắn" của chúng).

Với 7776 từ bạn nhận được 12,9 bit entropy mỗi từ, với 1296 từ bạn nhận được 10,3 bit entropy mỗi từ. Vì vậy, cụm từ 10 từ sử dụng từ điển 7776 từ như "ChompBuggy OkayPlatonicGrafted.KiltDecreeRecessOpacityUnedited" có 129 bit entropy và là một lựa chọn tốt để bảo mật cơ sở dữ liệu của trình quản lý mật khẩu. Các "." ở giữa chỉ là một biểu tượng dễ nhớ dễ gõ để giúp chia cụm mật khẩu thành hai cụm mật khẩu 5 từ, giúp việc ghi nhớ toàn bộ dễ dàng hơn.

Tôi sử dụng một số cụm từ như vậy. Một cho mỗi lần đăng nhập máy tính của tôi và một cho trình quản lý mật khẩu của tôi. Tôi không muốn ghi nhớ quá nhiều trong số chúng (đó vẫn là một nỗ lực kha khá), nhưng có đủ để giữ thông tin đăng nhập và trình quản lý mật khẩu an toàn là được.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.