Tôi cần ký một tin nhắn bằng khóa riêng và xác minh tin nhắn đó bằng khóa chung, đồng thời đảm bảo rằng tin nhắn không bị giả mạo.
Tôi biết rằng bản thân SHA-256 dễ bị tấn công kéo dài.
Tôi cũng biết rằng những thứ như HMAC đã được thiết kế đặc biệt để phá vỡ các cuộc tấn công như vậy.
Nhưng nếu tôi ký một tin nhắn bằng RSA và SHA-256 thì sao? Họ có an toàn không?
Tôi có cần phải ký RSA/SHA3 để được bảo vệ không? Hoặc có thể là các phiên bản rút gọn của SHA2 (cụ thể là SHA-384 và SHA-512/256) được cho là không phải dễ bị tấn công kéo dài?
HMAC sẽ là một cách tiếp cận tốt hơn cho vấn đề này?
Tôi đang cân nhắc sử dụng RSA, đây có lẽ là mã nổi tiếng nhất trong số các loại mật mã bất đối xứng. Vui lòng chỉ cho tôi thứ khác nếu có một lựa chọn tốt hơn. Tôi cần thứ gì đó được hỗ trợ bởi OpenSSL và mô-đun mật mã Node.js (theo như tôi biết, cũng dựa trên OpenSSL).
tái bút Tôi hơi mới đối với cộng đồng tiền điện tử, vì vậy tôi hy vọng lời nói của mình có ý nghĩa.
--phụ lục--
Đây là mối quan tâm của tôi về RSA-SHA256.
Giả sử tin nhắn là $M$ và hàm băm của nó là $SHA256(M)$.
Kẻ tấn công có thể sử dụng chúng để tính toán $M||X$ và $SHA256(M||X)$, ngay cả khi không biết khóa riêng.Trong trường hợp này, người nhận $M||X$ và chữ ký của nó $SHA256(M||X)$ sẽ tin rằng tin nhắn hợp lệ vì tin nhắn và chữ ký của nó khớp với nhau.
Ít nhất đó là những gì sẽ xảy ra nếu RSA_sign chỉ sử dụng hàm băm thô. Nếu RSA chuyển hàm băm thông qua một kỹ thuật giống như HMAC hoặc bất kỳ thuật toán nào ngăn kẻ tấn công giả mạo chữ ký, tôi đoán chúng ta sẽ an toàn.