Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все о крипто / КРИПТОГРАФИЯ. Первое знакомство / Раздел 3. Криптографические протоколы.doc
Скачиваний:
12
Добавлен:
04.11.2020
Размер:
207.36 Кб
Скачать

3.8. Разделение секрета

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

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

Пусть S – секретное сообщение (ключ, секрет). Выберем некоторое простое число P > S. Для n – 1 участника случайным образом будем генерировать фрагменты si, I = 1,2,3,…,n-1 в виде элементов простого поля F(p), а для n-го участника вычислим его долю в виде: si ≡ S – s1 – s2 - … - sn-1 mod P.

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

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

Пример. Пусть S = 89. n = 5. Выберем P = 103. Включим генератор случайных целых чисел и для первых 4-= участников получим случайные фрагменты, например, 37, 94, 66, 21. Для пятого участника вычислим его фрагмент:

s5 = 89 - 37 – 94 – 66 -21 ≡ 77 mod 103.

Если теперь сложить все фрагменты, то получим S: 37+94+66+21+77 ≡ 89 mod 103.

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

Рассмотрим случаи, когда h < n, т.е. когда общее число участников больше порогового значения, при котором восстанавливается секрет. Предложено большое число различных схем порогового разделения секрета. Рассмотрим некоторые из них.

3.4.1.Пороговая схема разделения секрета на основе интерполяционных полиномов Лагранжа [ 4 ](Схема была предложена Ади Шамиром )

Возьмем большое простое число P. Если требуется построить пороговую

схему (n,h)., где n – общее число участников, h - порог, то нужно сгенерировать коэффициенты полинома степени n-1. Долями являются значения полинома по модулю P в n точках, которые раздаются n участникам, причем любые h из них могут найти коэффициенты полинома. Одним из коэффициентов полинома может быть секретное сообщение.

Пример. Пусть требуется построить пороговую схему (7,4). Пусть P = 53 – выбранное простое число. Секретное сообщение пусть равно M = 48. Случайным образом получим коэффициенты полинома степени 3: F (X) =

a* X3 + b* X2 + c* X + M. Например

F (X) = 2 X3 + 11 X2 + 3 X + 48.

Найдем значения полинома в 7 произвольных точках по модулю P = 53:

  1. F(1) = 2 + 11 + 3 + 48 ≡ 11 mod 53.

  2. F(2) = 16 + 44 + 6 + 48 ≡ 8 mod 53.

  3. F(3) = 54 + 99 + 9 + 48 ≡ 51 mod 53.

  4. F(4) = 128 + 176 + 12 + 48 ≡ 46 mod 53

  5. F(5) = 250 + 275 + 15 + 48 ≡ 5 mod 53

  6. f(6) = 432 + 396 + 18 + 48 ≡ 46 mod 53

  7. F(7) = 686 + 539 + 21 + 48 ≡ 22 mod 53.

Раздадим четырем участникам значения F (Xi) mod 53: Например,

F(2) = 8 mod 53 - получил второй участник,

F(4) = 46 mod 53 - получил четвертый участник,

F(6) = 46 mod 53 - получил шестой участник,

F(7) = 22 mod 53 - получил седьмой участник.

Вчетвером они решают систему уравнений третьей степени с четырьмя неизвестными:

F(2) = A*23 + B*22+C*2 +M ≡ 8 mod 53

F(4) = A*43 + B*42+C*4 +M ≡ 46 mod 53

F(6) = A*63 + B*62+C*6 +M ≡ 46 mod 53

F(7) = A*73 + B*72+C*7 +M ≡ 22 mod 53

После упрощения ( замены чисел на остатки по модулю), получаем:

A*8 + B*4 +C*2 +M ≡ 8 mod 53

A*11 + B*16 +C*4 +M ≡ 46 mod 53

A*4 + B*36+C*6 +M ≡ 46 mod 53

A*25 + B*49+C*7 +M ≡ 22 mod 53

Откуда находим a = 3, b = 11, c = 3, M = 48.

3.4.2.Пороговая схема разделения секрета на основе китайской теоремы об остатках [ 10 ] (Схема предложена Арто Саломаа).

Обозначим участников A1,A2,A3,…,An. Каждому участнику сопоставим некоторое целое положительное число, так, чтобы все числа были взаимно простыми, т.е. участник Ai получает номер mi, причем (mi, mj) = 1 при i ≠ j.Обозначим M – произведение всех чисел mi, где i = 1,2,3,…,n, т.е. M = m1*m2*…*mn. Обозначим Mi = M/mi, т.е. Mi равно произведению всех чисел кроме mi. Вычислим значения Ni из сравнения:

Ni* Mi ≡ 1 mod mi.

Поскольку (Mi, mi.) = 1, то решение всегда существует.

В соответствии с китайской теоремой об остатках: Если имеется n сравнений вида x ≡ ai mod mi, i = 1,2,3,…n; ai – целые, то общее решение этих сравнений имеет вид:

x =

Кроме того, это решение единственное, т.е. любое другое решение y удовлетворяет сравнению y ≡ x mod M.

Например, пусть m1 = 11, m2 = 12, m3 = 13. Тогда M = 1716. M1 = 156, M2 = 143. M3 = 132; Решая сравнения Ni* Mi ≡ 1 mod mi., найдем N1 = 6, N2 = 11, N3 = 7. Тогда общее решение x = 11*156*6 + 12*143*11 + 13*132*7 = 41184.

Легко проверяется, что

41184 ≡ 0 mod 11,

41184 ≡ 0 mod 12.

41184 ≡ 0 mod 13.

Пусть h – фиксированный порог, 1 ≤ h ≤ n. Обозначим через min (h) наименьшее из h произведений mi, а max (h -1) – наибольшее из h-1 произведений mi, Если выполнены условия:

min (h) – max (h-1) ≥ 3 max (h-1) (*)

и max (h-1) < c < min (h) (**),

то множество остатков {a1,a2,…ah}, где ai ≡ C mod mi образует (n,h) пороговую схему для C [ 10 ]. Это означает, что если C – неизвестный секретный ключ, а ai - фрагменты ключа, розданные n участникам, то любые h из участников могут восстановить значение c по его фрагментам, а любые h-1 участников сделать это не смогут (без полного перебора вариантов). При этом, чем больше разность в (*), тем труднее h-1 участникам подобрать секретный ключ по своим фрагментам.

Пример.

Пусть n = 5 и m1 = 97, m2 = 98, m3 = 99, m4 = 101, m5 = 103.

Возьмем h = 3 и вычислим min (3) = (97*98*99) = 941094; max(2) = (101*103) = 10403/ Неравенство (*) примет вид:

941094 – 10403 = 930691 > 3* 10403 = 31209.

Секретное число c должно лежать в пределах (**). Пусть оно известно сотруднику, разделяющему секрет, который вычисляет значения ai (I = 1,2,3,4,5) из условий ai ≡ c mod mi и раздает фрагменты секрета пяти участникам a1 = 62, a2 = 4, a3 = 50, a4 = 50, a5 = 38.

Пусть теперь трое из 5 участников, например, А23 и А4 пытаются восстановить секретный ключ c по своим фрагментам. Поскольку каждый участник знает только свое значение mi, то они вычислят:

M2’ = m3*m4 = 9999; M3’ = m2*m4 = 9898; M4’ = m2*m3 = 9702, а затем соответствующие значения Ni’: N2’= 33; N3’ = 49. N4’ = 17. После чего найдут значение y = 4*9999*33 + 50*9898* 49 + 50 * 9702* 17 = 33816668. Секретный ключ можно вычислить из сравнения:

C ≡ y mod ( m2* m3*m4)

Таким образом, C ≡ 33816668 mod (98*99*101) ≡ 500000 mod 979902.

Если взять любую другую тройку участников, например, А1,А4,А5, то они вычислят тот же секретный ключ C = 500000.

Пусть теперь двое участников, например, А2 и А5 пытаются найти секретный ключ C. Они вычисляют y = 4*103*59 + 38*98*41 = 176992 ≡ 5394 ≡ C mod 10094/ Они понимают, что истинный секретный ключ C находится из условий : C = 5394 + t* 10094, но значения t не знают. Количество значений t определяется как целая часть дроби:

Для рассматриваемого примера целая часть дроби равна 89, т.е. двум участникам потребуется перебрать 89 вариантов ключа. В реальных условиях количество вариантов можно существенно увеличить.

      1. Пороговая схема разделение секрета, основанная на свойствах равновесных кодов [ 12 ] ( Схема предложена И.Л.Ерошем)

Как и в предыдущих случаях имеется n участников, которым раздаются

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

Пусть R(n,k) класс равновесных двоичных кодов длины n веса k, т.е.все

коды, содержащие k единиц и n – k нулей. Число таких кодов определяется формулой перестановки с повторениями (переставляется k единиц и n-k нулей, т.е

P (k, n – k) =

Так для n = 5 и k = 3 получаем

P (3,2) =

Выпишем в таблицу все равновесные коды длины 5 веса 3:

Таблица 1 равновесных кодов при n = 5, k = 3.

Фраг-

мент

I

II

III

IV

V

1)

1

1

1

0

0

2)

1

1

0

1

0

3)

1

1

0

0

1

4)

1

0

1

1

0

5)

1

0

1

0

1

6)

1

0

0

1

1

7)

0

1

1

1

0

8)

0

1

1

0

1

9)

0

1

0

1

1

10)

0

0

1

1

1

Можно заметить, что если взять любые три столбца Таблицы и поставить их рядом, то в каждой строке полученной уменьшенной таблицы будет находиться хотя бы одна единица. Если же взять любые два столбца этой таблицы, то всегда в уменьшенной таблице будет находиться строка из всех нулей. Можно интерпретировать этот результат следующим образом. Каждому столбцу пусть соответствует один из 5 участников. А каждой строке некоторый фрагмент ключа. Тогда у любых трех участников всегда будет все фрагменты ключа, а у любых двух никогда не будет всех фрагментов ключа. Т.е эта таблица соответствует пороговой схеме разделения секрета с 5 участниками и порогом 3. Можно доказать в общем случае, что для построения пороговой схемы с n участниками при пороге h нужно построить таблицу равновесных кодов R (n, n-h+1), т.е. кодов содержащих n –h +1 единиц и h -1 ноль. Длина кода будет равна (n –h +1) + (h-1) = n. В этом случае в таблице таких равновесных кодов h любых столбцов не будут содержать нулевых строк, а любые h-1 столбца всегда будут содержать нулевую строку.

Пример.

Пусть требуется построить пороговую схему с n = 6 и h = 3. Построим таблицу равновесных кодов длины 6 веса 6-3+1 = 4.

Число таких R(6,4) кодов равно P(4,2) = .

Таблица 2 равновесных кодов (6,4)

Фраг-

мент

I

II

III

IV

V

V1

1)

1

1

1

1

0

0

2)

1

1

1

0

1

0

3)

1

1

1

0

0

1

4)

1

1

0

1

1

0

5)

1

1

0

1

0

1

6)

1

1

0

0

1

1

7)

1

0

1

1

1

0

8)

1

0

1

1

0

1

9)

1

0

1

0

1

1

10)

1

0

0

1

1

1

11)

0

1

1

1

1

0

12)

0

1

1

1

0

1

13)

0

1

1

0

1

1

14)

0

1

0

1

1

1

15)

0

0

1

1

1

1

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

Можно доказать в общем случае, что любая полная таблица равновесных кодов длины n веса k реализует пороговую схему с n участниками и порогом h = n – k + 1.

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

Таблица 3 общих параметров

пороговых схем.

Равновесный

код

R (n,k)

Число кодовых

комбинаций

Пороговая

Схема

(n, h = n-k+1)

R (3,2)

3

(3,2)

R (4.2)

6

(4,3)

R (5,2)

10

(5,4)

R (6,2)

15

(6,5)

R (4,3)

4

(4,2)

R (5,3)

10

(5,3)

R (6,3)

20

(6,4)

R (7,3)

35

(7,5)

R (8,3)

56

(8, 6)

R (5,4)

5

(5,2)

R (6,4)

15

(6,3)

R (7,4)

35

(7,4)

R (8,4)

70

(8,5)

Может показаться, что в данной схеме как и в предыдущей при приближении снизу к порогу упрощается подбор секретного ключа. Однако если воспользоваться идеей схемы (n,n), описанной выше, этот недостаток полностью устраняется. Так, например, в Таблице 1 первым 9 фрагментам сопоставим случайные значения, полученные с помощью генератора случайных чисел: a1,a2,a3,…,a9. А значение фрагмента a10 вычислим следующим образом:

a10 = C – a1-a2-…-a9 mod P, где C – секретный ключ, P – большое простое число. Тогда сложив все фрагменты ключей, получим секретный ключ C. Если же не хватает хотя бы одного фрагмента ключа, то ключ можно найти только полным перебором.