Interested Article - Криптосистема Накаша — Штерна

Криптосистема Накаша — Штерна ( англ. Naccache — Stern cryptosystem) — криптографический алгоритм с открытым ключом , основывающийся на вычислительной сложности задачи дискретного логарифмирования . В отличие от RSA , гомоморфен по сложению и вычитанию, а не по умножению .

Разработана и в 1998 году в двух версиях: и вероятностный. Является усовершенствованием схемы Бенало — авторы смогли построить вероятностную гомоморфную криптосистему с семантической стойкостью и значительно уменьшить отношение между размером шифротекста и размером открытого текста .

Сравнение с RSA

Основное сходство с RSA — использование RSA чисел .

Среди различий:

  • использование разных односторонних функций с потайным входом : этот момент имеет большой теоретический интерес, потому что, по их мнению, на данный момент существует только небольшое разнообразие односторонних функций с потайным входом, а это напрямую влияет на скорость создания новых криптосистем с открытым ключом ;
  • стойкость алгоритма не связана напрямую со стойкостью алгоритма шифрования криптосистемы RSA : стойкость RSA связана со сложностью задачи факторизации целых чисел , а стойкость криптосистемы Накаша — Штерна — с сложностью задачи дискретного логарифмирования ;
  • криптосистема RSA гомоморфна по умножению, а криптосистема Накаша — Штерна — по сложению .

Детерминированный вариант

Детерминированный вариант криптосистемы Накаша — Штерна может быть описан следующим образом: пусть σ {\displaystyle \sigma } B-гладкое (B мало — обычно это 10-битное число), нечетное, свободное от квадратов число и пусть n = p q {\displaystyle n=pq} — RSA число (Обычно полагают, n {\displaystyle n} — это как минимум 768-битное число), такое что σ {\displaystyle \sigma } делит ϕ ( n ) {\displaystyle \phi (n)} и оно взаимно просто с ϕ ( n ) / σ {\displaystyle \phi (n)/\sigma } , где ϕ ( n ) {\displaystyle \phi (n)} — это функция Эйлера . Далее, пусть g Z / n Z {\displaystyle g\in \mathbb {Z} /n\mathbb {Z} } порядка ϕ ( n ) / 4 {\displaystyle \phi (n)/4} . Тогда тройка чисел p , q , σ {\displaystyle p,\ q,\ \sigma } формирует закрытый ключ. Сообщение m {\displaystyle m} , меньшее чем σ {\displaystyle \sigma } , шифруется как g m m o d n {\displaystyle g^{m}mod\ n} . Расшифрование основано на использовании простых делителей числа σ {\displaystyle \sigma } .

Генерация ключа

  1. Выбрать k {\displaystyle k} «маленьких простых чисел » p 1 , . . . , p k {\displaystyle p_{1},...,p_{k}} где k {\displaystyle k} — четное. Здесь фраза «маленькие простые числа» означает, что берутся или первые из простых чисел(1, 3, 5, …) или генерируются каким-либо другим способом, кроме как использования алгоритмов генерации больших простых чисел.
  2. Пусть u = i = 1 k / 2 p i {\displaystyle u=\prod _{i=1}^{k/2}p_{i}} , υ = i = k / 2 + 1 k p i {\displaystyle \upsilon =\prod _{i=k/2+1}^{k}p_{i}} и σ = u v = i = 1 k p i {\displaystyle \sigma =uv=\prod _{i=1}^{k}p_{i}}
  3. Выбрать 2 «больших простых числа» a , b {\displaystyle a,\ b} , таких, что p = 2 a u + 1 {\displaystyle p=2au+1} , q = 2 b υ + 1 {\displaystyle q=2b\upsilon +1} — простые. Здесь фраза «большие простые числа» использована в том смысле, в каком её использует в алгоритмах генерации больших простых чисел.
  4. Пусть n = p q {\displaystyle n=pq} . В литературе число n {\displaystyle n} — произведение «больших простых чисел» — называют RSA число.
  5. Выбрать случайным образом число g m o d n {\displaystyle g\ mod\ n} , такое что у g {\displaystyle g} порядок ϕ ( n ) / 4 {\displaystyle \phi (n)/4}

Тогда открытый ключ формирует тройка чисел σ , n , g {\displaystyle \sigma ,\ n,\ g} . А закрытый — p , q {\displaystyle p,\ q}

С ростом числа n {\displaystyle n} генерация ключа становится очень затратной по времени операцией, потому что число a должно быть в подходящем диапазоне и, кроме того, удовлетворять тестам на простоту вместе с числом p = 2 a u + 1 {\displaystyle p=2au+1} . Для обхода этого затруднения, авторы предлагают сначала сгенерировать простые числа a , b , u , υ {\displaystyle a,\ b,\ u,\upsilon } и затем, подбирая вспомогательные простые числа p , q {\displaystyle p',q'} , достичь равенства p = 2 a u p + 1 {\displaystyle p=2aup'+1} и q = 2 b υ q + 1 {\displaystyle q=2b\upsilon q'+1} , где p , q {\displaystyle p,\ q} будут простыми .

Шифрование

Шифрование состоит из единственной операции возведения в степень по модулю n {\displaystyle n} : сообщение m {\displaystyle m} , меньшее σ {\displaystyle \sigma } , шифруется как E ( m ) = g m m o d n {\displaystyle E(m)=g^{m}mod\ n} . Причём здесь никак не используются σ {\displaystyle \sigma } .

Расшифрование

Расшифрование основано на китайской теореме об остатках . Пусть p i , 1 i k {\displaystyle p_{i},\ 1\leqslant i\leqslant k} — простые делители σ {\displaystyle \sigma } . Алгоритм вычисляет m i = m m o d p i {\displaystyle m_{i}=m\ mod\ p_{i}} и затем дешифрует сообщение m с помощью китайской теоремы об остатках .

Чтобы найти m i при заданном шифротексте c = g m m o d n {\displaystyle c=g^{m}mod\ n} , алгоритм вычисляет c i = c ϕ ( n ) / p i m o d n {\displaystyle c_{i}\ =\ c^{\phi (n)/p_{i}}\ mod\ n} , что в точности равно g m i ϕ ( n ) / p i m o d n {\displaystyle g^{m_{i}\phi (n)/p_{i}}\ mod\ n} . Это следует из следующих вычислений — здесь y i = ( m m i ) / p i {\displaystyle y_{i}=(m-m_{i})/p_{i}} : c i = c ϕ ( n ) / p i = g m ϕ ( n ) / p i = g ( m i + y i p i ) ϕ ( n ) / p i = g m i ϕ ( n ) / p i g y i ϕ ( n ) = g m i ϕ ( n ) / p i m o d n {\textstyle c_{i}\ =\ c^{\phi (n)/p_{i}}\ =\ g^{m\phi (n)/p_{i}}\ =\ g^{(m_{i}+y_{i}p_{i})\phi (n)/p_{i}}\ =\ g^{m_{i}\phi (n)/p_{i}}g^{y_{i}\phi (n)}\ =\ g^{m_{i}\phi (n)/p_{i}}\ mod\ n} . Сравнивая этот результат со всеми возможными степенями g j ϕ ( n ) / p i {\displaystyle g^{j\phi (n)/p_{i}}} , можно найти значение m i {\displaystyle m_{i}} . Более формально функция расшифрования представлена псевдокодом :

for i {\displaystyle i} = 1 to k {\displaystyle k} :
c i = c ϕ ( n ) / p i m o d n {\displaystyle c_{i}\ =\ c^{\phi (n)/p_{i}}\ mod\ n}

for j {\displaystyle j} = 0 to p i {\displaystyle p_{i}} — 1:

if c i == g j ϕ ( n ) / p i m o d n {\displaystyle c_{i}==g^{j\phi (n)/p_{i}}\ mod\ n} :

m i = j {\displaystyle m_{i}=j}


x {\displaystyle x} = ChineseReminder( m i {\displaystyle m_{i}} , p i {\displaystyle p_{i}} )

Пример

Генерация ключа для k = 6 {\displaystyle k=6} :

p = 21211 = 2 101 3 5 7 + 1 {\displaystyle p=21211=2*101*3*5*7+1}
q = 928643 = 2 191 11 13 17 + 1 {\displaystyle q=928643=2*191*11*13*17+1}
n = 21211 928643 = 19697446673 {\displaystyle n=21211*928643=19697446673}
g = 131 {\displaystyle g=131}
σ = 3 5 7 11 13 17 {\displaystyle \sigma =3*5*7*11*13*17}
p 1 = 3 , . . . , p 6 = 17 {\displaystyle p_{1}=3,...,p_{6}=17}
{ i , j } {\displaystyle \{i,j\}} содержит g j ϕ ( n ) / p i m o d n m o d 10000 {\displaystyle g^{j\phi (n)/p_{i}}\ mod\ n\ mod\ 10000}
i=1 i=2 i=3 i=4 i=5 i=6
j = 0 1 1 1 1 1 1
j = 1 1966 6544 1967 6273 6043 372
j = 2 9560 3339 4968 7876 4792 7757
j = 3 9400 1765 8720 262 3397
j = 4 6488 8651 6291 702
j = 5 2782 4691 677 4586
j = 6 9489 1890 8135
j = 7 8537 6878 3902
j = 8 2312 2571 5930
j = 9 7701 7180 6399
j = 10 8291 9771
j = 11 678 9771
j = 12 609
j = 13 7337
j = 14 6892
j = 15 3370
j = 16 3489

Шифрование m = 202 {\displaystyle m=202} :

c = g m m o d n = 131202 m o d 19697446673 {\displaystyle c=g^{m}mod\ n=131202\ mod\ 19697446673} .

Расшифрование:

c ϕ ( n ) / p 1 m o d n m o d 10000 = 1996 {\displaystyle c^{\phi (n)/p_{1}}\ mod\ nmod\ 10000=1996}
c ϕ ( n ) / p 2 m o d n m o d 10000 = 3339 {\displaystyle c^{\phi (n)/p_{2}}\ mod\ n\ mod\ 10000=3339}
c ϕ ( n ) / p 3 m o d n m o d 10000 = 2782 {\displaystyle c^{\phi (n)/p_{3}}\ mod\ n\ mod\ 10000=2782}
c ϕ ( n ) / p 4 m o d n m o d 10000 = 7994 {\displaystyle c^{\phi (n)/p_{4}}\ mod\ n\ mod\ 10000=7994}
c ϕ ( n ) / p 5 m o d n m o d 10000 = 1890 {\displaystyle c^{\phi (n)/p_{5}}\ mod\ n\ mod\ 10000=1890}
c ϕ ( n ) / p 6 m o d n m o d 10000 = 3370 {\displaystyle c^{\phi (n)/\ p_{6}}\ mod\ n\ mod\ 10000=3370}

Далее, используя таблицу:

m 1 = m m o d 3 = t a b l e ( 1996 ) = 1 {\displaystyle m_{1}=m\ mod\ 3=table(1996)=1}
m 2 = m m o d 5 = t a b l e ( 3339 ) = 2 {\displaystyle m_{2}=m\ mod\ 5=table(3339)=2}
m 3 = m m o d 7 = t a b l e ( 2782 ) = 1996 {\displaystyle m_{3}=m\ mod\ 7=table(2782)=1996}
m 4 = m m o d 11 = t a b l e ( 7994 ) = 4 {\displaystyle m_{4}=m\ mod\ 11=table(7994)=4}
m 5 = m m o d 13 = t a b l e ( 1890 ) = 7 {\displaystyle m_{5}=m\ mod\ 13=table(1890)=7}
m 6 = m m o d 17 = t a b l e ( 3370 ) = 15 {\displaystyle m_{6}=m\ mod\ 17=table(3370)=15}

и по китайской теореме об остатках :

m = 202 {\displaystyle m=202}

Вероятностный вариант

Вероятностный вариант криптосистемы — это усовершенствование предшествующих вероятностных криптосистем (например, криптосистемы Бенало).

Предшествующие криптосистемы имели очень существенный недостаток: чтобы зашифровать маленький набор данных S {\displaystyle S} (например, голоса 0, 1 в электронном голосовании), детерминированные криптосистемы, например, RSA, не подходят , потому что для расшифровки будет достаточно сравнить шифротекст с зашифрованными элемента набора S {\displaystyle S} . Это свойство криптосистем — невозможность различить шифротексты различных элементов набора S, называется семантической стойкостью . Но при сочетании гомомофрности и семантической стойкости, предшествующие криптосистемы начинали генерировать около килобайта шифротекста, чтобы зашифровать открытый текст в несколько бит . В криптосистеме Накаша — Штерна, кроме того, что есть свойства гомоморфности, семантической стойкости, отношение между размером шифротекста и размером открытого текста в точности равно n / σ {\displaystyle n/\sigma } . Авторы утверждают, что безопасно взять σ / n < 1 4 {\displaystyle \sigma /n<{\frac {1}{4}}} .

Генерация ключа

  1. Выбрать k {\displaystyle k} «маленьких простых чисел» p 1 , . . . , p k {\displaystyle p_{1},...,p_{k}} где k {\displaystyle k} — четное. Здесь фраза «маленькие простые числа» означает, что берутся или первые из простых чисел(1, 3, 5, …) или генерируются каким-либо другим способом, кроме как использования алгоритмов генерации больших простых чисел.
  2. Пусть u = i = 1 k / 2 p i {\displaystyle u=\prod _{i=1}^{k/2}p_{i}} , υ = i = k / 2 + 1 k p i {\displaystyle \upsilon =\prod _{i=k/2+1}^{k}p_{i}} и σ = u v = i = 1 k p i {\displaystyle \sigma =uv=\prod _{i=1}^{k}p_{i}}
  3. Выбрать 2 «больших простых числа» a , b {\displaystyle a,\ b} , таких, что p = 2 a u + 1 {\displaystyle p=2au+1} , q = 2 b υ + 1 {\displaystyle q=2b\upsilon +1} — простые. Здесь фраза «большие простые числа» использована в том смысле, в каком её использует в алгоритмах генерации больших простых чисел.
  4. Пусть n = p q {\displaystyle n=pq} — RSA число.
  5. Выбрать случайным образом число g m o d n {\displaystyle g\ mod\ n} , такое что у g {\displaystyle g} порядок ϕ ( n ) / 4 {\displaystyle \phi (n)/4}

Тогда открытый ключ формирует тройка чисел σ , n , g {\displaystyle \sigma ,\ n,\ g} . А закрытый — p , q {\displaystyle p,\ q}

Шифрование

Шифрование в вероятностном варианте очень похоже на шифрование в детерминированном варианте: пусть x {\displaystyle x} — случайным образом выбранное положительное число из кольца вычетов по модулю n {\displaystyle n} : x Z / n Z {\displaystyle x\in \mathbb {Z} /n\mathbb {Z} } . Тогда алгоритм записывается в виде E ( m ) = x σ g m m o d n {\displaystyle E(m)=x^{\sigma }g^{m}mod\ n}

Расшифрование

Расшифрование в вероятностном варианте остаётся без изменений в сравнении с детерминированным вариантом Эффект от умножение на x σ {\displaystyle x^{\sigma }} при шифровании учитывается, когда мы возводим шифротекст в степени ϕ ( n ) / p i {\displaystyle \phi (n)/p_{i}} . Проделаем вычисления, чтобы убедиться в этом.

Пусть p i , 1 i k {\displaystyle p_{i},1\leqslant i\leqslant k} — простые делители σ {\displaystyle \sigma } . Алгоритм вычисляет m i = m m o d p i {\displaystyle m_{i}=m\ mod\ p_{i}} и затем дешифрует сообщение m {\displaystyle m} с помощью китайской теоремы об остатках.

Чтобы найти m i {\displaystyle m_{i}} , при заданном шифротексте c = x σ g m m o d n {\displaystyle c=x^{\sigma }g^{m}mod\ n} , алгоритм вычисляет c i = c ϕ ( n ) / p i m o d n {\displaystyle c_{i}\ =\ c^{\phi (n)/p_{i}}\ mod\ n} , что в точности равно g m i ϕ ( n ) / p i m o d n {\displaystyle g^{m_{i}\phi (n)/p_{i}}\ mod\ n} . Это следует из следующих вычислений:

c ϕ ( n ) / p i x σ ϕ ( n ) / p i g m ϕ ( n ) / p i mod n g ( m i + y i p i ) ϕ ( n ) / p i mod n g m i ϕ ( n ) / p i mod n {\displaystyle {\begin{matrix}c^{\phi (n)/p_{i}}&\equiv &x^{\sigma \phi (n)/p_{i}}g^{m\phi (n)/p_{i}}\mod n\\&\equiv &g^{(m_{i}+y_{i}p_{i})\phi (n)/p_{i}}\mod n\\&\equiv &g^{m_{i}\phi (n)/p_{i}}\mod n\end{matrix}}}

Сравнивая этот результат со всеми возможными степенями g j ϕ ( n ) / p i {\displaystyle g^{j\phi (n)/p_{i}}} , можно найти значение m i {\displaystyle m_{i}}

Применение

В большинстве областей применения криптосистемы Накаша — Штерна используется свойство гомоморфности этой криптосистемы по сложению и вычитанию . Например, если у клиента в банке на счету m {\displaystyle m} и он хочет снять небольшую сумму u {\displaystyle u} , баланс m {\displaystyle m} хранится в зашифрованном виде E ( m ) {\displaystyle E(m)} , и представитель банка, выполняя операцию снятия со счета клиента суммы u {\displaystyle u} , не имеет доступа к расшифрованию данных счета. С помощью криптосистема Накаша — Штерна предлагается простое решение этой проблемы через операцию E ( m ) / E ( u ) m o d n {\displaystyle E(m)/E(u)\ mod\ n} — это значение нового баланса на счету в зашифрованном виде: m u {\displaystyle m-u} . Более формально: пусть E ( m 1 ) = g m 1 m o d n , E ( m 2 ) = g m 2 m o d n {\displaystyle E(m_{1})=g^{m_{1}}mod\ n,\ E(m_{2})=g^{m_{2}}mod\ n} — алгоритмы шифрования счетов m 1 , m 2 {\displaystyle m_{1},\ m_{2}} , тогда счет, равный сумме m 1 {\displaystyle m_{1}} и m 2 {\displaystyle m_{2}} вычисляется по следующей формуле: E ( m 1 ) E ( m 2 ) = g m 1 g m 2 m o d n = g m 1 + m 2 m o d n {\displaystyle E(m_{1})E(m_{2})=g^{m_{1}}g^{m_{2}}mod\ n=g^{m_{1}+m_{2}}mod\ n} .

Также протокол может применяться для повышения безопасности облачных вычислений . Например, если в облаке S {\displaystyle S} содержится множество пользователей (клиентов) p 1 , . . . , p i , . . . , p l {\displaystyle p_{1},...,p_{i},...,p_{l}} , у пользователя p i {\displaystyle p_{i}} имеются конфиденциальные данные x i {\displaystyle x_{i}} , хранящиеся в облаке, то пользователь p i {\displaystyle p_{i}} может обратиться к облаку с запросом на вычисление значения некоторой функции F {\displaystyle F} , зависящей от конфиденциальных данных. Запрос должен состоять из описания функции F {\displaystyle F} , идентификатора пользователя и его открытого ключа p k i {\displaystyle pk_{i}} . Облако должно проверить полномочия пользователя p i {\displaystyle p_{i}} на вычисление F ( x i ) {\displaystyle F(x_{i})} . Такая проверка может быть реализована с помощью стандартной процедуры электронной цифровой подписи . Если пользователь подтвердил свои права на вычисление функции F {\displaystyle F} , то облако должно вычислить значение E ( p k i , F ( x i ) ) {\displaystyle E(pk_{i},\ F(x_{i}))} и отправить его пользователю. В качестве E {\displaystyle E} можно взять функцию шифрования любой гомоморфной криптосистемы с открытым ключом, какой, к примеру, является криптосистема Накаше — Штерна. Пользователь, который размещает конфиденциальные данные и даёт запрос на вычисление функции F {\displaystyle F} , не доверяет облаку, и должен принимать соответствующие меры и предъявлять требования по обеспечению их безопасности. Очевидно, что было бы гораздо безопаснее передавать данные в таком виде, чтобы во время операций, которые производятся над ними, никоим образом не распространялась информация об этих данных. Поэтому, во-первых, данные необходимо шифровать, причём они должны поступать на сервер уже в шифрованном виде. Это означает, что шифрование должно осуществляться ещё пользователем. Во-вторых, необходимо обрабатывать эти данные без расшифровки, так как для передачи и хранения секретного ключа необходимо соблюдение определённых процедур, особенно сложных, если информация обрабатывается в недоверенной среде. Криптосистемы с гомоморфным шифрованием как раз помогают решить эти проблемы .

Ещё одним применением является обфускация для защиты программных продуктов. Впервые о применении обфускации в криптографии было упомянуто в работе Диффи и Хеллмана . В ней, для построения асимметричной криптосистемы, предложено использовать сложность задачи, заключающейся в анализе программ на низкоуровневом языке программирования (ассемблере, байт-коде). Основной целью обфускации является затруднение понимания функционирования программы. Поскольку все традиционные компьютерные архитектуры используют двоичные строки, применяя полностью гомоморфное шифрование над битами, можно вычислить любую функцию. Следовательно, можно гомоморфно зашифровать целиком всю программу так, что она сохранит свою функциональность .

Криптосистема может быть применена в системах электронного голосвания. Например, если есть n {\displaystyle n} кандидатов и комиссия, которая обладает этой криптосистемой, распространяет среди участников бюллетень-вектор ( p 1 , . . . , p n ) {\displaystyle (p_{1},...,\ p_{n})} , где p i {\displaystyle p_{i}} — фамилия i {\displaystyle i} -го кандидата, и у каждого участника есть открытый ключ p k {\displaystyle pk} , и каждый избиратель возвращает в комиссию вектор ( ν 1 , . . . , ν n ) {\displaystyle (\nu _{1},...,\nu _{n})} , где ν i { 0 , 1 } {\displaystyle \nu _{i}\in \{0,1\}} — вектор предпочтений, то победителем выбором считается тот кандидат, который набрал в сумме больше всех голосов — это число — сумма голосов — подсчитывается над шифрованными векторами избирателей. Это становится возможным благодаря гомоморфности. Польза от такого подхода в том, что нет необходимости расшифровывать данные избирателей для подсчёта голосов — повышается безопасность выборов для избирателей .

  • Область водяных знаков . Гомоморфность криптосистемы позволяет наносить водяной знак на зашифрованные данные .

Как и другие гомоморфные системы, криптосистема также может применяться, когда появляется необходимость подтвердить владение какой-либо информации, которая поддаётся такой проверке без раскрытия самой информации ( доказательство с нулевым разглашением ) .

Атаки

Широко известных атак на эту криптосистему не задокументировано. Сами авторы поощряют работу над взломом криптосистемы. В оригинальной статье предлагаются 768 долларов тому, кто расшифрует шифротекст c {\displaystyle c} и опубликует метод криптоанализа :

c {\displaystyle c} = 13370fe62d81fde356d1842fd7e5fc1ae5b9b449

bdd00866597e61af4fb0d939283b04d3bb73f91f

0d9d61eb0014690e567ab89aa8df4a9164cd4c63

6df80806c7cdceda5cfda97bf7c42cc702512a49

dd196c8746c0e2f36ca2aee21d4a36a 16


g {\displaystyle g} = 0b9cf6a789959ed4f36b701a5065154f7f4f1517

6d731b4897875d26a9e244415e111479050894ba7

c532ada1903c63a84ef7edc29c208a8ddd3fb5f7

d43727b730f20d8e12c17cd5cf9ab4358147cb62

a9fb887bf15204e444ba6ade6132743 16


n {\displaystyle n} = 1459b9617b8a9df6bd54341307f1256dafa241bd

65b96ed14078e80dc6116001b83c5f88c7bbcb0b

db237daac2e76df5b415d089baa0fd078516e60e

2cdda7c26b858777604c5fbd19f0711bc75ce00a

5c37e2790b0d9d0ff9625c5ab9c7511d 16

Здесь k = 30 {\displaystyle k=30} ( p i {\displaystyle p_{i}} — формируются из первых i {\displaystyle i} простых чисел, кроме 2) .

Примечания

  1. Jacques, Stern. (англ.) // ACM. — 1998. — P. 59–66 . 6 декабря 2006 года.
  2. А. И. Трубей. (рус.) // Информатика. — 2015. — Январь. 26 ноября 2018 года.
  3. Thomas W. Cusick. (англ.) // Security Protocols. — Berlin, Heidelberg: Springer Berlin Heidelberg, 1997. — P. 111–116 . — ISBN 9783540624943 , 9783540680475 . — doi : . 2 декабря 2018 года.
  4. S. Goldwasser, S. Micali. Probabilistic Encryption (англ.) // JCSS. — 1984. — Апрель. — P. 270—299 .
  5. A Brief Overview of Homomorphic Cryptosystem and Their Applications // nternational Journal of Computer Applications. — 2015.
  6. R. L. Rivest, L. Adleman, M. L. Dertouzos. On data banks and privacy homomorphisms // Foundations of secure computation.
  7. W. Diffie, M. Hellman. New directions in cryptography // IEEE Trans. Inf. Theory.
  8. J. Alwen [et al.] On the relationship between functional encryption, obfuscation, and fully homomorphic encryption // Cryptography and Coding – 14th IMA Intern. Conf., IMACC-2013..
  9. J.D. Cohen Benaloh. Verifiable Secret-Ballot Elections (англ.) // Yale University : Ph-D thesis. — 1988.
  10. B. Pfitzmann, M. Schunter. Assymetric fingerprinting (англ.) // Spinger-Verlag. — 1996. — P. 84—95 .
  11. Constructing Secure Content-Dependent Watermarking Scheme using Homomorphic Encryption.
  12. O. Goldreich, S. Micali, A. Wigderson. Proofs that Yield Nothing But Their Validity and a Methodology of Cryptographic Protocol Design (англ.) . — 1986. — P. 174—187 .
  13. G. Brassard, D. Chaum, C. Crépeau. // JCSS. — 1988. 27 сентября 2011 года.

Same as Криптосистема Накаша — Штерна