Я использую модуль pkcs11js для генерации ключей RSA с помощью смарт-карты HSM, как показано на рисунке here in the Example #3.node js - использовать ключ, сгенерированный SmartCard HSM с модулем NodeRSA
var publicKeyTemplate = [
{ type: pkcs11js.CKA_CLASS, value: pkcs11js.CKO_PUBLIC_KEY },
{ type: pkcs11js.CKA_TOKEN, value: false },
{ type: pkcs11js.CKA_LABEL, value: "My RSA Public Key" },
{ type: pkcs11js.CKA_PUBLIC_EXPONENT, value: new Buffer([1, 0, 1]) },
{ type: pkcs11js.CKA_MODULUS_BITS, value: 2048 },
{ type: pkcs11js.CKA_VERIFY, value: true }
];
var privateKeyTemplate = [
{ type: pkcs11js.CKA_CLASS, value: pkcs11js.CKO_PRIVATE_KEY },
{ type: pkcs11js.CKA_TOKEN, value: false },
{ type: pkcs11js.CKA_LABEL, value: "My RSA Private Key" },
{ type: pkcs11js.CKA_SIGN, value: true },
];
var keys = pkcs11.C_GenerateKeyPair(session, { mechanism: pkcs11js.CKM_RSA_PKCS_KEY_PAIR_GEN }, publicKeyTemplate, privateKeyTemplate);
Если я печатаю keys
, я получаю что-то вроде:
{ privateKey: <Buffer 70 97 f7 03 00 00 00 00>,
publicKey: <Buffer b0 ea f2 03 00 00 00 00> }
Теперь я хочу, чтобы зашифровать/расшифровать с NodeRSA module, но не знаете, как создать ключевой объект (с new NodeRSA(...)
), что используется для шифрования/дешифрования из этой пары ключей, ранее сгенерированной.
Не нужно использовать NodeRSA, мне просто нужен способ шифрования/расшифровки в Node JS с помощью пары ключей с смарт-карты, если у кого-то есть пример того, как это сделать с другой библиотекой. Благодаря!
Спасибо, я извлекаю модуль и публичный экспонент с помощью 'C_GetAttributeValue', как вы предложили, знаете ли вы, как создать открытый ключ или как зашифровать с помощью открытого ключа на смарт-карте, используя эту библиотеку? Пример 7 для подписи/проверки, я попробовал [пример 8] (https://www.npmjs.com/package/pkcs11js#example-8) - изменение второго аргумента, но я получаю: 'Ошибка: CKR_FUNCTION_NOT_SUPPORTED', хотя Я знаю, что смарт-карта поддерживает шифрование/дешифрование RSA, поэтому я что-то делаю неправильно ... – myrmix
@myrmix Библиотека PKCS # 11 также должна ее поддерживать. Часто смарт-карты поддерживают * расшифровку * с помощью закрытого ключа (для шифрования с открытым ключом на карте мало пользы). Что касается построения открытого ключа, быстрый поиск показывает «http: // nullege.com/codes/search/M2Crypto.RSA.new_pub_key' из M2Crypto, возможно, есть другие. –