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

标签 smartcard javacard apdu contactless-smartcard

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

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

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

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

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

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

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

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

任何我认为有用的其他技巧,例如要研究的特定 APDU 命令或其他有用的开发技巧,将不胜感激!

提前谢谢您。

最佳答案

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

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

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

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

关于smartcard - 将私钥插入智能卡的数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968152/

相关文章:

c++ - 如何在 C++ 中使用单个 APDU 发送和获取数据?

java - 在 cref 上导入 javacard 小程序

smartcard - 如何获得唯一的智能卡ID?

android - 主机卡仿真 - 是否可以将字符串从一部手机传输到另一部手机?

Android NFCA 收发成功失败

smartcard - 接触式和非接触式接口(interface)之间的APDU命令之间的区别

smartcard - 无法生成正确的应用程序密码

cross-browser - 从通用浏览器访问智能卡的架构?或 : How to bridge the gap from browser to PC/SC stack?

smartcard - EMV卡的数据结构

java - 性能指标: Java vs JavaCard