Аккумулятор (криптография)

В криптографии аккумулятор это односторонняя хэш-функция членства . Она позволяет пользователям удостоверять, что потенциальные кандидаты являются членами определенного набора, не раскрывая отдельных членов набора. Эта концепция была официально введена Джошем Беналохом и Майклом де Маре в 1993 году. [1] [2]

Формальные определения

В литературе предложено несколько формальных определений. В этом разделе они перечислены по авторам, примерно в хронологическом порядке. [2]

Бенало и де Маре (1993)

Бенало и де Маре определяют одностороннюю хеш-функцию как семейство функций, которые удовлетворяют следующим трем свойствам: [1] [2] час : Х × И З {\displaystyle h_{\ell }:X_{\ell }\times Y_{\ell }\to Z_{\ell }}

  1. Для всех можно вычислить за время . (Здесь символ «поли» относится к неопределенному, но фиксированному полиному.) З , х Х , у И {\displaystyle \ell \in \mathbb {Z} ,x\in X_{\ell },y\in Y_{\ell }} час ( х , у ) {\displaystyle h_{\ell }(x,y)} поли ( , | х | , | у | ) {\displaystyle {\text{поли}}(\ell ,|x|,|y|)}
  2. Ни один вероятностный алгоритм с полиномиальным временем не сможет при достаточно большом отобразить входные данные и найти значение , такое, что с вероятностью, большей, чем пренебрежимо мала. {\displaystyle \ell } З , ( х , у ) Х × И , у И {\displaystyle \ell \in \mathbb {Z} ,(x,y)\in X_{\ell }\times Y_{\ell },y'\in Y_{\ell }} х Х {\displaystyle x'\in X_{\ell }} час ( х , у ) = час ( х , у ) {\displaystyle h_{\ell }(x,y)=h_{\ell }(x',y')}
  3. Для всех имеем . (Функция, удовлетворяющая этому свойству, называется квазикоммутативной .) З , х Х , у 1 , у 2 И {\displaystyle \ell \in \mathbb {Z} ,x\in X_{\ell },y_{1},y_{2}\in Y_{\ell }} час ( час ( х , у 1 ) , у 2 ) = час ( час ( х , у 2 ) , у 1 ) {\displaystyle h(h(x,y_{1}),y_{2})=h(h(x,y_{2}),y_{1})}

(С помощью первых двух свойств можно восстановить обычное определение криптографической хеш-функции.)

Из такой функции определяется «накопленный хэш» набора и начальное значение относительно значения . Результат не зависит от порядка элементов, поскольку является квазикоммутативным. [1] [2] { у 1 , , у м } {\displaystyle \{y_{1},\dots,y_{m}\}} х {\displaystyle x} з {\displaystyle z} час ( час ( час ( час ( х , у 1 ) , у 2 ) , , у м 1 ) , у м ) {\displaystyle h(h(\cdots h(h(x,y_{1}),y_{2}),\dots ,y_{m-1}),y_{m})} у 1 , у 2 , . . . , у н {\displaystyle y_{1},y_{2},...,y_{n}} час {\displaystyle ч}

Если принадлежат некоторым пользователям криптосистемы, то каждый может вычислить накопленное значение Также пользователь может вычислить частичное накопленное значение . Затем, Таким образом , пользователь может предоставить пару любой другой части, чтобы аутентифицировать . у 1 , у 2 , . . . , у н {\displaystyle y_{1},y_{2},...,y_{n}} з . {\displaystyle з.} у я {\displaystyle y_{i}} з я {\displaystyle z_{i}} ( у 1 , . . . , у я 1 , у я + 1 , . . . , у н ) {\displaystyle (y_{1},...,y_{i-1},y_{i+1},...,y_{n})} час ( з я , у я ) = з . {\ displaystyle h (z_ {i}, y_ {i}) = z.} я {\displaystyle i-} ( з я , у я ) {\displaystyle (z_{i},y_{i})} у я {\displaystyle y_{i}}

Барич и Пфицманн (1997)

Базовая функциональность квазикоммутативной хэш-функции не следует непосредственно из определения. Чтобы исправить это, Барич и Пфицманн дали немного более общее определение, которое представляет собой понятие схемы аккумулятора , состоящей из следующих компонентов: [2] [3]

  1. Gen: вероятностный алгоритм, который принимает два параметра (параметр безопасности и количество значений, которые могут быть безопасно накоплены, соответственно) и возвращает соответствующий ключ . λ , Н {\displaystyle \лямбда ,N} к {\displaystyle к}
  2. Eval: вероятностный алгоритм, который принимает ключ и набор накопления , где , и возвращает накопленное значение и вспомогательную информацию . Мы настаиваем на том, что Eval должен быть детерминированным для . к {\displaystyle к} И := { у 1 , , у Н } {\displaystyle Y:=\{y_{1},\dots,y_{N'}\}} Н Н {\displaystyle N'\leq N} з {\displaystyle z} а ты х {\displaystyle aux} з {\displaystyle z}
  3. Wit: вероятностный алгоритм, который принимает ключ , значение , накопленное значение некоторого набора и некоторую вспомогательную информацию и возвращает либо свидетельство , либо специальный символ . Мы настаиваем, что если , то Wit возвращает свидетельство, а в противном случае Wit возвращает . к {\displaystyle к} у {\displaystyle у} з {\displaystyle z} И {\displaystyle Y} а ты х {\displaystyle aux} ж {\displaystyle w} {\displaystyle \bot} у Л {\displaystyle y\in L} {\displaystyle \bot}
  4. Ver: детерминированный алгоритм, который принимает key , value , witness и collected value и возвращает значение Yes/No. Мы настаиваем на том, что если был сгенерирован из запуска Wit на кортеже , где был сгенерирован из запуска Eval на некотором , и где был выбран произвольно и был выбран из запуска Gen, то Ver всегда возвращает Yes. к {\displaystyle к} у {\displaystyle у} ж {\displaystyle w} з {\displaystyle z} ж {\displaystyle w} ( к , у , з , а ты х ) {\displaystyle (k,y,z,aux)} з , а ты х {\displaystyle z,вспомогательный} к , Л {\displaystyle к,Л} Л {\displaystyle L} к {\displaystyle к}

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

Камениш и Лысянская (2002)

Можно заметить, что для многих приложений набор накопленных значений будет меняться много раз. Наивно, можно было бы полностью переделывать расчет аккумулятора каждый раз; однако это может быть неэффективно, особенно если наш набор очень большой, а изменение очень мало. Чтобы формализовать эту интуицию, Камениш и Лисянская определили динамическую схему аккумулятора , состоящую из 4 компонентов обычной схемы аккумулятора, плюс еще три: [2] [4]

  1. Add: (возможно, вероятностный) алгоритм, который принимает ключ , накопленное значение и другое значение для накопления , и возвращает новое накопленное значение и вспомогательную информацию . Мы настаиваем на том, что если было сгенерировано путем накопления некоторого набора , то должно быть так, как если бы оно было сгенерировано путем накопления набора . к {\displaystyle к} з {\displaystyle z} у {\displaystyle у} з {\displaystyle z'} а ты х {\displaystyle aux} з {\displaystyle z} Л {\displaystyle L} з {\displaystyle z'} Л { у } {\displaystyle L\чашка \{y\}}
  2. Del: (возможно, вероятностный) алгоритм, который принимает ключ , накопленное значение и другое значение для накопления , и возвращает новое накопленное значение и вспомогательную информацию . Мы настаиваем на том, что если было сгенерировано путем накопления некоторого набора , то должно быть так, как если бы оно было сгенерировано путем накопления набора . к {\displaystyle к} з {\displaystyle z} у {\displaystyle у} з {\displaystyle z'} а ты х {\displaystyle aux} з {\displaystyle z} Л {\displaystyle L} з {\displaystyle z'} Л { у } {\displaystyle L\обратная косая черта \{y\}}
  3. Upd: детерминированный алгоритм, который принимает ключ , значение , свидетельство , накопленное значение и вспомогательную информацию и возвращает нового свидетеля . Мы настаиваем на том, что если был сгенерирован Gen, является частью набора , является свидетелем для членства в и является накопленным значением для и был сгенерирован запуском Add или Del, то будет свидетелем для членства в новом наборе. к {\displaystyle к} у {\displaystyle у} ж {\displaystyle w} з {\displaystyle z} а ты х {\displaystyle aux} ж {\displaystyle w'} к {\displaystyle к} у {\displaystyle у} Л {\displaystyle L} ж {\displaystyle w} у {\displaystyle у} Л {\displaystyle L} з {\displaystyle z} Л {\displaystyle L} а ты х {\displaystyle aux} ж {\displaystyle w'} у {\displaystyle у}

Фацио и Николоси отмечают, что поскольку Add, Del и Upd можно смоделировать путем повторного запуска Eval и Wit, это определение не добавляет никакой принципиально новой функциональности. [2]

Примеры

Одним из примеров является умножение больших простых чисел . Это криптографический аккумулятор, поскольку требуется суперполиномиальное время для факторизации составного числа (по крайней мере, согласно гипотезе), но требуется лишь небольшое количество времени (полиномиальное по размеру), чтобы разделить простое число на целое число, проверить, является ли оно одним из множителей, и/или вынести его за скобки. Новые члены могут быть добавлены или вычтены из набора множителей путем умножения или вынесения за скобки числа соответственно. В этой системе два аккумулятора, накопившие одно общее простое число, могут тривиально обнаружить его, вычислив свой НОД, даже без предварительного знания простого числа (что в противном случае потребовало бы разложения аккумулятора на простые множители для его обнаружения). [ необходима цитата ]

Более практичные накопители используют квазикоммутативную хэш-функцию, так что размер накопителя не растет с числом членов. Например, Бенало и де Мар предлагают криптографический накопитель, вдохновленный RSA : квазикоммутативная функция для некоторого составного числа . Они рекомендуют выбирать жесткое целое число (т. е. произведение двух безопасных простых чисел ). [1] Барич и Пфицманн предложили вариант, где было ограничено быть простым числом и не более (эта константа очень близка к , но не дает утечки информации о разложении на простые множители ). [2] [3] час ( х , у ) := х у ( мод н ) {\displaystyle h(x,y):=x^{y}{\pmod {n}}} н {\displaystyle n} н {\displaystyle n} у {\displaystyle у} н / 4 {\displaystyle n/4} ϕ ( н ) {\displaystyle \фи (н)} н {\displaystyle n}

Дэвид Наккаш заметил в 1993 году, что является квазикоммутативным для всех констант , обобщая предыдущий криптографический аккумулятор, вдохновленный RSA. Наккаш также отметил, что полиномы Диксона являются квазикоммутативными в степени, но неизвестно, является ли это семейство функций односторонним. [1] е н , с ( х , у ) := х у с у 1 ( мод н ) {\displaystyle e_{n,c}(x,y):=x^{y}c^{y-1}{\pmod {n}}} с , н {\displaystyle с,н}

В 1996 году Ниберг построил аккумулятор, который является доказуемо информационно-теоретически безопасным в модели случайного оракула . ​​Выбрав некоторый верхний предел для количества элементов, которые могут быть безопасно накоплены, и параметр безопасности, определите константу как целое число, кратное (так, чтобы можно было записать ), и пусть будет некоторой криптографически безопасной хэш-функцией . Выберите ключ как случайную -битовую битовую строку. Затем, чтобы накопить с помощью схемы Ниберга, используйте квазикоммутативную хэш-функцию , где - побитовая и операция , а - функция, которая интерпретирует свой вход как последовательность -битовых битовых строк длины , заменяет каждую битовую строку, состоящую из всех нулей, на один 0, а каждую другую битовую строку - на 1, и выводит результат. [2] [5] Н = 2 г {\displaystyle N=2^{d}} λ {\displaystyle \лямбда} :≈ е бревно 2 ( е ) λ Н бревно 2 ( Н ) {\displaystyle \ell :\approx {\frac {e}{\log _{2}(e)}}\lambda N\log _{2}(N)} г {\displaystyle д} = г г {\displaystyle \ell =rd} ЧАС : { 0 , 1 } { 0 , 1 } {\displaystyle H:\{0,1\}^{*}\to \{0,1\}^{\ell }} к {\displaystyle к} г {\displaystyle r} час ( х , у ) := х α г ( ЧАС ( у ) ) {\displaystyle h(x,y):=x\odot \alpha _{r}(H(y))} {\displaystyle \odot} α г : { 0 , 1 } { 0 , 1 } г {\displaystyle \alpha _{r}:\{0,1\}^{\ell }\to \{0,1\}^{r}} г {\displaystyle д} г {\displaystyle r}

Приложения

Хабер и Сторнетта показали в 1990 году, что аккумуляторы могут использоваться для временной отметки документов посредством криптографической цепочки. (Эта концепция предвосхищает современное понятие криптографического блокчейна .) [1] [2] [6] Беналох и де Маре предложили альтернативную схему в 1991 году, основанную на дискретизации времени в раунды. [1] [7]

Бенало и де Маре показали, что накопители могут использоваться для того, чтобы большая группа людей могла узнавать друг друга в более позднее время (что Фацио и Николоси называют ситуацией «депонирования идентификаторов»). Каждый человек выбирает представляющий его личность, и группа коллективно выбирает публичный накопитель и секрет . Затем группа публикует или сохраняет хэш-функцию и накопленный хэш всех идентификаторов группы относительно секретного и публичного накопителя; одновременно каждый член группы сохраняет как свое значение идентичности , так и накопленный хэш всех идентификаторов группы, за исключением члена . (Если большая группа людей не доверяет друг другу или если накопитель имеет криптографический лазейку, как в случае накопителя, вдохновленного RSA, то они могут вычислить накопленные хеши с помощью безопасного многостороннего вычисления .) Чтобы позже убедиться, что заявленный член действительно принадлежал к группе, они представляют свою личность и личный накопленный хэш (или доказательство с нулевым разглашением этого); Накапливая идентификационные данные заявленного участника и проверяя их по накопленному хешу всей группы, любой может проверить участника группы. [1] [2] Благодаря схеме динамического аккумулятора впоследствии становится еще проще добавлять или удалять участников. [2] [4] у {\displaystyle у} час {\displaystyle ч} х {\displaystyle x} х {\displaystyle x} у {\displaystyle у}

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

  • Барич и Пфицманн показывают, что можно построить отказоустойчивые сигнатуры с постоянным пространством, используя свойство сжатия. [2] [3]
  • Гудрич и др. создали эффективный, динамический аутентифицированный словарь, не учитывающий размер (который позволяет ненадежным каталогам давать криптографически проверяемые ответы на запросы о членстве). [2] [8]
  • Папамантхоу и др. построили криптографически безопасную хеш-таблицу , функциональность которой может быть аутентифицирована при удаленном хранении. [9]

Концепция вновь получила интерес из-за дополнения Zerocoin к биткойну , которое использует криптографические накопители для устранения отслеживаемой связи в блокчейне биткойна, что сделало бы транзакции анонимными и более приватными. [10] [11] [12] Более конкретно, чтобы отчеканить (создать) Zerocoin, нужно опубликовать монету и криптографическое обязательство по серийному номеру с секретным случайным значением (которое примут все пользователи, если оно будет правильно отформатировано); чтобы потратить (вернуть) Zerocoin, нужно опубликовать серийный номер Zerocoin вместе с неинтерактивным доказательством с нулевым разглашением , что вам известно о каком-то опубликованном обязательстве, которое относится к заявленному серийному номеру, а затем потребовать монету (которую примут все пользователи, если NIZKP действителен, а серийный номер ранее не появлялся). [10] [11] После первоначального предложения Zerocoin, на смену ему пришел протокол Zerocash , и в настоящее время он разрабатывается в Zcash , цифровую валюту, основанную на кодовой базе Bitcoin. [13] [14]

Смотрите также

Ссылки

  1. ^ abcdefgh Бенало, Джош; де Маре, Майкл (1994). «Односторонние накопители: децентрализованная альтернатива цифровым подписям» (PDF) . Достижения в криптологии — EUROCRYPT '93 . Конспект лекций по информатике. Том 765. стр.  274–285 . doi : 10.1007/3-540-48285-7_24 . ISBN 978-3-540-57600-6. Получено 3 мая 2021 г. .
  2. ^ abcdefghijklmno Фацио, Нелли; Николоси, Антонио (2002). "Криптографические аккумуляторы: определения, конструкции и приложения" (PDF) . Архивировано (PDF) из оригинала 3 июня 2006 г. . Получено 30 января 2021 г. .
  3. ^ abc Barić, Niko; Pfitzmann, Birgit (1997). "Collision-Free Accumulators and Fail-Stop Signature Schemes Without Trees". В Fumy, Walter (ред.). Advances in Cryptology — EUROCRYPT '97 . Lecture Notes in Computer Science. Vol. 1233. Berlin, Heidelberg: Springer. pp.  480– 494. doi : 10.1007/3-540-69053-0_33 . ISBN 978-3-540-69053-5.
  4. ^ ab Camenisch, Jan; Lysyanskaya, Anna (2002). "Dynamic Accumulators and Application to Efficient Revocation of Anonymous Credentials". В Yung, Moti (ред.). Advances in Cryptology — CRYPTO 2002. Lecture Notes in Computer Science. Vol. 2442. Berlin, Heidelberg: Springer. pp.  61– 76. doi : 10.1007/3-540-45708-9_5 . ISBN 978-3-540-45708-4.
  5. ^ Nyberg, Kaisa (1996). "Быстрое накопленное хеширование". В Gollmann, Dieter (ред.). Быстрое программное шифрование . Lecture Notes in Computer Science. Vol. 1039. Berlin, Heidelberg: Springer. pp.  83–87 . doi : 10.1007/3-540-60865-6_45 . ISBN 978-3-540-49652-6.
  6. ^ Хабер, Стюарт; Сторнетта, В. Скотт (1991). «Как поставить временную метку на цифровой документ». В Menezes, Альфред Дж.; Ванстоун, Скотт А. (ред.). Достижения в криптологии — CRYPT0' 90 . Конспект лекций по информатике. Том 537. Берлин, Гейдельберг: Springer. стр.  437– 455. doi : 10.1007/3-540-38424-3_32 . ISBN 978-3-540-38424-3.
  7. ^ Бенало, Дж.; де Маре, М. (август 1991 г.). «Эффективное вещательное временное штампование». Microsoft . CiteSeerX 10.1.1.38.9199 . MSR-TR 91-1. 
  8. ^ Goodrich, Michael T.; Tamassia, Roberto; Hasić, Jasminka (11 ноября 2001 г.). "Эффективный динамический и распределенный криптографический аккумулятор" (PDF) . Информационная безопасность . Конспект лекций по информатике. Том 2433. стр.  372–388 . doi :10.1007/3-540-45811-5_29. ISBN 978-3-540-44270-7. Архивировано из оригинала 13 марта 2003 года.
  9. ^ Papamanthou, Charalampos; Tamassia, Roberto; Triandopoulos, Nikos (18 августа 2009 г.). "Криптографические аккумуляторы для аутентифицированных хэш-таблиц". Архив Cryptology ePrint . CiteSeerX 10.1.1.214.7737 . 
  10. ^ ab Ian, Miers; Garman, Christina; Green, Matthew; Rubin, Aviel D. (2013). "Zerocoin: анонимная распределенная электронная наличность из Bitcoin" (PDF) . Симпозиум IEEE 2013 года по безопасности и конфиденциальности . стр.  397–411 . doi :10.1109/SP.2013.34. ISBN 978-0-7695-4977-4. S2CID  9194314 . Получено 3 мая 2021 г. .
  11. ^ ab Green, Matthew (11 апреля 2013 г.). "Zerocoin: делая Bitcoin анонимным". Несколько мыслей о криптографической инженерии . Архивировано из оригинала 21 мая 2014 г. Получено 3 мая 2021 г.
  12. ^ Zerocoin: анонимная распределенная электронная наличность из Bitcoin. Архивировано 8 февраля 2014 г. на Wayback Machine.
  13. ^ "Проект Zerocoin". zerocoin.org . Получено 4 мая 2021 г. .
  14. ^ "Цифровая валюта, защищающая конфиденциальность | Zcash". Zcash . Получено 4 мая 2021 г. .
Взято с "https://en.wikipedia.org/w/index.php?title=Accumulator_(cryptography)&oldid=1272040929"