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

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

Векторная схема разделения секрета, или схема Блэкли (Шаблон:Lang-en), — схема разделения секрета между сторонами, основанная на использовании точек многомерного пространства. Предложена Джорджем Блэкли в 1979 году. Схема Блэкли позволяет создать (t, n)-пороговое разделение секрета для любых t, n.

Идея

Разделяемым секретом в схеме Блэкли является одна из координат точки в m-мерном пространстве. Долями секрета, раздаваемые сторонам, являются уравнения (m1)-мерных гиперплоскостей. Для восстановления точки необходимо знать m уравнений гиперплоскостей. Менее, чем m сторон не смогут восстановить секрет, так как множеством пересечения m1 плоскостей является прямая, и секрет не может быть восстановлен.

Одна доля Две доли пересекаются вдоль плоскости Три доли пересекаются в точке
Пример схемы Блэкли в трёх измерениях: каждая доля секрета — это плоскость, а секрет — это одна из координат точки пересечения плоскостей. Двух плоскостей недостаточно для определения точки пересечения.

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

Описание

Генерация точки

Пусть нужно реализовать (k,n)-пороговую схему, то есть секрет M разделить между n сторонами так, чтобы любые k из них могли восстановить секрет. Для этого выбирается большое простое число p>M, по модулю которого будет строиться поле GF(p). Случайным образом дилерШаблон:Кто? выбирает числа b2,,bkGF(p). Тем самым задается точка (M,b2,,bk) в k-мерном пространстве, первая координата которой является секретом.

Раздача секрета

Для каждой стороны Pi,i=(1,,n) случайным образом выбираются коэффициенты a1i,a2i,,aki, равномерно распределённые в поле GF(p). Так как уравнение плоскости имеет вид a1ix1+a2ix2++akixk+di=0, для каждой стороны необходимо вычислить коэффициенты di:

d1=(a11M+a21b2++ak1bk)modp,d2=(a12M+a22b2++ak2bk)modp,di=(a1iM+a2ib2++akibk)modp,dn=(a1nM+a2nb2++aknbk)modp.

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

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

Для восстановления секрета любым k сторонам необходимо собраться вместе и из имеющихся долей секрета составить уравнения для отыскания точки пересечения гиперплоскостей:

{(a11x1+a21x2++ak1xk+d1)modp=0,(a12x1+a22x2++ak2xk+d2)modp=0,(a1kx1+a2kx2++akkxk+dk)modp=0.

Решение системы даёт точку в k-мерном пространстве, первая координата которой и есть разделяемый секрет. Систему можно решать любым известным способом, например, методом Гаусса, но при этом необходимо проводить вычисления в поле GF(p).

Если число участников встречи будет меньше, чем k, например, k1, то результатом решения системы уравнений, составленной из имеющегося набора коэффициентов, будет прямая в k-мерном пространстве. Тем самым множество допустимых значений секрета, удовлетворяющих полученной системе, в точности совпадает с полным числом элементов поля GF(p), и секрет равновероятно может принимать любое значение из этого поля. Таким образом, участники, собравшись вместе, не получат никакой новой информации о разделённом секрете.

Пример

Пусть нужно разделить секрет «6» между 4 сторонами, при этом любые 3 должны иметь возможность восстановить его. Иными словами, необходимо реализовать (3,4)-пороговое разделение секрета.

Для этого зададим точку в 3-мерном пространстве, например, (6,4,2). Первая координата точки и есть разделяемый секрет, 4 и 2 — некоторые случайные числа. При этом будем работать в поле GF(11), то есть все числа будут вычисляться, как остатки от деления на p=11.

Каждой стороне необходимо дать уравнение плоскости, проходящей через заданную точку. В 3-мерном пространстве уравнение плоскости задается с помощью 4 параметров: a1x1+a2x2+a3x3+d=0, где x1,x2,x3 — координаты, а (a1,a2,a3,d) — параметры, раздаваемые сторонам. Для выбора параметров можно поступить следующим образом: величины (a1,a2,a3) выбрать случайным образом (при этом необходимо, чтобы полученные плоскости не оказались компланарными), а свободный коэффициент для каждой стороны вычислять по заданной точке и выбранным коэффициентам.

Например, выберем параметры следующим образом:

1-я сторона: (4,8,2,d1),
2-я сторона: (2,6,8,d2),
3-я сторона: (6,8,4,d3),
4-я сторона: (3,10,1,d4).

Для вычисления неизвестных параметров d воспользуемся значениями координат выбранной точки:

d1=(46+84+22)mod11=6,d2=(26+64+82)mod11=3,d3=(66+84+42)mod11=1,d4=(36+104+12)mod11=6.

После этого доли секрета вместе с числом p=11 раздаются сторонам.

Для восстановления секрета любым трём участникам необходимо найти точку пересечения плоскостей, уравнения которых им были заданы. Например, первым трём сторонам для восстановления секрета необходимо будет решить систему уравнений

{(4x1+8x2+2x3+6)mod11=0,(2x1+6x2+8x3+3)mod11=0,(6x1+8x2+4x3+1)mod11=0.

Систему можно решать любым способом, не забывая при этом, что вычисления ведутся в поле GF(11). Несложно убедиться, что точка (6,4,2) является решением системы, её первая координата «6» и есть разделяемый секрет.

Литература