使用Bouncy Castle重构SPHINCS+公钥时参数不匹配异常原因咨询
SPHINCS+公钥重构抛出IllegalArgumentException的原因及解决方法
问题描述
生成SPHINCS+密钥对后,将公钥编码并尝试重构公钥时,抛出IllegalArgumentException,提示“public key encoding does not match parameters”。
代码示例
package cdss; import java.io.IOException; import java.security.SecureRandom; import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusKeyGenerationParameters; import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusKeyPairGenerator; import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusParameters; import org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusPublicKeyParameters; import org.bouncycastle.crypto.AsymmetricCipherKeyPair; public class Sphincs3 { public static void main(String[] args) throws IOException { // Generate a SPHINCS+ key pair SPHINCSPlusKeyPairGenerator keyGen = new SPHINCSPlusKeyPairGenerator(); SecureRandom random = new SecureRandom(); SPHINCSPlusKeyGenerationParameters params = new SPHINCSPlusKeyGenerationParameters(random, SPHINCSPlusParameters.sha2_128s_simple); keyGen.init(params); AsymmetricCipherKeyPair pair = keyGen.generateKeyPair(); SPHINCSPlusPublicKeyParameters publicKeyParams = (SPHINCSPlusPublicKeyParameters) pair.getPublic(); byte[] publicKeyBytes = publicKeyParams.getEncoded(); SPHINCSPlusPublicKeyParameters pasd = new SPHINCSPlusPublicKeyParameters(SPHINCSPlusParameters.sha2_128s_simple, publicKeyBytes); } }
异常信息
Exception in thread "main" java.lang.IllegalArgumentException: public key encoding does not match parameters
at org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusPublicKeyParameters.(SPHINCSPlusPublicKeyParameters.java:17)
at cdss.Sphincs3.main(Sphincs3.java:26)
原因分析
BouncyCastle中SPHINCSPlusPublicKeyParameters.getEncoded()返回的字节数组已经包含了SPHINCS+的参数标识信息。手动指定参数重构公钥时,构造方法会对比传入的参数与编码字节中解析出的参数,两者验证不匹配就会触发该异常。
解决方法
重构公钥时,使用仅接收编码字节数组的构造方法,让构造方法自动从编码中解析参数:
修改后的关键代码:
byte[] publicKeyBytes = publicKeyParams.getEncoded(); // 去掉手动指定的参数,直接传入编码字节数组 SPHINCSPlusPublicKeyParameters pasd = new SPHINCSPlusPublicKeyParameters(publicKeyBytes);
构造方法会自动解析编码中的参数信息,避免参数不匹配的冲突。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

