Mã NodeJS sau đây, khi chạy (v16.8.0), ghi nhật ký 512
để thiết bị xuất chuẩn.
const tiền điện tử = yêu cầu ("tiền điện tử");
const { privateKey } = crypto.generateKeyPairSync("rsa", {
mô đun Chiều dài: 4096,
});
const sign = crypto.createSign("RSA-SHA256").update("somestringtosign");
const signature = sign.sign(privateKey);
console.log(signature.length); // bản ghi 512
Nếu tôi thay đổi độ dài mô đun thành 2048
, sau đó 256
được ghi ra tiêu chuẩn.
Tôi đoán điều này có ý nghĩa, vì thông số RSA nói: chữ ký, một chuỗi bộ tám độ dài k, trong đó k là độ dài tính bằng bộ tám của mô đun RSA n
. Vì vậy, hàm băm 256 bit (SHA256), khi được ký bằng khóa RSA với mô đun 4096 bit, có đầu ra 4096 bit (512 byte).
Độ dài chữ ký trong RS256 có thực sự dài hơn 256 hay không, tùy thuộc vào kích thước của khóa RSA được sử dụng? Có "lạ" không khi sử dụng mô đun dài hơn hàm băm được sử dụng? Tôi thấy các nhà cung cấp nhận dạng khác nhau ký JWT thực sự đều sử dụng mô-đun 2048 bit, nhưng điều đó có thể là ngẫu nhiên.
(Tôi nhận thấy Thông số IETF cho RS256 nói: Khóa có kích thước 2048 bit hoặc lớn hơn PHẢI được sử dụng với các thuật toán này.
vì vậy rõ ràng mô-đun 4096 sẽ được thông số kỹ thuật cho phép`)
CẬP NHẬT
Nhờ những bình luận và câu trả lời mà bây giờ tôi hiểu rằng tôi đã hỏi câu hỏi "sai". Tôi đã (sai lầm) mong đợi độ dài chữ ký của JWT bằng với độ dài của thông báo băm do thuật toán băm (SHA256) tạo ra. Tôi đã nhầm lẫn giữa các bit và byte ở đó, vì ví dụ: SHA256 tạo ra một bản tóm tắt 256 bit (không phải byte).Độ dài chữ ký mà tôi đã chứng kiến trong trường hợp của mình là 256 byte (không phải bit), mà bây giờ tôi hiểu phải bằng độ dài của mô đun của khóa công khai (đây thực sự là trường hợp mà tôi có thể xác minh sau này).