
- •230100 «Информатика
- •Лекция 1. Основные понятия
- •1.1 Терминология
- •1.2 Стеганография
- •Лекция 2. Докомпьютерные шифры
- •2.1 Подстановочные и перестановочные шифры
- •1.4 Простое xor
- •1.5 Одноразовые блокноты
- •Лекция 3. Криптографические протоколы
- •1 Введение в протоколы
- •2.2 Передача информации с использованием симметричной криптографии
- •2.3 Однонаправленные функции
- •2.4 Однонаправленные хэш-функции
- •2.5 Передача информации с использованием криптографии с открытыми ключами
- •Лекция 4. Цифровые подписи
- •1. Подпись документа с использованием симметричных криптосистем и посредника
- •2.7 Цифровые подписи и шифрование
- •2.8. Генерация случайных и псевдослучайных последовательностей
- •Лекция 5. Основные протоколы
- •1 Обмен ключами
- •Лекция 6. Алгоритмы аутентификации пользователей (Удостоверение подлинности)
- •3.3 Удостоверение подлинности и обмен ключами
- •3.4 Формальный анализ протоколов проверки подлинности и обмена ключами
- •Лекция 7. Цифровые подписи.
- •1. Неотрицаемые цифровые подписи
- •4.4 Подписи уполномоченного свидетеля
- •4.5 Подписи по доверенности
- •4.6 Групповые подписи
- •4.7 Подписи с обнаружением подделки
- •Лекция 8. Длина ключа
- •1 Длина симметричного ключа
- •7.2 Длина открытого ключа
- •7.3 Сравнение длин симметричных и открытых ключей
- •7.4 Вскрытие в день рождения против однонаправленных хэш-функций
- •7.5 Каков должны быть длина ключа?
- •Лекция 9. Управление ключами
- •1 Генерация ключей
- •8.2 Нелинейные пространства ключей
- •8.3 Передача ключей
- •8.4 Проверка ключей
- •8.5 Использование ключей
- •8.6 Обновление ключей
- •8.7 Хранение ключей
- •8.8 Резервные ключи
- •8.9 Скомпрометированные ключи
- •8.10 Время жизни ключей
- •8.11 Разрушение ключей
- •8.12 Управление открытыми ключами
- •Лекция 10. Типы алгоритмов и криптографические режимы
- •9.1 Режим электронной шифровальной книги
- •9.2 Повтор блока
- •9.3 Режим сцепления блоков шифра
- •9.4 Потоковые шифры
- •9.5 Самосинхронизирующиеся потоковые шифры
- •9.6 Режим обратной связи по шифру
- •9.7 Синхронные потоковые шифры
- •9.8 Режим выходной обратной связи
- •9.9 Режим счетчика
- •9.10 Другие режимы блочных шифров
- •Лекции 12. Математические основы
- •11.1 Теория информации
- •Энтропия и неопределенность
- •Норма языка
- •Безопасность криптосистемы
- •Расстояние уникальности
- •Практическое использование теории информации
- •Путаница и диффузия
- •11.2 Теория сложности
- •Сложность алгоритмов
- •Сложность проблем
- •11.3 Теория чисел
- •Арифметика вычетов
- •Простые числа
- •Наибольший общий делитель
- •Обратные значения по модулю
- •Решение для коэффициентов
- •Малая теорема Ферма
- •Функция Эйлера
- •Китайская теорема об остатках
- •Квадратичные вычеты
- •Символ Лежандра
- •Символ Якоби
- •Целые числа Блюма
- •Генераторы
- •Вычисление в поле Галуа
- •11.4 Разложение на множители
- •Квадратные корни по модулю п
- •11.5 Генерация простого числа
- •Практические соображения
- •Сильные простые числа
- •11.6 Дискретные логарифмы в конечном поле
- •Вычисление дискретных логарифмов в конечной группе
- •Лекция 13. Стандарт шифрования данных des (Data Encryption Standard)
- •12.1 Введение
- •Разработка стандарта
- •Принятие стандарта
- •Проверка и сертификация оборудования des
- •12.2 Описание des
- •Начальная перестановка
- •Преобразования ключа
- •Перестановка с расширением
- •Подстановка с помощью s-блоков
- •Перестановка с помощью р-блоков
- •Заключительная перестановка
- •Дешифрирование des
- •Режимы des
- •Аппаратные и программные реализации des
- •15.1 Двойное шифрование
- •15.3 Удвоение длины блока
- •15.4 Другие схемы многократного шифрования
- •15.5 Уменьшение длины ключа в cdmf
- •15.6 Отбеливание
- •15.7 Многократное последовательное использование блочных алгоритмов
- •15.8 Объединение нескольких блочных алгоритмов
- •16.1 Линейные конгруэнтные генераторы
- •Константы для линейных конгруэнтных генераторов
- •16.2 Сдвиговые регистры с линейной обратной связью
- •16.3 Проектирование и анализ потоковых шифров
- •16.4 Потоковые шифры на базе lfsr
- •18.1 Основы
- •18.7 Алгоритм безопасного хэширования (Secure Hash Algorithm, sha)
- •Лекция 17. Алгоритмы с открытыми ключами
- •19.2 Алгоритмы рюкзака
- •Иностранные патенты на алгоритм рюкзака Меркла-Хеллмана
- •Шифрование rsa
- •Скорости rsa для различных длин модулей при 8-битовом открытом ключе (на sparc II)
- •Лекция 19. Безопасность вычислительных сетей Атакуемые сетевые компоненты
- •Уровни сетевых атак согласно модели osi
Решение для коэффициентов
Алгоритм Эвклида можно использовать и для решения следующих проблем: дан массив из т переменных x1, x2,..., хт, найти массив т коэффициентов, u1, и2,..., ит, таких что
u1 * x1+...+ um *xm,= 1
Малая теорема Ферма
Если т - простое число, и а не кратно т, то малая теорема Ферма утверждает
аm-1 = 1 (mod m)
(Пьер де Ферма (Pierre de Fermat), французский математик, жил с 1601 по 1665 год. Эта теорема не имеет ничего общего с его знаменитой теоремой.)
Функция Эйлера
Существует другой способ вычислить обратное значение по модулю п, но его не всегда возможно использовать. Приведенным множеством остатков mod n называется подмножество полного множества остатков, члены которого взаимно просты с п. Например, приведенное множество остатков mod 12 - это {1, 5, 7, 11}. Если п -простое число, то приведенное множество остатков mod п - это множество всех чисел от 1 до n-1. Для любого п, не равного 1,число 0 никогда не входит в приведенное множество остатков.
Функция Эйлера, которую также называют функцией фи Эйлера и записывают как φ(n), - это количество элементов в приведенном множестве остатков по модулю п. Иными словами, φ(n) - это количество положительных целых чисел, меньших п и взаимно простых с п (для любого п, большего 1). (Леонард Эйлер (Leonhard Euler), швейцарский математик, жил с 1707 по 1783 год.)
Если п - простое число, то φ(n) = n-1. Если п = pq, где р и q -простые числа, то φ(n)= (р - 1)(q - 1). Эти числа появляются в некоторых алгоритмах с открытыми ключами, и вот почему. В соответствии с обобщением Эйлера малой теоремы Ферма, если НОД(а,n) = 1, то
аφ(n) mod n = 1
Теперь легко вычислить а-1 mod n:
x = aφ(n)-1 mod n
Например, какое число является обратным для 5 по модулю 7? Так как 7 - простое число, φ(7) = 7-1 = 6. Итак, число, обратное к 5 по модулю 7, равно
56-1 mod 7 = 55 mod 7 = 3
Эти методы вычисления обратных значений можно расширить для более общей проблемы нахождения х (если НОД(а,n) = 1):
(а*х) mod п = b
Используя обобщение Эйлера, решаем
х =(b* аφ(n)-1)mod n
Используя алгоритм Эвклида, находим
х = b* (a-1 mod n)) mod n
В общем случае для вычисления обратных значений алгоритм Эвклида быстрее, чем обобщение Эйлера, особенно для чисел длиной порядка 500 бит. Если НОД(а,n) ≠ 1, не все потеряно. В этом общем случае (а*х) mod n=b, может иметь или несколько решений, или ни одного.
Китайская теорема об остатках
Если известно разложение числа п на простые сомножители, то для решения полной системы уравнений можно воспользоваться Китайской теоремой об остатках. Основной вариант этой теоремы был открыт в первом веке китайским математиком Сун Цзе.
В общем случае, если разложение числа п на простые сомножители представляет собой р1*р2*...*pt, то система уравнений
(x mod pi) = аi, где i = 1, 2,..., t
имеет единственное решение, х, меньшее п. (Обратите внимание, что некоторые простые числа могут появляться несколько раз. Например, р1 может быть равно р2.) Другими словами, число (меньшее, чем произведение нескольких простых чисел) однозначно определяется своими остатками от деления на эти простые числа.
Например, возьмем простые числа 3 и 5, и 14 в качестве заданного числа. 14 mod 3 = 2, и 14 mod 5 = 4. Существует единственное число, меньшее 3*5 = 15, с такими остатками: 14. Два остатка однозначно определяют число.
Поэтому для произвольного а < р и b < q (где р и q - простые числа), существует единственное число х, меньшее pq, такое что
х = a (mod p), и х = b (mod q)
Для получения х сначала воспользуемся алгоритмом Эвклида, чтобы найти и, такое что
u*q = 1 (mod p)
Затем вычислим:
х = (((а - b) *u) mod p) * q + b
Вот как выглядит Китайская теорема об остатках на языке С:
/* г - это количество элементов в массивах m and u;
m - это массив (попарно взаимно простых) модулей
и - это массив коэффициентов
возвращает значение п, такое что n == u[k]%m[k] (k=0..r-l) и
n < [m[0]*т[1]*...*т[г-1]
*/
/* Получение функции Эйлера (totient) остается упражнением для читателя. */
int Chinese_remainder (size_t r, int *m, int *u) {
size_t i;
int modulus;
int n;
modulus=l;
for (i=0; i<r; ++i)
modulus*=m[i];
n=0;
for (i=0; i<r; ++i) {
n+=u[i] * modexp(modulus/m[i]*totient(m[i]),m[i]);
n %= modulus;
}
return n; }
Обращение Китайской теоремы об остатках может быть использовано для решения следующей проблемы: если р и q - простые числа, и р меньше q, то существует единственное х, меньшее, чем pq, такое что
а = х (mod p), и b = x (mod q)
Если a ≥ b mod p, то
х = (((а – (b mod p)) * и) mod p) * q + b
Если а < b mod p, то
х = (((а +p - (b mod p))*u) mod p)*q + b