Как использовать Crypto++ для ECIES и получить общий секрет, тег аутентификации и зашифрованный текст
Я пытаюсь использовать пример из вики- сайта crypto++ для шифрования данных, который соответствует версии схемы IEEE P1363. Первые два шага схемы, описанной в стандарте ETSΙ ΤS 102 941 v1.3.1, следующие:
Отправитель генерирует эфемерный закрытый ключ r в [1, q-1], ...
Отправитель получает общий секрет 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).
Просто проанализируйте данные в соответствии с приведенными выше инструкциями.