Điểm:1

Có an toàn để lưu trữ hàm băm của văn bản thuần túy không?

lá cờ us

Khi mã hóa dữ liệu, tôi muốn xác minh rằng khóa chính xác đã được nhập mà không băm nó. Có an toàn để giải mã bản mã và so sánh hàm băm của nó với bản được lưu trữ hay văn bản gốc (có thể rất dài) có thể được đọc từ hàm băm không?

kelalaka avatar
lá cờ in
Chào mừng bạn đến với Cryptography.SE Mật khẩu không được băm bằng các hàm băm chống va chạm tiêu chuẩn như SHA256 hoặc SHA3-512 mà chúng được băm bằng các thuật toán băm mật khẩu đặc biệt như PBKDF2, Scrypt hoặc Argon2 tốt hơn. Mặc dù có [trình quản lý mật khẩu mã nguồn mở](https://www.wizcase.com/blog/most-secure-open-source-password-managers/) thực sự tốt như Keepass, nhưng câu hỏi này thiếu nghiên cứu cơ bản về một nhà phát triển trình quản lý mật khẩu phải làm; **tìm kiếm những gì người khác làm**!
kelalaka avatar
lá cờ in
Ngoài ra, mật khẩu không được lưu trữ ở dạng băm trong trình quản lý mật khẩu, chúng được lưu trữ dưới dạng mã hóa để trình quản lý mật khẩu có thể giải mã chúng khi cần. băm là quá trình một chiều phá hủy dữ liệu gốc. Băm != mã hóa. bạn cần tạo khóa mã hóa từ mật khẩu của người dùng để khóa này có thể giải mã khóa thực mã hóa mật khẩu.
kelalaka avatar
lá cờ in
Làm thế nào để người dùng của bạn nhập khóa vào chương trình của bạn? Làm thế nào để họ ghi nhớ nó? Họ cần nhập mật khẩu, thường được tạo bằng mật khẩu tốt như dicewire.
Luqus avatar
lá cờ us
Các mật khẩu được lưu trữ mã hóa. Nhưng khi tôi sử dụng chức năng mật mã của mình, tôi không thể biết liệu nó có được giải mã thành đúng văn bản hay không. Nếu tôi gọi hàm với **khóa chính** sai, nó vẫn sẽ đưa ra kết quả. Tôi đang băm bản rõ để có thể biết liệu đã nhập đúng khóa hay chưa. Sau đó, tôi sẽ hiển thị giao diện người dùng với bản rõ, nếu không, tôi sẽ nói với người dùng rằng anh ta đã nhập sai khóa chính.
Luqus avatar
lá cờ us
Tôi không cố sao chép trình quản lý mật khẩu tốt nhất, tôi muốn tìm một cách không có lỗi bảo mật lớn cho mình. Nhân tiện, tôi không băm mật khẩu, mà là văn bản gốc như đã nêu trong câu hỏi của tôi.
Điểm:1
lá cờ in

Một bản rõ dài không có nghĩa là nó không thể đoán được. Nếu mã băm của văn bản gốc có sẵn cho kẻ tấn công thì kẻ tấn công đó có thể xác minh một cách hiệu quả bất kỳ phỏng đoán nào mà anh ta có thể có đối với văn bản thuần túy.

Trong nhiều tình huống trong thế giới thực, chúng tôi mã hóa văn bản thuần túy với entropy hạn chế, văn bản có thể lớn nhưng vẫn có ít thông tin mà kẻ tấn công không biết. Và với một hàm băm hiệu quả đơn giản, thậm chí thử hàng triệu lần đoán cho bản rõ có thể rất thực tế.

Có nhiều cách tốt hơn để xác thực mã hóa. Chúng tôi có thể mã hóa sau đó mac, chúng tôi có thể sử dụng các phương pháp kết hợp như GCM. Cả hai đều tốt hơn một hàm băm văn bản thuần túy.

Điểm:1
lá cờ in

Như những người khác đã chỉ ra, đây sẽ không phải là một kế hoạch phù hợp với thông lệ tốt nhất. Xem xét rằng bạn đang hỏi câu hỏi này, tôi thực sự khuyên bạn chỉ nên sử dụng mã của mình để thực hành.

Về nguyên tắc, bạn có thể băm dữ liệu và sau đó mã hóa nó. Vì hàm băm vẫn được giữ bí mật cho đến khi tìm thấy khóa, điều này được xem xét khi bảo vệ hàm băm và thông điệp văn bản gốc. Tuy nhiên, xin lưu ý rằng hash-then-encrypt có thể không an toàn; chúng tôi nói chung thích các phương pháp như mã hóa-rồi-MAC. Cá nhân tôi sẽ thử và sử dụng Hàm dẫn xuất khóa dựa trên mật khẩu và chế độ mã hóa được xác thực, chẳng hạn như EAX/encrypt-then-HMAC (cũng quan tâm đến IV).

Bạn cũng nên lưu trữ một số giá trị kiểm tra khóa (ví dụ: MAC trên một số dữ liệu đã biết) bên cạnh nó. Bằng cách đó, bạn không gặp phải sự cố cần thử và giải mã tất cả cơ sở dữ liệu của mình trước khi có thể kiểm tra xem mật khẩu của mình có đúng không. Lưu ý rằng kẻ thù có thể xác thực nếu mật khẩu chính là chính xác bằng cách giải mã một vài khối dữ liệu, vì vậy điều này sẽ không mang lại nhiều lợi thế nếu có bất kỳ lợi thế nào cho kẻ tấn công tiềm năng, trong khi thêm vào trải nghiệm người dùng.

Luqus avatar
lá cờ us
Sau đó, tôi không cố gắng băm dữ liệu của mình và mã hóa nó, tôi đang cố gắng biết liệu việc giải mã có đúng không. Đó là lý do duy nhất tôi tính toán hàm băm; để biết liệu người dùng có nhập đúng khóa chính hay không.
Luqus avatar
lá cờ us
Tôi đã thêm một hình ảnh vào câu hỏi của mình để hiển thị những gì tôi muốn đạt được.
Maarten Bodewes avatar
lá cờ in
Đó vẫn là kế hoạch mà tôi đang mô tả. Nếu bạn không muốn xác minh tính toàn vẹn của dữ liệu thì bạn không cần phải băm nó ngay từ đầu. Thành thật mà nói, tôi muốn biết liệu có ai đó đã làm hỏng cơ sở dữ liệu hay không.

Đă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.