Java:PKCS11 SafeNet eToken 5110:慢;以及如何编写EBICS签名机制A006?

时间:2018-01-16 16:02:18

标签: java pkcs#11

信息:

  • EBICS有两种签名机制, A005 A006 EBICS specification > 2017-03-29-EBICS V 3.0-FinalVersion.pdf
  • 对于EBICS A005,我们一直使用SHA256withRSA签名算法。它正在发挥作用。
  • SafeNet eToken 5110 用于对数据文件进行签名。它基于 PKCS11 标准。其驱动程序/软件称为“SafeNet Authentication Client”。

问题和疑问:

  • SafeNet eToken 5110非常慢,SHA 256 ,代码signer.update(data);使用RSA算法。如果我们使用RSA将算法更改为SHA 512 ,则没问题。 其他版本的eToken“3SKey基本令牌(eToken PRO)”没问题。您知道其他人是否遇到过同样的问题吗?或者只是我们?解决方案是什么?
  • 因为目前我们找不到解决方案,我们正在考虑EBICS A006,希望它会更快。但是,还没有找到为它开发Java代码的方法。不知道要使用的算法名称。我尝试过 IAIK ,但无法连接本机库 libeTPkcs11.so eTPKCS11.dll BouncyCastle 不适用于 PKCS11 。你有什么建议吗?谢谢。

使用SunPKCS11的代码( 有效,但在.update(...) 时速度慢)

String pkcs11config;
pkcs11config = ....
ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
SunPKCS11 provider = new SunPKCS11(confStream);
Security.addProvider(provider);
char[] password = "....".toCharArray();
String alias = "...";
PrivateKey privateKey = (PrivateKey) keystore.getKey(alias, password);
Signature signer = Signature.getInstance("SHA256withRSA", keystore.getProvider());
signer.initSign(privateKey);
String data = "Hello world......";
signer.update(data.getBytes());  // SLOW HERE! THE BIGGER THE DATA, THE SLOWER IT IS.
byte[] signedData = signer.sign();

尝试使用IAIK的代码:

String pwd = System.getProperty("user.dir");
String dllFile = pwd + "/libeTPkcs11.so";
Module m = Module.getInstance(dllFile);

=> error : Exception in thread "main" java.lang.UnsatisfiedLinkError: no pkcs11wrapper in java.library.path

0 个答案:

没有答案