标签: pkcs#11

使用硬件令牌进行登录

我是密码学的新手,正在研究PKI和PKCS等.我理解PKI的基本概念以及它如何用于加密/解密.然而,我很困惑如何使用USB令牌或智能卡等硬件令牌来安全登录您的计算机.以下是我理解它们的步骤以及我感到困惑的部分(对于问题长度提前抱歉):

场景:网络上的计算机xyz包含的数据只有属于SECRET组的用户才能访问.用户Bob和Joe属于该组,并且已经获得了USB令牌,他们可以使用这些令牌来提供能够访问这些资源的凭据.USB令牌采用双因素身份验证,需要输入引脚.令牌符合PKCS11.

  1. Bob将USB令牌插入Linux机器
  2. PAM-PKCS11模块识别此事件并提示Bob输入其引脚.
  3. 一旦Bob正确输入了他的4位数PIN,模块就会检查Bob的令牌上的证书的有效性(这会有所不同,但最小值是多少?):
    • 找到根证书以检查受信任的CA.
    • 检查证书有效日期和撤销列表
    • 将令牌上的ID与用户文件(其中?,缺少步骤)或目录(LDAP等)匹配
  4. 如果一切看起来都很好,模块会通知PAM成功的结果.
  5. 此行标记为足够,因此PAM接受身份验证并且Bob已登录,并且可以从SECRET组查看仅限用户的信息.

我缺少的部分是关于Bob是否可以访问这台机器的信息存储在哪里以及他是如何将Bob与网络(甚至桌面)用户联系起来的.据我所知,关于Bob的其他识别数据将存储在USB上,包括ID(例如,电子邮件地址).但是,这种强大的安全性如何?在登录过程中使用加密的地方,如果有的话(或者这不是这些令牌的真正目的)?如果有人拿到USB并知道4位数的引脚,那似乎就是所有需要的,对吧?此外,它本质上是CA中的信任,它允许信任另一个用户无法获得新的USB令牌并使用可信CA获取新证书但是指定所有识别数据与Bob的相同?我知道有一些关键部分我不知道......但在阅读了几十篇文章之后,这个领域的解释似乎已经被掩盖了.使用硬件令牌作为登录包含敏感数据的计算机的身份验证的充分方法是一个好主意吗?或者这些令牌的目的主要是安全地存储其他应用程序中使用的密钥对?感谢您的帮助!

linux pam pkcs#11

3
推荐指数
1
解决办法
3676
查看次数

我可以从智能卡中的密钥容器获取公钥/私钥对吗?

我可以使用PKCS#11或CryptoAPI从智能卡内的密钥容器中获取公钥/私钥对吗?

c++ smartcard cryptoapi pkcs#11 private-key

3
推荐指数
2
解决办法
3603
查看次数

什么是PKCS11中的"机制"?

机制在PKCS11中意味着什么?例如:CKM_RSA_PKCS.

机制(CKM_RSA_PKCS)和签名算法(NoneWithRSA)之间有什么区别?

security rsa digital-signature pkcs#11

3
推荐指数
1
解决办法
2466
查看次数

从 IIS 调用 C_GetSlotList 时失败,但从 IIS Express 调用时失败

所以我有这个 C# Web 服务,最终通过放置在 system32 文件夹中的一些智能卡 USB 驱动程序从德国 Elster 工具包 (Eric) 调用 C_GetSlotList() 方法。我的计算机服务器中有一张智能卡。当我在 IIS Express 中托管我的服务时,一切正常,但在 IIS 中则不然。可能是什么问题呢?是否有什么东西阻止 IIS 访问驱动程序?我确保我正在使用的应用程序池的身份具有管理员权限。我使用的是 Windows 7 Professional,这是我收到的日志:

2016-10-18 15:16:58,144560  INFO: esigner       cryptokiVersion = 02.14
2016-10-18 15:16:58,144560  INFO: esigner        manufacturerID = A.E.T. Europe B.V.              
2016-10-18 15:17:01,244870 ERROR: esigner       error calling C_GetSlotList()
2016-10-18 15:17:01,244870 ERROR: esigner                    rv = 00000006
2016-10-18 15:17:01,244870 ERROR: esigner           ulSlotCount = 0
2016-10-18 15:17:01,244870 ERROR: esigner       pkcs11_init() failed
2016-10-18 15:17:01,245870  INFO: esigner  ENGINE_set_default_RSA(0436CC30) = returned 0
2016-10-18 15:17:01,245870  INFO: esigner       esiclGetToken() …
Run Code Online (Sandbox Code Playgroud)

iis cryptography pkcs#11

3
推荐指数
1
解决办法
1273
查看次数

openSSL 的 PKCS#11 引擎

我正在尝试在 Windows 7 下设置 openSSL 以使用供应商特定的安全模块。

我从供应商那里得到了一个 PKCS#11 API dll(比如说vendor.dll)。PKCS#11引擎已根据https://github.com/OpenSC/libp11创建

如链接中所述,为了测试,我开始

openssl 引擎 pkcs11 -t

但得到:

D:\Gateway\openSSL\Win32\Release>openssl engine pkcs11 -t
11020:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:179:filename(\usr\local\ssl\lib\engines\pkcs11.dll)
11020:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:233:
11020:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:.\crypto\engine\eng_dyn.c:467:
11020:error:2606A074:engine routines:ENGINE_by_id:no such engine:.\crypto\engine\eng_list.c:390:id=pkcs11
Run Code Online (Sandbox Code Playgroud)

配置文件是:

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = D:\Gateway\libp11\libp11-master\src\pkcs11.dll
MODULE_PATH = D:\Gateway\driver\smgw\Win32\vendor.dll
init = 0
Run Code Online (Sandbox Code Playgroud)

它尝试在 unix 目录 \usr\local 中查找 dll... 看来,动态路径的内容根本没有被评估,因为我可以在那里指定任何内容,我总是收到上面的错误消息。

我究竟做错了什么?

openssl pkcs#11 hardware-security-module

3
推荐指数
1
解决办法
1万
查看次数

AES 密钥生成模板中使用的 CKA_VALUE 是什么?

我正在尝试将 safenet HSM 与我们的应用程序集成。我正在用 C 编写程序。我指的是PKCS11 v2.20 cryptoki标准文档。我需要生成 AES 256 位密钥。在定义密钥生成模板时,我不确定需要为 CKA_VALUE 传递什么值。在生成 DES3 密钥时,我没有提供此属性,但我能够生成密钥。

\n\n

我搜索了 CKA_LABEL 的示例程序,但未能找到任何可靠的 C 语言示例。我发现了几个 Java 程序,其中使用了 CKA_VALUE_LEN 而不是 CKA_VALUE。我不确定这是否有效。

\n\n

这是文档中给出的片段。大多数网站仅提供此片段作为示例。没有为数组值指定任何内容。

\n\n
CK_OBJECT_CLASS class = CKO_SECRET_KEY;\nCK_KEY_TYPE keyType = CKK_AES;\nCK_UTF8CHAR label[] = \xe2\x80\x9cAn AES secret key object\xe2\x80\x9d;\nCK_BYTE value[] = {...};\nCK_BBOOL true = CK_TRUE;\nCK_ATTRIBUTE template[] = {\n{CKA_CLASS, &class, sizeof(class)},\n{CKA_KEY_TYPE, &keyType, sizeof(keyType)},\n{CKA_TOKEN, &true, sizeof(true)},\n{CKA_LABEL, label, sizeof(label)-1},\n{CKA_ENCRYPT, &true, sizeof(true)},\n{CKA_VALUE, value, sizeof(value)}\n};\n
Run Code Online (Sandbox Code Playgroud)\n

c aes pkcs#11 public-key-encryption

3
推荐指数
1
解决办法
1813
查看次数

从pkcs#11令牌或智能卡访问证书和私钥

我在C#4中创建一个必须签署XML文件的应用程序.我没有遇到什么大问题,直到我遇到这个问题:访问智能卡/令牌以获取其证书和私钥.
什么都没有开箱即用,只需获得证书和密钥,基于密码.

没有任何付费框架,有谁知道如何做到这一点?

c# smartcard pkcs#11 c#-4.0

2
推荐指数
1
解决办法
5894
查看次数

如何检查智能卡在Linux上是否正常工作?

我有PKCS-11支持的智能卡吗?我只想检查我的智能卡是否工作正常。如何在Ubuntu上检查它?请指导我。我可以使用什么软件?我应该怎么做?

linux smartcard pkcs#11

2
推荐指数
2
解决办法
8545
查看次数

坏填充异常 - pkcs11中的RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING

我的应用程序正在访问e-Token以解密来自服务器的响应

来自服务器的会话密钥使用以下方式加密: -

RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING

我正在使用SunPKCS11 Provider来实现对加密令牌的访问.每当我尝试使用上述机制解密时,即使用RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING,我得到: -

**javax.crypto.BadPaddingException: doFinal() failed  
    at sun.security.pkcs11.P11RSACipher.implDoFinal(P11RSACipher.java:328)  
    at sun.security.pkcs11.P11RSACipher.engineDoFinal(P11RSACipher.java:353)  
    at javax.crypto.Cipher.doFinal(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)

以下是我的代码: -

private static final String TRANSFORMATION = "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING";
private static final String SECURITY_PROVIDER = "BC";
private static final String DIGEST_ALGORITHM = "SHA-256";
private static final String MASKING_FUNCTION = "MGF1";
Run Code Online (Sandbox Code Playgroud)

错误发生的代码片段如下: -

private byte[] decryptSecretKeyData(byte[] encryptedSecretKey, byte[] iv, PrivateKey privateKey) throws Exception {

        try {
            Cipher rsaCipher = Cipher.getInstance(TRANSFORMATION, SECURITY_PROVIDER);

            System.out.println("Cipher block initialized"); - **Printed**
            PSource pSrc = (new PSource.PSpecified(iv));
            System.out.println("PSource inisitialized"); …
Run Code Online (Sandbox Code Playgroud)

java encryption bouncycastle smartcard pkcs#11

2
推荐指数
1
解决办法
7060
查看次数

PKCS11:导出不敏感且可提取的密钥

我生成了一个可提取且不敏感的派生密钥。我想将它从令牌中导出并查看它的再见。我怎样才能做到这一点?

key token pkcs#11 hsm

2
推荐指数
1
解决办法
1055
查看次数