Каков размер вывода шифрования RSA при использовании 2048-битного ключа и pkcs1padding.
Всегда ли 256 байтов не зависят от размера ввода?
Как я могу рассчитать его для других размеров ключей?
Каков размер вывода шифрования RSA при использовании 2048-битного ключа и pkcs1padding.
Всегда ли 256 байтов не зависят от размера ввода?
Как я могу рассчитать его для других размеров ключей?
Да, это так.
output-size должен всегда равняться размеру Modulus
(части ключа), поэтому:
2048 bit Modulus -> 2048 bit output
1024 bit Modulus -> 1024 bit output
...
Если это не так, существуют многочисленные атаки на RSA, см. здесь для получения основной информации об этом.
Таким образом, чтобы гарантировать, что выход равен 2048 bit
, даже если вход для шифрования равен, скажем, 7
,
всегда должно применяться заполнение!
Выходные данные (в виде целого числа) RSAEP (примитив шифрования RSA): всегда между 0 и n:
Если представитель сообщения m не находится между 0 и n-1, выведите представитель сообщения вне диапазона и остановитесь.
Пусть c = m^e mod n.
Выход в.
Конечно, c
— это число. Поэтому вам нужно преобразовать его в байты, чтобы его можно было использовать. Единственное, что известно о c
, это то, что оно меньше n
при большом значении m
. Возможно, c
на несколько байт меньше, даже если m
велико.
Вы упомянули PKCS1Padding, который является частью RSAES-PKCS1-V1_5-ENCRYPT. Заполнение гарантирует, что m
всегда будет большим и рандомизированным; требования к шифрованию RSA, чтобы быть безопасным.
Вы обнаружите, что там указана кодировка c
:
...
Шаг 4: Преобразование представителя зашифрованного текста c в зашифрованный текст C длиной k октетов: C = I2OSP (в, к)
...
где k — размер модуля в октетах (байтах).
Так что да, ответ всегда k
, размер модуля в байтах. Просто потому, что так требует стандарт. Это значение, закодированное как число без знака с обратным порядком байтов, с префиксом из необходимого количества нулевых байтов.
Примечания:
размер модуля определяет размер ключа. Таким образом, результат шифрования RSA такой же, как и размер ключа: ceil(keySize / 8.0)
с использованием чисел с плавающей запятой или (keySize + 8 - 1) / 8
с использованием целых чисел.
RSA с заполнением OAEP использует тот же метод, поэтому ответ правильный и для OAEP (и для большинства других, менее известных схем, таких как RSA-KEM).
Многие библиотечные подпрограммы, которые выполняют «сырой» RSA (просто модульное возведение сообщения в степень с общедоступной экспонентой), по-прежнему выполняют функцию I2OSP, но лучше проверить, чтобы убедиться.
needed = (size + (keySize >> 3) - 1) & ~((keySize >> 3) - 1))
- person Geoffrey; 16.06.2020
Выходной размер простого RSA (с использованием некоторой схемы заполнения, но без гибридного шифрования) всегда является ключом. размер. Причина в том, что для некоторого открытого ключа n
результатом является некоторое целое число c
с 0<=c<n
. Есть много вводных для RSA, например. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_rsa.pdfrel=
RSA_size
: RSA_size() возвращает RSA размер модуля в байтах. Его можно использовать для определения объема памяти, который должен быть выделен для значения, зашифрованного с помощью RSA. (размер сообщения зависит от размера модуля). - person jww   schedule 03.07.2017