Схема Миньотта

Материал из testwiki
Перейти к навигации Перейти к поиску

Схема Миньотта — пороговая схема разделения секрета, построенная с использованием простых чисел. Позволяет разделить секрет (число) между n сторонами таким образом, что его смогут восстановить любые k участников, но k1 участников восстановить секрет уже не смогут. Схема основана на китайской теореме об остатках.

История

Впервые схема была предложена в 1982 году французским учёным Морисом Миньоттом в качестве одного из вариантов использования (k,n)-пороговой схемы, описанной Ади Шамиром. Сам Шамир предлагал решение с применением интерполяции полинома на конечном поле, где секретом являлся сам полином. Миньотт же смог предоставить более простое решение, заложив в основу модулярный подход - секретом является некоторое число, а частичным секретом - его вычет по некоторому модулю. Доработанной схемой Миньотта является схема Асмута-Блума. В обеих схемах для восстановления секрета используется китайская теорема об остатках, формулировка которой определяет единственное решение (секрет)[1].

Схема разделения секрета

Китайская теорема об остатках

Шаблон:Main В основе схемы лежит использование китайской теоремы об остатках, которая позволяет пользователям, имеющим некоторую долю секрета, восстановить сам секрет, причём единственным образом. Существует несколько версий теоремы, назовём следующую общей: Пусть k2,m1,,mk2,b1,,bk. Тогда система уравнений

{xb1modm1xbkmodmk имеет решения в тогда и только тогда, когда bibjmod(mi,mj)1i,jk. Более того, если приведенная система имеет решения в , она имеет единственное решение в [m1,,mk],[m1,,mk] определяет наименьшее общее кратное m1,,mk. В случае, если (mi,mj)=11i<jk, китайскую теорему об остатках называют стандартной[2].

Пороговые схемы разделения секрета

Допустим, имеется n пользователей, пронумерованных от 1 до n, и набор групп𝒜P(1,2,,n), где P(1,2,,n) - все подгруппы группы {1,2,,n}. Фактически, 𝒜-схема разделения секрета – это метод генерации секретов (S,(I1,,In)) таких, что:

  • (корректность) Для любого A𝒜, проблема нахождения S при наличии всех I «простая»
  • (безопасность) Для любого AP(1,2,,n)𝒜, проблема нахождения S является «труднообрабатываемой»

𝒜 будем называть структурой доступа, S – секретом, а I1,,In – тенями S. Наборы элементов изAназовём группами авторизации. В идеальной схеме разделения секрета тени любой группы, не являющейся группой авторизации, не даёт информации (с точки зрения теории информации) о секрете. Доказано, что в любой идеальной схеме разделения секрета размер каждой из теней должен быть не меньше размера самого секрета. Естественным является условие о том, что структура доступа 𝒜 должна быть монотонной, то есть: (BP({1,2,,n}))((A𝒜)(AB)B𝒜). Любая структура доступа 𝒜 хорошо описывается с помощью минимального набора групп авторизации: 𝒜min={A𝒜(B𝒜{A})(¬BA)}. Можно описать и структуру доступа, не обладающую свойствами авторизации: 𝒜¯=P({1,2,,n})𝒜. Её хорошо описывает максимальный набор групп "неавторизации":𝒜¯max={A𝒜¯(B𝒜¯{A})(¬AB)}

В первых схемах разделения секрета только количество участников являлось важным при восстановлении секрета. Такие схемы были названы пороговыми схемами разделения секрета. Пусть n2,2kn, тогда структура доступа 𝒜={AP(1,2,,n)|A|k} называется (k,n)-пороговой структурой доступа.

Стоит учесть также, что для (k,n)-пороговых структур доступа.:

𝒜¯={AP({1,2,,n})|A|k1}

𝒜min={AP({1,2,,n})|A|=k}

𝒜¯max={AP({1,2,,n})|A|=k1}.

Все A-схемы разделения секрета также назовём (k,n)-пороговыми схемами разделения секрета[1].

Последовательность Миньотта

Пороговая схема разделения секрета Миньотта использует специальные последовательности чисел, названные последовательностями Миньотта. Пусть n – целое, n2, и 2kn. (k,n)-последовательность Миньотта – последовательность взаимно простых положительных p1<p2<<pn таких, что i=0k2pni<i=1kpi Последнее утверждение также равносильно следующему: max1i1<<ik1n(pi1pik1)<min1i1<<ikn(pi1pik)[1]

Алгоритм

Имея открытый ключ-последовательность Миньотта, схема работает так:

  1. Секрет S выбирается, как случайное число такое, что β<S<α, где α=i=1kpi,β=i=0k2pni. Другими словами, секрет должен находиться в промежутке между p1*p2**pk и pnk+2**pn
  2. Доли вычисляются, как Ii=Smodpi, для всех 1in
  3. Имея k различных теней Ii1,,Iik, можно получить секрет S, используя стандартный вариант китайской теоремы об остатках – им будет единственное решение по модулю pi1pik системы:

{xIi1modpi1xIikmodpik Секретом является решение приведенной выше системы, более того, S лежит в пределах Zpi1,,pik, т.к. S<α. С другой стороны, имея всего k1 различных теней Ii1,,Iik1, можно сказать, что Sx0modpi1pik1, где x0 – единственное решение по модулю pi1pik1 исходной системы (в данном случае: S>βpi1pik1>x0.[1] Для того, чтобы получить приемлемый уровень безопасности, должны быть использованы (k,n) последовательности Миньотта с большим значением αββ[3] Очевидно, что схема Миньотта не обладает значительной криптографической стойкостью, однако может оказаться удобной в приложениях, где компактность теней является решающим фактором.

Пример

Допустим, необходимо разделить секрет между n=6 пользователями так, чтобы любые k=5 могли его восстановить.

  • Выбираем последовательность Миньотта p1=5,p2=7,p3=11,p4=13,p5=17,p6=19.
  • Вычисляем для данной последовательности α=p1*p2*p3*p4*p5=85085, β=p3*p4*p5*p6=46189.
  • Выбираем S такое, что β<S<α, например, S=50000.
  • Вычисляем доли: Ii=Smodpi: I1=50000mod5=0,I2=50000mod7=6,I3=50000mod11=5,I4=50000mod13=2,I5=50000mod17=3,I6=50000mod19=11
  • Для восстановления секрета решим систему уравнений для k теней (предположим, секрет восстанавливают участники 1-5):

{x0mod5x6mod7x5mod11x2mod13x3mod17.

Из формулировки китайской теоремы об остатках знаем, что решение будет единственным.

Модификации схемы Миньотта

Обобщённая последовательность Миньотта

Для данной пороговой схемы элементы последовательности не обязательно являются взаимно простыми. Пусть n – целое, n2,2kn. Обобщённой (k,n)-последовательностью Миньотта называют такую последовательность p1,,pn положительных целых чисел, что max1i1<<ik1n([pi1,,pik1])<min1i1<<ikn([pi1,,pik]). Нетрудно видеть, что любая (k,n)-последовательность Миньотта является обобщённой (k,n)-последовательностью Миньотта. Более того, если умножить каждый элемент обобщённой последовательности на фиксированный элемент δZ,(δ,p1,,pn)=1, также получим обобщённую (k,n)-последовательность Миньотта. Расширенная схема Миньотта работает так же, как и обыкновенная для α=min1i1<<ikn([pi1,,pik]) и β=max1i1<<ik1n([pi1,,pik1]).В данном случае для нахождения секрета необходимо использовать обобщённый вариант китайской теоремы об остатках.[4]

Взвешенное разделение секрета

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

Пусть S(k,n,N,P) - секрет, где P=(p1,,pN) - веса теней пользователей. Сгенерируем (k,W)-последовательность Миньотта, где W=i=1npi. Тогда Pi=[{PjjPaj}]1iN, где Pa1,,PaN - произвольное разбиение множества {1,2,,W} такое, что |Pai|=pi1iN

Можно заметить, что существует однозначное соответствие между размером и весом тени: например, бит — это тень весом 1, тень весом pi будет весить pi*n битов. Реализация схемы Миньотта со взвешенным разделением секрета не является целесообразной, так как генерация последовательности Миньотта и взвешенной пороговой структуры доступа является трудо- и ресурсоемкой задачей. Существуют более простые и эффективные схемы со взвешенным разделением секрета, в которых также устранена зависимость между весом и размером тени.[5]

Аналогичные схемы

  • Схема Асмута-Блума[6], также основанная на китайской теореме об остатках, была впервые представлена в 1983 году. Основное отличие состоит в том, что вместо последовательности Миньотта, требующей генерации, необходимо выбрать простое число, связанную с ним последовательность из n взаимно простых чисел, а также некоторое случайное число, с помощью которого шифруется секрет, и уже на основе зашифрованного секрета вычисляются тени. В схема Асмута-Блума отсутствуют некоторые недостатки, присущие схеме Миньотта:
  1. Нет ограничения на область, в которой можно выбирать секрет
  2. Набор из менее, чем k теней пользователей не даёт никакой информации о секрете
  1. Предполагаем, что раскрытый вес равен w, а n-длина используемых чисел в битах. Также полагаем, что w<n. Стоит отметить, что в реальных схемах wn.
  2. Секрет S в таком случае выберем длиной w*n битов (если он меньше, дополним его, например, путём повторения битов секрета или добавления случайных битов).
  3. Для пользователя Ui, обладающего весом его доли pi, выберем простое число Pi длиной pi*n битов и такое, что pi<w. Простые числа выбраны в данном случае для упрощения работы алгоритма, для корректной работы схемы достаточно выбора попарно взаимно простых чисел.
  4. Вычислим ri=SmodPi и определим долю пользователя Ui, как si={(ri,pi)}.
  5. При восстановлении секрета любой коллектив пользователей Ui1,Ui2,,Uil такой, что pi1+pi2++pil>w может составить систему уравнений:

{Sri1modPi1Sri2modPi2SrilmodPil и вычислить S, применив китайскую теорему об остатках. Так как размер S составляет w*n битов, размер произведения модулей P^=Pi1*Pi2**Pin состоит из, по меньшей мере, (pi1+pi2++pil)*nl, можно видеть, что P^>S, пока w<n. Именно это позволяет вычислить секрет S единственным образом. Можно ослабить условие на сумму весов долей до pi1+pi2++pilw, тогда в случае pi1+pi2++pil=w длина P^ составляет, как минимум, w*nw+1, поэтому необходимо ограничить S до w*nw битов. Если же это невозможно, можно сохранить работоспособность схемы, введя дополнительный элемент, модуль которого HP - наименьшее простое число из w битов, доля элемента - Hs=SmodHP. Этот элемент можно использовать, как дополнительное уравнение в приведенной выше системе, в таком случае Pi1*Pi2**Pil*HP>S, поэтому секрет можно будет восстановить единственным образом. В данной схеме устранён один из главных недостатков обыкновенной схемы с разделением взвешенного секрета - любую долю si можно описать точкой (ri,Pi), причём эта точка не обладает зависимостью между собственным весом и размером.


Данную схему можно также изменить для работы с несколькими секретами. Допустим, необходимо разделить секреты S1,,Sk, каждый секрет состоит из n битов. Сложим секреты вместе, получив один секрет длиной k*n битов. Необходимо рассмотреть три случая:

  1. k<w: Добавим случайных битов, до размера w*n
  2. k=w: Ничего не делаем
  3. k>w: Введём дополнительный элемент с весом (kw)[5]

Производительность схемы

График производительности классической и доработанной схем Миньотта с долями равного веса.
График производительности для долей разного веса.

Значительную часть времени выполнения схемы отнимает генерация последовательностей Миньотта и взаимно простых модулей. Допустим, имеются доли s1,s2,,sN с весами p1,p2,,pN соответственно. Общий вес долей составит p1+p2++pN=W, вес, необходимый для раскрытия секрета - w, размер числа - n битов.

  • Генерация последовательности Миньотта состоит из нескольких этапов:
  1. Генерация W попарно взаимно простых P1,,PW. Преобладающей операцией является нахождение НОК, сложность её составляет O(n2). Для каждого нового сгенерированного числа необходимо проверить, является ли оно попарно взаимно простым с каждый из предыдущих элементов, поэтому для генерации W попарно взаимно простых чисел сложность составляет O(W2n2).
  2. Их сортировка, её сложность составляет O(Wlog(W)n).
  3. Проверка условия i=0w2PWi<j=1wPj. Сложность перемножения двух чисел длиной l битов и v битов составляет O(lv). Сложность проверки составит O(w2n2).

Таким образом, общая сложность генерации последовательности Миньотта составляет O(W2n2).

  • Для генерации модуля пользователю с весом pi необходимо перемножить pi чисел размера n. Сложность генерации N модулей составит O((p12)n2+(p21)n2++(pN1)n2)=O((WN)n2). Таким образом, общая сложность генерации модулей также составляет O(W2n2).

Схема не обладает хорошей производительностью, так как возможно модифицировать её и тем самым избавиться от необходимости генерации последовательностей Миньотта. На графиках приведены результаты анализа производительности схемы, основанной на схеме Миньотта со взвешенном разделением секрета и самой схемы. Для построения графика была выбрана (4,15)-пороговая схема с одним секретом, pi=1 и p^=(1,2,3,,1,2,3) соответственно[5].

Недостатки схемы

  • Не обладает криптографической стойкостью, так как даже неполное множество пользователей может предоставить некоторую информацию о секрете.
  • Не является простой в принципиальном плане или при реализации. Генерация последовательностей Миньотта и пороговых структур доступа является трудным и ресурсоемким процессом.
  • Существует ограничение на область значений, в которой можно выбирать секрет:S должен находится в промежутке между p1*p2**pk и pnk+2**pn. Знание этого факта также даёт дополнительную информацию злоумышленнику.
  • Для обеспечение хорошей криптостойкости необходима генерация больших значений αββ, что также является ресурсоемкой задачей.
  • Злоумышленник может обмануть пользователей схемы, подменив секрет.

Схемы поведения злоумышленников

выбор S(β,α)
выбор S=(S+l)modr<β
выбор S=(S+l)modr>α

Можно выделить две схемы, описывающих поведение злоумышленников в пороговых схемах: модель CDV, в которой злоумышленники знают секрет и пытаются передать другим участникам ложные данные, и модель OKS, в которой злоумышленники не знают секрета заранее. В обыкновенной схеме Миньотта один злоумышленник всегда может обмануть k1 пользователей в модели CDV и с большой вероятностью - в модели OKS. Допустим, участники i1,i2,,ik разделили секрет, и пользователь i1 решает сжульничать. Следовательно, он должен изменить свою тень Ii1 на Ii1 так, чтобы SS,S(β,α). Пусть l=pi2pi3pik,r=pi1pi2pikS=pl+q,p𝐙b1,q𝐙I. Используя китайскую теорему об остатках, получим Smodl=Smodl=q, то есть, S представим в виде pl+q. Так как последовательность Миньотта p1,,pk известна, можно найти l. Можно выбрать p=p±1, откуда Ii1=(Ii1±l)modpi1S=(p±1)l+q=(S±l)modr

В модели CDV злоумышленник знает секрет, поэтому используя выражение S=(S±l)modr он может удостовериться в том, чтоS(β,α) (рис.1), существование S гарантировано, если k1 участников не могут определить секрет. Следовательно, злоумышленник может обмануть участников схемы с вероятностью 1. Более того, в этой модели злоумышленник может контролировать значение S, вычисляя q напрямую из S: Ii1=Smodpi1, где S=pl+q,pβ:S(β,α)

В модели OKS, так как злоумышленник не знает секрет, он не может проверить истинность неравенств Sl<β и S+l>α. В таком случае он всегда может использовать Ii1=(Ii1+l)modp1. Единственный вариант, при котором обман может быть раскрыт - S+l>α, откуда S=(S+l)modr<β(рис.2) или S=(S+l)modr>α(рис.3). Следовательно, вероятность успешного обмана составляет 11[αβl][7]

Пример

Пусть n=5,k=3,p1=661,p2=673,p3=677,p4=683,p5=691α=301165481,β=471953. Тогда для секрета S=500000 будут сгенерированы тени I1=284,I2=634,I3=374,I4=44,I5=407. Допустим, участники 1,2,3 объединили свои доли, и участник 1 хочет сжульничать. Тогда он вычисляет p2*p3=455621 и изменяет свою долю так, что I1=(I1+p2p3)modp1=476. В таком случае, после решения системы уравнений {x476mod661x634mod673x374mod677 участники восстановят неверный секрет S=(S+p2p3)modp1p2p3=955621, также находящийся между αи β. При этом пользователь 1 может получить настоящий секрет: S=(Sp2p3)modp1p2p3=500000[7]

Модификация схемы

Для того, чтобы избежать подобных махинаций, можно сделать следующее:

  • Вводится дилер, генерирующий (k,n)-последовательность Миньотта p1,p2,,pn. Также дилер генерирует n различных простых m1,,mn таких, что:αββmax1i1<<ik1n(mi1**mik1) является достаточно большим. Секрет S выбирается так, что β<S<α. Долями Ii являются (Smodpi,Smodmipi,mi). Процесс восстановления секрета проходит так же, как и в стандартной схеме Миньотта. После того, как секрет S восстановлен, любой участник i может определить обман путём сравнения Smodmi с данными, переданными дилером. Таким образом, злоумышленник может обмануть участника j с вероятностью 1mj[7]

Примечания

Шаблон:Примечания

Литература

Ссылки

  1. 1,0 1,1 1,2 1,3 Maurice Mignotte, 1983, pp.371-375
  2. Шаблон:Cite web
  3. Evangelos Kranakis, 1986, p. 9
  4. Шаблон:Cite web
  5. 5,0 5,1 5,2 Шаблон:Cite web

  6. C. A. Asmuth and J. Bloom, 1986, pp. 208-210
  7. 7,0 7,1 7,2 Шаблон:Cite web