Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA
Tại sao bạn không được lưu trữ mật khẩu dưới dạng băm SHA-256 đơn giản
· Tại sao nó quan trọng
mật khẩu bảo vệ mật mã
SHA-256 được thiết kế để chạy nhanh, đó chính xác là điều bạn không muốn đối với mật khẩu. Bài đăng này giải thích tại sao tốc độ lại là vấn đề và chức năng băm mật khẩu có chức năng gì khác biệt.
SHA-256 không phải là nơi lưu trữ mật khẩu; nó được băm nhanh. Plain SHA-256 mang lại cho kẻ tấn công tốc độ đoán như nhau, khiến thuật toán này không phù hợp mặc dù đây là thuật toán mã hóa mạnh.
Nhà phát triển triển khai hệ thống đăng nhập và lưu trữ mật khẩu dưới dạng hàm băm SHA-256. Thuật toán có mật mã mạnh và ứng dụng không áp dụng muối, giữ cho mã đơn giản. Khi người dùng đăng nhập, ứng dụng sẽ băm nội dung gửi và so sánh nó với giá trị được lưu trữ. Thiết kế này thanh lịch ở sự đơn giản và hoàn toàn không phù hợp để lưu trữ mật khẩu. Đây không phải là mối lo ngại về mặt lý thuyết; đó là lỗi nghiêm trọng phổ biến nhất trong các hệ thống xác thực. Thiết kế có vẻ có thể phòng thủ được cho đến khi bạn cân nhắc xem kẻ tấn công có thể làm gì với dữ liệu bị đánh cắp.
Lỗ hổng không phải là SHA-256 yếu. SHA-256 là một thuật toán mã hóa mạnh mẽ, được cộng đồng bảo mật tin cậy và được sử dụng trong toàn ngành để kiểm tra tính toàn vẹn và giải quyết nội dung. Lỗ hổng là SHA-256 nhanh và nhanh hoàn toàn trái ngược với những gì mật khẩu cần. Băm mật khẩu không chỉ là bất kỳ mật mã nguyên thủy nào; nó là một loại công cụ cụ thể được thiết kế cho một vấn đề cụ thể: phòng chống việc đoán mò. Tốc độ là một tính năng trong tổng kiểm tra; trong mật khẩu, đó là một thảm họa.
Nhanh là ưu điểm của SHA-256 — kiểm tra tính toàn vẹn cần tốc độ và kẻ tấn công có tốc độ tương tự để đoán
Khi cơ sở dữ liệu về hàm băm mật khẩu SHA-256 bị xâm phạm, kẻ tấn công không cần đảo ngược hàm băm. Kẻ tấn công xây dựng một từ điển: các mật khẩu phổ biến như "mật khẩu", "123456", "xin chào" và hàng triệu mật khẩu khác. Mỗi ứng cử viên được băm bằng SHA-256—một thao tác tính toán đơn giản—và được kiểm tra dựa trên cơ sở dữ liệu bị đánh cắp. Kẻ tấn công có thể tính toán các giá trị SHA-256 ứng viên với cùng một giá trị gốc nhanh được sử dụng bởi dịch vụ đăng nhập, sau đó so sánh từng kết quả ngoại tuyến mà không có giới hạn tốc độ. Tỷ lệ chính xác phụ thuộc vào phần cứng và cách triển khai, vì vậy bài viết này cố tình không đưa ra tuyên bố về số lần đoán mỗi giây hoặc thời gian vi phạm.
Tốc độ là toàn bộ vấn đề. SHA-256 có nghĩa là nhanh. Đó là mục đích thiết kế của nó. Nó cho phép bạn xác minh tổng kiểm tra tải xuống, tính toán địa chỉ nội dung và xây dựng cây Merkle mà không phải chờ đợi. Trong những ứng dụng đó, tốc độ là một tính năng. Đối với mật khẩu, tốc độ là một thảm họa. Khi cơ sở dữ liệu mật khẩu bị đánh cắp và băm bằng SHA-256, kẻ tấn công có tốc độ đoán tương tự như tốc độ xác minh của máy chủ hợp pháp. Sự đối xứng đó chính là nguyên nhân phá vỡ tính bảo mật của mật khẩu. Cả máy chủ hợp pháp và kẻ tấn công đều nhận được lợi ích từ việc phân tích mục đích chung nhanh chóng; chỉ kẻ tấn công mới có thể lặp lại ngoại tuyến mà không cần kiểm soát đăng nhập của ứng dụng.
Từ điển và bảng cầu vồng - tính toán trước đối với hàm băm không có muối và muối thay đổi như thế nào
Đây là nơi từ điển được tính toán trước trở nên thiết thực. Kẻ tấn công có thể dành một ngày và tính toán hàm băm SHA-256 cho hàng nghìn mật khẩu phổ biến nhất, cho các mẫu phổ biến như Name1990 hoặc cho toàn bộ từ điển bằng nhiều ngôn ngữ. Bảng kết quả được gọi là bảng cầu vồng. Việc tra cứu hàm băm SHA-256 bị đánh cắp dựa trên bảng được tính toán trước là ngay lập tức. Ngay cả khi không có bảng được tính toán trước, việc tính toán một tỷ lần đoán cũng không đáng kể với hàm băm được tăng tốc GPU. Chi phí tính toán của kẻ tấn công thấp đến mức ngay cả những mật khẩu yếu cũng bị loại bỏ trong vài phút.
Công cụ tính hàm băm ToolAcre SHA thể hiện trực tiếp tốc độ này. Dán một văn bản ngắn, nhấp vào nút SHA-256 và nhận được kết quả ngay lập tức. Kết quả tức thì đó—thuộc tính mà bạn ngưỡng mộ trong máy tính băm—là thuộc tính chính xác khiến cho mật khẩu SHA-256 trở nên không thể bảo vệ được. Kẻ tấn công nhận được kết quả tức thì như nhau cho mỗi lần đoán. Đối với tổng kiểm tra và kiểm tra tính toàn vẹn, tốc độ đó là hoàn hảo. Đối với mật khẩu, nó gây nguy hiểm cho tính bảo mật.
Những chức năng băm mật khẩu nào được bổ sung — hệ số công việc, độ cứng bộ nhớ và lượng muối trên mỗi người dùng trong bcrypt, scrypt, Argon2 và PBKDF2
Muối là một giá trị ngẫu nhiên được thêm vào mật khẩu trước khi băm, do đó muối của mỗi người dùng là khác nhau. Ngay cả khi hai người dùng có cùng mật khẩu, họ sẽ băm thành các giá trị khác nhau. Điều này phá vỡ các bảng cầu vồng được tính toán trước; kẻ tấn công phải tính toán bảng độc lập cho từng muối. Với muối được tạo độc lập cho mỗi người dùng, một bảng được tính toán trước không còn áp dụng không thay đổi cho mọi tài khoản. Tuy nhiên, một muối chỉ đẩy kẻ tấn công tính toán bảng trong cuộc tấn công thay vì trước đó. Nếu quá trình băm vẫn nhanh, kẻ tấn công chỉ cần tính song song nhiều bảng hơn và tiếp tục đoán từng tài khoản với tốc độ nguyên thủy nhanh. Muối là cần nhưng chưa đủ. Nó ngăn cản việc sử dụng lại từ điển của các nạn nhân, nhưng nó không làm chậm hoạt động cốt lõi của kẻ tấn công: đoán. Tốc độ băm vẫn là tốc độ đoán.
Ví dụ đã hoạt động — SHA-256 của mật khẩu phổ biến được nhận dạng nhanh như thế nào so với hàm băm mật khẩu được điều chỉnh, được mô tả một cách định tính
Hàm băm mật khẩu có cách tiếp cận khác. Bcrypt, scrypt, Argon2id và PBKDF2 được xây dựng nhằm mục đích xác minh mật khẩu. Tất cả đều bao gồm một yếu tố công việc: một tham số làm cho việc băm trở nên đắt đỏ một cách có chủ ý. Argon2 là hiện đại nhất; nó điều chỉnh cả CPU thời gian và mức tiêu thụ bộ nhớ. Bcrypt sử dụng hệ số chi phí có thể điều chỉnh để tăng gấp đôi công việc sau mỗi lần tăng. Tất cả đều bao gồm việc tạo muối tích hợp. Những công cụ này được thiết kế dành cho mô hình kẻ tấn công. Yếu tố công việc là rất quan trọng.
Chức năng băm mật khẩu làm cho chi phí được định cấu hình trở thành một phần của mỗi lần xác minh. Kẻ tấn công muốn kiểm tra ứng viên cũng phải trả chi phí đó cho mỗi lần đoán. Không thể sao chép thời gian cụ thể một cách an toàn giữa các lần triển khai, đó là lý do tại sao phần về tham số yêu cầu đo điểm chuẩn trên loại phần cứng sản xuất thực tế. Sự bất đối xứng đó chính là nguyên nhân khiến việc băm mật khẩu hoạt động hiệu quả. Yếu tố công việc chuyển từ “lợi thế tấn công” sang “lợi thế phòng thủ”.
Di chuyển bảng SHA-256 cũ — gói các bảng băm hiện có và băm lại vào lần đăng nhập tiếp theo
Việc so sánh được thực hiện vẫn mang tính chất lượng vì kho lưu trữ này không chứa điểm chuẩn cho một chức năng mật khẩu hoặc kẻ tấn công cụ thể. Một mật khẩu phổ biến luôn tạo ra cùng một SHA-256 đơn giản ngay lập tức, do đó, một mục từ điển hiện có có thể xác định nó bằng sự bình đẳng. Bản ghi mật khẩu được điều chỉnh bao gồm các tham số muối và chi phí riêng và yêu cầu công việc được định cấu hình cho từng ứng viên.
Sự tương phản đó tạo ra lỗi thiết kế mà không có những dự đoán đầy hứa hẹn mỗi giây. Phần cứng, việc triển khai và các tham số được chọn sẽ xác định thời gian. Kết luận có thể bảo vệ được là bất biến: một bản tóm tắt có mục đích chung không có hệ số công việc hoặc chi phí bộ nhớ có thể điều chỉnh được, trong khi chức năng băm mật khẩu được chọn cụ thể để áp đặt các chi phí đó.
Điều này không bao gồm những gì - việc chọn tham số cho hàm băm mật khẩu cụ thể, tùy thuộc vào phần cứng và mô hình mối đe dọa của bạn
Việc lựa chọn tham số được cố ý nằm ngoài máy tính này và bài viết này. Cài đặt chính xác phụ thuộc vào ngân sách độ trễ của máy chủ, bộ nhớ khả dụng, tính đồng thời và mô hình mối đe dọa hiện tại, do đó, việc sao chép một giá trị cố định từ một hoạt động triển khai không liên quan sẽ biến việc kiểm soát an toàn thành truyền thống. Đánh giá chức năng mật khẩu đã chọn trên phần cứng cấp sản xuất và xem lại chức năng đó khi dung lượng thay đổi.
ToolAcre không thể thực hiện bài tập đó: bảng điều khiển của nó chấp nhận văn bản và mã định danh SHA, sau đó trả về một bản tóm tắt đơn giản. Nó không hiển thị trường muối, cài đặt bộ nhớ, kiểm soát lặp lại hoặc định dạng bản ghi mật khẩu. Sự vắng mặt đó là một tín hiệu ranh giới hữu ích, không phải là một tính năng bị thiếu để khắc phục bằng cách liên tục băm mật khẩu vào hộp văn bản.
Bài học rút ra: kết quả tức thì là cảnh báo — công cụ tính băm ToolAcre SHA cho biết tốc độ của SHA-256 là bao nhiêu, đó là lý do tại sao công cụ này không được giữ mật khẩu của người dùng của bạn
Hệ thống cũ đã lưu trữ mật khẩu dưới dạng SHA-256 đơn giản có thể được di chuyển về phía trước mà không yêu cầu tất cả người dùng đặt lại ngay lập tức. Kỹ thuật này là "bọc" hàm băm cũ: lấy giá trị SHA-256 và băm lại bằng Argon2. Trong lần đăng nhập tiếp theo của người dùng, hệ thống sẽ kiểm tra xem SHA-256 cũ có khớp hay không; nếu vậy, nó sẽ tính toán Argon2 dựa trên kết quả đó và lưu trữ phiên bản được gói. Lần tiếp theo người dùng đăng nhập, hệ thống sẽ xác minh trực tiếp với Argon2. Quá trình di chuyển diễn ra minh bạch trong luồng đăng nhập thông thường.
Phương pháp bao bọc này đảm bảo rằng các mật khẩu cũ đã bị xâm phạm hiện được bảo vệ bởi hệ số công việc. Kẻ tấn công với cơ sở dữ liệu cũ gồm các hàm băm SHA-256 không thể đơn giản bẻ khóa chúng nữa; họ phải tấn công phiên bản được bao bọc, bao gồm cả chi phí của Argon2. Quá trình di chuyển diễn ra một cách minh bạch đối với người dùng trong quá trình đăng nhập thông thường của họ. Mỗi lần đăng nhập tạo cơ hội tăng cường hàm băm mà không làm gián đoạn trải nghiệm người dùng. Việc chọn hệ số công việc chính xác phụ thuộc vào phần cứng và mô hình mối đe dọa của bạn. Giá trị mặc định của Argon2 là hợp lý: 19 lần lặp, 512 MB bộ nhớ và 1 tính song song cho các dịch vụ web.