Diffie Hellman JavaCard
我对JavaCard上的DiffieHellman有问题。我有这门课: ()(它的文件更大,所以我上传到pastebin,不确定这是否有问题) 然后我创建了它的两个实例,并像这样调用它(仅显示一个实例): 霍蒂和卡蒂是公众价值观。我在桌面应用程序上试用过它,所以我保证与JavaCard的通信没有问题。所以我的问题是,在所有这些共享秘密不同之后,我不知道为什么,因为我通过RSA的解密执行Y=G^bobPrivKey mod P来获得Y的传输,然后通过RSA的解密执行s=Y^a mod P 提前感谢您的回答。(假设您使用的是桌面上的Java卡API仿真) jCardSim存在一个问题,即它总是使用CRT私钥(如所使用的Diffie Hellman JavaCard,java,javacard,diffie-hellman,Java,Javacard,Diffie Hellman,我对JavaCard上的DiffieHellman有问题。我有这门课: ()(它的文件更大,所以我上传到pastebin,不确定这是否有问题) 然后我创建了它的两个实例,并像这样调用它(仅显示一个实例): 霍蒂和卡蒂是公众价值观。我在桌面应用程序上试用过它,所以我保证与JavaCard的通信没有问题。所以我的问题是,在所有这些共享秘密不同之后,我不知道为什么,因为我通过RSA的解密执行Y=G^bobPrivKey mod P来获得Y的传输,然后通过RSA的解密执行s=Y^a mod P 提前感谢
rsakepairgenerator
总是生成CRT私钥,这些私钥总是实现RSAPrivateCrtKeyParameters
——请参阅和)
因此,每个jCardSim RSA私钥(即使是使用ALG_RSA
生成的私钥)都由RSAPrivateCrtKeyImpl
实现(您可以使用.getClass().getCanonicalName()
进行检查)
真正的问题是,RSAPrivateCrtKeyImpl
类在执行实际加密时忽略模数的值:
:
--不使用模数
字段:
public CipherParameters getParameters() {
if (!isInitialized()) {
CryptoException.throwIt(CryptoException.UNINITIALIZED_KEY);
}
// modulus = p * q;
return new RSAPrivateCrtKeyParameters(p.getBigInteger().multiply(q.getBigInteger()), null,
null, p.getBigInteger(), q.getBigInteger(),
dp1.getBigInteger(), dq1.getBigInteger(), pq.getBigInteger());
}
因此,用于设置所需DH组素数的参数无效,使用原始(生成的)模
祝你好运 (假设您在桌面上使用Java卡API仿真)
jCardSim存在一个问题,即它总是使用CRT私钥(如所使用的rsakepairgenerator
总是生成CRT私钥,这些私钥总是实现RSAPrivateCrtKeyParameters
——请参阅和)
因此,每个jCardSim RSA私钥(即使是使用ALG_RSA
生成的私钥)都由RSAPrivateCrtKeyImpl
实现(您可以使用.getClass().getCanonicalName()
进行检查)
真正的问题是,RSAPrivateCrtKeyImpl
类在执行实际加密时忽略模数的值:
:
--不使用模数
字段:
public CipherParameters getParameters() {
if (!isInitialized()) {
CryptoException.throwIt(CryptoException.UNINITIALIZED_KEY);
}
// modulus = p * q;
return new RSAPrivateCrtKeyParameters(p.getBigInteger().multiply(q.getBigInteger()), null,
null, p.getBigInteger(), q.getBigInteger(),
dp1.getBigInteger(), dq1.getBigInteger(), pq.getBigInteger());
}
因此,用于设置所需DH组素数的参数无效,使用原始(生成的)模
祝你好运 呃,我们可以假设2048位DH在您的卡实现中不可用吗?我在桌面上尝试过它(即使没有卡),您是否在桌面上使用它来模拟javacard API?或者其他什么?这是你在PC端的代码,你能提供javacard小程序的代码吗?呃,我们可以假设2048位DH在你的卡实现上不可用吗?我在桌面上尝试过它(即使没有卡),你在桌面上用它来模拟javacard API吗?这是你在PC端的代码,你能提供javacard小程序的代码吗?
public CipherParameters getParameters() {
if (!isInitialized()) {
CryptoException.throwIt(CryptoException.UNINITIALIZED_KEY);
}
// modulus = p * q;
return new RSAPrivateCrtKeyParameters(p.getBigInteger().multiply(q.getBigInteger()), null,
null, p.getBigInteger(), q.getBigInteger(),
dp1.getBigInteger(), dq1.getBigInteger(), pq.getBigInteger());
}