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

时间:2017-01-31 21:51:13

标签: smartcard javacard apdu contactless-smartcard

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

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

  1. 我希望能够为非智力联系人卡写一个私钥,这是不可能提取的。
  2. 我希望能够将输入发送到智能卡,然后使用存储在智能卡上的私钥生成数字签名,并将输入发送到智能卡。然后应将数字签名的结果作为输出发送。
  3. 对于数字签名算法(ECDSA),我希望能够将椭圆曲线定义或写入智能卡。
  4. 我已经购买了一些基本硬件来启动项目,但我不完全确定我购买的硬件是否兼容我想到的应用程序。

    对于读者/作家我买了一个: ACR1251

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

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

    如果没有,我非常感谢智能卡能够支持我要求的功能的提示。在尝试自己找到答案时,我发现JavaCards支持椭圆曲线加密。如果我目前的智能卡不支持我要求的功能,那么Java Card是一个很好的选择,可以让我自己定义椭圆曲线吗?

    我会发现任何其他有用的提示,例如要查看的特定APDU命令或其他有用的开发提示,我们将非常感谢!

    提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

您的读者可以使用非接触式智能卡。你现在拥有的东西似乎是所谓的存储卡,而那些无法编程。您可能只能存储一些字节(或多或少安全)。

答案 1 :(得分:1)

您提到的复旦卡似乎是1 kByte MIFARE经典卡。这不是智能卡,但正如Maarten指出的那样,是一种非接触式存储卡。与椭圆曲线加密相比,它绝对是性能谱的另一端,实际上它只使用了一些弱而破碎的对称加密。

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