Bouncy Castle ECIES压缩格式



我在CBC模式提供程序中使用带AES的弹性城堡ECIES来加密数据:

Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] ciphertext = iesCipher.doFinal(plaintext);

这将产生一个格式为的密文

0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest

0x04表示未压缩的格式,其中还存储y坐标。使用例如secp256k1,这会导致32字节的不必要开销。

现在我想使用带有0x020x03前缀的压缩格式。

不幸的是,我并没有找到实现这一目标所需的参数规范。

我通过将BCIESParameterSpec中的usePointCompression标志设置为true来解决此问题。

默认情况下,点压缩标志为false。

不幸的是,这个标志不是他们ECIESTest的一部分,所以我使用了他们的加密模式配置(派生、编码和初始化向量(来尝试这个标志:

byte[] derivation = Hex.decode("202122232425262728292a2b2c2d2e2f");
byte[] encoding = Hex.decode("303132333435363738393a3b3c3d3e3f");
byte[] nonce = Hex.decode("000102030405060708090a0b0c0d0e0f");
Cipher c = Cipher.getInstance("ECIESwithAES-CBC", "BC");
IESParameterSpec params = new IESParameterSpec(derivation, encoding, 128, 128, nonce, true);
c.init(Cipher.ENCRYPT_MODE, publicKey, params);
byte[] ciphertext = c.doFinal(plaintext);

这会产生所需的格式:

0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest

取决于相应的y坐标(正/负(。

最新更新