Это должен быть (длинный) комментарий, но у меня нет места. Это предназначено для объяснения того, почему идея позволить злоумышленнику выбрать базовую реализацию слишком сильна — она «тривиально» ломает любой примитив.
Для любого криптографического примитива, если злоумышленник хочет извлечь ключ $k\in \{0,1\}^n$ для некоторых $n$, и может:
Выбирайте произвольные сообщения (как минимум сообщения, содержащиеся в $\{0,\dots,n-1\}$) в любой рассматриваемый примитив,
Произвольно изменить выполнение алгоритма (но не поведение ввода-вывода математической функции, реализуемой алгоритмом)
Имеет доступ к любому качественному методу измерения времени вообще
довольно просто изменить реализацию алгоритма, чтобы полностью слить секретный ключ в $n$ запросы.
Если $\mathcal{O}(к, м)$ является "старым" примитивом, определите "новый" примитив через:
О'(к, м)
если m в {0,...,n-1} и k[m] == 1:
подождите (Т)
вернуть О (к, м)
Здесь T — некоторая неуказанная константа, которая «достаточно велика», чтобы злоумышленник мог надежно измерить разницу между алгоритмом, принимающим $\ll Т$ время или $\ок Т$ время выполнять.
$\mathcal{O}'$ явно имеет точно такое же поведение ввода-вывода, что и $\mathcal{O}$.
Приведенный выше пример должен показать, что позволить злоумышленнику выбрать реализацию — это массивный проблема безопасности, даже если кто-то ограничивает реализацию, чтобы иметь точно такое же поведение ввода-вывода, как и желаемая функция. В результате «математическая восприимчивость к атакам по времени» не является четко определенным, поскольку Любые Алгоритм, основанный на «секретных» данных, подвержен описанной выше атаке.
На самом деле это не проблема, так как возможность злоумышленника выбрать используемый алгоритм не рассматривается как большая проблема на практике (единственный случай, когда это действительно может произойти, - это атаки типа «бэкдор комитета по стандартам», скажем, что произошло с DUEL_EC_DRBG , но тайминговые бэкдоры кажутся хуже, чем бэкдоры типа «я знаю секретный ключ», так как другим может быть проще наблюдать тайминговые бэкдоры).
Хотя «восприимчивость к атакам по времени» четко не определена, существуют примитивы, которые сложнее реализовать с постоянным временем. Обычно это означает одно из двух:
- Накладные расходы при переходе от непостоянного времени к постоянному времени велики.
- Легко сделать ошибку при переходе от непостоянного времени к постоянному времени.
Однако это не формальные свойства проблем, а эмпирические наблюдения практиков.
Первую проблему можно было бы формализовать (в частности, в большом промежутке между схемой минимального размера, вычисляющей что-то, и ТМ минимального размера в модели ОЗУ, вычисляющей что-то), но я обычно не вижу, чтобы люди пытались это сделать. (не похоже, что это будет интересно разработчикам).