Bouncy Castle ECIES сжатый формат - PullRequest
       3

Bouncy Castle ECIES сжатый формат

0 голосов
/ 26 ноября 2018

Я использую надувной замок ECIES с провайдером AES в режиме CBC для шифрования данных:

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-байтным издержкам.

Теперь я хотел бы использовать сжатый формат с префиксами 0x02 и 0x03.

К сожалению, я не нашел спецификациипараметров, используемых для достижения этого.

1 Ответ

0 голосов
/ 30 ноября 2018

Мне удалось решить эту проблему, установив флаг usePointCompression в BC IESParameterSpec на 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-координаты (положительная / отрицательная).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...