Авторы утверждают, что все эти схемы постквантовой подписи естественным образом устойчивы к атакам по сторонним каналам. Мой вопрос, почему или как?
Что ж, давайте разберем это:
- С точки зрения времени и побочных каналов на основе кеша очевидная реализация довольно хороша (исключение: наборы параметров на основе хараки Sphincs+).
И вот почему: естественная реализация функций SHA-256 и SHAKE опирается на инструкции, которые на современных процессорах выполняются постоянно (логические операции, модульное сложение, сдвиги/повороты на постоянные величины) и не делают доступ к памяти или данным зависимым от данных. -зависимые ветки (за исключением тех, которые основаны на длине сообщения - единственное задействованное сообщение переменной длины - это хеш исходного сообщения, и мы не считаем подписываемое сообщение секретным). Кроме того, естественная реализация инфраструктуры HBS (например,цепочка Винтерница или вычисления дерева Меркла) также не имеет секретного доступа к памяти или ветвей (она включает условные ветвления, однако эти условия всегда являются функциями либо сообщения, либо значений, которые мы помещаем в подпись; то есть значения чтобы противник все равно знал).
Следовательно, тайминг и побочные каналы на основе кеша не дают никакой ценности, о которой злоумышленник еще не знал (при условии, конечно, что реализация не пытается преднамеренно осуществить утечку).
- С точки зрения мощности или атак по сторонним каналам в стиле EMF, история не так ясна.
Большинство внутренних значений (например, внутренние узлы дерева Меркла) на самом деле не являются секретными. Кроме того, атака power/EMF (при условии, что сигнатура не настолько надежна, чтобы было достаточно одной трассировки — с симметричными операциями, о которых мы говорим, они, как правило, не таковы) требует использования одного и того же секретного значения в ряде различных контексты; следовательно, предыдущие значения в цепочке Винтерница также трудно атаковать (поскольку эти значения используются только один раз).
Что может быть атаковано, так это функция, используемая для генерации начальных значений для цепей Винтерница (и для Sphincs+ листья FORS). Что обычно делается во всех трех случаях (и формально предписано Sphincs+), так это использование одного и того же статического начального числа (с разными дополнительными параметрами) для непосредственной генерации этих значений — это именно то, что потребуется для атаки DPA (и, конечно же, как только злоумышленник восстанавливает это, что ж, игра окончена). Документ Sphincs+ раунда 3 предполагает, что в этом случае вы можете использовать реализацию хеш-функции, устойчивую к DPA.
Теперь можно переработать логику генерации начальных значений, чтобы ее нельзя было атаковать таким образом (например, генерируя эти значения как листья из большого двоичного дерева, чтобы любое значение внутреннего узла использовалось только в двух контекстах). . Тем не менее, ни один такой метод не был официально предложен ни для одного из трех.