В. Р. Гинзбург Перевод с английского



Pdf көрінісі
бет151/203
Дата26.09.2024
өлшемі2,74 Mb.
#145829
1   ...   147   148   149   150   151   152   153   154   ...   203
Байланысты:
практическая криптография


Глава 16. Проблемы реализации. Часть II
По окончании вычислений мы проверяем правильность значений WOOP.
Если результат операции над большими числами равен
x
, нам нужно про-
верить, что
(
x
mod
t
) = ˜
x
. Если в реализации библиотеки была допущена
ошибка, значения
x
mod
t
и
˜
x
не совпадут. Мы исходим из предположения,
что ошибки библиотеки не были специально подобраны таким образом, чтобы
давать нужные результаты в зависимости от того, какое значение
t
мы вы-
берем. В конце концов, библиотека разрабатывалась задолго до того, как мы
выбрали
t
, а код готовой библиотеки уже не находится под контролем зло-
умышленника. Легко показать, что любая ошибка библиотеки может быть
обнаружена с помощью практически любого значения
t
. Таким образом, до-
бавление к существующей библиотеке верификации на основе вупинга — пре-
красный способ проверки правильности вычислений.
После этого остается лишь найти библиотеку арифметических операций
над большими числами со встроенной системой верификации на основе ву-
пинга. Но нам такая библиотека еще не попадалась.
Какой величины должны быть значения WOOP
(
x
)
? Это зависит от мно-
гих факторов. Для случайных ошибок вероятность того, что применение ву-
пинга не обнаружит ошибку, составляет около
1
/t
. К сожалению, в нашем ми-
ре не бывает случайностей. Пусть в коде библиотеки содержится программ-
ная ошибка, и, к нашему огорчению, злоумышленник знает о ее существо-
вании. Он может выбирать входные данные наших вычислений и не только
инициировать ошибку, но и выбирать отклонение этой ошибки от правиль-
ного значения. Вот почему значение
t
должно быть случайным секретным
числом; не зная
t
, злоумышленник не сможет выбрать такую разницу, кото-
рая точно была бы пропущена нами в ходе вупинга.
Как бы мы поступили в подобной ситуации на месте злоумышленника?
Мы бы, конечно же, инициировали ошибку. Кроме того, мы бы попытались
свести отклонение от правильного результата к нулю для наибольшего коли-
чества модулей
t
. Самая простая защита от атак подобного рода — выбрать
t
так, чтобы оно было простым числом. Если злоумышленник хочет обмануть
нас, скрыв ошибку вычислений для шестнадцати 64-битовых простых
t
, ему
придется тщательно выбрать минимум
16
·
64 = 1024
бит входных данных.
Поскольку большинство вычислений ограничивают количество входных би-
тов, которые могут быть выбраны злоумышленником, применение простого
t
снижает вероятность того, что атака пройдет успешно.
Чем больше значение
t
, тем лучше. Существует так много простых чисел
большого размера, что вероятность успеха атаки быстро снижается с увели-
чением размера
t
. Если бы мы, как обычно, стремились придерживаться 128-
битового уровня безопасности, длина числа
t
должна была бы составлять
128 бит или около того.


16.1. Арифметика больших чисел
307
Отметим, что вупинг ни в коей мере не является основным средством
обеспечения безопасности системы; скорее, это вспомогательная мера. Если
верификация на основе вупинга окончится неудачей, мы поймем, что в про-
граммном обеспечении содержится ошибка, которая должна быть устранена.
Такая программа должна аварийно завершить свое выполнение и выдать со-
общение о неисправимой ошибке (fatal error). Подобное поведение еще более
усложняет проведение повторных атак на систему. На практике мы пред-
лагаем использовать в качестве
t
64-битовое случайное простое число. Это
значительно сократит расходы по сравнению с использованием 128-битово-
го простого числа и обеспечит достаточный уровень безопасности. Если вы
не можете позволить себе 64-битовое
t
, используйте 32-битовое — это всегда
лучше, чем ничего. Особенно хорошо 32-битовые значения
t
подходят для
использования в системах с 32-разрядными процессорами, поскольку к ним
могут быть применены прямые инструкции умножения и деления.
Если функции библиотеки будут включать в себя вычисления, позволя-
ющие злоумышленнику выбирать большой объем данных, вам понадобится
проверять и промежуточные значения WOOP
(
x
)
. Эти проверки имеют чрез-
вычайно простой вид:
(
x
mod
t
)
?
= ˜
x
. Проверяя промежуточные значения, ко-
торые зависят лишь от ограниченного числа битов, выбранных злоумышлен-
ником, мы значительно затрудняем атаку последнего на систему вупинга.
Мы всячески поддерживаем использование библиотеки арифметических
операций над большими числами со встроенной системой верификации на
основе вупинга. Этот, казалось бы, сравнительно простой метод позволяет
избежать многих потенциальных проблем безопасности. Кроме того, нам ка-
жется, что гораздо проще один раз добавить к библиотеке поддержку ву-
пинга, нежели реализовать отдельные специфические системы верификации
в каждом из приложений, которые будут использовать эту библиотеку.
16.1.2
Проверка вычислений алгоритма DH
Если у вас нет библиотеки с поддержкой вупинга, вам придется работать
без нее. Протокол DH, описанный в одной из предыдущих глав, сам по себе
содержит целый ряд проверок. В частности, проверку того, что результат
не должен быть равен единице и что порядок результата должен быть ра-
вен
q
. К сожалению, эти проверки осуществляются не тем участником, кото-
рый выполняет вычисления, а тем, кто получает результат этих вычислений.
В общем случае мы не хотим отсылать какие-либо ошибочные результаты,
так как они могут оказаться полезными для злоумышленника, но в данной
ситуации особого вреда это не нанесет. Если результат ошибочен, протокол
так или иначе перестанет работать, поэтому ошибку в любом случае заметят.
Безопасность протокола нарушается только тогда, когда библиотека арифме-


308

Достарыңызбен бөлісу:
1   ...   147   148   149   150   151   152   153   154   ...   203




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет