由于 RSA 密钥对生成,安装 java 卡小程序失败
Installing a java card applet fails due to RSA keypair generation
我正在尝试将小程序安装到 J3A040 JCOP 卡中。
我有以下安装方法:
protected MainApplet() {
try {
// CREATE RSA KEYS AND PAIR
m_keyPair = new KeyPair(KeyPair.ALG_RSA_CRT, KeyBuilder.LENGTH_RSA_2048);
// STARTS ON-CARD KEY GENERATION PROCESS
m_keyPair.genKeyPair();
// OBTAIN KEY REFERENCES
m_publicKey = (RSAPublicKey) m_keyPair.getPublic();
m_privateKey = (RSAPrivateKey) m_keyPair.getPrivate();
} catch (CryptoException c) {
//this line will give you the reason of problem
short reason = c.getReason();
ISOException.throwIt(reason); // for check
}
register();
}
安装总是失败并出现以下错误:
pro.javacard.gp.GPException: Install for Install and make selectable failed SW: 6A80
at pro.javacard.gp.GlobalPlatform.check(GlobalPlatform.java:1092)
at pro.javacard.gp.GlobalPlatform.installAndMakeSelectable(GlobalPlatform.java:798)
at pro.javacard.gp.GPTool.main(GPTool.java:478)
但是,如果我删除密钥对生成,一切正常。
我已阅读卡片规格,它代表:
. RSA and RSA CRT (1280 up to 2048 bits keys) for en-/decryption and
signature generation and verification1 d. RSA CRT key generation (1280
up to 2048 bits keys) in a secured environment
我想这应该不是问题。
有什么猜测吗?
问题是由无效的转换引起的:您要求一个带有中国提醒定理格式私钥的RSA密钥对(ALG_RSA_CRT
)。
这就是为什么 getPrivate()
方法不是 return 一个 RsaPrivateKey
实例,而是一个 RsaPrivateCrtKey
实例。转换为 RsaPrivateKey
会导致 6A80
状态字。
所以你应该使用标准算法:
m_keyPair = new KeyPair(KeyPair.ALG_RSA, KeyBuilder.LENGTH_RSA_2048);
,或使用正确的转换:
m_publicKey = (RSAPublicKey) m_keyPair.getPublic();
m_privateKey = (RSAPrivateCrtKey) m_keyPair.getPrivate();
我正在尝试将小程序安装到 J3A040 JCOP 卡中。
我有以下安装方法:
protected MainApplet() {
try {
// CREATE RSA KEYS AND PAIR
m_keyPair = new KeyPair(KeyPair.ALG_RSA_CRT, KeyBuilder.LENGTH_RSA_2048);
// STARTS ON-CARD KEY GENERATION PROCESS
m_keyPair.genKeyPair();
// OBTAIN KEY REFERENCES
m_publicKey = (RSAPublicKey) m_keyPair.getPublic();
m_privateKey = (RSAPrivateKey) m_keyPair.getPrivate();
} catch (CryptoException c) {
//this line will give you the reason of problem
short reason = c.getReason();
ISOException.throwIt(reason); // for check
}
register();
}
安装总是失败并出现以下错误:
pro.javacard.gp.GPException: Install for Install and make selectable failed SW: 6A80
at pro.javacard.gp.GlobalPlatform.check(GlobalPlatform.java:1092)
at pro.javacard.gp.GlobalPlatform.installAndMakeSelectable(GlobalPlatform.java:798)
at pro.javacard.gp.GPTool.main(GPTool.java:478)
但是,如果我删除密钥对生成,一切正常。 我已阅读卡片规格,它代表:
. RSA and RSA CRT (1280 up to 2048 bits keys) for en-/decryption and signature generation and verification1 d. RSA CRT key generation (1280 up to 2048 bits keys) in a secured environment
我想这应该不是问题。
有什么猜测吗?
问题是由无效的转换引起的:您要求一个带有中国提醒定理格式私钥的RSA密钥对(ALG_RSA_CRT
)。
这就是为什么 getPrivate()
方法不是 return 一个 RsaPrivateKey
实例,而是一个 RsaPrivateCrtKey
实例。转换为 RsaPrivateKey
会导致 6A80
状态字。
所以你应该使用标准算法:
m_keyPair = new KeyPair(KeyPair.ALG_RSA, KeyBuilder.LENGTH_RSA_2048);
,或使用正确的转换:
m_publicKey = (RSAPublicKey) m_keyPair.getPublic();
m_privateKey = (RSAPrivateCrtKey) m_keyPair.getPrivate();