Теоретические сведения. Исследование схем разделения секрета

Лабораторная работа 5

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

Цель работы: Ознакомиться с различными схемами разделения секретных ключей, которые используются в криптографических системах для предотвращения их несанкционированного использования.

Теоретические сведения

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

1. Наиболее просто поставленная задача решается при h = n, т.е. когда ключ раздается n сотрудникам и требуется наличие всех n фрагментов ключа, чтобы собрать полностью секретный ключ S [1]. Выберем некоторое простое число p, и пусть секретный ключ представляется в виде набора (s1,s2,s3,…,sk), где все si являются элементами поля GF(p). Разделим секретный ключ на n фрагментов следующим образом. Будем генерировать произвольные случайные числа:

(a11, a12, a13,…, a1k) - фрагмент секретного ключа 1-го сотрудника,

(a21, a22, a23,…, a2k) - фрагмент секретного ключа 2-го сотрудника,

………..

(an-11,an-12,an-13,…,an-1k) - фрагмент секретного ключа n-1 –го сотрудника.

А последнему n- му сотруднику вычислим элементы его фрагмента секретного ключа по следующему правилу:

an1 = s1 - a11 - a21 - a31 - … - an1 mod p.

an2 = s2 - a12 - a22 - a32 - … - an2 mod p.

…………………………………………

ank = sk - a1k - a2k - a3k - … - ank mod p.

В этом случае только при сложении всех фрагментов ключа по модулю p получим полный секретный ключ.

Пример. Пусть p = 29 и секретный ключ имеет вид: (26,13,21,8,0,18). Требуется разделить его на 5 фрагментов для раздачи 5 сотрудникам. Для первых четырех из них генератор случайных чисел по модулю 29 пусть выработал фрагменты:

(26, 0, 13, 11, 23, 25)

(2, 7, 15, 12, 27, 6)

(1, 3, 24, 6, 0, 16)

(12, 2, 7, 0, 7, 0)

Для последнего, пятого сотрудника вычисленный фрагмент имеет вид:

(14, 1, 20, 8, 1, 0).

Легко проверяется, что сложение всех фрагментов (каждый элемент складывается по модулю 29) дает полный секретный ключ (26,13,21,8,0,18).

Следует заметить, что сложность подбора секретного ключа в рассмотренном случае зависит только от значения модуля p и числа элементов k и практически не зависит от количества сотрудников n.

2. Рассмотрим случай, когда h < n. Имеется несколько вариантов решения такой пороговой задачи. Приведем алгоритм, описанный в [2]. Он основан на модульной арифметике и китайской теореме об остатках.

Имеется n участников A1,A2,A3,…,An. Пусть mi, i = 1,2,…n, целые числа, большие 1, такие, что (mi,mj) = 1 при i ¹j. Обозначим за М – произведение всех чисел mi, т.е. М = m1m2m3…,mi,…mt.

Обозначим также Mi – произведение всех mj (j = 1,2,…, i-1,i+1,…,n), кроме mi, т.е. Mi = M/mi. Вычислим значения Ni из условия: MiNi º 1 mod mi. Так как (Mi,mi) = 1, то решение всегда существует, и все Ni будут найдены.

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

n

x º S aiMiNi

i = 1

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

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

min(k) – max(k-1) ³ 3 max(k-1), ( 1 )

и max(k-1) < c < min(k), (2)

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

Пример. Пусть n = 5 и m1 = 97; m2 = 98, m3 = 99, m4 = 101, m5 = 103. Возьмем k = 3 и вычислим

min(3) = (97*98*99) = 941094; max(2) = (101*103) = 10403.

Неравенство (1) примет вид: 941094 – 10403 = 930691 > 3*10403 = 31209.

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

M2= m3*m4 = 9999; M3= m2*m4 = 9898; M4= m2*m3 = 9702,

а затем соответствующие значения Ni: N2 = 33, N3 = 49, N4 = 17. После чего находят значение x = 4*9999*33 + 50*9898*49 + 50*9702*17 = 33816668. Секретный ключ вычисляется из сравнения: c º x mod (m2*m3*m4), т.е.

c º 33816668 mod (98*99*101) º 500000 mod 979902.

Если взять любую другую тройку клиентов, например, A1,A4,A5, то они вычислят тот же секретный ключ с = 500000.

Пусть теперь двое клиентов, например, A2 и A5 пытаются найти секретный ключ с. Они вычисляют значения

y = 4*103*59 + 38*98*41 = 176992 º 5394 º с mod 10094.

Они понимают, что истинный секретный ключ находится из условий:

5394 + i*10094,

но значения i не знают. Количество значений i определяется как целая часть дроби:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: