Tag: hsm

让java IAIK PKCS11包装器适用于nfast

我想让IAIK PKCS11包装器与nfast一起工作。 它总是期待pkcs11wrapper库文件并抛出错误 – java.lang.UnsatisfiedLinkError:pkcs11wrapper(在java.library.path中找不到) 如何使用HSM提供的库文件( /opt/nfast/toolkits/pkcs11/libcknfast.so )? 任何帮助都非常感谢和遗忘!

远程使用Java连接SafeNet HSM

我们的应用程序需要使用java通过Luna JSP api与SafeNet HSM进行交互。 我们尝试了以下内容并且能够连接 LunaSlotManager slotManager = LunaSlotManager.getInstance(); slotManager.login(password); 但我的问题是,在我的程序中,我没有给出任何HSM设备的IP地址。 那怎么检测和连接?

如何将HSM加密与JAVA集成?

如何将硬件安全模块加密与Java应用程序集成? 我正在寻找代码样本连接到HSM,生成密钥(非对称,对称),加密和解密数据(非对称,对称)和存储密钥。

PKCS11 deriveKey()和encrypt()返回3DES的不同结果

我正在使用HSM和PKCS11处理密钥派生问题,目前我无法理解为什么我看到完全不同的结果取决于我是否使用deriveKey()方法而不是使用encrypt()方法。 在这两种情况下,我都试图使用DESede / ECB / NoPadding算法来获得结果,但是根据我用来生成结果的方法(deriveKey与加密),我看到了不同的结果。 退一步以提供高级概述……我正在使用Global Platform使用的特定密钥派生方法来使用于智能卡的主密钥多样化。 该方法以主密钥和用于导出新密钥的8字节数据(多样化数据)开始。 div数据字节实际上只是使用DESede / ECB / NoPadding用主密钥加密,结果用作新导出的3DES密钥的一部分。 (实际上,执行了多次加密,并将结果连接在一起形成新密钥,但这不是问题。) 我在两种情况下都validation了主密钥,validation了两种情况下的多样化数据是相同的,validation了我使用相同的算法和相同的填充。 我也尝试将派生密钥模板更改为DES,2DES,3DES。 所有产生的结果都相似,只是长度不同。 目前我已经使用IAIK包装器(用Java编写的pkcs11包装器)实现了我的测试用例,我将在此处发布。 密钥只是一个测试密钥,div数据是样本div数据,因此这里没有敏感信息。 我首先在HSM中创建基本密钥,然后尝试使用多样化数据调用session.deriveKey()来获取新密钥。 派生的关键字节以hex打印(键值不正确,基于我当前工作的实现,它在内存中而不是在HSM中导出密钥)。 接下来,我只是初始化会话以使用主密钥执行加密,然后加密多样化数据。 这产生了预期值(再次根据工作实现进行检查)。 当我使用相同的基本密钥,相同的div数据和相同的加密算法时,我正在寻找的是对这些操作产生不同结果的原因的任何了解。 我不明白deriveKey()在表面下做了什么,我无法找到任何文档或源代码来解释这一点。 我必须能够使用deriveKey()方法,因为派生密钥在HSM之外不可用。 有任何见解赞赏。 Mechanism keyGenerationMechanism = Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN); List supportedMechanisms = Arrays.asList(token.getMechanismList()); if (!supportedMechanisms.contains(Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN))) { output_.println(“Mechanism not supported: DES3_KEY_GEN”); return; } // This is the master key that I want to […]

HSM错误| 私钥必须是RSAPrivate(Crt)密钥的实例或具有PKCS#8

从HSM检索私钥时解密数据时收到错误。 我在java.security中添加了sunpkcs11提供程序。 因此,不要通过代码添加提供程序。 文本已成功加密。 但是,在解密加密文本时,我在下面的行中得到以下错误: cipher.init(Cipher.DECRYPT_MODE, privateKey); 我在这里失踪的是什么? 错误: Caused by: java.security.InvalidKeyException: Private key must be instance of RSAPrivate(Crt)Key or have PKCS#8 encoding at sun.security.pkcs11.P11RSAKeyFactory.implTranslatePrivateKey(P11RSAKeyFactory.java:101) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11KeyFactory.engineTranslateKey(P11KeyFactory.java:132) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11KeyFactory.convertKey(P11KeyFactory.java:65) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11RSACipher.implInit(P11RSACipher.java:199) [sunpkcs11.jar:1.7.0_85] at sun.security.pkcs11.P11RSACipher.engineInit(P11RSACipher.java:168) [sunpkcs11.jar:1.7.0_85] at javax.crypto.Cipher.init(Cipher.java:1068) [jce.jar:1.7.0_85] at javax.crypto.Cipher.init(Cipher.java:1012) [jce.jar:1.7.0_85]enter code here 以下是代码: import java.io.ByteArrayOutputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; […]

SoftHSM2 java无法正常工作

我正在尝试在SoftHSM 2上进行POC,但有些我如何得到以下问题。 Exception in thread “main” java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_SLOT_ID_INVALID at sun.security.pkcs11.wrapper.PKCS11.C_GetSlotInfo(Native Method) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:365) … 2 more HSM配置文件: # SoftHSM v2 configuration file name= SoftHSM2 library = C:\SoftHSM2\lib\softhsm2-x64.dll slot=1 如果我评论slot = 1,那么我得到了 Exception in thread “main” java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) […]

初始化后如何完成SunPKCS11 Provider?

我通过以下方式初始化了SunPKCS11提供商: Provider provider = new sun.security.pkcs11.SunPKCS11(“path_to_pkcs11.cfg”); Security.addProvider(provider); 然后我使用此提供程序初始化KeyStore以使用密钥进行密码操作。 KeyStore ks = KeyStore.getInstance(“PKCS11”, provider); ks.load(null, “password”.toCharArray()); 完成密码操作后, 如何使用PKCS11令牌完成会话? 我试过删除提供程序,但它没有用。 Security.removeProvider(“sunPCKS11ProviderName”); 下次我尝试与令牌通信时,我从令牌CKR_CRYPTOKI_ALREADY_INITIALIZED抛出此exception 更新 : 我努力了 sun.security.pkcs11.SunPKCS11.logout(); 但它也没有用。 我有一个用例,我必须使用PKCS#11 Wrapper和Provider。 为了能够使用包装器,我必须完成提供程序,否则当包装器尝试与令牌通信时,令牌会抛出CKR_CRYPTOKI_ALREADY_INITIALIZED错误。 更新代码: 我正在使用Sun的PKCS#11 Provider和IAIK的PKCS#11 Wrapper。 public static void providerAndWrapperIssue() throws Exception { final String name = “ANY_NAME”; final String library = “LOCATION OF THE TOKENS DLL/SO”; final String […]