Я читаю «Понимание криптографии» Кристофа Паара и Яна Пельцла. В главе 2 (потоковые шифры). В разделе рассказывается о «Создание ключевых потоков из PRNG».
Они предполагают PRNG на основе линейного конгруэнтного генератора:
$$S_0 = семя $$
$$S_{i+1} \эквив AS_i + B\mod m, i=0,1,...$$
где мы выбираем m равным 100 битам и $ S_i,A,B \in \{0,1,...,m-1\}. $ Обратите внимание, что это
PRNG может иметь отличные статистические свойства, если мы тщательно выберем параметры.
Модуль m является частью схемы шифрования и общеизвестен. Секрет
key содержит значения (A,B) и, возможно, начальное значение S0, каждое из которых имеет длину 100.
Это дает нам длину ключа 200 бит, что более чем достаточно для защиты от
атака грубой силы. Поскольку это поточный шифр, Алиса может зашифровать:
$$y_i \экв x_i + s_i \mod 2 $$
куда $s_i$ биты двоичного представления PRNG выходные символы $S_j$
Но Оскар может легко начать атаку. Предположим, он знает первые 300 битов
открытый текст (это всего 300/8=37,5 байт), например, информация о заголовке файла, или он угадывает
часть открытого текста. Поскольку он точно знает зашифрованный текст, теперь он может вычислить
первые 300 бит ключевого потока как:
$$s_i \эквив y_i + x_i \mod m , i = 1,2,...,300$$
Эти 300 бит сразу дают первые три выходные символы ГПСЧ:$S_1 = (s_1,...,s_{100}), S_2 = (s_{101},...,s_{200})$ и $S_3 = (s_{201},...,s_{300}).$
(выделено мной)
Мои вопросы:
- Что такое выходной символ?
- как мы определяем выходные символы (количество бит и т. д.)