Рейтинг:1

Минимальные, безопасные и достаточно эффективные реализации P384

флаг nl

Для проекта, над которым я работаю, мне нужно внедрить ECDSA по кривой NIST P-384 (AKA secp384r1). Что бы это ни стоило, выбор кривой в данном конкретном случае находится вне моего контроля.

Хотя у меня уже есть работающая реализация, и это (пока) всего лишь небольшой проект, мне было интересно, как я могу позаботиться об этом в большинстве случаев. эффективный путь, особенно для подписывающей части. Примерный список пожеланий:

  1. Я хочу сделать серьезную попытку защититься от утечек из сторонних каналов и тайминга.
  2. Поскольку меня интересуют только кривая P-384 и ECDSA, мне нужна кодовая база с относительно небольшим размером (также потому, что мне нужно будет предоставить привязки для кода, отличного от C). Тем не менее, оптимизации для P384, безусловно, приветствуются.
  3. Я хотел бы использовать детерминированный стиль RFC 6979. $к$ значения (или какая-либо другая детерминированная схема вывода nonce).
  4. Схема, которую я реализую, также требует поддержки точечного сжатия.

Я могу справиться с 3 и 4 самостоятельно, если кодовая база поддается модификации.

После некоторого осмотра, вот что я нашел:

  • OpenSSL (и его ответвления, такие как LibreSSL/BoringSSL/...): очевидный выбор, но громоздкий, и я также не являюсь поклонником причудливых соглашений о вызовах OpenSSL.
  • Android включает симпатичная минималистичная реализация P-256. Я не уверен, насколько это безопасно конкретный один есть, но это хороший пример того, что я ищу (замена P-256 на P-384).
  • BearSSL Томаса Порнина имеет переносимую, но с постоянным временем (насколько это возможно) реализацию P-384 и выглядит достаточно простой, чтобы исключить функциональность, которая мне не нужна. Похоже, что он не использует никаких оптимизаций для конкретных кривых, но уже использует детерминированные $к$ значения из коробки.

Очевидно, я бы предпочел избежать необходимости развертывания собственной реализации. Прямо сейчас я испытываю искушение пойти по пути «разборки BearSSL», но я хотел спросить, есть ли что-то еще по принципу plug-and-play, или есть ли какие-то проблемы, которые я пропустил. Спасибо!

Ответить или комментировать

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