как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Алгоритмы с открытыми ключами
8.5 Алгоритм Блюма-Блюма-Шуба
Одним из наиболее стойких к криптографическим атакам является алгоритм Блюма-Блюма-Шуба (BBS). Главное его достоинство состоит в том, что строго доказано, что не существует алгоритма с полиномиальной оценкой времени его выполнения, который по любым битам выходной последовательности может предсказать ее
-й бит с вероятностью, существенно большей, чем 0,5.
Пусть и
- два больших простых числа примерно одинакового размера, причем
![p{\equiv}3~(\mod 4),q{\equiv}3~(\mod 4).](/sites/default/files/tex_cache/31178099b70c9847a0f892394eb97f46.png)
Тогда число называется целым числом Блюма. Пусть
- мультипликативная группа кольца вычетов по модулю
,
- подгруппа её квадратов. Имеем:
![\left|\mathbb{Z}_n^\ast\right|=\varphi \left(n\right)=\left(p-1\right)\left(q-1\right),\left|Q{R}_{n}\right|=(p-1)(q-1)/4.](/sites/default/files/tex_cache/1e51334da7e17bd1a40c42353c551972.png)
Каждый квадрат из имеет ровно четыре квадратных корня в
, и лишь один из них, называемый примитивным, лежит в
.
Пример 8.11 Если , то
. Тогда
,
,
, кроме того, учитывая, что корня из 135 по модулю 437 не существует, а
, имеем:
![135{\notin}Q{R}_{437},139{\in}Q{R}_{437}.](/sites/default/files/tex_cache/7d2a014d481bb52d799080d4981395a6.png)
Квадратными корнями из 139 по модулю 437 являются числа 24, 185, 252 и 413, причем 24 является примитивным, поскольку .
Задача определения примитивных квадратных корней по модулю числа вычислительно эквивалентна задаче разложения этого числа на множители. Таким образом, функция
![f\left(x\right)={x}^{2}~(\mod n)](/sites/default/files/tex_cache/7aebada96c5b27e04c62469c5aa04091.png)
эффективно вычисляется, а произвести обратное преобразование может только тот, кто знает секрет - разложение на множители. Таким образом,
- односторонняя функция с секретом.
Опишем теперь алгоритм генерации случайной последовательности чисел.
-
Выберем в качестве инициализирующего вектора случайное число
. Для этого возведём случайное число
в квадрат.
- Искомой последовательностью битов длиной
будет последовательность
где- младший бит числа
,
Важным достоинством этого генератора является то, что при знании разложения на простые множители он допускает прямое определение отдельных битов, которые в нём вырабатываются. Имеем:
![{x}_{i}={x}_{0}^{{2}^{i}}~(\mod n),](/sites/default/files/tex_cache/c8a6cb17d5040343b50d6d25a8991228.png)
причем , поэтому
![{x}_{i}={x}_{0}^{{2}^{i}}~(\mod (p-1)(q-1)),](/sites/default/files/tex_cache/1ae1a500fd023e5efe1afa0a9ed2ff9e.png)
то есть с помощью двух операций модульного возведения в степень, которые эффективно вычисляются, любое число может быть найдено лишь исходя из начального вектора
и индекса
.
Термин вероятностное шифрование был введён Ш. Гольдвассер и С. Микали, и ими же была предложена первая схема такого шифрования, основанная на использовании BBS-генератора в качестве источника ключевой последовательности. Данная схема не обеспечивает секретности по отношению к атаке на основе выбранного шифртекста.
Пусть исходное сообщение - $m$-разрядная битовая последовательность,
- случайный квадратичный вычет по модулю
. Функция шифрования по схеме Гольдвассер-Микали имеет вид:
![c=\left({x}_{m},t{\oplus}\mathit{BB}{S}_{n,m}\left({x}_{0}\right)\right),](/sites/default/files/tex_cache/d7a5d794b0794d61100438afeecbecc0.png)
при этом включается в шифртекст для того, чтобы законный получатель мог его расшифровать. При этом для расшифровки вычисляется
по следующему алгоритму:
![]() |
( 8.1) |
где и
находятся расширенным алгоритмом Евклида:
.
Пример 8.12 Каждой букве русского алфавита (отождествим Е и Ё) поставим в соответствие её порядковый номер в двоичной записи:
![\text{А} = 00000,\quad \text{Б} = 00001,\quad \text{В} = 00010, \quad {\dots}, \quad \text{Я} = \ 11111.](/sites/default/files/tex_cache/6580487d8a4b320f2b7adb637cd46ef5.png)
Зашифруем слово "шифр" по алгоритму вероятностного шифрования.
Используя приведенную схему кодирования, получаем:
![t=11000010001010010000.](/sites/default/files/tex_cache/b2fe73cae66b3c6baf67b9573372fcde.png)
Выберем простые числа: . Тогда
. Возьмём случайный квадратичный вычет
по модулю
. Последовательно возводя его в квадрат, получаем:
Пример 8.13 Шифртекст получен из слова в алфавите А, Б, ..., Я по схеме вероятностного шифрования с использоваем открытого ключа
. Найти открытый текст.
,
,
.
Имеем ,
.
Расшифровку проведем по алгоритму (8.1):
1) Вычисляем и
:
![\alpha=\left(\frac{101987+1}{4}\right)^{19} ~ \mod (101987-1)=68875,](/sites/default/files/tex_cache/93767b20bb98c984034911ba326e5980.png)
![\beta=\left(\frac{101267+1}{4}\right)^{19} ~ \mod (101267-1)=48149.](/sites/default/files/tex_cache/f46f2c77a4e9b3dbe1dfd9bd720a13c2.png)
2) Находим и
:
![u=(9775365428 \mod 101987)^{68875} ~ \mod 101987=101358;](/sites/default/files/tex_cache/943c087533c76b240c8f21f2270d0cf4.png)
![v=(9775365428 \mod 101267)^{48149} ~ \mod 101267=25104.](/sites/default/files/tex_cache/88024d9f69c01d98b2e4601ca4c14612.png)
3) С помощью алгоритма Евклидва найдём целые числа и
такие, что
, т.е.
,
. Получаем:
,
.
4) Находим :
![x_0=(5204\cdot 101987\cdot 25104+(-5241)\cdot 101267\cdot 101358) ~ \mod 10327917529=4034401117.](/sites/default/files/tex_cache/52631e52419695fa5ccefd73dbda07d6.png)
Теперь вычисляем :
Прибавляя поразрядно последовательность ,
,
,
к шифрограмме, получаем код исходного сообщения: