Попытка примирить ошибку эллиптической кривой
Я пытаюсь сделать следующее:
У меня есть часть программного обеспечения, которая использует ECC для генерации стандартного ключа Rijndael (НЕ AES... Есть разница: AES поддерживает только размеры ключей 128, 192 и 256 бит, в то время как Rijndael изначально поддерживал 160 и 224 бит. Сначала это меня укусило, когда я смотрел на программное обеспечение.) Я смог определить, что оно выполняет следующее:
Он имеет несколько режимов, но в самом слабом режиме он использует ECC secp160r1 для генерации 160-битного ключа (отсюда Rijndael и NOT AES). Я смог принять "открытые" значения и использовать закрытый ключ в своем собственном программном обеспечении, и, используя вызовы openssl, смог генерировать те же ключи и дешифровать данные, которые мне нужно расшифровать.
В лучшем (самом сильном / самом сложном, что у вас) режиме он делает то же самое, однако использует ECC sect571k1 для генерации ключа и принимает только первые 32 байта из 72, которые он генерирует для 256-битного ключа Rijndael. (в этом случае вы могли бы сказать AES256).
Тем не менее, в другом режиме, кажется, делать то же самое, но когда я пытаюсь сделать то же самое, что я делал раньше, я не получаю тот же общий секрет.
Если вы используете стандартные определения для Алисы и Боба:
da = Alice's secret key
db = Bob's secret key
Qa = Alice's public key
Qb = Bob's public key
S = Shared secret
Я имею:
daQb --> The public value sent from Alice.
db --> My "secret" key.
Qb --> My "public" key.
Sc --> The "correct" shared secret as computed by above program
Я проверил, что мой Qb и daQb находятся на кривой sect283k1. Если я использую sect283r1, что-то не получается, и мои точки не регистрируются на этой кривой с использованием функций Openssl EC_POINT, EC_KEY, EC_GROUP (я бы опубликовал код сейчас, но у меня его нет передо мной. Как только я сделаю, постараюсь выложить здесь). Как я уже говорил, я смог воспроизвести два других режима, и, похоже, он работает правильно. Однако в этом режиме, когда я вычисляю ключ, я получаю Sw -> "неправильный" общий секрет, вычисленный МОЕЙ программой.
Итак, мой вопрос таков: достаточно ли у меня информации, чтобы определить, могу ли я использовать неправильную базу данных? Я не думаю, что это так, потому что в двух других случаях я могу получить БД, и она отлично работает. К сожалению, у меня нет исходного кода для указанной программы. Я пытаюсь создать инструмент, который может работать с данными, сгенерированными оригинальным инструментом.
Я думал о том, чтобы попытаться инвертировать Qb и умножить данные на daQb, но все, что на самом деле делает, - это получает меня, что, хотя и интересно, не приводит меня к тому, как я могу использовать его для общего секрета, который я должен определить, дБ., чтобы проверить мою работу.
Другая вещь, о которой я подумал, это то, что, возможно, была использована кривая, подобная sect283k1, но НЕ sect283k1 (то есть, может быть, другая G? Я не уверен, возможно ли использовать другой генератор на этой кривой, но я не думал, был только 1 генератор на кривую, но, возможно, это неправильно, и, возможно, другой генератор даст другие результаты... т.е. правильные результаты).
Во всяком случае, я пробовал несколько вещей только для получения одних и тех же неправильных данных ключа, используя, по-видимому, те же данные, которые использует другая программа. Может быть, кто-то с некоторыми превосходящими знаниями по математике EC (почти любой будет лучше, чем мой, но я надеюсь, что кто-то, кто может помочь мне увидеть, что мне не хватает) может показать мне, как я могу примирить то, что я получаю что получает другой инструмент.
К сожалению, я могу остановиться прямо перед тем, как ключ Rijndael будет установлен, и посмотреть, на что он будет установлен. Я могу найти эту часть ключа и увидеть исходные данные, полученные из операции ECDH_compute_key (которая, по сути, представляет собой EC_POINT_mul между daQb и db (если я достаточно знаю об обмене ключами Диффи-Хеллмана... Я подтвердил это во всяком случае, с использованием некоторых вызовов openssl), и я знаю несколько других вещей, но я не могу найти код Bignum/EC, который помог бы мне увидеть, что вошло в операцию. Поэтому я ищу другой способ избавиться от кошки,
Спасибо всем, кто может помочь.