LINUX.ORG.RU

Опубликованы исходные коды HElib

 , , ,


9

3

HElib — библиотека, предоставляющая функции гомоморфного шифрования. На данный момент она включает реализацию криптосистемы Brakerski-Gentry-Vaikuntanathan (BGV), оптимизированной по быстродействию, в том числе за счёт эффективного использования техники упаковки зашифрованного текста Smart-Vercauteren и оптимизаций Gentry-Halevi-Smart.

Над библиотекой работают сотрудники IBM Watson Research Center Виктор Шоуп (Victor Shoup) и Шаи Халеви (Shai Halevi).

Гомоморфное шифрование позволяет производить операции с данными (такие, как, например, сложение и умножение чисел) без их расшифровки. Идея создания таких систем была впервые высказана во второй половине XX века одним из создателей RSA, Рональдом Ривестом, но была ошибочно оценена как нереализуемая. Первая гомоморфная система, позволяющая одновременно выполнять операции и сложения и умножения, была изобретена сотрудником IBM Крейгом Гентри (Craig Gentry) в 2009 году.

HElib написана на C++ с использованием математической библиотеки NTL. Исходный код распространяется согласно GPL.

>>> Подробности

★★

Проверено: tazhate ()

Я правильно понял, что «гомоморфное» от слова «гомоморфизм»? И если да, то не вернее ли использовать термин «изоморфное» - все таки в две стороны вроде же работает, не?

CAPA ()
Ответ на: комментарий от anonymous

имелось ввиду: A = 5 ?

Да, безусловно.

И как это нам поможет выяснить, какое число A' было зашифровано числом «5»?

Такое ощущение, что вы не читаете, что я вам пишу:
«Вот вопрос в том, могу ли я получить расшифрованные рез-ты R1 и R2?»

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

Взял своё число X. Теперь, чтобы смочь прибавить его к A и B, надо его зашифровать тем же шифром, каким зашифрованы A и B.

Анонимус продолжает общаться сам с собой. В то время, как вопрос давно уже исчерпан: Опубликованы исходные коды HElib (комментарий)

andreyu ★★★★★ ()
Ответ на: комментарий от anonymous

P.S. в следующий раз, когда тебе покажется, что ты смог на**ть то, что создано *умными* (в отличие от тебя сейчас) людьми, то перепроверяй себя до тех пор, пока тебе не раскажется.

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

andreyu ★★★★★ ()
Ответ на: комментарий от unanimous

Только если операция «+» для шифрованных данных *изоморфна* операции «+» для нешифрованных. Если же она только *гомоморфна*, то вообще говоря, ты не можешь узнать, что было зашифровано однозначным образом.

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

Опубликованы исходные коды HElib (комментарий)

andreyu ★★★★★ ()

Ждём криптовалют с полностью шифрованной базой транзакций.

O02eg ★★★★★ ()
Ответ на: комментарий от CAPA

изоморфизм

изоморфизм значит между двумя множествами найдено взаимнооднозначное соответствие, но не значит же это, что операторы сложения и вычитания в этих множествах будут давать одни и те же результаты до соответствия полученных от них чисел?

Woofywoof ()
Ответ на: изоморфизм от Woofywoof

Понятие изоморфизма имеет смысл для групп, а не множеств, afaik.

dmfd ()
Последнее исправление: dmfd (всего исправлений: 2)
Ответ на: комментарий от dmfd

ошибка

да и я описался оператор не вычитания, а умножения.

Woofywoof ()
Ответ на: комментарий от dmfd

группы

хорошо, но множества машинных целых чисел и чисел с плавающей точкой это группы же. О них и идет речь.

Woofywoof ()
Ответ на: группы от Woofywoof

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

Woofywoof ()
Ответ на: группы от Woofywoof

Множество int является группой только по арифметическому сложению, и только если не делать проверку на переполнение. Про float сходу говорить не буду, там возможны тонкости c inf и nan.

dmfd ()
Последнее исправление: dmfd (всего исправлений: 1)
Ответ на: комментарий от dmfd

Хотя нет, даже в первом случае это не группа: int = {−32,768 ..32,767}. У −32,768 нет обратного элемента, одна из аксиом нарушена.

dmfd ()
Ответ на: комментарий от dmfd

Разве это важно? Гомоморфизм имеет смысл и с моноидом.

komeiji ()
Ответ на: комментарий от komeiji

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

dmfd ()

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

Legioner ★★★★★ ()
Ответ на: комментарий от dmfd

Они в 4-ой главе, в пункте 4.1 пишут, что строят для целочисленных схем(scheme) дополненное семейство(augmented family), которое «выравнено полностью гомеоморфным»(is leveled fully homeomorphic). А потом рассказывают как можно получить полностью гомеоморфную схему шифрования с помощью вычисления безопасного зависящего от ключа сообщения (secure Key-Depended-Message). В пункте 4.2 доказывается корректность, считается вычислительная сложность безопасность генерирующих конструкций. В пункте 4.3 рассказывают как её, то есть схему шифрования строить. В пункте 4.4 как строить её с использованием «модели случайного оракула»(Random Oracle Model) без безопасного зависящего от ключа сообщения, но с использованием хеш фукнций.

Woofywoof ()
Ответ на: комментарий от Woofywoof

Забудь про флоат костыли. Для Z работает. Для дробей будет. Иррациональных в компе нет. Чтобы в банковском софте были NaN и inf это нонсенс.

bga_ ★★ ()
Последнее исправление: bga_ (всего исправлений: 1)
Ответ на: комментарий от Woofywoof

Вот пока f(a) < f(b) <=> a < b не будет то сложно что то сделать

bga_ ★★ ()
Ответ на: комментарий от Woofywoof

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

bga_ ★★ ()
Ответ на: комментарий от Woofywoof

Вобщем только деньги и складывать и то 1 уе не прибавить только в складывать существующие цены

bga_ ★★ ()
Ответ на: комментарий от dmfd

Хотя нет, даже в первом случае это не группа: int = {−32,768 ... 32,767}. У −32,768 нет обратного элемента, одна из аксиом нарушена.

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

обратный к −32,768 это внезапно сам −32,768

а еще это кольцо, правда с делителями нуля, но что поделаешь

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от Legioner

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

проблема, похоже, не в разрядности, а в том, что в коде

int a = ... ;
bool b = ... ;
int c = b ? f(a) : g(a);

будут вычислены ОБЕ функции f и g, так как «с» на самом деле вычисляется таким образом:

int c = b * f(a) + (1-b) * g(a);

что после этого происходит со скоростью  — она становится экспоненциальным тормозом, и возникают проблемы с полноценными циклами; нормально вычислять можно только dsp-like code

более интересен вопрос «что делать» — в порядке фантазии я бы предложил искать более гомоморфное (не 2, как щас, а 3) шифрование, либо расходовать по биту из некого пула избыточности на некоторые (важные) if

p.s. пейперы не читал, если что не так, то читавшие (скажем Woofywoof) могут меня поправить

www_linux_org_ru ★★★★★ ()
Последнее исправление: www_linux_org_ru (всего исправлений: 2)
Ответ на: комментарий от bga_

Вобщем только деньги и складывать и то 1 уе не прибавить только в складывать существующие цены

1 у.е. может предоставляться клиентом в зашифрованном виде, это не проблема

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

Я бы не стал. Будут брутить секретный ключ

bga_ ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.