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

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

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

История

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

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

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

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

{x≡b1modm1⋮x≡bkmodmk имеет решения в ℤ тогда и только тогда, когда bi≡bjmod(mi,mj)∀1⩽i,j⩽k. Более того, если приведенная система имеет решения в ℤ, она имеет единственное решение в ℤ[m1,…,mk],[m1,…,mk] определяет наименьшее общее кратное m1,…,mk. В случае, если (mi,mj)=1∀1⩽i<j⩽k, китайскую теорему об остатках называют стандартной[2].

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

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

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

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

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

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

𝒜¯={A∈P({1,2,…,n})∣|A|⩽k−1}

𝒜min={A∈P({1,2,…,n})∣|A|=k}

𝒜¯max={A∈P({1,2,…,n})∣|A|=k−1}.

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

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

Пороговая схема разделения секрета Миньотта использует специальные последовательности чисел, названные последовательностями Миньотта. Пусть n – целое, n⩾2, и 2⩽k⩽n. (k,n)-последовательность Миньотта – последовательность взаимно простых положительных p1<p2<…<pn таких, что ∏i=0k−2pn−i<∏i=1kpi Последнее утверждение также равносильно следующему: max1⩽i1<…<ik−1⩽n(pi1…pik−1)<min1⩽i1<…<ik⩽n(pi1…pik)[1]

Алгоритм

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

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

{x≡Ii1modpi1⋮x≡Iikmodpik Секретом является решение приведенной выше системы, более того, S лежит в пределах Zpi1,…,pik, т.к. S<α. С другой стороны, имея всего k−1 различных теней Ii1,…,Iik−1, можно сказать, что S≡x0modpi1…pik−1, где x0 – единственное решение по модулю pi1…pik−1 исходной системы (в данном случае: S>β⩾pi1…pik−1>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):

{x≡0mod5x≡6mod7x≡5mod11x≡2mod13x≡3mod17.

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

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

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

Для данной пороговой схемы элементы последовательности не обязательно являются взаимно простыми. Пусть n – целое, n⩾2,2⩽k⩽n. Обобщённой (k,n)-последовательностью Миньотта называют такую последовательность p1,…,pn положительных целых чисел, что max1⩽i1<…<ik−1⩽n([pi1,…,pik−1])<min1⩽i1<…<ik⩽n([pi1,…,pik]). Нетрудно видеть, что любая (k,n)-последовательность Миньотта является обобщённой (k,n)-последовательностью Миньотта. Более того, если умножить каждый элемент обобщённой последовательности на фиксированный элемент δ∈Z,(δ,p1,…,pn)=1, также получим обобщённую (k,n)-последовательность Миньотта. Расширенная схема Миньотта работает так же, как и обыкновенная для α=min1⩽i1<…<ik⩽n([pi1,…,pik]) и β=max1⩽i1<…<ik−1⩽n([pi1,…,pik−1]).В данном случае для нахождения секрета необходимо использовать обобщённый вариант китайской теоремы об остатках.[4]

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

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

Пусть S(k,n,N,P) - секрет, где P=(p1,…,pN) - веса теней пользователей. Сгенерируем (k,W)-последовательность Миньотта, где W=∑i=1npi. Тогда Pi=[{Pj′∣j∈Paj}]∀1⩽i⩽N, где Pa1,…,PaN - произвольное разбиение множества {1,2,…,W} такое, что |Pai|=pi∀1⩽i⩽N

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

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

  • Схема Асмута-Блума[6], также основанная на китайской теореме об остатках, была впервые представлена в 1983 году. Основное отличие состоит в том, что вместо последовательности Миньотта, требующей генерации, необходимо выбрать простое число, связанную с ним последовательность из n взаимно простых чисел, а также некоторое случайное число, с помощью которого шифруется секрет, и уже на основе зашифрованного секрета вычисляются тени. В схема Асмута-Блума отсутствуют некоторые недостатки, присущие схеме Миньотта:
  1. Нет ограничения на область, в которой можно выбирать секрет
  2. Набор из менее, чем k теней пользователей не даёт никакой информации о секрете
  1. Предполагаем, что раскрытый вес равен w, а n-длина используемых чисел в битах. Также полагаем, что w<n. Стоит отметить, что в реальных схемах w≪n.
  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 может составить систему уравнений:

{S≡ri1modPi1S≡ri2modPi2⋮S≡rilmodPil и вычислить S, применив китайскую теорему об остатках. Так как размер S составляет w∗n битов, размер произведения модулей P̂=Pi1∗Pi2∗…∗Pin состоит из, по меньшей мере, (pi1+pi2+…+pil)∗n−l, можно видеть, что P̂>S, пока w<n. Именно это позволяет вычислить секрет S единственным образом. Можно ослабить условие на сумму весов долей до pi1+pi2+…+pil⩾w, тогда в случае pi1+pi2+…+pil=w длина P̂ составляет, как минимум, w∗n−w+1, поэтому необходимо ограничить S до w∗n−w битов. Если же это невозможно, можно сохранить работоспособность схемы, введя дополнительный элемент, модуль которого 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: Введём дополнительный элемент с весом (k−w)[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=0w−2PW−i<∏j=1wPj. Сложность перемножения двух чисел длиной l битов и v битов составляет O(lv). Сложность проверки составит O(w2n2).

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

  • Для генерации модуля пользователю с весом pi необходимо перемножить pi чисел размера n. Сложность генерации N модулей составит O((p1−2)n2+(p2−1)n2+…+(pN−1)n2)=O((W−N)n2). Таким образом, общая сложность генерации модулей также составляет O(W2n2).

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

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

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

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

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

Можно выделить две схемы, описывающих поведение злоумышленников в пороговых схемах: модель CDV, в которой злоумышленники знают секрет и пытаются передать другим участникам ложные данные, и модель OKS, в которой злоумышленники не знают секрета заранее. В обыкновенной схеме Миньотта один злоумышленник всегда может обмануть k−1 пользователей в модели CDV и с большой вероятностью - в модели OKS. Допустим, участники i1,i2,…,ik разделили секрет, и пользователь i1 решает сжульничать. Следовательно, он должен изменить свою тень Ii1 на Ii1′ так, чтобы S′≠S,S∈(β,α). Пусть l=pi2pi3…pik,r=pi1pi2…pik⇒S=pl+q,p∈𝐙b1,q∈𝐙I. Используя китайскую теорему об остатках, получим Smodl=S′modl=q, то есть, S′ представим в виде p′l+q. Так как последовательность Миньотта p1,…,pk известна, можно найти l. Можно выбрать p′=p±1, откуда Ii1′=(Ii1±l)modpi1⇒S′=(p±1)l+q=(S±l)modr

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

В модели OKS, так как злоумышленник не знает секрет, он не может проверить истинность неравенств S−l<β и S+l>α. В таком случае он всегда может использовать Ii1′=(Ii1+l)modp1. Единственный вариант, при котором обман может быть раскрыт - S+l>α, откуда S′=(S+l)modr<β(рис.2) или S′=(S+l)modr>α(рис.3). Следовательно, вероятность успешного обмана составляет 1−1[α−β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. В таком случае, после решения системы уравнений {x≡476mod661x≡634mod673x≡374mod677 участники восстановят неверный секрет S′=(S+p2p3)modp1p2p3=955621, также находящийся между αи β. При этом пользователь 1 может получить настоящий секрет: S=(S′−p2p3)modp1p2p3=500000[7]

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

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

  • Вводится дилер, генерирующий (k,n)-последовательность Миньотта p1,p2,…,pn. Также дилер генерирует n различных простых m1,…,mn таких, что:α−ββmax1⩽i1<…<ik−1⩽n(mi1∗…∗mik−1) является достаточно большим. Секрет S выбирается так, что β<S<α. Долями Ii являются (Smodpi,Smodmipi,mi). Процесс восстановления секрета проходит так же, как и в стандартной схеме Миньотта. После того, как секрет S′ восстановлен, любой участник i может определить обман путём сравнения S′modmi с данными, переданными дилером. Таким образом, злоумышленник может обмануть участника 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