我是密码学的新手,正在研究PKI和PKCS等.我理解PKI的基本概念以及它如何用于加密/解密.然而,我很困惑如何使用USB令牌或智能卡等硬件令牌来安全登录您的计算机.以下是我理解它们的步骤以及我感到困惑的部分(对于问题长度提前抱歉):
场景:网络上的计算机xyz包含的数据只有属于SECRET组的用户才能访问.用户Bob和Joe属于该组,并且已经获得了USB令牌,他们可以使用这些令牌来提供能够访问这些资源的凭据.USB令牌采用双因素身份验证,需要输入引脚.令牌符合PKCS11.
我缺少的部分是关于Bob是否可以访问这台机器的信息存储在哪里以及他是如何将Bob与网络(甚至桌面)用户联系起来的.据我所知,关于Bob的其他识别数据将存储在USB上,包括ID(例如,电子邮件地址).但是,这种强大的安全性如何?在登录过程中使用加密的地方,如果有的话(或者这不是这些令牌的真正目的)?如果有人拿到USB并知道4位数的引脚,那似乎就是所有需要的,对吧?此外,它本质上是CA中的信任,它允许信任另一个用户无法获得新的USB令牌并使用可信CA获取新证书但是指定所有识别数据与Bob的相同?我知道有一些关键部分我不知道......但在阅读了几十篇文章之后,这个领域的解释似乎已经被掩盖了.使用硬件令牌作为登录包含敏感数据的计算机的身份验证的充分方法是一个好主意吗?或者这些令牌的目的主要是安全地存储其他应用程序中使用的密钥对?感谢您的帮助!
我可以使用PKCS#11或CryptoAPI从智能卡内的密钥容器中获取公钥/私钥对吗?
机制在PKCS11中意味着什么?例如:CKM_RSA_PKCS.
机制(CKM_RSA_PKCS)和签名算法(NoneWithRSA)之间有什么区别?
所以我有这个 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) 我正在尝试在 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... 看来,动态路径的内容根本没有被评估,因为我可以在那里指定任何内容,我总是收到上面的错误消息。
我究竟做错了什么?
我正在尝试将 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\nCK_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};\nRun Code Online (Sandbox Code Playgroud)\n 我在C#4中创建一个必须签署XML文件的应用程序.我没有遇到什么大问题,直到我遇到这个问题:访问智能卡/令牌以获取其证书和私钥.
什么都没有开箱即用,只需获得证书和密钥,基于密码.
没有任何付费框架,有谁知道如何做到这一点?
我有PKCS-11支持的智能卡吗?我只想检查我的智能卡是否工作正常。如何在Ubuntu上检查它?请指导我。我可以使用什么软件?我应该怎么做?
我的应用程序正在访问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) 我生成了一个可提取且不敏感的派生密钥。我想将它从令牌中导出并查看它的再见。我怎样才能做到这一点?