RSA использует сложность факторизации больших полупростых в качестве функции ловушки.
Как часть криптосистемы RSA, два простых числа генерируются при создании открытого / секретного ключа.
Мы называем два простых числа p
и q
. Они умножаются, образуя n
, который является модулем (полу-простым).
Хотя RSA может использоваться для непосредственного шифрования данных (через c=m^e mod{n}
), вы не можете зашифровать данные, большие чем модуль напрямую.
Поэтому, если вы используете 2048-bit
простых чисел для генерации n
, вы можете только зашифровать 4096-bit
s информации непосредственно ключами (на практике даже немного меньше).
Вместо этого для больших данных вам нужно сгенерировать случайный ключ симметрии c и отправить его своему партнеру, зашифровав его своим открытым ключом RSA c, а затем использовать согласованный ключ с симметричным c шифром, подобным AES-GCM
или xSalsa20
.
Действительно, вы должны перейти к использованию ECDH по эллиптическим c кривым.
tldr: если вы шифруете некоторые данные с помощью RSA, где data.length> modulus.length, когда вы расшифруете его, вы получите чепуху.