Протокол с закрытым ключом
Здесь будет две стороны P - proover, и V - verificator. Через закрытый канал они оба знают d - закрытый ключ. Соответсвенно, есть протокол (вероятностный алгоритм) генерации ключей K. P, V - интерактивные вероятностные алгоритмы. В конце V выдает 0 или 1.
Условия:
Корректность: Pr{VP(d)(d)=1}≃1
Надежность: Злоумышленник запустил программу C она k раз пообщалась с правильным P после этого она пошла к верификатору и попыталась выступить в качестве прувера. Сделать это ей не должно удасться. ∀C ∀k Pr{VCPk(d)(d)=1}≃0
Потребуются псевдослучайные функции. Что это такое? Что значит делать запросы к случайной функции? Это значит, что если зафиксированы области значения и определения, то случайно выбирается одна из понятно скольких (двойная экспонента). Псевдослучайных функций хорошо бы чтобы была одинарная экспонента, чтобы можно было записывать номер строкой полиномиальной длины.
ПСФ - семейство fe:{0,1}n↦{0,1}n, e∈{0,1}k(n).
Вычислимость: e,x↦fe(x) - вычисляется полиномиальным алгоритмом.
Неотличимость: пусть Cn - схемы полиномиального размера с оракульным доступом к f (то есть алгоритмы с подсказкой для всех входов данной длины и оракулом) ∀Cn Pre{Cfen=1}≃Prf{Cfn=1} Идея в том, что эта схема может вычислить значения в полиномиальном числе точек и пытается отличить.
Конструкция: рассматривается генератор псеводослучайных чисел G:{0,1}n↦{0,1}2n. Если e=ε, то fe(x)=x. G(x)=G0(x)G1(x) (G0(x),G1(x) - два слова длины n). Если |e|=1, то fe(x)=Ge(x). Если |e|=2,e=e1e2, то fe(x)=Ge2(Ge1(x)). И так далее.
Закрытый ключ - индекс ПСФ. P говорит V вычисли функцию в такой то точке: Px←V Pfd(x)→V