как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Алгоритмы с открытыми ключами
8.5 Алгоритм Блюма-Блюма-Шуба
Одним из наиболее стойких к криптографическим атакам является алгоритм Блюма-Блюма-Шуба (BBS). Главное его достоинство состоит в том, что строго доказано, что не существует алгоритма с полиномиальной оценкой времени его выполнения, который по любым битам выходной последовательности может предсказать ее
-й бит с вероятностью, существенно большей, чем 0,5.
Пусть и
- два больших простых числа примерно одинакового размера, причем

Тогда число называется целым числом Блюма. Пусть
- мультипликативная группа кольца вычетов по модулю
,
- подгруппа её квадратов. Имеем:

Каждый квадрат из имеет ровно четыре квадратных корня в
, и лишь один из них, называемый примитивным, лежит в
.
Пример 8.11 Если , то
. Тогда
,
,
, кроме того, учитывая, что корня из 135 по модулю 437 не существует, а
, имеем:

Квадратными корнями из 139 по модулю 437 являются числа 24, 185, 252 и 413, причем 24 является примитивным, поскольку .
Задача определения примитивных квадратных корней по модулю числа вычислительно эквивалентна задаче разложения этого числа на множители. Таким образом, функция

эффективно вычисляется, а произвести обратное преобразование может только тот, кто знает секрет - разложение на множители. Таким образом,
- односторонняя функция с секретом.
Опишем теперь алгоритм генерации случайной последовательности чисел.
-
Выберем в качестве инициализирующего вектора случайное число
. Для этого возведём случайное число
в квадрат.
- Искомой последовательностью битов длиной
будет последовательность
где- младший бит числа
,
Важным достоинством этого генератора является то, что при знании разложения на простые множители он допускает прямое определение отдельных битов, которые в нём вырабатываются. Имеем:

причем , поэтому

то есть с помощью двух операций модульного возведения в степень, которые эффективно вычисляются, любое число может быть найдено лишь исходя из начального вектора
и индекса
.
Термин вероятностное шифрование был введён Ш. Гольдвассер и С. Микали, и ими же была предложена первая схема такого шифрования, основанная на использовании BBS-генератора в качестве источника ключевой последовательности. Данная схема не обеспечивает секретности по отношению к атаке на основе выбранного шифртекста.
Пусть исходное сообщение - $m$-разрядная битовая последовательность,
- случайный квадратичный вычет по модулю
. Функция шифрования по схеме Гольдвассер-Микали имеет вид:

при этом включается в шифртекст для того, чтобы законный получатель мог его расшифровать. При этом для расшифровки вычисляется
по следующему алгоритму:
![]() |
( 8.1) |
где и
находятся расширенным алгоритмом Евклида:
.
Пример 8.12 Каждой букве русского алфавита (отождествим Е и Ё) поставим в соответствие её порядковый номер в двоичной записи:

Зашифруем слово "шифр" по алгоритму вероятностного шифрования.
Используя приведенную схему кодирования, получаем:

Выберем простые числа: . Тогда
. Возьмём случайный квадратичный вычет
по модулю
. Последовательно возводя его в квадрат, получаем:
Пример 8.13 Шифртекст получен из слова в алфавите А, Б, ..., Я по схеме вероятностного шифрования с использоваем открытого ключа
. Найти открытый текст.
,
,
.
Имеем ,
.
Расшифровку проведем по алгоритму (8.1):
1) Вычисляем и
:


2) Находим и
:


3) С помощью алгоритма Евклидва найдём целые числа и
такие, что
, т.е.
,
. Получаем:
,
.
4) Находим :

Теперь вычисляем :
Прибавляя поразрядно последовательность ,
,
,
к шифрограмме, получаем код исходного сообщения: