Криптосистемы с открытым ключом Криптосистемы Симметричные Ассиметричные Потоковые Блочные Ключи шифрования и дешифрования совпадают Различные ключи шифрования и дешифрования Понятие односторонней функции Односторонняя функция (англ. one-way function, OWF) — математическая функция, которая легко вычисляется для любого входного значения, но трудно найти аргумент по заданному значению функции. Здесь «легко» и «трудно» должны пониматься с точки зрения теории сложности вычислений. Пример: y=ax+b – не односторонняя функция, т.к. x=(y-b)/a - быстровычислима В криптографических задачах в качестве односторонней функции часто используется функция y=ax mod p Обратная функция: x=logay mod p (дискретный логарифм) Пример: a=3, x=100, p=11 y=3100 mod 1, y =4 4=3x mod11, x-? Быстрое возведение в степень Вход: a,x,p Выход: ax mod p Неподходящее решение: Идея: x10=<xt…x0>2 t – нижняя граница log2x ax mod p = ax0*20+ x1*21+ x2*22+ …+xt*2t+mod p = ax0*20 * ax1*21* ax2*22 *…*axt*2t Т.к. xi может равняться либо 0, либо 1: axi*2i = 1, если xi = 0 a2i,если xi=1 [a1, a2, a4, a8 … и т.д. (1)] Следовательно, ax mod p может быть представлено в виде произведения членов ряда (1). Псевдокод Получение двоичного представления числа Операция побитового умножения: Т.е. (9&5)=1 При побитовом умножении любого числа на единицу мы получим в результате значение последнего бита числа: Операция побитового сдвига Т.е. 11 >>1 = 5 Побитовый сдвиг на один разряд вправо равнозначен целочисленному делению операнда на 2. Т.о. поочередно выделяя последний бит числа через операцию побитового умножения и сдвигая его на один разряд вправо пока число не станет равным нулю, можно получить двоичное представление числа. <getbin.cpp> Трудоемкость метода (в операциях умножения) При выборе x<p трудоемкость не превосходит 2logp 6*10-13 с 1090=(103)30 = (210)30= 2300 2log22300=600 T=10-15c 1022 лет Система Диффи-Хеллмана Назначение Позволяет двум или более пользователям обменяться без посредников ключом, который может быть использован затем для симметричного шифрования. Описание протокола (два участника): 1. Выбирается общее простое число p и некоторое число g, 1<g<p-1, такое что числа g1 mod p, g2 mod p … gp-1 mod p различны и образуют множество {1…p-1}. Числа p и g известны всем абонентам. 2. Абоненты выбирают большие числа XA и XB, которые хранят в секрете. 3. Каждый абонент вычисляет: 4. Абонент A вычисляет: Абонент B вычисляет: ZAB=ZBA Рекомендации по выбору g: q – большое простое, p=2q+1 Тогда g: Пример. 1. q=11 => p=2*11+1=23 Пусть g=3, проверяем условие gq mod p<>1 311 mod 23=1 Пусть g=5, проверяем условие gq mod p<>1 511 mod 23=22 p=23, g=5 2. XA =7 XB = 13 3. YA =57 mod 23 = 17 YB =513 mod 23 = 21 Абонент Секретный ключ A XA =7 B XB = 13 ZAB =217 mod 23 = 10 ZBA =1713 mod 23 = 10 Открытый ключ YA =17 YB =21