Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA
Băm không phải là mã hóa: Tại sao hàm băm SHA-256 không thể được giải mã
· Tại sao nó quan trọng
mật mã bảo vệ mã hóa
Không có khóa và không có nghịch đảo: hàm băm là hàm một chiều. Bài đăng này giải thích sự khác biệt so với mã hóa, tại sao các trang web tra cứu hàm băm dường như đảo ngược hàm băm và điều đó có ý nghĩa gì đối với việc băm dữ liệu cá nhân.
Vui lòng giải mã các giá trị băm này - tấm vé tiết lộ sự hiểu lầm về băm là gì
Một phiếu hỗ trợ được gửi đến yêu cầu giải mã một số hàm băm SHA-256. Nhà phát triển đọc nó nghi ngờ có sự hiểu lầm về băm là gì. Sự nhầm lẫn này là có lý—cả băm và mã hóa đều liên quan đến các thuật toán mã hóa, cả hai đều tạo ra kết quả trông có vẻ lộn xộn và cả hai đều liên quan đến bảo mật. Nhưng về cơ bản chúng là những công cụ khác nhau. Mã hóa có thể đảo ngược; băm thì không. Sự khác biệt này đủ quan trọng đến mức khiến chúng khó hiểu và đã phá vỡ các hệ thống bảo mật thực sự. Tấm vé thể hiện một lỗ hổng chung trong hiểu biết ảnh hưởng đến thiết kế hệ thống.
Hàm băm là hàm một chiều. Bạn có thể băm một đầu vào để lấy thông báo, nhưng không có khóa và không có thao tác nghịch đảo nào để khôi phục đầu vào từ thông báo. Đây không phải là hạn chế hay lỗi; nó là thuộc tính xác định của hàm băm. Công cụ tính hàm băm ToolAcre SHA tạo ra bản tóm tắt văn bản bạn dán vào và không có nút "giải mã" vì không có nút nào có thể tồn tại. Hoạt động này không thể đảo ngược được bằng toán học chứ không phải bằng sự lựa chọn. Việc không có chức năng đảo ngược không phải là tính năng mà bạn có thể yêu cầu.
Mã hóa có khóa và nghịch đảo; băm không có - sự khác biệt về mặt định nghĩa theo thuật ngữ đơn giản
Mã hóa hoạt động khác nhau. Thuật toán mã hóa lấy bản rõ và khóa rồi tạo ra bản mã. Bản mã bị xáo trộn và không thể đọc được nếu không có chìa khóa. Điều quan trọng là cùng một khóa có thể giải mã bản mã trở lại bản rõ. Mã hóa có thể đảo ngược theo thiết kế. Bạn mã hóa để giữ bí mật dữ liệu; bạn giải mã để đọc lại. Tính bảo mật của mã hóa phụ thuộc vào khóa bí mật. Chỉ người giữ chìa khóa mới có thể đảo ngược quá trình chuyển đổi.
Băm không có chìa khóa và không có sự đảo ngược. Bạn băm thứ gì đó để tạo ra một bản tóm tắt có độ dài cố định. Cùng một đầu vào luôn tạo ra cùng một thông báo. Một đầu vào khác tạo ra một bản tóm tắt khác—đó là đặc tính chống va chạm. Nhưng bạn không thể lấy thông tin tóm tắt và tạo ra đầu vào. Chức năng này chỉ đi một chiều. Nếu bạn cần mã hóa dữ liệu để có thể giải mã nó sau này thì băm là công cụ sai lầm. Nếu bạn cần dấu vân tay của dữ liệu để xác minh hoặc đánh địa chỉ nội dung, thì băm là chính xác. Việc lựa chọn công cụ phù hợp đòi hỏi phải hiểu được sự khác biệt.
Cách thức hoạt động của các trang tra cứu băm — từ điển được tính toán trước của các đầu vào phổ biến, không phải giải mã
Sự khác biệt này quan trọng đến mức nó làm nền tảng cho tính bảo mật của việc xác minh mật khẩu. Một máy chủ không lưu trữ mật khẩu. Nó lưu trữ kết quả của việc băm mật khẩu. Khi người dùng đăng nhập, máy chủ sẽ băm nội dung gửi của họ và so sánh nó với giá trị được lưu trữ. Nếu máy chủ bị xâm phạm và cơ sở dữ liệu của nó bị đánh cắp, kẻ tấn công sẽ không lấy được mật khẩu mà chỉ lấy được các mã băm. Bản chất một chiều của hàm băm có nghĩa là kẻ tấn công không thể thiết kế ngược mật khẩu từ hàm băm. Tính bảo mật của hệ thống phụ thuộc vào thuộc tính này.
Thay vào đó, nếu máy chủ sử dụng mã hóa—nếu nó mã hóa mật khẩu và có thể giải mã chúng—thì một hành vi xâm phạm nhằm đánh cắp khóa sẽ ngay lập tức làm lộ mọi mật khẩu. Băm được chọn đặc biệt vì nó không thể đảo ngược. Đây là lý do tại sao hệ thống mật khẩu sử dụng hàm băm chứ không phải mã hóa. Tính không thể đảo ngược không phải là một hạn chế; nó là toàn bộ mô hình bảo mật. Cơ sở dữ liệu mật khẩu được mã hóa về cơ bản yếu hơn cơ sở dữ liệu mật khẩu băm vì mã hóa có thể đảo ngược.
Đầu vào có entropy thấp là điểm yếu — tại sao việc băm địa chỉ email, số điện thoại hoặc rút gọn PIN lại mang lại ít sự bảo vệ
Các trang tra cứu hàm băm tồn tại nhằm tạo ảo giác về việc giải mã. Các trang web này lưu trữ các bảng được tính toán trước của các đầu vào chung và hàm băm của chúng. "Bảng cầu vồng" là những từ điển được chuẩn bị trước: một bảng có thể chứa hàm băm của hàng nghìn mật khẩu phổ biến nhất hoặc tất cả các tổ hợp chữ và số có độ dài nhất định hoặc toàn bộ danh sách từ trong nhiều ngôn ngữ. Người điều hành trang web đã thực hiện công việc băm và lưu trữ kết quả. Khi ai đó gửi hàm băm đến một trang tra cứu, trang đó sẽ không giải mã được bất cứ thứ gì. Nó chỉ đơn giản là tìm kiếm hàm băm trong bảng của nó. Nếu có hàm băm—nếu một số từ trong từ điển hoặc mẫu mật khẩu trùng khớp—bảng sẽ trả về dữ liệu đầu vào ban đầu. Đối với người không quen với kỹ thuật này, điều này trông giống như một phép giải mã kỳ diệu, nhưng nó chỉ là tra cứu cơ sở dữ liệu. Trang web không đảo ngược hàm băm; nó đang so sánh nó với các giá trị được tính toán trước.
Ví dụ hoạt động - băm một giá trị có thể đoán được và hiển thị cách từ điển sẽ khôi phục nó, so với giá trị ngẫu nhiên dài mà nó không thể
Đây là lý do tại sao đầu vào có entropy thấp dễ bị tổn thương. Nếu bạn băm một mật khẩu phổ biến như "mật khẩu" hoặc một giá trị có thể dự đoán được như địa chỉ email của ai đó thì rất có thể trang web tra cứu đã tính toán hàm băm đó và lưu trữ nó. Việc tra cứu trả về giá trị ban đầu ngay lập tức. Nếu bạn băm một chuỗi ngẫu nhiên có 256 ký tự, thì sẽ không có trang tra cứu nào trên trái đất có hàm băm cụ thể đó được tính toán trước. Trang tra cứu không trả về kết quả nào vì thông tin đầu vào không có trong từ điển của họ. Tính bảo mật của hàm băm phụ thuộc hoàn toàn vào entropy của đầu vào.
Công cụ tính hàm băm ToolAcre SHA thể hiện điều này một cách trực tiếp. Băm một từ phổ biến và kẻ tấn công quyết tâm có thể tra cứu từ đó nếu họ chạy dịch vụ từ điển của riêng mình. Băm một giá trị ngẫu nhiên dài và thậm chí một từ điển lớn cũng khó có thể chứa nó. Tính tất định của việc băm—các đầu vào giống hệt nhau cho ra các đầu ra giống hệt nhau—là điều khiến cho các cuộc tấn công từ điển có thể xảy ra. Đó cũng là điều làm cho hàm băm trở nên hữu ích cho việc xác minh. Thuộc tính tương tự cho phép tra cứu cũng cho phép xác minh.
Khi bạn thực sự muốn mã hóa - trường hợp dữ liệu phải xuất ra và hàm băm là công cụ sai
Khi bạn thực sự muốn mã hóa—khi bạn cần gửi dữ liệu bí mật và khôi phục dữ liệu đó sau—mật mã là công cụ phù hợp. AES là tiêu chuẩn hiện đại cho mã hóa đối xứng: một khóa được chia sẻ và mã hóa văn bản gốc cũng như giải mã văn bản mật mã. RSA hoặc mật mã đường cong elip được sử dụng để mã hóa bất đối xứng: khóa chung mã hóa và khóa riêng giải mã. Những công cụ này có thể đảo ngược theo thiết kế. Sự bảo mật đến từ tính bí mật của khóa chứ không phải từ tính không thể đảo ngược. Sai lầm là sử dụng hàm băm khi cần mã hóa. Nếu bạn băm số thẻ tín dụng có ý định xác minh nó sau, bạn không có cách nào để giải mã nó. Nếu bạn băm số nhận dạng cá nhân và sau đó cần khôi phục nó thì việc băm là một lựa chọn sai lầm. Đây là những tình huống cần mã hóa.
Một ví dụ hoạt động phân biệt rõ ràng hai cách sử dụng. Bạn có một danh sách ID người dùng phải được giữ bí mật với nhau và với nhân viên của bạn. Bạn mã hóa chúng bằng AES và lưu trữ kết quả. Sau này, khi bạn cần tra cứu một người dùng, bạn sẽ giải mã và đọc họ. Băm sẽ không hoạt động; sau khi được băm, ID sẽ bị mất vĩnh viễn. Ngược lại, bạn có mật khẩu người dùng. Bạn băm chúng và lưu trữ hàm băm. Khi người dùng đăng nhập, bạn băm nội dung gửi của họ và so sánh với giá trị được lưu trữ. Bạn không bao giờ cần phải tự khôi phục mật khẩu. Mã hóa sẽ sai; bạn không thể sử dụng mật khẩu văn bản gốc sau lần thiết lập đầu tiên.
Điều này không bao gồm những gì - thiết kế băm có khóa và muối, nâng cao tiêu chuẩn nhưng là một chủ đề riêng biệt
Việc băm muối và băm có khóa xứng đáng được xử lý riêng biệt vì cả hai đều không biến thông báo thành mã hóa. Một muối tạo ra các đầu vào có entropy thấp bằng nhau tạo ra các bản ghi được lưu trữ khác nhau và một khóa có thể hạn chế người tính giá trị xác thực hợp lệ. Đầu ra vẫn không thể đảo ngược; các nỗ lực khôi phục vẫn tiến hành bằng cách kiểm tra đầu vào ứng viên thay vì áp dụng nghịch đảo.
Việc băm mật khẩu sẽ tăng thêm chi phí có chủ ý cũng như lượng muối, trong khi HMAC xác thực thư bằng khóa bí mật. ToolAcre không thực hiện thao tác nào. Việc giữ chúng bên ngoài bài viết này sẽ tránh được lối tắt nguy hiểm khi mô tả SHA-256 đơn giản cộng với tiền tố ngẫu hứng tương đương với bản ghi mật khẩu đã xem xét hoặc cấu trúc xác thực thư.
Bài học rút ra: chỉ một chiều — máy tính băm ToolAcre SHA tính toán các số liệu tổng hợp; không có nút đảo ngược vì không có nút nào có thể tồn tại
Công cụ tính hàm băm ToolAcre SHA hiển thị cho bạn hoạt động băm: dán văn bản, lấy thông báo, xong. Không thể đảo ngược hoặc có ý định đảo ngược. Công cụ từ chối cung cấp chức năng "giải mã" một cách chính xác vì chức năng này không thể tồn tại. Nếu bạn cần mã hóa, hãy sử dụng mật mã thích hợp. Việc không có sự đảo chiều không phải là hạn chế của công cụ; đó là một thực tế toán học về băm. Hàm một chiều chính xác là công cụ mạnh mẽ vì chúng không thể đảo ngược được. Họ cam kết dữ liệu theo cách không thể lấy lại được. Họ cung cấp xác minh mà không tiết lộ bản gốc. Chúng cho phép hệ thống mật khẩu được an toàn ngay cả khi cơ sở dữ liệu bị đánh cắp. Việc băm mật khẩu được chọn lọc và điều chỉnh chi phí hợp lý trở nên không thể đảo ngược thông qua việc đoán. Tính không thể đảo ngược là cơ chế bảo mật.
Công cụ tính hàm băm ToolAcre SHA tính toán các bản tóm tắt một chiều, có mục đích và được tính toán chính xác bằng cách triển khai Web Crypto của chính trình duyệt. Nếu bạn cần băm để xác minh hoặc tính toàn vẹn, hãy sử dụng nó. Nếu bạn cần giữ bí mật dữ liệu và lấy lại sau này thì mã hóa là công cụ dành cho bạn. Hiểu được sự khác biệt giữa băm không thể đảo ngược và mã hóa có thể đảo ngược là điều cơ bản đối với bảo mật và xây dựng hệ thống thực hiện những gì bạn thực sự cần.