Похоже, в криптографии произошли интересные вещи: первая схема объяснение, HT). Грубо говоря, это способ кодирования x
в f(x)
, так что вы можете легко вычислить f(x+y)
, зная f(x)
и f(y)
, хотя вы не можете легко восстановить x
и y
(и то же самое для f(x*y)
).
Каковы практические приложения для схем такого типа (как только их безопасность была установлена)? Для меня, похоже, они могут значительно упростить алгоритмы написания для управления частными данными.
Вот мои мысли:
- электронное голосование
- проверка целостности личных данных
- Есть ли шанс, который поможет обеспечить конфиденциальность в целом?
Пример. У меня есть учетные записи с банками A, B, C. Entity X хочет подтвердить, что у меня больше, чем 1000 долларов; он с радостью согласится с заявлениями из банков A, B, C или D, но, к сожалению, у меня недостаточно денег на какой-либо одной учетной записи. Банк А зашифровывает информацию о моих 500 долларов США моим открытым ключом; Аналогично, Banks B и C шифруют информацию, что у меня есть 200 и 300 долларов соответственно. Они отправляют эти данные в X, который добавляет их к некоторому числу, которое, как я доказываю, фактически зашифровано в 1000 долларов (путем шифрования 1000 долларов с помощью открытого ключа и демонстрации того, что результат одинаков). Я доказал что-то, не раскрывая x
, сколько у меня денег в каждой учетной записи.
Другой пример. Хорошие граждане X_1,..., X_n объединяются, чтобы выбрать одного из двух кандидатов, одним из которых является латте-выпивка lib A l, а другой - B гибкий пистолет-любитель (все имена вымышлены). Они решают, что они хотят, чтобы голосование было закрытым, но быстрым. Они отправляют свои голоса в векторном формате (1, vote_A, vote_B, vote_None)
, зашифрованном в Избирательную комиссию, который их публично добавляет и получает результат в форме (count, count_A, count_B, count_None)
. После проверки того, что count = count_A + count_B + count_None
, официальные лица объявляют победу одного из кандидатов, после чего судья признается недействительным по какой-либо причине, не связанной с электронным голосованием, и воевал в суде в течение следующих 10 лет, но, это не моя проблема.
Примечания: - Я считаю, что этот конкретный пример был возможен с RSA еще раньше, поскольку для одной операции требуется только гомоморфность. Надеемся, что у нас могут быть более интересные вещи с большим количеством операций - так что придумайте примеры!
-
Мне особенно хотелось бы получить ответы, содержащие код и/или разрабатывающие рамки, которые могут быть использованы на практике, поэтому SO является не теоретической дискуссией по информатике.
-
Гомоморфный алгоритм, чтобы повторить сказанное ниже в комментариях, позволяет создать программу, которая будет управлять данными, не зная их. К сожалению, типы программ несколько ограничены: у вас не может быть
if (x=0) ...
, потому чтоx
зашифрован, и каждый шаг очень медленный (есть некоторые решетки).