2009-06-21 3 views
29

Похоже, в криптографии появились интересные вещи: первая схема homomorphic encryption появилась недавно (explanation, HT). Грубо говоря, это способ кодирования x в f(x) таким образом, что вы можете вычислить f(x+y) легко зная f(x) и f(y), даже если вы не можете легко восстановить x и y (и то же самое для f(x*y)).Практические применения гомоморфных алгоритмов шифрования?

Каковы практические применения для схем такого типа (как только их безопасность была установлена)? Для меня, похоже, они могут значительно упростить алгоритмы написания для управления частными данными.

Вот мои мысли:

  1. электронное голосование
  2. проверки целостности личных данных
  3. есть шанс, что помогло бы приватность в целом?

Пример: У меня есть счета в банках A, B, C. Entity X хочет, чтобы подтвердить у меня есть более $ 1000 общей суммы; он с радостью согласится с заявлениями из банков A, B, C или D, но, к сожалению, у меня недостаточно денег на какой-либо одной учетной записи. Банк А зашифровывает информацию о моих 500 долларов США моим открытым ключом; Аналогично, Banks B и C шифруют информацию, что у меня есть 200 и 300 долларов соответственно. Они отправляют эти данные в X, который добавляет их к некоторому числу, которое, как я доказываю, фактически зашифровано в 1000 долларов (путем шифрования 1000 долларов с помощью открытого ключа и демонстрации того, что результат одинаков). Я доказал что-то, не раскрывая X, сколько денег у меня есть в каждом аккаунте.

Другого пример: Хорошие граждане X_1, ..., X объединяются, чтобы выбрать один из двух кандидатов, один из которых является латте пьющего луба л, а другой является 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 зашифрован, и каждый шаг очень медленный (есть некоторые решетки).

+0

Хорошая идея, но довольно сложная. Это проблема «все или ничего» для X. Он должен доверять A, B и C. Если он не доверяет C, он все равно должен быть не в состоянии определить, что у меня есть 700 @ Banks A и B. – MSalters

+0

Правда, но это то, как обычно работают вещи в реальном мире - в вопросах денег всем банкам достаточно доверяют. Если вас попросят представить доказательства того, что вы заплатили за gizmo XXX из магазина YYY, то заявление о кредитной карте из * любого * банка будет считаться доказательством. Более того, если в банке C указано, что у меня есть 300 долларов, но для этого мне недостаточно денег, FDIC покрывает его. –

+0

Я что-то упустил, или почему у банков в вашем примере есть ваш секретный ключ? Если у вас есть свой секретный ключ, он действительно личный? Или у них есть закрытый ключ для вас (и отдельный для каждого другого клиента), для которого доступен открытый ключ? Или вы имели в виду, что банки шифруют ваш баланс своим личным ключом, открытый ключ для которого хорошо известен? –

ответ

8

Вот дикий выстрел в темноте:

Мы думаем о защите открытого текста от лица, выполняющего вычисления на нем. Но что, если целью было защитить как открытый текст, так и алгоритм?

Возьмите, например, МРТ-машины. Самая дорогая часть МРТ-машины - это алгоритм, в котором машина анализирует данные магнитного резонанса. Из-за этого они в значительной степени защищены аппаратными устройствами, предназначенными для уничтожения программы, прежде чем разрешить себя проверять ненадежной стороной (или кем-то в этом отношении).

Если магнитно-резонансная томография может централизовать вычисления данных МРТ, это будет фантастическое снижение риска потери их алгоритма. Однако законы не позволяют им получить доступ к данным частных пациентов.

Итак! Гомоморфное шифрование позволяет это происходить, когда данные пациента и алгоритм защищены. «Полностью» гомоморфное шифрование (т. Е. Индуцирование кольцевого гомоморфизма на зашифрованные данные) позволяет использовать гораздо более эффективный и надежный набор вычислений для данных.

+1

Гомоморфная схема шифрования, которая могла бы выполнять достаточно сложный алгоритм, позволила бы это произойти. Вопрос в том, может ли такой алгоритм существовать? Подписанный подход поддерживает только логарифмические схемы глубины. Я бы оценил, что любой алгоритм фильтрации МРТ, достаточно интересный для защиты, не является членом NC1. –

+0

Это действительно дикий выстрел, так как я не уверен, что существует практический способ шифрования * алгоритма *. Но я чувствую, что ваш ответ интересен и полезен. Это было фактически автоматизировано, потому что у меня нет доступа к интернету в отпуске - очень жаль! –

3

В ИКА выродка, если гомоморфно cryptofunction было также assymmetric ключа системы, то у вас есть некоторые действительно интересные возможности в мире подписания. Подписчик может потенциально подписать сообщение, и получатель может повторно передать часть сообщения и соответствующую часть шифрованного текста третьей стороне.

В функции записи, которая была бы:

Знаки пользователя:

знак (открытый текст, секретный ключ) = зашифрованного

и передает:

посыла (открытый текст, зашифрованный текст , сертификат)

Приложение получает сегменты:

открытый текст = desiredPlaintext + otherPlaintext

и вычисляет то же самое преобразование шифрованного текста, используя что-то вроде:

если зашифрованного :: незашифрованного то ?? :: desiredPlaintext

найти desiredCiphertext

Приложение направляет желаемый контент только на внешний сервис:

отправить (желательноПляж, желаемый текст, сертификат)

И сервис может подтвердить это сообщение, как если бы пользователь отправил его напрямую.

Это зависит от хеш-алгоритма, используемого для сжатия открытого текста, также являющегося гомоморфным. Если нет, это не сработает ... или что не применяется алгоритм хеширования.

Это может быть очень полезно в тех случаях, когда вы хотите, чтобы внешняя служба что-то делала в ответ на подписанный пользовательский запрос, но вы не хотите раскрывать все, что пользователь отправил этой внешней службе.

Одним из примеров будет простая система заказа пакетов - я отправляю веб-приложение запрос на покупку коллекции предметов. Чтобы быть супер-безопасным, я подписываю заказ на поставку, который подтверждает, что я хочу (и обещаю заплатить) за несколько вещей, отправленных в определенное место, на определенную дату и с определенной информацией о платежах. Теперь..веб-приложение будет хотеть иметь несколько вещей, которые случаются:

  • финансов необходимо зарядить свой счет, и начать получать оплату от меня
  • Inventory нужно тянуть предметы на складе, или иметь дело с каким-либо из акций нужны проблемы
  • Доставка получить из инвентаря и переместите материал в мой адрес

Там нет причин для инвентаризации или судоходства, чтобы узнать о том, как я могу оплатить счет. И не может быть никаких оснований для того, чтобы финансы знали мой адрес доставки ... В каждом случае изменяется желаемый текст и требуемый шифртекст, в зависимости от того, кто является получателем. Это еще более мощно в такой системе, как Amazon.com, где используются книги, в которых компания, которую я купил у (Amazon), отличается от объекта, предоставляющего товар (продаваемого продавца книги).

Читая бумагу о криптографии решетки, она больше похожа на симметричную ключевую систему ... что не способствует подписанию сообщений.

О концепции «никогда не говори никогда», я бы не сказал, что использовать ее для неприкосновенности частной жизни было бы необоснованным. Но кажется, что неприятно, что вы можете найти несколько способов получить от зашифрованного текста до открытого текста.

+0

Хмм; кто-то (или какое-либо приложение) может принять ваше подписанное сообщение, изменить его и вычислить действительную подпись для полученного сообщения? Кажется, что это была бы плохая идея ... – Stobor

+0

Не зная деталей алгоритма, я не хочу делать предположения. Но предположительно, подделка будет заключаться в сегментах подписанного контента и сегментов контента, поэтому риск будет ограничиваться последствиями удаления контента. Я предполагаю, что злоумышленник не сможет добавить свой собственный новый контент. – bethlakshmi

1

Проблема с существующим алгоритмом гомоморфного шифрования заключается в том, что вы можете выполнять только полилогарифмическую (NC1) схему, которая практически исключает любое интересное алгоритмически.

Плюс, похоже, что сложность кодирования никоим образом не ниже сложности выполнения полилогарифмической схемы самостоятельно, поэтому вы не получили бесплатную работу с первого раза, если только вы не делаете что-то особенно сложное с этим.

+0

Хорошо! Что такое полилогарифмическая схема, кстати? –

+0

Полилогарифмическая функция имеет вид: f (n) = a_k log^k (n) + ... a_1 + log^1 (n) Эти функции являются O (x^epsilon) для каждого выбора epsilon больше нуля. Цепь ЧПУ имеет полилогарифмическую длину длинного пути (количество слоев) и полиномиальное число ворот без обратных проводов. Для NC1 (класс, охватываемый настоящей статьей) k = 1. –

3

Наибольшее применение гомоморфного шифрования было бы в области интеллектуального анализа данных, ИМХО. Использование этого алгоритма может одновременно решить проблемы конфиденциальности и обнаружения тренда. Например, скажите, что ваша компания размещает информацию о продажах у какого-либо поставщика SAS. Теперь этот провайдер может предоставить вам сложные услуги интеллектуального анализа данных, без необходимости раскрывать реальную информацию. В принципе, вы могли бы отправить свои данные поставщику вычислений, попросите его использовать его циклы процессора, чтобы вычислить от вашего имени, и отправить вам зашифрованные данные. Это было бы по-настоящему фантастически для компаний, которые хотят перейти на облачные системы, но имеют проблемы конфиденциальности/IP-адресов, которые мешают им делать это.

Другим потенциальным приложением на более низком и более личном уровне будет обработка всех видов финансовых данных. Приведенный пример ilya может применяться к подаче налоговых деклараций вашим бухгалтером, фактически не видя вашу финансовую информацию, обработку кредитных карт и т. д.

Однако я бы сдержал свое волнение до тех пор, пока схема не будет проверена строго и не будет считаться безопасной. Алгоритмы шифрования имеют печально известную привычку терпеть неудачу в их первом тесте, пересматривая и повторяя цикл, пока они не будут «сертифицированы» некоторыми правительственными органами.

1

Распределенные вычисления, такие как SETI @ Home, проекты сложения белков и т. Д., Пользуются большой популярностью, поскольку они используют пожертвование процессорного времени и электроэнергии от тысяч пользователей. Еще более интересной будет модель, где люди могут получать деньги за предоставление этих ресурсов для коммерческих проектов. Однако ни одна ответственная компания не хочет отправлять свои данные тысячам анонимных компьютеров для обработки. Если вы можете эффективно применять алгоритмы для зашифрованных данных, становится возможным делегировать обработку кому угодно без доверенных отношений.

2

Я не знаю, насколько дорого стоит вычисление f(x) + f(x), но, возможно, оно может быть использовано как способ реализации зашифрованной базы данных.

Вы можете сохранить 1 миллион строк некоторых данных, зашифрованных как f(x_1), f(x_2), ... f(x_n). Вы могли бы сделать

SELECT SUM(x) 
FROM Foo 
WHERE y = 'some value' 

Что можно рассчитать по первому делать SUM(f(x)) затем дешифрования его SUM(x).

+0

Это функция, которая мешает мне (моей компании) шифровать каждое значение в нашей финансовой системе и переносить ее на облачный сервис – SeeR

+0

Действительно! Интересная идея. –

3

Вы могли бы быть заинтересованы в просмотре довольно звучно негативное взятие Брюс Шнайер на гомоморфном шифрования по адресу:

http://www.schneier.com/blog/archives/2009/07/homomorphic_enc.html?nc=11

+1

+1: Я собирался сказать. Его пост указывает на то, насколько непрактично это, по крайней мере, в этом десятилетии, если не в этом поколении. – ojrac

+1

Это очень полезно! Если бы я знал что-либо об этой теме, я мог бы попросить не приводить пример, а скорее вопрос «есть ли пример». –

2

При этом вы можете выполнить произвольный нерекурсивную схему ограниченной глубины, поэтому дали логарифмической ключ вы можете выполнить алгоритм NC1 (в основном, логическую схему подачи).

Итак, как вы можете это использовать?

Посмотрим на карту/Уменьшение схемы и схемы редукции по набору входов.

Сначала данные:

Вероятно, мы не хотим, чтобы клиент должен зашифровать все данные, мы будем искать, так что вы можете обеспечить зашифрованную 1 и зашифрованный 0 на сервер, и пусть он использует кольцевую структуру для построения произвольных зашифрованных целых чисел для нас, или мы можем просто использовать их непосредственно как биты. Таким образом, сервер может предоставить некоторые или все данные, которые мы просматриваем. Для целых чисел он может построить их по крестьянской арифметике (двойной или двойной и добавить 1 для каждого бита), для битов он просто предоставляет соответствующий зашифрованный бит.

Мы можем смешивать и сопоставлять логические и целочисленные значения в наших проектах, получая if/then/else (что требует оценки обоих типов SIMD-стиля) путем оценки cond * then + (1-cond) * else, используя 1 как true и 0 как false в cond, поэтому вы можете избежать использования встроенной арифметики своего кольца, чтобы сделать ваши схемы более мелкими.

С другой стороны, мы также можем предварительно зашифровать некоторые данные, но поскольку вам нужно будет использовать один и тот же набор ключей, чтобы использовать его, это становится очень сложно сделать правильно.

Итак, теперь у нас есть данные, предоставленные сервером. Теперь зашифруйте материал, который вам не нужен, чтобы знать сервер, например, что вы ищете, и попросите их подключить его к схеме в правильных точках, скажем, как дополнительный вход для вашей функции карты.

Мы должны иметь возможность отображать произвольную схему, подобную NC1, по каждому входу, чтобы извлечь поле, умножить некоторые значения и, как правило, отобразить его в форму, которую вы можете уменьшить дешево.

Затем уменьшите эти фрагменты, используя более мелкие контуры, например, для простого моноида, который имеет результат с ограниченным размером. (т. е. вы сопоставляете, чтобы получить бит, который указывает, найдено ли вы совпадение, а затем вы уменьшаете путем подсчета этих битов с помощью схемы малого сумматора)

Поскольку вам нужно только логически построить схему и имитировать ее выполнение на этих зашифрованных биты в гомоморфном кольце, вы, вероятно, могли бы реализовать его относительно быстро, используя небольшую DSL, то есть нечто вроде Lava в Haskell, предполагая, что вы получили гомоморфные фрагменты шифрования.

Кроме того, имейте в виду, что каждый затвор серьезно дорогого исполнения.

Таким образом, чтобы подвести итог,

  1. Дайте сервер зашифрованный 1 и 0 и любой зашифрованный MetaInfo для вашей карты и уменьшить функции.
  2. Для каждой точки данных, закодируйте ее в своем гомоморфном кольце, подайте свою схему карты как на вход, так и на метаинформацию, чтобы получить значение, подходящее для уменьшения.
  3. В сбалансированном двоичном дереве (или другом сбалансированном устройстве для минимизации высоты дерева) примените операцию сокращения к выходу вашей схемы и любой зашифрованной карте metainfo.
  4. Рука результат к клиенту для дешифрования
-1

Некоторые банковские приложения, возможно, станет быстрее с помощью Гомоморфные шифрования.

Они могут выполнять операции с зашифрованными данными в облаке, вместо того, чтобы переносить их из облака в локальные и снова помещать в облако. Также нет необходимости шифровать-расшифровывать-выполнять операции-шифровать конвейер, операции шифрования-выполнения будут в порядке.