Рейтинг:0

Случайная выборка против возрастающей случайности в криптографических протоколах

флаг do

В качестве примера на мой вопрос выкладываю алгоритм подписи ECDSA для справки (из википедия) чтобы подписать сообщение $м$:

  1. Рассчитать $ е = Н ( м ) $.
  2. Выберите случайное целое число $k \in [ 1 , n ≈ 1 ] $
  3. Вычислить точку кривой $( x_1 , y_1 ) = k à G $
  4. Рассчитать $ г = х_1 $ мод $n$. Если $ г = 0 $ , вернитесь к шагу 2.
  5. Рассчитать $s = k ^{â 1} ( z + r d_A )$ мод $n$. Если $s = 0$, вернитесь к шагу 2.
  6. Подпись - это пара $( г , с )$

Мой вопрос заключается в следующем. Когда шаги 4 или 5 терпят неудачу, т.е. $г=0$ или же $с=0$ алгоритм должен вернуться назад и выбрать новый случайный $к$ (хотя вероятность этого мала, так как порядок $n$ группы $G$ очень большой). Но в таком случае, зачем алгоритму делать новую случайную выборку? Не было бы эффективнее увеличить $к$ вместо? Я привел этот вопрос для ECDSA в качестве примера, но это относится и к другим криптографическим протоколам, я везде вижу повторную выборку случайности вместо увеличения.И с точки зрения безопасности увеличение случайности не должно иметь значения.

Рейтинг:3
флаг my

И с точки зрения безопасности увеличение случайности не должно иметь значения.

Есть две причины «вернуться назад», а не заниматься какой-то специальной логикой.

Первая причина заключается в уменьшении количества «трудно тестируемого» кода специального назначения. Любой способ увеличения $к$' будет включать в себя код, который крайне редко запускается (и для которого было бы трудно разработать модульные тесты). Любой такой труднодоступный код является благодатной почвой для необнаруженных ошибок кодирования, и поэтому его следует избегать, если это вообще возможно. Напротив, возврат и повторный запуск по существу одной и той же процедуры значительно менее подвержен ошибкам.

Другая причина заключается в том, что повторное использование данных, которые считались «неприемлемыми», может привести к утечке.

В качестве примера предположим, что злоумышленник может обнаружить, когда происходит такое приращение (например, внимательно отслеживая время, необходимое для создания такой подписи), и это действительно происходит, потому что $с=0$. Если так, то мы только что слили закрытый ключ.

Вот как это происходит: на первой итерации мы вычисляем $s = k^{-1}(z + rd_A)$ и находим, что это 0. Итак, мы такие $r' = ((k+1)G)_x$ вместо этого и выведите это (и продолжайте вычислять $s'$, который эта атака не использует).

Что злоумышленник может сделать, так это восстановить точку $(к+1)G$ из координаты x, которую мы ему только что дали (на самом деле, это одна из двух точек; это просто означает, что он пробует обе); что затем позволяет ему пересчитать $кГ$, а значит и оригинал $г$

Теперь он знает, что $k^{-1}(z + rd_A) = 0$, в настоящее время $k^{-1} \ne 0$ (обратные никогда не равны нулю), и поэтому $d_A = -r^{-1}z$; он знает $z$ (из сообщения, которое было подписано) и $г$, что дает ему закрытый ключ $d_A$.

Теперь, если мы выберем совершенно случайное $к$ каждый раз нам не нужно беспокоиться о таких неочевидных атаках.

Теперь на практике это $с=0$ Условие по существу никогда не происходит (это происходит с той же вероятностью, что случайное угадывание закрытого ключа просто оказывается правильным), поэтому может показаться, что нам не нужно беспокоиться об этом. Я бы по-прежнему доверял менее подверженному ошибкам и более безопасному методу, даже если он занимает больше времени (а если это почти никогда не происходит, время, которое это занимает, обычно не имеет значения).

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

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