如何使用Python将特定数据写入智能卡

时间:2015-11-12 06:59:41

标签: python digital-signature smartcard smartcard-reader pcsc

在我的项目中,我尝试使用智能卡为特定数据创建数字签名。

我正在使用智能卡读卡器ACR38U-I1和Linux OS(更准确地说是使用Raspbian OS)

我已经安装了此设备所需的所有驱动程序以及其他库,例如pcsc,pcsc-lite ......

我也有私人/公共gpg密钥对进行数字签名。 据我了解使用智能卡制作数字签名的概念,我必须将私钥写入此卡并在需要创建签名时阅读。

在这种情况下,我遇到了一个问题,我不知道该怎么做。

我打开了pcsc-lite文档[1]并且无法找到如何将数据写入卡的写入方法或示例 https://pcsclite.alioth.debian.org/api/group__API.html [1]

如果有人能以正确的方式指导我,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

典型的方法是:

  • 生成智能卡上的密钥(对);这样做的好处是,没有任何恶意软件能够获取私钥,因为它永远不会离开该卡。

  • 发送命令以生成卡的签名,例如使用要签名的数据的哈希值

从智能卡读取密钥会丢弃智能卡提供的所有安全性。生成签名的最常用方法是使用PKCS 11软件,但可能很难找到Raspbian的软件。我建议找到GPG直接支持的卡片。这样,您就不需要详细了解所有必要的主题。

答案 1 :(得分:1)

(想写一个评论,但它已经很长了......)

(编辑:写这篇文章的时候我并没有意识到你是在非x86环境下工作,所以这个答案可能没用,除非你有选择去x86(英特尔爱迪生可能吗?))

这不是一个解决方案,但可能是一个好方向(我没有使用此特定卡的经验):

该卡有PKCS#11 driver可能提供对其服务的一些访问权限(pkcs11是访问加密令牌的标准化API,请参阅here)。

使用此驱动程序(假设它有效并提供适当的机制),您可以选择继续:

  • 直接从c代码(适合我)

  • 使用它
  • 使用python wrapper(没有这种方式的经验,但你的问题意味着需要python)

  • 使用openssl(例如herehere - 这对我来说很有用)

  • gpg一起使用(从未尝试过,根本不推荐)

首先验证pkcs11驱动程序是否正常工作可能是个好主意(您可以使用firefox浏览器执行此操作,请参阅here)。

附加说明:

  • 我建议初始化卡并使用供应商提供的实用程序生成密钥,并仅使用pkcs11驱动程序实际签署一些数据(这样可以避免许多麻烦的部分)。

  • google for pkcs11及相关内容,这个"扩展评论"只是另一个观点"

祝你好运!