插入智能卡私钥的数字签名

Digital signatures with inserted private key to smart card

我对智能卡编程完全陌生,心中有一个我想开发的特定应用程序。

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

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

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

对于 reader/writer 我买了一个: ACR1251

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

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

如果没有,我将非常感谢关于哪种类型的智能卡能够支持我所请求的功能的提示。当我自己寻找答案时,我发现 JavaCards 支持椭圆曲线密码术。如果我当前的智能卡不支持我要求的功能,Java 智能卡是否是一个允许我自己定义椭圆曲线的好选择?

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

提前致谢。

如果您想对卡进行编程,我强烈推荐 Java 卡兼容卡。确保它具有所需的 ECC 兼容性。通常,您必须在 F(p) 上使用曲线,但这可能就是您想要的。

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

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

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

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

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