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

Протокол с закрытым ключом

Здесь будет две стороны P - proover, и V - verificator. Через закрытый канал они оба знают d - закрытый ключ. Соответсвенно, есть протокол (вероятностный алгоритм) генерации ключей K. P, V - интерактивные вероятностные алгоритмы. В конце V выдает 0 или 1.

Условия:

  1. Корректность: Pr{VP(d)(d)=1}1

  2. Надежность: Злоумышленник запустил программу C она k раз пообщалась с правильным P после этого она пошла к верификатору и попыталась выступить в качестве прувера. Сделать это ей не должно удасться. C k Pr{VCPk(d)(d)=1}0

Потребуются псевдослучайные функции. Что это такое? Что значит делать запросы к случайной функции? Это значит, что если зафиксированы области значения и определения, то случайно выбирается одна из понятно скольких (двойная экспонента). Псевдослучайных функций хорошо бы чтобы была одинарная экспонента, чтобы можно было записывать номер строкой полиномиальной длины.

ПСФ - семейство fe:{0,1}n{0,1}n, e{0,1}k(n).

  • Вычислимость: e,xfe(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 вычисли функцию в такой то точке: PxV Pfd(x)V