Класс RSAKey в библиотеке Jsrsasign представляет собой низкоуровневую реализацию алгоритма RSA и используется для выполнения криптографических операций: шифрования, расшифрования, создания и проверки цифровой подписи, а также работы с ключевыми парами в формате PEM и внутренних представлениях RSA-структур.
RSAKey — это объект, инкапсулирующий математическую модель RSA-ключа, основанную на параметрах:
nedp и qКласс работает поверх библиотеки больших чисел, обеспечивая операции с числами произвольной длины. Это критически важно, поскольку RSA требует работы с числами, значительно превышающими стандартные числовые типы JavaScript.
Экземпляр RSAKey создаётся без обязательных параметров:
var rsa = new RSAKey();
На этом этапе объект пуст и не содержит ключевых параметров. Дальнейшая работа возможна только после загрузки или генерации ключей.
Одной из ключевых функций RSAKey является импорт ключей из PEM-строк.
rsa.readPrivateKeyFromPEM(pemString);
Метод парсит структуру PKCS#1 или PKCS#8 и заполняет внутренние поля объекта.
rsa.readPublicKeyFromPEM(pemString);
Используется для операций шифрования и проверки подписи. В отличие от
приватного ключа, содержит только n и e.
RSAKey поддерживает генерацию ключей напрямую в браузере или Node.js окружении.
rsa.generate(bits, "10001");
Параметры:
bits — длина ключа (обычно 1024, 2048, 4096)"10001" — стандартная публичная экспонента (65537 в
hex)Генерация является ресурсоёмкой операцией, так как включает поиск простых чисел большой разрядности.
RSAKey реализует асимметричное шифрование с использованием публичного ключа.
var encrypted = rsa.encrypt(plainText);
Особенности:
Шифрование используется исключительно с публичным ключом.
Для расшифрования требуется приватный ключ:
var decrypted = rsa.decrypt(cipherText);
Процесс включает:
Если ключ неполный или повреждён, операция завершится ошибкой или вернёт пустой результат.
RSAKey поддерживает создание цифровых подписей на основе хэш-значений.
var signature = rsa.signString(message, "sha256");
Процесс включает:
var isValid = rsa.verifyString(message, signature);
Проверка выполняется через публичный ключ. Если сообщение изменено хотя бы на один символ, подпись становится недействительной.
Внутренне RSAKey оперирует объектами BigInteger. Это обеспечивает:
Основные операции включают:
Для ускорения операций с приватным ключом используются параметры:
dP = d mod (p-1)dQ = d mod (q-1)qInv = q^{-1} mod pЭти значения позволяют ускорить расшифрование и подпись примерно в 3–4 раза по сравнению с прямым вычислением.
RSAKey поддерживает несколько стандартов:
При импорте библиотека автоматически определяет формат PEM и выбирает корректный парсер.
RSA не предназначен для шифрования больших объёмов информации. Максимальный размер входных данных зависит от длины ключа:
Это связано с необходимостью резервирования места под padding.
Операции decrypt и sign невозможны без
заполненного приватного ключа. Попытка их выполнения приводит к ошибке
или пустому результату.
Если строка ключа повреждена или не соответствует стандарту, методы
readPrivateKeyFromPEM и readPublicKeyFromPEM
не смогут корректно распарсить данные.
Попытка зашифровать слишком длинную строку приводит к ошибке или некорректному результату шифрования.
RSAKey часто используется совместно с:
RSAKey при этом остаётся низкоуровневым инструментом, предоставляющим прямой доступ к математике RSA без дополнительной абстракции.
Внутренние поля RSAKey включают:
n — модульe — публичная экспонентаd — приватная экспонентаp, q — простые множителиisPrivate — флаг наличия приватного ключаЭти параметры могут быть доступны для анализа, но в большинстве случаев используются только через методы класса.
Любая операция RSAKey проходит несколько стадий:
Эта последовательность одинакова для шифрования, расшифрования и
подписи, различаясь только типом используемой экспоненты (e
или d).