如何使用 Python 将特定数据写入智能卡
How to write specific data to a smart card using Python
在我的项目中,我尝试使用智能卡为特定数据创建数字签名。
我正在使用智能卡 reader ACR38U-I1 和 Linux OS(更准确地说是 Raspbian OS)
我已经安装了此设备所需的所有驱动程序和其他库,例如 pcsc、pcsc-lite ...
我还得到了 private/public gpg 密钥对来制作数字签名。
据我了解使用智能卡进行数字签名的概念,我必须将私钥写入这张卡并在需要创建签名时读取它。
在这种情况下,我遇到了一个问题,我不知道该怎么做。
我打开了 pcsc-lite 文档 [1],但找不到如何将数据写入卡的写入方法或示例
https://pcsclite.alioth.debian.org/api/group__API.html[1]
如果有人能指导我正确的方法,我将不胜感激。
典型的方法是:
生成智能卡上的密钥(对);这样做的好处是,任何恶意软件都无法获取私钥,因为它永远不会离开卡。
发送命令生成卡片签名,例如用要签名的数据的哈希值
读取 智能卡中的密钥会丢弃智能卡提供的所有安全性。生成签名的最常见方法是使用 PKCS 11 软件,但 Raspbian 可能很难找到一个。我建议找一张 GPG 直接支持的卡。这样您就不需要详细了解所有必要的主题。
(本来想写评论的,但是写的有点长。。。)
(编辑:写这篇文章时我没有意识到你在非 x86 环境中工作,所以这个答案可能没用,除非你可以选择 x86(也许是英特尔爱迪生?))
这不是解决方案,但可能是一个好的方向(我对这张卡没有经验):
有个PKCS#11 driver for the card which probably provides some access to its services (pkcs11 is a standardized API to access cryptographic tokens, see here).
有了这个 驱动程序(假设它可以工作并提供适当的机制),您有一些选择可以继续:
直接从 c
代码使用它(对我有效)
使用python wrapper(没有这种方式的经验,但你的问题暗示需要python)
将它与 gpg 一起使用(从未尝试过,根本不会推荐)
首先验证 pkcs11 驱动程序是否正常工作可能是个好主意(您可以使用 firefox 浏览器执行此操作,参见 here)。
补充说明:
我建议初始化卡并使用供应商提供的实用程序生成密钥,并仅使用 pkcs11 驱动程序实际签署一些数据(这种方式避免了许多麻烦的部分)。
为 pkcs11 和相关内容做 google,这个 "extended comment" 只是另一个 "point of view"
祝你好运!
在我的项目中,我尝试使用智能卡为特定数据创建数字签名。
我正在使用智能卡 reader ACR38U-I1 和 Linux OS(更准确地说是 Raspbian OS)
我已经安装了此设备所需的所有驱动程序和其他库,例如 pcsc、pcsc-lite ...
我还得到了 private/public gpg 密钥对来制作数字签名。 据我了解使用智能卡进行数字签名的概念,我必须将私钥写入这张卡并在需要创建签名时读取它。
在这种情况下,我遇到了一个问题,我不知道该怎么做。
我打开了 pcsc-lite 文档 [1],但找不到如何将数据写入卡的写入方法或示例 https://pcsclite.alioth.debian.org/api/group__API.html[1]
如果有人能指导我正确的方法,我将不胜感激。
典型的方法是:
生成智能卡上的密钥(对);这样做的好处是,任何恶意软件都无法获取私钥,因为它永远不会离开卡。
发送命令生成卡片签名,例如用要签名的数据的哈希值
读取 智能卡中的密钥会丢弃智能卡提供的所有安全性。生成签名的最常见方法是使用 PKCS 11 软件,但 Raspbian 可能很难找到一个。我建议找一张 GPG 直接支持的卡。这样您就不需要详细了解所有必要的主题。
(本来想写评论的,但是写的有点长。。。)
(编辑:写这篇文章时我没有意识到你在非 x86 环境中工作,所以这个答案可能没用,除非你可以选择 x86(也许是英特尔爱迪生?))
这不是解决方案,但可能是一个好的方向(我对这张卡没有经验):
有个PKCS#11 driver for the card which probably provides some access to its services (pkcs11 is a standardized API to access cryptographic tokens, see here).
有了这个 驱动程序(假设它可以工作并提供适当的机制),您有一些选择可以继续:
直接从
c
代码使用它(对我有效)使用python wrapper(没有这种方式的经验,但你的问题暗示需要python)
将它与 gpg 一起使用(从未尝试过,根本不会推荐)
首先验证 pkcs11 驱动程序是否正常工作可能是个好主意(您可以使用 firefox 浏览器执行此操作,参见 here)。
补充说明:
我建议初始化卡并使用供应商提供的实用程序生成密钥,并仅使用 pkcs11 驱动程序实际签署一些数据(这种方式避免了许多麻烦的部分)。
为 pkcs11 和相关内容做 google,这个 "extended comment" 只是另一个 "point of view"
祝你好运!