Taj*_*tos 2 bouncycastle elliptic-curve javacard diffie-hellman
我的问题看起来像这样.我在卡和终端侧生成了密钥.我在终端侧有卡公钥和私钥以及终端公钥和私钥,卡侧也一样(我正在做测试,这就是为什么我把它们全部放在终端和卡上).当我为卡生成KeyAgreement(终端侧)作为私有而终端作为私有时,secters是相同的,所以生成是正常的,我得到一个24字节(192位)的秘密.当我在卡上产生秘密时(2个情况就像在终端上一样),秘密也是相同的,但它们更短--20个字节(160位).这是代码.终点站:
ECPublicKey publicKey;
ECPrivateKey privateKey;
Run Code Online (Sandbox Code Playgroud)
...
KeyAgreement aKeyAgree = KeyAgreement.getInstance("ECDH", "BC");
aKeyAgree.init(privateKey);
aKeyAgree.doPhase(publicKey, true);
byte[] aSecret = aKeyAgree.generateSecret();
Run Code Online (Sandbox Code Playgroud)
和卡方面:
eyAgreement = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false);
short length = terminalEcPublicKey.getW(array, (short) 0);
keyAgreement.init(cardEcPrivateKey);
short secretlength = keyAgreement.generateSecret(array, (short)0, length, buffer, (short)0);
Run Code Online (Sandbox Code Playgroud)
小智 5
您KeyAgreement.ALG_EC_SVDP_DH在终端方面的实施存在问题.由于在派生输出上执行SHA-1,因此密钥协商方法的正确输出长度应始终为20个字节.
所以在你的终端方面,你应该在生成秘密数据后执行SHA-1.
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |