Я читаю BIP340, и мне трудно понять эту часть:
Например, без тегового хеширования подпись BIP340 также может быть действительной для схемы подписи, единственное отличие которой состоит в том, что аргументы хэш-функции переупорядочены. Хуже того, если функция получения одноразового номера BIP340 была скопирована или создана независимо, то этот одноразовый номер может быть случайно повторно использован в другой схеме с утечкой секретного ключа.
Я предполагаю, что первое предложение допустимо только в том случае, если аргументы имеют общие значения, это правильно? Например, хеш, используемый BIP340, $\text{хэш}(R||P||m)$. Если используется другая схема $\text{хэш}(R||m||P)$, то эти две схемы приведут к коллизии, если сообщение $м$ подписываемый оказался равным открытому ключу $P$, в результате чего подпись в одной схеме становится действительной в другой схеме.
Мой главный вопрос касается второго предложения. Как именно пометка хэшей не приведет к повторному использованию одноразового номера в отдельной схеме для утечки закрытого ключа? Я пытаюсь работать с математикой, чтобы увидеть, как это будет работать.
Предположим, у нас есть две схемы Шнорра, которые создают свои хэши следующим образом:
Схема 1: $e_1=\text{хэш}(R||P||m)$
Схема 2: $e_2=\text{хэш}(R||m||P)$
Я мог видеть, как повторное использование одноразового номера приведет к утечке закрытого ключа, если один и тот же ключ использовался в обеих схемах, а хэши были разными. На раз $к$, закрытый ключ $д$, и подписи $s_1$ и $s_2$ у нас есть:
\начать{выравнивать}
s_1 &= k + e_1 \cdot d \
s_2 &= k + e_2 \cdot d \
s_1 - s_2 &= d (e_1 - e_2) \
д &= (s_1 - s_2) (e_1 - e_2) ^ {-1}
\end{выравнивание}
Однако если бы хэши уже были другими, то изменение хеш-аргументов с помощью тега, специфичного для схемы, не имело бы значения.
Другой подход, который я мог видеть, - это если бы закрытые ключи были разными, а хэши - одинаковыми, как я предполагаю, подразумевается первым предложением в цитате BIP. Если закрытые ключи были $d_1$ и $d_2$, а хэши столкнулись и были оба $е$, то разница в приватных ключах может быть просочилась следующим образом:
\начать{выравнивать}
s_1 &= k + e \cdot d_1 \
s_2 &= k + e \cdot d_2 \
s_1 - s_2 &= e \cdot (d_1 - d_2) \
d_1 - d_2 &= (s_1 - s_2) \cdot e^{-1}
\end{выравнивание}
Хотя это приводит к утечке разницы в закрытых ключах, что, вероятно, не идеально, я не вижу, как происходит утечка самих закрытых ключей.
Может быть, я иду об этом неправильно. Как работает математика с точки зрения утечки закрытого ключа в результате повторного использования одноразового номера и отсутствия тегов хэшей?