Điểm:1

Cách bẻ khóa sha256 được sử dụng làm mật mã truyền phát với khối đã biết hoặc có thể đoán được

lá cờ cn

Tuy nhiên, việc sử dụng SHA-256 làm mật mã luồng dường như có các điểm yếu về mã hóa, tuy nhiên, tôi không chắc lắm về cách triển khai chúng trong quá trình giải mã.

Giả sử rằng tôi có chức năng mã hóa sử dụng các khối 64 byte. Tôi mã hóa từng khối bằng hàm băm của khối trước đó để tạo ra bản mã của mình. Liên kết yếu ở đây là, mà tôi biết hoặc có thể đoán khối byte đầu tiên.

Trong một trong những bài viết được liên kết dưới đây, tôi đã đọc:

Tôi nên đề cập rằng nếu có bất kỳ khối đầy đủ nào của văn bản gốc đã biết hoặc có thể đoán được trong tin nhắn của bạn, sơ đồ của bạn dễ bị phá vỡ vì pad(i) đã cho, bất kỳ ai cũng có thể tính toán pad(i+1). Vì vậy, hãy đoán một khối bản rõ, XOR nó với bản mã để khôi phục giá trị phần đệm có thể, sau đó tính toán giá trị phần đệm tiếp theo và xem liệu bản mã được khôi phục trong khối đó có hợp lệ hay không.

Bất cứ ai có thể giải thích chính xác những gì có nghĩa là ở đây? Nếu tôi biết khối đầu tiên, tôi có xor nó với khối đầu tiên được băm không? Nếu vậy làm cách nào để giúp tôi bẻ khóa các hàm băm tiếp theo là H(prevHashedBlock + currentPlaintextBlock)?

Tôi biết điều này có liên quan đến các trạng thái băm, v.v. nhưng tôi không tìm thấy nhiều trên web.

Tôi đã đọc các bài viết sau:
Có khả thi để xây dựng mật mã luồng từ hàm băm mật mã không?
SHA-256 có an toàn dưới dạng mật mã khối CTR không?

Điểm:2
lá cờ in

Không có điểm yếu như vậy nếu SHA-256 được sử dụng ở chế độ CTR. ChaCha20 đã được xây dựng theo cách này.

Bạn đang sử dụng SHA-256 theo cách xâu chuỗi để xuất luồng nhằm mã hóa tin nhắn bằng x-or;

\begin{align} O_1 & = H(phím) \oplus H(tin nhắn)\ O_i & = H(O_{i-1}) \end{align}

Sau đó, mã hóa được thực thi với x-oring $O_i$S.

$$C_i = P_i \oplus O_i$$

Bây giờ, giả sử rằng bạn có một bản rõ đã biết cho một số khối $j$. Điều này có nghĩa là bạn nhận được $O_j$

$$O_j = P_j \oplus C_j$$

Bây giờ hãy sử dụng phương trình tạo luồng

\begin{align} O_{j+1} &= H(O_j)\ O_{j+2} &= H(O_{j+1})\ \vdots \quad & \quad\quad\vdots \ O_{j+t} &= H(O_{j+t-1})\ \vdots \quad & \quad\quad\vdots \ \end{align}

Như bạn có thể thấy, bạn nhận được phần còn lại của đầu ra luồng từ vị trí $j$. Nếu bạn có vị trí đầu tiên thì bạn sẽ có được tất cả.

Đây là điểm yếu của sơ đồ như vậy, mặt khác, chế độ CTR được thiết kế cho PRF và người ta thường khởi tạo nó bằng một số hàm băm tốt.


Xem bằng hình ảnh

nhập mô tả hình ảnh ở đây

Như mọi người có thể thấy, nếu bạn nhận được bất kỳ kết quả nào $O_j$ sau đó bạn có thể nhận phần còn lại do chuỗi băm.

CrazyPhil avatar
lá cờ cn
Vì vậy, XORing Oj với Cj sẽ mang lại bản rõ của khối j? Cảm ơn vì hình ảnh, nó đã giúp tôi hiểu lời giải thích của bạn tốt hơn.
CrazyPhil avatar
lá cờ cn
Hơn nữa, Oj chính xác là gì? Bởi vì nó rõ ràng không phải là hàm băm đã hoàn thành, đúng không? Vì H(key+ptxt) = C1 chứ không phải O1; vậy khi giải mã cái này trong một chương trình, tôi sẽ tạo ra O1 như thế nào?
kelalaka avatar
lá cờ in
Đó là lý do tại sao tôi vẽ nó. Đôi khi một hình ảnh có thể nói một ngàn từ. $O_j$'s là đầu ra của hàm băm.Khi giải mã chỉ x-hoặc bản mã bằng $O_j$ giống như trong One-time-Pad.
kelalaka avatar
lá cờ in
Hàm băm đầu tiên phải là $hash(key)\oplus hash(ptxt)$, hàm này không thay đổi cách tấn công, tôi sẽ sửa sau...

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