Шифрование с открытым ключом (асимметричное)
Есть два ключа: e - для шифрования и d - для дешифрования. e известнен A. R генерирует пару ключей e и d и публикует ключ e. И предлагает шифровать сообщения себе этим ключом.
Условие корректности: Pr{D(E(x,e),d)=x}≃1.
Условие надежности: (e,E(x,e)) и (e,E(x′,e)) вычислительно не отличимы.
Инструмент: одностороние перестановки с секретом (trapdoor one-way permutations). В одну сторону их вычислить легко, в другую - трудно, но легко с секретом.
Формальное определение
4 функции:
K - генератор номера функции и секрета
S - выбор случайной точки 0.0
F - вычисление значение функции
B - при известном значении секрета вычисляет преобразования
Все эти функции полиномиальные, две из них обязательно вероятностные.
Теорема
Если существует одностороняя перестановка с секретом, то существует односторонняя перестановка с секретом и трудным битом.
Замечание
Теорема доказывается аналогично теоремы с прошлого занятия (секрет останется тем же самым).
Примеры (предположительные):
Функция Рабина
x↦x2(mod pq), где p,q - простные числа вида 4k+3, x - квадратичный вычет.
Открытый ключ - p∗q, закрытый ключ - (p,q).
Если секрет известен, то по z=x2 можно восстановить x. А x=t2. Поэтому zp+14=tp+1≡t2≡x(mod p)
zq+14≡x(mod q). Из последних двух сравнений по китайской теореме об остатках можно найти x.Функция RSA:
x↦xz(mod pq), где p,q - простые, (z,φ(pq))=1
Секрет u берем из z⋅u=1 (mod φ(p,q))
(xz)u=xx⋅u=xφ(pq)⋅k+1≡x⋅1k=x (modpq)
Оба примера основываются на том, что предположительно нельзя быстро раскладывать на простые множители.
Построение схемы шифрования с открытым ключом:
1 бит b∈{0,1}. Пусть qα(x) - одностороняя перестановка с секретом,
hα(x) - трудный бит для этой перестановки. b↦(gα(x),hα(x)⊕b)
Проверим условие надежности:
(gα(x),hα(x)⊕b) - псевдо-случайная строка длины n+1 (ибо если hα - трудный бит, то и hα⊕1 - трудный бит)
Если много битов:
b1,…,bk↦(b1⊕hα(x),b1⊕hα(gα(x))),…,bk⊕hα(gk−1α(x),gkα(x)) Доказательство надежности похоже на доказательство вычислимой неотличимости в генераторах. Нужно идти с конца.