Dart - генерация секретного ключа на основе эллиптической кривой 25519

Я ищу пакет dart для реализации протокола обмена ключами (эллиптическая кривая Диффи-Хеллмана) в приложении Flutter. Таким образом, поток будет таким:

  • приложение генерирует пару ключей во время входа в систему и отправляет открытый ключ на сервер (поэтому новая пара ключей создается для каждого входа в систему)
  • сервер отправляет обратно свой открытый ключ, который он только что сгенерировал
  • приложение генерирует секретный ключ из своего закрытого ключа и открытого ключа сервера
  • app включает hmac всех последующих сообщений, отправляемых на сервер

Я попытался использовать пакет ed25519_dart для генерации ключа, но он не работает. Мое приложение даже не запускается из-за ошибки integer literal can't be represented in 64 bits, на которую также указывает анализатор dart.

Я также просмотрел pointycastle, но, похоже, он не поддерживает Диффи-Хеллмана.

У меня также не работает пакет Диффи-Хеллмана. Приведенный пример выдает это исключение в первой строке:

FormatException: Invalid radix-16 number
FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B1...

Любая идея, как я могу добиться того, что хочу сделать в приложении Flutter?


person Egemen    schedule 12.07.2018    source источник
comment
Это, вероятно, нужно обновить до Dart 2   -  person Günter Zöchbauer    schedule 12.07.2018
comment
Что означает пакет ed25519_dart?   -  person Egemen    schedule 12.07.2018
comment
Да, я имел в виду этот пакет. Извини. Вероятно, то же самое для других 2.   -  person Günter Zöchbauer    schedule 12.07.2018
comment
Спасибо, я создам для них задачи на GitHub, но не уверен, что эти библиотеки все еще поддерживаются. Я надеюсь, что есть какой-то другой пакет, который выполняет эту работу, поскольку я бы не хотел реализовывать свое собственное решение (особенно когда речь идет о криптобизнесе).   -  person Egemen    schedule 12.07.2018
comment
Криптовалюте не помешал бы импульс :-/   -  person Günter Zöchbauer    schedule 12.07.2018


Ответы (1)


Я предполагаю, что ошибка связана с BigNum и Dart 2. У Pointy Castle есть ветка на GitHub, где они переходят на Dart 2.0.

Вот несколько способов получить пару ключей:

  • Используйте собственный SDK (Java, Kotlin или C++) и канал платформы.
  • Используйте остроконечный замок ветки Dart 2.0
  • Попробуйте пакет flutter_sodium. Он работает с Dart 2, но работа над ним еще не завершена.

Надеюсь, это поможет. Я тоже пытаюсь найти лучший способ!

person aidxn    schedule 20.07.2018
comment
Спасибо, я уже заглянул в заостренный замок. Пробовал использовать их ECKeyGenerator, но мне непонятно, с каким CipherParameters его надо инициализировать. Кроме того, я не видел никакой функции для генерации секретного ключа из моего закрытого ключа и открытого ключа сервера. Я также посмотрю на flutter_sodium. - person Egemen; 23.07.2018