【问题标题】:How can I sign a file with PKCS11 in Python?如何在 Python 中使用 PKCS11 对文件进行签名?
【发布时间】:2023-03-13 20:38:01
【问题描述】:

如何在 Python 中使用PKCS11 对文件进行签名?

我正在寻找一种使用“加密令牌接口”对.txt 文件进行签名的方法,但我还没有找到解决方案。

我的第一个想法是使用pycrypto,但文档没有提到这一点。

【问题讨论】:

  • 我的应用程序的主要需求是“加密令牌接口”的数字签名......例如,这是 Groovy 中的行代码,我想知道如何在 Django KeyStore 中执行pKstore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");

标签: python django token digital-signature pkcs#11


【解决方案1】:

pycrypto 是一个低级模块,它为您提供构建密码系统所需的所有部分,而不是完整的密码系统实现。

另外,pycrypto 不支持 PKCS#11。主要的替代品也没有。即使您使用其中一个 OpenSSL 包装器,OpenSSL 的正常构建本身也没有编译 PKCS#11 支持。您需要为您的特定硬件(或多个此类库)在配置时构建 OpenSSL。

最重要的是,如果您正在执行 PKCS#11,您可能需要的其中一个部分是与智能卡和其他硬件令牌接口的方法,而 pycrypto 根本不做那部分。

您可能想要使用内置硬件支持的更高级别的库,例如pykcs11。这包含了一个 C 库,该库知道如何使用来自不同供应商的各种不同硬件来执行 Windows 内置 PKCS#11 和跨平台 PKCS#11。希望您可以只使用高级 API;您可能需要使用低级 API(或者甚至组合两个库——例如,您可能想使用 pykcs11 生成密钥对,然后使用 pycrypto 使用私钥签名)。

【讨论】:

  • 我发现的例子不适用于网络(我可能错了)。我的同事在Groovy 中向我展示了如何做(这是可能的)。我正在寻找 Web 开发的解决方案
  • @Guilherme:如果您在这里需要进一步的帮助,您将不得不向我们提供更多信息。你在说哪些例子?它们如何不适用于网络?您的同事在 Groovy 中向您展示了什么?
  • 我不应该在信息有限的情况下完成这个问题,抱歉。我的应用程序的主要需要是“加密令牌接口”的digital-signature...我想在Django 做,需要是一个Web 应用程序。如果我不能使用 django,我将开始研究如何在 Groovy 中开发“Web 应用程序”,因为我的同事有办法使用 'java.security.KeyStore' 来解决,而我正在查看 pykcs11 中的示例,在我看来是一个非常具体的脚本,提到了 DLL 和类似的东西。
  • 例如,这是Groovy 中的行代码,我想知道如何在Django KeyStore pKstore = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); 中进行操作
  • pycrypto 不会以任何方式包装 openssl。
【解决方案2】:

python-pkcs11 是您想要使用的。 signing and verifying 上有文档。

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多