KJUR.crypto.Signature — основной класс библиотеки Jsrsasign, предназначенный для формирования и проверки цифровых подписей на основе криптографических алгоритмов RSA, ECDSA и других. Реализация опирается на стандартные схемы подписи вида “хэш + асимметричное шифрование”, где входные данные сначала хэшируются, а затем результат подписывается приватным ключом.
Класс работает по универсальной схеме:
Основной формат алгоритмов:
SHA1withRSASHA256withRSASHA384withRSASHA512withRSASHA256withECDSASHA1withDSAИнициализация выполняется через конструктор с параметрами конфигурации.
var sig = new KJUR.crypto.Signature({ alg: "SHA256withRSA" });
alg — строка, определяющая алгоритм подписиprov — криптографический провайдер (редко используется,
по умолчанию встроенный)Пример:
var sig = new KJUR.crypto.Signature({
alg: "SHA512withRSA"
});
Метод init() задаёт ключ для операции подписи или
проверки.
sig.init(key);
key — объект ключа:
RSAKey,
KJUR.crypto.ECDSA)Добавляет строковые данные в поток подписи.
sig.updateString(data);
data — строка, которая будет включена в хэшАналог updateString(), но работает с hex-строками.
sig.updateHex(hexData);
hexData — данные в шестнадцатеричном форматеГенерирует цифровую подпись для ранее переданных данных.
var signature = sig.sign();
init() с приватным ключомПроверяет корректность подписи.
var result = sig.verify(signature);
signature — строка подписи в hex-форматеtrue — подпись корректнаfalse — подпись недействительнаvar sig = new KJUR.crypto.Signature({ alg: "SHA256withRSA" });
sig.init(privateKey);
sig.updateString("data to sign");
var signature = sig.sign();
var sig = new KJUR.crypto.Signature({ alg: "SHA256withRSA" });
sig.init(publicKey);
sig.updateString("data to sign");
var isValid = sig.verify(signature);
Используется наиболее часто. Поддерживает все SHA-* алгоритмы.
SHA256withRSASHA512withRSAКлючи обычно создаются через:
var rsa = new RSAKey();
rsa.generate(2048, "10001");
Использует эллиптические кривые.
var sig = new KJUR.crypto.Signature({ alg: "SHA256withECDSA" });
Особенности:
Используется реже, считается устаревающим.
var sig = new KJUR.crypto.Signature({ alg: "SHA1withDSA" });
Сбор данных через updateString /
updateHex
Построение хэш-значения согласно алгоритму (SHA-256, SHA-512 и др.)
Кодирование хэша в ASN.1 структуру
Криптографическая операция:
Возврат результата в hex-формате
Подпись, созданная с SHA256withRSA, не проверяется через
SHA1withRSA.
Даже минимальное отличие строки приводит к полной невалидности подписи.
После sign() или verify() рекомендуется
создавать новый объект, чтобы избежать накопления данных в буфере.
Пример:
8f3a91c2d4b5...
Для больших данных используется поэтапная передача:
sig.init(privateKey);
sig.updateString(part1);
sig.updateString(part2);
sig.updateString(part3);
var signature = sig.sign();
Это позволяет обрабатывать данные без загрузки всей строки в память.
KJUR.crypto.Signature работает в:
Не требует нативных криптографических API, так как реализует алгоритмы на JavaScript.