Tiếng Việt

Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA

Các cuộc tấn công mở rộng độ dài: Tại sao SHA-256(bí mật + tin nhắn) không phải là MAC

· Tại sao nó quan trọng

sha-256 mật mã bảo vệ

Khối trạng thái SHA-256 được mở rộng với các byte bổ sung để giả mạo hàm băm hợp lệ
Hình minh họa vector ToolAcre gốc

Việc thêm một bí mật vào thư và băm nó trông giống như xác thực nhưng cấu trúc của SHA-256 cho phép kẻ tấn công mở rộng thư mà không cần biết bí mật. Bài đăng này giải thích cuộc tấn công và cách khắc phục.

Chữ ký yêu cầu tự chế - hàm băm (bí mật + nội dung) và lý do tại sao nó cảm thấy an toàn

Nhà phát triển cần xác thực tin nhắn nhưng thiếu kiến ​​thức HMAC nên họ ghép một bí mật với tin nhắn và băm kết quả. Cách tiếp cận này ban đầu có vẻ an toàn: đầu ra là một dấu vân tay có kích thước cố định sẽ thay đổi nếu có ai sửa đổi tin nhắn. Tuy nhiên, SHA-256 có một lỗ hổng kiến ​​trúc được gọi là phần mở rộng độ dài cho phép kẻ tấn công nối dữ liệu vào tin nhắn và tính toán thông báo hợp lệ mà không biết bí mật. Công cụ tính hàm băm ToolAcre SHA chỉ tính toán các thông số tóm tắt đơn giản chứ không tính toán xác thực có khóa vì sự khác biệt này quan trọng đối với bảo mật thực sự.

Việc chuẩn bị trước một bí mật trước khi băm là điều hấp dẫn về mặt trực quan vì chỉ người nắm giữ bí mật mới có thể tính toán lại hàm băm. Nếu thông báo thay đổi thì hàm băm cũng thay đổi nên nó trông giống như bằng chứng xác thực. API có thể ký các yêu cầu bằng cách nối một bí mật chung và nội dung yêu cầu, sau đó băm kết quả và đưa hàm băm đó vào yêu cầu. Máy chủ nhận nội dung, tính toán lại hàm băm với bản sao bí mật của nó và kiểm tra xem nó có khớp hay không. Nếu kẻ tấn công thay đổi nội dung, hàm băm sẽ không khớp—hoặc các nhà phát triển nghĩ như vậy.

Merkle–Damgård rò rỉ trạng thái của nó — thông báo cuối cùng là trạng thái bên trong, do đó kẻ tấn công có thể tiếp tục băm từ nơi bạn dừng

SHA-256 thuộc họ hàm băm Merkle–Damgård. Các hàm này xử lý đầu vào trong các khối có kích thước cố định, xâu chuỗi hàm nén lấy trạng thái trước đó và khối hiện tại rồi xuất ra trạng thái mới. Hàm nén là hàm mã hóa nguyên thủy duy nhất bên trong; chiến lược xích và sơ đồ đệm làm cho toàn bộ công trình xây dựng thành công. Thông báo cuối cùng chỉ đơn giản là trạng thái cuối cùng được in ở dạng thập lục phân. Đây không phải là ngẫu nhiên: đầu ra là trạng thái bên trong. Bất kỳ ai nhìn thấy thông báo đều có trạng thái chính xác cần thiết để tiếp tục băm từ thời điểm đó.

Để mở rộng một tin nhắn, kẻ tấn công bắt đầu với bản tóm tắt được quan sát của secret + original_message và coi nó như biến trạng thái cho lệnh gọi hàm nén mới. Họ nối thêm dữ liệu họ muốn thêm, đệm dữ liệu chính xác cho độ dài đầy đủ của tin nhắn mới và tính toán bản tóm tắt. Khi máy chủ xác thực thông báo giả mạo này bằng cách thêm vào trước bí mật và hàm băm của chính nó, quá trình tính toán sẽ tiến hành giống hệt với tính toán của kẻ tấn công sau khi bí mật ban đầu được hấp thụ. Máy chủ tính toán thông báo tương tự và tin nhắn giả mạo được chấp nhận mà kẻ tấn công không hề biết bí mật.

Cách thức hoạt động của tiện ích mở rộng — thêm phần đệm và dữ liệu bổ sung để giả mạo hàm băm hợp lệ cho tin nhắn dài hơn

Các thuật toán khác nhau bị ảnh hưởng khác nhau bởi việc mở rộng độ dài. SHA-1 dễ bị tấn công: kẻ tấn công có thể quan sát thông báo SHA-1 và mở rộng thông báo. SHA-256 cũng dễ bị tổn thương theo cách tương tự. SHA-512 cũng dễ bị tấn công mở rộng. SHA-384 chống lại việc mở rộng độ dài vì nó được xây dựng dưới dạng SHA-512 bị cắt ngắn thành 384 bits. Đầu ra của hàm nén dài hơn bản tóm tắt được xuất bản, do đó kẻ tấn công không có đủ thông tin để tiếp tục băm. Cấu trúc xốp được sử dụng trong SHA-3 cũng có khả năng chống chịu vì nó không làm rò rỉ trạng thái bên trong.

Việc hiểu thuật toán nào dễ bị tấn công đòi hỏi phải biết điều gì đó về kích thước hàm nén so với kích thước thông báo được công bố. SHA-256 xuất bản 256 bits và trạng thái hàm nén cũng là 256 bits, vì vậy thông báo tóm tắt là toàn bộ trạng thái. Kẻ tấn công có mọi thứ cần thiết để tiếp tục. SHA-384 xuất bản 384 bits nhưng trạng thái chức năng nén cơ bản là 512 bits vì SHA-384 được xây dựng dựa trên SHA-512. Thông báo chỉ hiển thị 384 trong số 512 bits đó, khiến kẻ tấn công không biết 128 bits. Đây là thuộc tính thiết kế có chủ ý của SHA-384 cung cấp khả năng chống chịu này.

Các cấu trúc SHA-1, SHA-256 và SHA-512 được hỗ trợ hiển thị trạng thái đầy đủ; Việc cắt bớt SHA-384 thay đổi ranh giới phần mở rộng

Bản sửa lỗi để xác thực thư bằng bí mật chung là HMAC, mã xác thực thư có khóa băm. HMAC không thêm vào trước bí mật và hàm băm; thay vào đó, nó áp dụng bí mật trong hai phép toán băm lồng nhau bằng cách sử dụng các sơ đồ đệm cụ thể được gọi là đệm bên trong và bên ngoài. Cấu trúc là HMAC(bí mật, tin nhắn) = SHA256(secret_XOR_outer_pad, SHA256(secret_XOR_inner_pad, tin nhắn)). Cách tiếp cận lồng nhau này sẽ thu hẹp khoảng cách mở rộng độ dài vì ngay cả khi kẻ tấn công có được bản tóm tắt của hàm băm bên trong, chúng cũng không thể tiếp tục băm mà không có bí mật.

Lý do để tách biệt các hoạt động thông báo và HMAC là để tránh lỗi phổ biến khi coi hai hoạt động này có thể thay thế cho nhau. Một nhà phát triển tìm hiểu về băm thông qua một công cụ thực hiện cả hai công cụ này có thể quên mất họ đang sử dụng công cụ nào khi viết mã. Việc tách riêng tính toán tổng hợp giúp lựa chọn trở nên rõ ràng và củng cố kiến ​​thức rằng xác thực cần HMAC hoặc chữ ký. Công cụ tính hàm băm ToolAcre SHA gắn nhãn các thông số tóm tắt rõ ràng và tài liệu giải thích rằng HMAC là một thao tác hoàn toàn khác.

HMAC làm bản sửa lỗi — cấu trúc lồng nhau giúp thu hẹp khoảng cách và tại sao đó là câu trả lời tiêu chuẩn

Một ví dụ khái niệm về việc mở rộng độ dài hoạt động trên vectơ kiểm tra abc quen thuộc. Việc tính toán SHA-256 trên văn bản ASCII abc sẽ tạo ra bản tóm tắt ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Giả sử thông báo tóm tắt này là kết quả của bí mật + abc được băm với bí mật 5 byte, tạo ra tổng số 8 bytes dữ liệu đầu vào. SHA-256 xử lý đầu vào trong các khối 64 byte, do đó khối đầu tiên và duy nhất được đệm bằng độ dài tin nhắn và các byte đệm khác. Kẻ tấn công nhìn thấy thông báo và muốn giả mạo một tin nhắn bắt đầu bằng abc, sau đó là dữ liệu bổ sung.

Họ không thể nối trực tiếp vào abc vì họ không biết chính xác phần đệm đã được thêm vào bên trong hàm băm. Tuy nhiên, họ có thể tính toán thông báo được đệm đầy đủ phải là gì: abc cộng với phần đệm bắt buộc cho đầu vào 8 byte vào khối 64 byte. Sau đó, họ nối thêm dữ liệu bổ sung của mình, tính toán phần đệm cho tổng chiều dài mới và băm kết hợp bằng cách coi thông báo được quan sát làm trạng thái bắt đầu. Kết quả là một thông báo SHA-256 hợp lệ mà máy chủ sẽ chấp nhận vì nó thêm vào trước bí mật và tính toán cùng một hàm băm.

Ví dụ đã hoạt động - một hướng dẫn khái niệm về việc mở rộng một tin nhắn đã ký mà không có mục tiêu trực tiếp

Để ngăn chặn cuộc tấn công này trong hệ thống thực, nhà phát triển không nên cố gắng xây dựng xác thực từ hàm băm đơn giản. HMAC là câu trả lời tiêu chuẩn và công cụ tính hàm băm ToolAcre SHA là một công cụ để tính toán các bản tóm tắt đơn giản nhằm kiểm tra tính toàn vẹn, băm nội dung và các mục đích không xác thực tương tự. Ví dụ về cách sử dụng an toàn thông báo SHA-256 thông thường bao gồm tổng kiểm tra tệp, trong đó kẻ tấn công không thể kiểm soát cả tệp và thông báo; bộ nhớ có địa chỉ nội dung, trong đó hàm băm là khóa tra cứu; và chữ ký số kết hợp với chữ ký, trong đó chữ ký cung cấp tính xác thực.

Phạm vi đầy đủ của vấn đề này bao gồm các thuật toán khác mà trình duyệt cung cấp. SHA-1 dễ bị mở rộng độ dài và đã bị phá vỡ bằng mật mã trước khi điều đó trở nên có liên quan. Máy tính ToolAcre gắn nhãn SHA-1 là chỉ cũ và giải thích các cuộc tấn công xung đột khiến nó không phù hợp với các ứng dụng mới. Đối với các ứng dụng mới, SHA-256 là lựa chọn hợp lý cho các bản tóm tắt đơn giản và nếu cần xác thực thì HMAC với SHA-256 là câu trả lời. SHA-384 và SHA-512 đều dễ bị tấn công nhưng SHA-384 được bảo vệ bằng cách cắt bớt.

Điều này không bao gồm những gì — máy tính ToolAcre tính toán các thông số tóm tắt đơn giản chứ không phải HMAC; bài đăng giải thích tại sao sự khác biệt đó lại quan trọng

Khi xây dựng mô hình tinh thần của hàm băm, cấu trúc Merkle–Damgård và phần mở rộng độ dài trở thành những khái niệm chính. Hàm băm phải xử lý độ dài đầu vào tùy ý và tạo ra đầu ra cố định. Cách nó thực hiện điều này là xâu chuỗi từng khối chức năng nén và cách chuyển đổi trạng thái cuối cùng thành đầu ra rất quan trọng. Nếu trạng thái cuối cùng là đầu ra hoàn toàn thì đầu ra đó chứa tất cả thông tin cần thiết để tiếp tục băm. Nếu trạng thái cuối cùng bị cắt bớt, phần đó sẽ bị ẩn.

Đối với một nhà phát triển lần đầu tiên đọc về các cuộc tấn công mở rộng độ dài, câu hỏi đặt ra là làm thế nào để biết liệu nó có ảnh hưởng đến trường hợp sử dụng của họ hay không. Nếu đầu vào của hàm băm là hằng số công khai và hàm băm được sử dụng làm khóa tra cứu hoặc dấu vân tay thì phần mở rộng độ dài là không liên quan. Nếu hàm băm được sử dụng để xác thực thư khi cả hai bên chia sẻ bí mật thì phần mở rộng độ dài là lỗ hổng nghiêm trọng và HMAC là bản sửa lỗi. Công cụ tính hàm băm ToolAcre SHA hiển thị thông số tóm tắt và số byte, cho thấy rõ rằng đây là kết quả tính toán chứ không phải cơ chế xác thực.

Bài học rút ra: sử dụng MAC để xác thực — công cụ tính hàm băm ToolAcre SHA dành cho các bản tóm tắt tính toàn vẹn; nhu cầu xác thực HMAC hoặc chữ ký

Áp dụng điều này cho các hệ thống sản xuất, nguyên tắc rất đơn giản: không bao giờ sử dụng hàm băm đơn giản để xác thực khi có liên quan đến bí mật. HMAC là cấu trúc tiêu chuẩn đóng hoàn toàn vectơ tấn công mở rộng độ dài. SHA-256 và SHA-384 đều an toàn cho mục đích đã định khi sử dụng đúng cách. Hiểu được ba điểm chính—mà Merkle–Damgård tiết lộ trạng thái của nó trong thông báo, SHA-384 cắt ngắn để ẩn một phần trạng thái và HMAC sử dụng cấu trúc lồng nhau để ngăn chặn phần mở rộng—cung cấp cho nhà phát triển các công cụ để đưa ra lựa chọn đúng đắn.

Công cụ tính hàm băm ToolAcre SHA thể hiện lời dạy này: nó cung cấp các bản tóm tắt đơn giản cho việc học và cho các mục đích sử dụng hợp pháp không cần xác thực, nó gắn nhãn SHA-1 là kế thừa và nó không triển khai HMAC vì thao tác đó thuộc về một ngữ cảnh khác. Khi các nhà phát triển sử dụng một máy tính hàm băm đơn giản để xác thực một yêu cầu, vị trí và tài liệu của công cụ sẽ hướng dẫn họ hướng tới HMAC và chữ ký làm công cụ thích hợp. Bộ công cụ ToolAcre tập trung vào những gì Web Crypto của trình duyệt cung cấp trực tiếp và giải thích các ranh giới nơi mỗi nguyên thủy là phù hợp.