Рейтинг:0

Зависит ли длина подписи RS256 от размера ключа RSA, используемого для подписи?

флаг th

Следующий код NodeJS при запуске (v16.8.0) регистрирует 512 в стандартный вывод.

константное крипто = требуется ("крипто");
const { privateKey } = crypto.generateKeyPairSync ("rsa", {
    модульДлина: 4096,
});
const sign = crypto.createSign("RSA-SHA256").update("somestringtosign");
константная подпись = sign.sign(privateKey);
console.log(подпись.длина); // журналы 512

Если я изменю длину модуля на 2048, тогда 256 входит в стандартный выход.

Думаю, это имеет смысл, поскольку Спецификация RSA говорит: подпись, строка октетов длины k, где k — длина в октетах модуля RSA n. Таким образом, 256-битный хэш (SHA256), подписанный ключом RSA с модулем 4096 бит, имеет выход 4096 бит (512 байт).

Может ли длина подписи в RS256 быть больше 256, в зависимости от размера используемого ключа RSA? Это «странно» использовать модуль, который длиннее, чем используемая хэш-функция? Я вижу, что различные поставщики удостоверений, которые подписывают JWT, действительно используют модуль 2048 бит, но это может быть совпадением.

(Я заметил, Спецификация IETF для RS256 говорит: С этими алгоритмами ДОЛЖЕН использоваться ключ размером 2048 бит или больше. так что, по-видимому, модуль 4096 будет разрешен спецификацией`)

ОБНОВИТЬ

Благодаря комментариям и ответам теперь я понимаю, что задал «неправильный» вопрос. Я (ошибочно) ожидал, что длина подписи JWT будет равна длине хэш-дайджеста, созданного алгоритмом хеширования (SHA256). Я путал биты и байты, потому что, например, SHA256 создает дайджест из 256 бит (не байтов).Длина подписи, которую я наблюдал в моем случае, составляла 256 байт (не бит), что, как я теперь понимаю, должно равняться длине модуля открытого ключа (что действительно так, как я смог проверить позже).

kelalaka avatar
флаг in
Что ж, у нас куча вопросов по этому поводу. Подпись RSA нуждается в дополнении, чтобы быть безопасным, это RSA-PSS (поиск RSA Probabilistic Signature Scheme). А также есть подпись RSA-FDH (RSA-Full Domain Hash), и это тоже безопасно. В этом случае вам нужен как минимум RSA-2048 и хэш-функция, которая может выводить ~ 2047 бит, например Shake128 из SHA3.
dave_thompson_085 avatar
флаг cn
SHA-256 — это 256-битный хэш = 32 байта, а не 256 байт. Большинство криптографических данных описывается в битах, а не в байтах, хотя PKCS1 (nd JOSE) поддерживает только _кратные_ байты (формально октеты) из 8 бит. Чтобы быть _безопасным_, модуль RSA должен быть намного больше, чем требуется для хэша — SHA-256 дает 128-битную силу, но для соответствия ему требуется RSA-3072 (а некоторые люди используют 4096, потому что это выглядит лучше). См. https://www.keylength.com и многие многие десятки существующих вопросов.
флаг th
Спасибо @dave_thompson_085! Я отредактировал и изменил байты на биты в хэш-ссылке.
Рейтинг:4
флаг ng

Может ли длина подписи в RS256 действительно быть больше 256, в зависимости от размера используемого ключа RSA?

Да. В RSA (включая RS256, который RSASSA-PKCS1-v1_5 с SHA-256 в качестве хэша), размер подписи зависит от размера ключа RSA (на самом деле это открытый модуль), используемого для подписи. В частности, размер подписи (в байтах до перекодирования в текст) представляет собой размер ключа (в битах), разделенный на 8 и округленный до следующего целого числа. $\lceil 2048/8\rceil=256$ байт. $\lceil 4096/8\rceil=512$ байт.

Это «странно» использовать модуль, который длиннее, чем используемая хеш-функция?

Нет. Это даже необходимо. С точки зрения форматирования минимальный размер подписи для RS256 (RSASSA-PKCS1-v1_5 с SHA-256) будет $2+8+1+19+32=62$ байт, то есть 489-битный общедоступный модуль. Однако это было бы слишком мало для обеспечения безопасности. 2048-бит считается базовым для новых приложений. Ожидается, что он обеспечит защиту от 112-битных до 128-битных классических компьютеров, сравнимую с устойчивостью к коллизиям 224-битного или 256-битного хэша. Видеть это рекомендации по размеру ключа и это для статуса атак факторизации.

Я не знаю стандартного верхнего предела и не вижу причин, по которым реализация не поддерживает по крайней мере 2048-байтовые (16384-битные) подписи.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.