Có vẻ như không dễ để bảo vệ khỏi việc sắp xếp lại các mảnh theo một thứ tự khác.
Mà phụ thuộc; bạn chưa chỉ định thao tác kết hợp các giá trị băm vào thời điểm này.
Chắc chắn bất kỳ hàm băm mật mã nào cũng có giá trị khác nếu nó thực hiện $H(x|y)$ thay vì $H(y|x)$ ở đâu $x \neq y$ và kích thước của $x$ và $y$ là giống hệt nhau. Nếu không, các mục tiêu chống va chạm của hàm băm không được đáp ứng.
Có vẻ như không dễ để bảo vệ khỏi việc sắp xếp lại các mảnh theo một thứ tự khác.
Chắc chắn là có, chỉ cần sử dụng HMAC, dựa trên hàm băm mật mã với SHA-256 hoặc SHA-512.
Bây giờ, rõ ràng là đường xor đơn giản của các chữ ký từng phần là một chữ ký hoàn hảo của toàn bộ thông điệp.
Có thật không? Nếu bạn nói điều đó là hiển nhiên thì bạn cần cung cấp bằng chứng.
Giả sử bạn có chữ ký của ba tin nhắn bao gồm các tin nhắn phụ $A$ và $B$: $M_1=(A,B)$, $M_2=(A,B')$ và $M_3=(A',B)$. Bây giờ nếu bạn XOR các chữ ký với nhau, bạn sẽ nhận được giá trị giống như đối với $M_4=(A', B')$:
$$S_1 = Dấu(1, A) \oplus Dấu(2, B)$$
$$S_2 = Dấu(1, A) \oplus Dấu(2, B')$$
$$S_3 = Dấu(1, A') \oplus Dấu(2, B)$$
$$S_4 = Sign(1, A') \oplus Sign(2, B') = S_1 \oplus S_2 \oplus S_3$$
XOR là một hoạt động nguy hiểm. Những gì bạn thường theo đuổi là một cây thủy sinh sử dụng băm mật mã.
Lưu ý rằng trước tiên bạn có thể thực hiện hàm băm mật mã trên các tin nhắn và thực hiện HMAC trên các hàm băm được nối. Điều đó có thể an toàn hơn là thực hiện chữ ký trên các phần khác nhau, đặc biệt nếu đầu ra của chức năng chữ ký nhỏ.