【问题标题】:Digital signatures with inserted private key to smart card将私钥插入智能卡的数字签名
【发布时间】:2017-01-31 21:51:13
【问题描述】:

我是智能卡编程的新手,我想开发一个特定的应用程序。

我想使用非接触式智能卡并开发具有以下功能的应用程序:

  1. 我希望能够将一个私钥写入非接触式智能卡,这应该是无法提取的。
  2. 我希望能够将输入发送到智能卡,然后使用存储在智能卡上的私钥生成数字签名,并将输入发送到智能卡。然后应将数字签名的结果作为输出发送。
  3. 对于数字签名算法 (ECDSA),我希望能够定义或将椭圆曲线写入智能卡。

我已经购买了一些基本硬件来启动项目,但我不确定我购买的硬件是否与我心目中的应用程序兼容。

对于读者/作家,我购买了: ACR1251

对于非接触式智能卡,我购买了这种类型的卡: 复旦08 M1S50配FM1108芯片

在阅读了智能卡编程文档后,我对智能卡可以支持哪些内容感到困惑。据我了解,智能卡的操作系统是由制造商定义的,不能更改或扩展。也无法添加其他操作系统。操作系统还准确定义了卡支持哪些 APDU 命令。 因此,我的问题是,我请求的功能是否可以用我当前的硬件实现?

如果没有,我将非常感谢有关哪种类型的智能卡能够支持我请求的功能的提示。在尝试自己寻找答案时,我发现 JavaCards 支持椭圆曲线密码术。如果我当前的智能卡不支持我请求的功能,Java Cards 是一个很好的替代方案,可以让我自己定义椭圆曲线吗?

如果我能找到任何其他有用的提示,例如要研究的特定 APDU 命令或其他有用的开发提示,我们将不胜感激!

提前谢谢你。

【问题讨论】:

    标签: smartcard javacard apdu contactless-smartcard


    【解决方案1】:

    如果您想对卡进行编程,我强烈建议您使用符合 Java Card 的卡。确保它具有您所需的 ECC 兼容性。一般来说,您必须使用 F(p) 上的曲线,但这可能就是您想要的。

    如果您需要对大整数或 ECC 操作进行低级别访问,您可能需要考虑其他智能卡解决方案; Java Card 提供了一个相对高级的接口(可能扩展了实现特定的功能)。您需要具有 ECC 协处理器和足够内存的智能卡/处理器卡,当然,还需要具有足够文档和开发环境的运行时和 API。

    您最好在卡上生成公钥/私钥对,然后导出公钥。当然,您或任何签名接收者也必须信任公钥。

    您拥有的读卡器适用于非接触式智能卡。您目前拥有的似乎是所谓的存储卡,并且无法对其进行编程。您可能只能存储一些字节(或多或少安全)。

    【讨论】:

    • 非常感谢您的快速回复!好的,我将确保改用 Java Card 兼容卡。哦,是的,这是一个很好的观点,因为它可以提高私钥潜在泄漏的安全性。太好了,至少我的读者还好。我不知道存储卡的局限性,感谢您描述它们。我会确保获得兼容 Java Card 的卡。
    【解决方案2】:

    你说的复旦卡好像是1kByte的MIFARE经典卡。这不是智能卡,但正如 Maarten 指出的那样,是一种非接触式存储卡。与椭圆曲线密码学相比,它绝对处于性能范围的另一端,实际上它只使用了一些弱且破碎的对称密码学。

    Thera 也是非 Java 智能卡,无法编程,但能够生成和应用 RSA 以及椭圆曲线密钥。

    【讨论】:

    • 关于其他智能卡的好点,我在回答中添加了一些有关通用智能卡要求的信息。
    • 感谢两位提供的重要信息。作为智能卡领域的初学者,这类信息非常有价值。
    • 我现在已经订购了一些 Java Cards 来制作原型。但是,您确实提到了其他可能能够支持我请求 guidot 的功能的替代卡。如果您有一个特定的替代方案,您能否指出这种智能卡的示例,我将进一步调查它以确定它是否可以支持我需要的功能?
    • 这里 link1 link2 给我们卡片的一些供应商 - 推荐版本 5.x。恐怕,如果您想使用 PKCS11 功能以外的任何功能(需要许可证),则用户手册是必不可少的,这需要保密协议。 (在所谓的 native [non-java] 卡中很常见)。
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多