首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点js -使用由带有SmartCard模块的NodeRSA HSM生成的密钥。

节点js -使用由带有SmartCard模块的NodeRSA HSM生成的密钥。
EN

Stack Overflow用户
提问于 2016-12-14 18:21:17
回答 1查看 1.2K关注 0票数 2

我使用模块pkcs11js生成带有智能卡的RSA密钥,如在示例3中所示。

代码语言:javascript
复制
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,我会得到如下内容:

代码语言:javascript
复制
{ privateKey: <Buffer 70 97 f7 03 00 00 00 00>,
publicKey: <Buffer b0 ea f2 03 00 00 00 00> }

现在,我想用NodeRSA模块加密/解密,但不知道如何从以前生成的密钥对中创建用于加密/解密的密钥对象(使用new NodeRSA(...))。

它不需要使用NodeRSA,我只需要一种在NodeRSA中使用智能卡中的密钥对加密/解密的方法,以防有人有关于如何使用另一个库进行加密/解密的示例。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-12-14 21:51:42

有些属性对于PKCS#11有一个默认值。对于私钥,这意味着设置了CKA_PRIVATE。这意味着私有指数(和CRT参数)的值是不可访问的;其想法是使用智能卡保护它们,对吗?

通常,即使设置正确的属性值,也无法从智能卡检索RSA私钥参数(模数除外)。因此,不能使用软件执行私钥操作,而只能使用实现(如NodeRSA ),因为所需的值不可用。您必须使用智能卡执行这些操作,例如使用示例7 of pkcs11js。

好的,这就是私钥,让我们看一看公钥操作。正如您可能已经猜到的,您通常可以检索公钥的属性。对于公钥操作,您需要模数和公共指数。可以使用C_GetAttributeValue检索这些信息。为此,您需要使用C_FindObjects可以找到的对象句柄(很明显,您也可以使用生成密钥对时检索的句柄)。

在检索属性值之后,可以从它们构造公钥,并在软件实现中使用它们。如果还可以直接在智能卡上执行操作,则取决于智能卡和PKCS#11库的实现。

在打印keys时,您当前看到的是公共密钥和私钥的(会话相关的)对象句柄。它们通常完全独立于公钥和私钥的属性(值)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41149465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档