Điểm:0

Độ dài chữ ký của RS256 có phụ thuộc vào kích thước của khóa RSA được sử dụng để ký không?

lá cờ th

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).

kelalaka avatar
lá cờ in
Vâng, chúng tôi có rất nhiều câu hỏi về điều này. Chữ ký RSA cần đệm để bảo mật, đó là RSA-PSS (tìm kiếm RSA Probabilistic Signature Scheme). Và cũng có chữ ký RSA-FDH (RSA-Full Domain Hash) và điều đó cũng an toàn. Trong trường hợp này, bạn cần ít nhất RSA-2048 và hàm băm có thể xuất ra ~2047 bit như Shake128 của SHA3.
dave_thompson_085 avatar
lá cờ cn
SHA-256 là hàm băm 256-BIT = 32 byte chứ không phải 256 byte. Hầu hết dữ liệu mật mã được mô tả theo bit chứ không phải byte, mặc dù PKCS1 (nd JOSE) chỉ hỗ trợ _multiples_ của một byte (octet chính thức) gồm 8 bit. Để trở thành _secure_, mô-đun RSA phải lớn hơn nhiều so với mức cần thiết cho hàm băm - SHA-256 mang lại độ mạnh 128 bit nhưng RSA-3072 là cần thiết để khớp với nó (và một số người làm 4096 vì nó trông đẹp hơn). Xem https://www.keylength.com và rất nhiều câu hỏi hiện có.
lá cờ th
Cảm ơn @dave_thompson_085! Tôi đã chỉnh sửa và thay đổi byte thành bit trong tham chiếu băm.
Điểm:4
lá cờ ng

Độ 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?

Đúng. Trong RSA (bao gồm cả RS256, đó là RSASSA-PKCS1-v1_5 với SHA-256 dưới dạng hàm băm), kích thước chữ ký phụ thuộc vào kích thước của khóa RSA (thực tế, đó là mô đun công khai) được sử dụng để ký. Cụ thể, kích thước chữ ký (tính bằng byte, trước khi mã hóa lại dưới dạng văn bản) là kích thước khóa (tính bằng bit), chia cho 8 và làm tròn thành số nguyên tiếp theo. $\lceil 2048/8\rceil=256$ byte. $\lceil 4096/8\rceil=512$ byte.

Có "lạ" không khi sử dụng mô đun dài hơn hàm băm được sử dụng?

Không. Điều đó thậm chí còn cần thiết. Từ quan điểm định dạng, kích thước chữ ký tối thiểu cho RS256 (RSASSA-PKCS1-v1_5 với SHA-256) sẽ là $2+8+1+19+32=62$ byte, đó là mô-đun công khai 489 bit. Đó sẽ là cách quá nhỏ để được an toàn, mặc dù. 2048-bit được coi là đường cơ sở cho các ứng dụng mới. Dự kiến ​​nó sẽ cung cấp khả năng bảo mật 112-bit đến 128-bit đối với các máy tính cổ điển, có thể so sánh với khả năng chống va chạm của hàm băm 224-bit hoặc 256-bit. Nhìn thấy cái này cho các đề xuất về kích thước khóa và cái này đối với tình trạng tấn công nhân tố hóa.

Tôi không biết giới hạn trên tiêu chuẩn nào và tôi thấy không có lý do gì để triển khai không hỗ trợ chữ ký ít nhất 2048 byte (16384 bit).

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