Надувной замок, крипто , криптография с эллиптической кривой (ECC), не удается декодировать

#c# #.net #bouncycastle #crypto

#c# #.net #надувной замок #крипто

Вопрос:

У нас есть решение на C , использующее ECC-часть библиотеки Crypto , но нам нужно перейти на решение .NET. Из-за минимальной документации для ECC-кода Microsoft я в настоящее время экспериментирую с чуть менее минимально документированной библиотекой Bouncy Castle (по крайней мере, доступен исходный код). У меня шифрование и дешифрование с использованием BC работают нормально; расшифровка данных, уже зашифрованных с помощью Crypto , оказывается несколько более проблематичной.

Моя последняя проблема заключается в том, что когда я пытаюсь расшифровать строку, я получаю исключение «коды iMac не равны». Добавляет ли BC какой-либо MAC-адрес в зашифрованный текст? Кто-нибудь знает, что может быть причиной этого?

Спасибо, Патрик

Комментарии:

1. Как вы можете задать такой вопрос, как ваш, и предоставить абсолютно нулевой код? Вы можете получить это исключение в классе IESEngine, и, очевидно, вы используете ECIES. И да, IES вычисляет MAC. Использует ли ваш код Crypto IES?

2. Я спрашиваю о том, что делает bouncy castle, а не о том, что делает мой код… Спасибо за подсказку о IES, это то, что мне нужно было знать 🙂

3. У вас получилось? Вы должны опубликовать рабочий код ECIES, чтобы пройти полный круг по этому вопросу 🙂

4. Извините, Сид, я больше не работаю в той же компании и поэтому не имею доступа к коду и не могу вспомнить, что я сделал, чтобы заставить его работать: (.

5. Я знаю, что это поздний ответ, но это хороший вопрос, который должен был привлечь некоторое внимание.

Ответ №1:

Моя последняя проблема заключается в том, что когда я пытаюсь расшифровать строку, я получаю исключение «коды iMac не равны».

Это сообщение, похоже, не является частью текущего дистрибутива BC:

 $ cd bouncy-castle-153
$ grep -IR "IMac codes failed to equal" *
$
  

Похоже, это часть чьего-то GitHub; см. PassKit IesEngine.cs.

Возможно, это было частью прошлого дистрибутива BC.


Добавляет ли BC какой-либо MAC-адрес в зашифрованный текст?

Название IesEngine.cs говорит мне о его интегрированной схеме шифрования. Они не очень хорошо известны и часто не используются, но это очень хорошие схемы. Они объединяют множество примитивов в один, и это упрощает правильное использование и затрудняет неправильное использование. Более технически, это IND-CCA2, который является сильным понятием безопасности.

Я знаю два типа схем. Первый — это IES над целыми числами, а второй — IES над эллиптическими кривыми. Схема шифрования над целыми числами также известна как схема шифрования с интегрированным дискретным логарифмом, а схема шифрования над эллиптическими кривыми обычно называется схемой шифрования с интегрированной эллиптической кривой. Библиотеки, такие как Crypto и Bouncy Castle, предоставляют их оба.

Чтобы вернуться к вашему вопросу, одной из вещей, которые предоставляет интегрированная схема шифрования, является MAC поверх зашифрованного текста.


Кто-нибудь знает, что может быть причиной этого?

К сожалению, есть ряд причин, которые могут быть причиной этого. Большинство ИЭ несовместимы из-за того, что каждый комитет настраивает схему. Что еще хуже, я никогда не видел опубликованного набора тестовых векторов. Вам нужно много работать, чтобы заставить вещи взаимодействовать.

В случае Crypto и Bouncy Castle у каждого была небольшая ошибка, потому что не было тестовых векторов, поэтому каждый делал что-то немного по-разному. Это означало, что схемы ECIES плохо взаимодействовали (или, точнее, вообще). Вы можете прочитать о деталях в Bouncy Castle Patch на Crypto wiki.

В дальнейшем Crypto 5.7 будет взаимодействовать с Bouncy Castle 1.54 из коробки. В будущем классы, необходимые для BC, будут задокументированы в Crypto wiki и руководстве Crypto .

Ответ №2:

Пожалуйста, обратите внимание, что упомянутый выше патч bouncy castle Crypto 5.6.3 будет работать только с версиями bouncy castle до версии 1.53.

Для более новых версий вы можете либо настроить исправление Crypto , чтобы разрешить 8-байтовый Mac, либо использовать класс OldECIES на стороне Java для обеспечения совместимости.