#javascript #encryption #rsa #webcrypto-api
#javascript #шифрование #rsa #webcrypto-api
Вопрос:
У меня есть сертификат, в котором указаны Signature Algorithm
is sha256WithRSAEncryption
и Key Size
is 1024.
Я пытаюсь зашифровать некоторые произвольные данные с помощью Web Crypto API
и смог успешно зашифровать их только путем импорта ключа сертификата со следующими параметрами
return await window.crypto.subtle.importKey(
'spki',
buffer, // binary format of the key
{
name: 'RSA-OAEP',
hash: 'SHA-256',
},
true,
['encrypt'],
);
А затем шифрование данных с помощью следующих параметров
await crypto.encrypt({ name: 'RSA-OAEP' }, cryptoKey, chunk); // max of 62 bytes of data given the key size and algorithm
Мой вопрос в том, является ли это единственной возможной комбинацией для использования с этим конкретным ключом?
Человек, который выдал мне открытый ключ, говорит, что они ожидают алгоритм RSA-PKCS1-KeyEx
, хэш rsa-sha1
и размер байта блока данных 117 для шифрования данных.
Учитывая мое очень ограниченное понимание криптологии, я склонен полагать, что RSA-PKCS1-KeyEx
его можно использовать только для signing
шифрования, а не для шифрования, и вы обычно подписываете с помощью закрытого ключа, а не открытого.
Даже изменение параметров importKey
для использования RSASSA-PKCS1-v1_5
и sha-1
выдает ошибку, в которой говорится Cannot create a key using the specified key usages.
Возможно ли вообще использовать эти параметры с сертификатом / ключом sha256WithRSAEncryption
и размером ключа 1024, или текущий способ, которым я его использую, является единственно возможным способом использования ключа и шифрования данных?
Ответ №1:
У меня есть сертификат, в котором указан алгоритм подписи
sha256WithRSAEncryption
, а размер ключа равен 1024.
Да, хорошо, но этот алгоритм подписи предназначен для подписи под сертификатом. Это не тот алгоритм подписи, который вам нужно использовать для открытого или закрытого ключа, содержащегося в сертификате.
Человек, который выдал мне открытый ключ, говорит, что они ожидают алгоритм RSA-PKCS1-KeyEx и хэш rsa-sha1 и размер байта блока данных 117 для шифрования данных.
RSA-PKCS1-KeyEx не существует ни в одном стандарте, насколько я знаю, это ужасное название для заполнения шифрования PKCS # 1.
Кроме того, PKCS # 1 v1.5 дополнение даже не использует хэш, поэтому указание SHA-1 просто указывает, что они понятия не имеют, о чем они говорят.
Учитывая мое очень ограниченное понимание криптологии, я склонен полагать, что RSA-PKCS1-KeyEx можно использовать только для подписи, а не для шифрования, и вы обычно подписываете с помощью закрытого ключа, а не открытого.
В стандарте PKCS # 1 указаны два разных метода заполнения: RSAES-PKCS1-v1_5, который представляет собой шифрование с помощью заполнения PKCS # 1 версии v1.5, и RSASSA-PKCS1-v1_5, который представляет собой генерацию подписи с другим заполнением PKCS # 1 версии v1.5.
Даже изменение параметров
importKey
для использования RSASSA-PKCS1-v1_5 и sha-1 выдает ошибку, в которой говорится, что невозможно создать ключ, используя указанные способы использования ключей.
Да, хорошо, если использование ключа в сертификате просто указывает шифрование, то использование «схемы подписи с приложением» или SSA не будет принято.
Возможно ли вообще использовать эти параметры с сертификатом / ключом sha256WithRSAEncryption и размером ключа 1024, или текущий способ, которым я его использую, является единственно возможным способом использования ключа и шифрования данных?
Я вижу только OAEP, указанный в WebCrypto. Вероятно, это связано с тем, что заполнение PKCS # 1 v1.5, которое вы должны использовать, оказалось небезопасным. SHA-1 также не очень безопасен, и размер ключа не равен 1024. Итак, человек, с которым вы разговариваете, на самом деле, похоже, мало что знает о криптографии (как мы обычно ее называем в наши дни).
Это все говорит о том, что библиотека может принимать rsaEncryption
как алгоритм, и в этом случае она может использовать дополнение PKCS # 1 v1.5. Эта опция скрыта в API WebCrypto, который определяет OAEP. И это само по себе показывает, что они тоже не знают, какого черта они делают.