Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js
Now you are in the subtree of Lecture Notes public knowledge tree. 

Шифрование с открытым ключом (асимметричное)

Есть два ключа: 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 - при известном значении секрета вычисляет преобразования

Все эти функции полиномиальные, две из них обязательно вероятностные.

Теорема

Если существует одностороняя перестановка с секретом, то существует односторонняя перестановка с секретом и трудным битом.

Замечание

Теорема доказывается аналогично теоремы с прошлого занятия (секрет останется тем же самым).

Примеры (предположительные):

  1. Функция Рабина
    xx2(mod pq), где p,q - простные числа вида 4k+3, x - квадратичный вычет.
    Открытый ключ - pq, закрытый ключ - (p,q).
    Если секрет известен, то по z=x2 можно восстановить x. А x=t2. Поэтому zp+14=tp+1t2x(mod p)
    zq+14x(mod q). Из последних двух сравнений по китайской теореме об остатках можно найти x.

  2. Функция RSA:
    xxz(mod pq), где p,q - простые, (z,φ(pq))=1
    Секрет u берем из zu=1 (mod φ(p,q))
    (xz)u=xxu=xφ(pq)k+1x1k=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(b1hα(x),b1hα(gα(x))),,bkhα(gk1α(x),gkα(x)) Доказательство надежности похоже на доказательство вычислимой неотличимости в генераторах. Нужно идти с конца.