использование разных односторонних функций с потайным входом[1]: этот момент имеет большой теоретический интерес, потому что, по их мнению, на данный момент существует только небольшое разнообразие односторонних функций с потайным входом, а это напрямую влияет на скорость создания новых криптосистем с открытым ключом[1];
стойкость алгоритма не связана напрямую со стойкостью алгоритма шифрования криптосистемы RSA: стойкость RSA связана со сложностью задачи факторизации целых чисел, а стойкость криптосистемы Накаша — Штерна — с сложностью задачи дискретного логарифмирования[3][⇨];
криптосистема RSA гомоморфна по умножению, а криптосистема Накаша — Штерна — по сложению[1][см. «Применение»].
Детерминированный вариант криптосистемы Накаша — Штерна может быть описан следующим образом: пусть — B-гладкое (B мало — обычно это 10-битное число), нечетное, свободное от квадратов число и пусть — RSA число (Обычно полагают, — это как минимум 768-битное число), такое что делит и оно взаимно просто с , где — это функция Эйлера. Далее, пусть порядка . Тогда тройка чисел формирует закрытый ключ. Сообщение , меньшее чем , шифруется как . Расшифрование основано на использовании простых делителей числа [1].
Выбрать «маленьких простых чисел» где — четное. Здесь фраза «маленькие простые числа» означает, что берутся или первые из простых чисел(1, 3, 5, …) или генерируются каким-либо другим способом, кроме как использования алгоритмов генерации больших простых чисел.
Пусть , и
Выбрать 2 «больших простых числа» , таких, что , — простые. Здесь фраза «большие простые числа» использована в том смысле, в каком её использует в алгоритмах генерации больших простых чисел.
Пусть . В литературе число — произведение «больших простых чисел» — называют RSA число.
Выбрать случайным образом число , такое что у порядок
Тогда открытый ключ формирует тройка чисел . А закрытый — [1]
С ростом числа генерация ключа становится очень затратной по времени операцией, потому что число a должно быть в подходящем диапазоне и, кроме того, удовлетворять тестам на простоту вместе с числом . Для обхода этого затруднения, авторы предлагают сначала сгенерировать простые числа и затем, подбирая вспомогательные простые числа , достичь равенства и , где будут простыми[1].
Шифрование состоит из единственной операции возведения в степень по модулю: сообщение , меньшее , шифруется как . Причём здесь никак не используются .[1]
Расшифрование основано на китайской теореме об остатках. Пусть — простые делители . Алгоритм вычисляет и затем дешифрует сообщение m с помощью китайской теоремы об остатках[1].
Чтобы найти mi при заданном шифротексте , алгоритм вычисляет , что в точности равно . Это следует из следующих вычислений — здесь : . Сравнивая этот результат со всеми возможными степенями , можно найти значение . Более формально функция расшифрования представлена псевдокодом[1]:
Вероятностный вариант криптосистемы — это усовершенствование предшествующих вероятностных криптосистем (например, криптосистемы Бенало).
Предшествующие криптосистемы имели очень существенный недостаток: чтобы зашифровать маленький набор данных (например, голоса 0, 1 в электронном голосовании), детерминированные криптосистемы, например, RSA, не подходят[1], потому что для расшифровки будет достаточно сравнить шифротекст с зашифрованными элемента набора . Это свойство криптосистем — невозможность различить шифротексты различных элементов набора S, называется семантической стойкостью[4]. Но при сочетании гомомофрности и семантической стойкости, предшествующие криптосистемы начинали генерировать около килобайта шифротекста, чтобы зашифровать открытый текст в несколько бит[1]. В криптосистеме Накаша — Штерна, кроме того, что есть свойства гомоморфности, семантической стойкости, отношение между размером шифротекста и размером открытого текста в точности равно . Авторы утверждают, что безопасно взять [1].
Выбрать «маленьких простых чисел» где — четное. Здесь фраза «маленькие простые числа» означает, что берутся или первые из простых чисел(1, 3, 5, …) или генерируются каким-либо другим способом, кроме как использования алгоритмов генерации больших простых чисел.
Пусть , и
Выбрать 2 «больших простых числа» , таких, что , — простые. Здесь фраза «большие простые числа» использована в том смысле, в каком её использует в алгоритмах генерации больших простых чисел.
Пусть — RSA число.
Выбрать случайным образом число , такое что у порядок
Тогда открытый ключ формирует тройка чисел . А закрытый — [1]
Шифрование в вероятностном варианте очень похоже на шифрование в детерминированном варианте: пусть — случайным образом выбранное положительное число из кольца вычетов по модулю : . Тогда алгоритм записывается в виде [1]
Расшифрование в вероятностном варианте остаётся без изменений в сравнении с детерминированным вариантом Эффект от умножение на при шифровании учитывается, когда мы возводим шифротекст в степени . Проделаем вычисления, чтобы убедиться в этом.
Пусть — простые делители . Алгоритм вычисляет и затем дешифрует сообщение с помощью китайской теоремы об остатках.
Чтобы найти , при заданном шифротексте , алгоритм вычисляет , что в точности равно . Это следует из следующих вычислений:
Сравнивая этот результат со всеми возможными степенями , можно найти значение [1]
В большинстве областей применения криптосистемы Накаша — Штерна используется свойство гомоморфности этой криптосистемы по сложению и вычитанию[5][2]. Например, если у клиента в банке на счету и он хочет снять небольшую сумму , баланс хранится в зашифрованном виде , и представитель банка, выполняя операцию снятия со счета клиента суммы , не имеет доступа к расшифрованию данных счета. С помощью криптосистема Накаша — Штерна предлагается простое решение этой проблемы через операцию — это значение нового баланса на счету в зашифрованном виде: . Более формально: пусть — алгоритмы шифрования счетов , тогда счет, равный сумме и вычисляется по следующей формуле: [1].
Также протокол может применяться для повышения безопасности облачных вычислений. Например, если в облаке содержится множество пользователей (клиентов) , у пользователя имеются конфиденциальные данные , хранящиеся в облаке, то пользователь может обратиться к облаку с запросом на вычисление значения некоторой функции , зависящей от конфиденциальных данных. Запрос должен состоять из описания функции , идентификатора пользователя и его открытого ключа . Облако должно проверить полномочия пользователя на вычисление . Такая проверка может быть реализована с помощью стандартной процедуры электронной цифровой подписи. Если пользователь подтвердил свои права на вычисление функции , то облако должно вычислить значение и отправить его пользователю. В качестве можно взять функцию шифрования любой гомоморфной криптосистемы с открытым ключом, какой, к примеру, является криптосистема Накаше — Штерна. Пользователь, который размещает конфиденциальные данные и даёт запрос на вычисление функции , не доверяет облаку, и должен принимать соответствующие меры и предъявлять требования по обеспечению их безопасности. Очевидно, что было бы гораздо безопаснее передавать данные в таком виде, чтобы во время операций, которые производятся над ними, никоим образом не распространялась информация об этих данных. Поэтому, во-первых, данные необходимо шифровать, причём они должны поступать на сервер уже в шифрованном виде. Это означает, что шифрование должно осуществляться ещё пользователем. Во-вторых, необходимо обрабатывать эти данные без расшифровки, так как для передачи и хранения секретного ключа необходимо соблюдение определённых процедур, особенно сложных, если информация обрабатывается в недоверенной среде. Криптосистемы с гомоморфным шифрованием как раз помогают решить эти проблемы[6][2].
Ещё одним применением является обфускация для защиты программных продуктов. Впервые о применении обфускации в криптографии было упомянуто в работе Диффи и Хеллмана[7]. В ней, для построения асимметричной криптосистемы, предложено использовать сложность задачи, заключающейся в анализе программ на низкоуровневом языке программирования (ассемблере, байт-коде). Основной целью обфускации является затруднение понимания функционирования программы. Поскольку все традиционные компьютерные архитектуры используют двоичные строки, применяя полностью гомоморфное шифрование над битами, можно вычислить любую функцию. Следовательно, можно гомоморфно зашифровать целиком всю программу так, что она сохранит свою функциональность[8].
Криптосистема может быть применена в системах электронного голосвания. Например, если есть кандидатов и комиссия, которая обладает этой криптосистемой, распространяет среди участников бюллетень-вектор , где — фамилия -го кандидата, и у каждого участника есть открытый ключ , и каждый избиратель возвращает в комиссию вектор , где — вектор предпочтений, то победителем выбором считается тот кандидат, который набрал в сумме больше всех голосов — это число — сумма голосов — подсчитывается над шифрованными векторами избирателей. Это становится возможным благодаря гомоморфности. Польза от такого подхода в том, что нет необходимости расшифровывать данные избирателей для подсчёта голосов — повышается безопасность выборов для избирателей[9].
Область водяных знаков[10]. Гомоморфность криптосистемы позволяет наносить водяной знак на зашифрованные данные[11].
Как и другие гомоморфные системы, криптосистема также может применяться, когда появляется необходимость подтвердить владение какой-либо информации, которая поддаётся такой проверке без раскрытия самой информации (доказательство с нулевым разглашением)[12][13].
Широко известных атак на эту криптосистему не задокументировано. Сами авторы поощряют работу над взломом криптосистемы. В оригинальной статье предлагаются[1] 768 долларов тому, кто расшифрует шифротекст и опубликует метод криптоанализа:
= 13370fe62d81fde356d1842fd7e5fc1ae5b9b449
bdd00866597e61af4fb0d939283b04d3bb73f91f
0d9d61eb0014690e567ab89aa8df4a9164cd4c63
6df80806c7cdceda5cfda97bf7c42cc702512a49
dd196c8746c0e2f36ca2aee21d4a36a16
= 0b9cf6a789959ed4f36b701a5065154f7f4f1517
6d731b4897875d26a9e244415e111479050894ba7
c532ada1903c63a84ef7edc29c208a8ddd3fb5f7
d43727b730f20d8e12c17cd5cf9ab4358147cb62
a9fb887bf15204e444ba6ade613274316
= 1459b9617b8a9df6bd54341307f1256dafa241bd
65b96ed14078e80dc6116001b83c5f88c7bbcb0b
db237daac2e76df5b415d089baa0fd078516e60e
2cdda7c26b858777604c5fbd19f0711bc75ce00a
5c37e2790b0d9d0ff9625c5ab9c7511d16
Здесь ( — формируются из первых простых чисел, кроме 2)[1].
↑S. Goldwasser, S. Micali. Probabilistic Encryption (англ.) // JCSS. — 1984. — Апрель. — P. 270—299.
↑A Brief Overview of Homomorphic Cryptosystem and Their Applications // nternational Journal of Computer Applications. — 2015.
↑R. L. Rivest, L. Adleman, M. L. Dertouzos. On data banks and privacy homomorphisms // Foundations of secure computation.
↑W. Diffie, M. Hellman. New directions in cryptography // IEEE Trans. Inf. Theory.
↑J. Alwen [et al.] On the relationship between functional encryption, obfuscation, and fully homomorphic encryption // Cryptography and Coding – 14th IMA Intern. Conf., IMACC-2013..
↑B. Pfitzmann, M. Schunter. Assymetric fingerprinting (англ.) // Spinger-Verlag. — 1996. — P. 84—95.
↑Constructing Secure Content-Dependent Watermarking Scheme using Homomorphic Encryption.
↑O. Goldreich, S. Micali, A. Wigderson. Proofs that Yield Nothing But Their Validity and a Methodology of Cryptographic Protocol Design (англ.). — 1986. — P. 174—187.