Как использовать Crypto++ для ECIES и получить общий секрет, тег аутентификации и зашифрованный текст

Я пытаюсь использовать пример из вики- сайта crypto++ для шифрования данных, который соответствует версии схемы IEEE P1363. Первые два шага схемы, описанной в стандарте ETSΙ ΤS 102 941 v1.3.1, следующие:

  1. Отправитель генерирует эфемерный закрытый ключ r в [1, q-1], ...

  2. Отправитель получает общий секрет S из открытого ключа шифрования получателя Kr. S = Px, где...

Однако в примере с crypto++ первые строки:

           ECIES<ECP>::Decryptor d0(prng, ASN1::secp256r1());
    PrintPrivateKey(d0.GetKey());

    ECIES<ECP>::Encryptor e0(d0);
    PrintPublicKey(e0.GetKey());

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

Более того, в вики говорится, что функция шифрования возвращает кортеж {K,C,T}, где K - зашифрованный общий секрет, C - зашифрованный текст, а T - тег аутентификации. Но в примере они не извлекаются, и я не понимаю, как они могли.

Будем очень признательны за любые идеи и помощь. Спасибо!

1 ответ

Результатом функции шифрования является кортеж {K,C,T}, где K — зашифрованный общий секрет, C — зашифрованный текст, а T — тег аутентификации.

Длина K — 64. Длина T — 32. Длина C — длина открытого текста.

если выходная строка em0 равна K+C+T (фальшивый код)

      em0.length()-message.length() = 97
97+C_len = 04(fixed) + 64(K_len) + C(C_len) + 32( T_len).

Просто проанализируйте данные в соответствии с приведенными выше инструкциями.

Другие вопросы по тегам