Мы стремимся выполнять все вычисления для подписи Шнорра, точнее EC-FSDSA (BIP340-Schnorr), внутри безопасного элемента, за исключением операции хеширования, которая не поддерживается и должна выполняться вне безопасного элемента. .
Предположим, что подпись следующая:
д = закрытый ключ
R = k.G = Q (уникальный случайный ключ, источник TRNG внутри защищенного элемента, может использоваться только один раз) и
S знак равно k + d . Н( Q | Р | М )
Шаги будут следующими:
- сгенерировать и получить Q и получить Q и P в качестве вывода из безопасного элемента
- вычислить и повторно ввести H(Q | P | M) в безопасный элемент
- завершить и вывести S = k + d . Н( Q | Р | М )
Предполагая, что безопасный элемент функционирует как оракул, и злоумышленник может внедрить H( Q | P | M ) = "1" и, таким образом, извлечь k + d (он не может внедрить H( Q | P | M ) = "0" с тем же k, он постоянно меняется), без ограничений, будет ли он уязвим? Кто-нибудь читал обсуждения на эту тему?
Для ясности отметим, что наша цель — оценить возможность угадать закрытый ключ (d), спрятанный в защищенном элементе, с неограниченной возможностью вычисления S=k + d*(any_integer_you_choose) . Защищенный элемент может выполнять только скалярное умножение, генерировать псевдослучайные (k), но, к сожалению, не некоторые специфические хэш-функции. Таким образом, он должен быть рассчитан снаружи и повторно введен, что потенциально может открыть уязвимости.
В этом упражнении мы предполагаем, что элементы безопасности, которые скрывают (d), могут выполнять неограниченное количество вычислений S независимо от того, чем является (H), и находятся в руках злоумышленника с полным доступом к криптографическим вычислениям на S = k + d.H. Злоумышленник не может контролировать k, который генерируется внутри защищенного элемента, используется только один раз и всегда скрыт. С другой стороны, атакующий может игнорировать (Q | P | M) и может выбрать любой (H) для отправки защищенному элементу для вычисления S= k+d.H, таким образом выбрав H=0,1,2,3.. например, и получить S1=k1+d1, S2=k2+d*2 и т. д. взамен, без ограничения попыток. Даже если он всегда запутан разными случайными значениями k, поможет ли это вам угадать (d)?....
(Тогда вы можете спросить: если у злоумышленника есть доступ к вычислениям в (d), то это все равно, что иметь (d). Ну, не совсем так, как злоумышленник может тайно извлечь (d) и дождаться варианта использования позже)