12.2. Распределение по коалициям

12.2.1. Схема для нескольких коалиций

Предположим, что имеется $N$ легальных пользователей

$$ \{ U_1, U_2, \dots, U_N \}, $$

которым нужно сообщить (открыть, предоставить в доступ) общий секрет $K$.

Секрет может быть доступен только определённым коалициям, например:

$$ \begin{array}{l} C_1 = \{ U_1, U_2 \}, \\ C_2 = \{ U_1, U_3, U_4 \}, \\ C_3 = \{ U_2, U_3 \}, \\ \dots \end{array} $$

При этом ни одна из коалиций $C_i, ~ i = 1, 2, \dots$ не должна быть подмножеством другой коалиции.

Пример. Имеется 4 участника:

$$ \{ U_1, U_2, U_3, U_4 \}, $$

которые образуют 3 коалиции:

$$ \begin{array}{l} C_1 = \{ U_1, U_2 \}, \\ C_2 = \{ U_1, U_3 \}, \\ C_3 = \{ U_2, U_3, U_4 \}. \\ \end{array} $$

Распределение частичных секретов между ними представлено в виде таблицы [tab:secret-share-coalition-1], в которой введены следующие обозначения: $a_1, b_1, c_2, c_3$ – случайные числа из кольца ${{\mathbb{Z}}}_M$. В строках таблицы содержатся частичные секреты каждого из пользователей, в столбцах таблицы показаны частичные секреты, соответствующие каждой из коалиций.

 $C_1 = \{ U_1, U_2 \}$$C_2 = \{U_1, U_3 \}$$C_3 = \{ U_2, U_3, U_4 \}$
$U_1$$a_1$$b_1$
$U_2$$K - a_1$$c_2$
$U_3$$K - b_1$$c_3$
$U_4$$K - c_2 - c_3$
Таблица 12.1 — Распределение секрета по определённым коалициям

Как видно из приведённых данных, суммирование по модулю $M$ чисел, записанных в каждом из столбцов таблицы, открывает секрет $K$.

Пример.

В системе распределения секрета доверенный

центр использует кольцо ${{\mathbb{Z}}}_m$ целых чисел по модулю $m$. Требуется разделить секрет $K$ между $5$ пользователями:

$$ \{ U_1, U_2, U_3, U_4, U_5 \} $$

так, чтобы восстановить секрет могли только коалиции:

$$ \begin{array}{lll} C_1 = \{ U_1, U_2 \}, & & C_2 = \{ U_1, U_3 \}, \\ C_3 = \{ U_2, U_3, U_4 \}, & & C_4 = \{ U_2, U_3, U_5 \}, \\ C_5 = \{ U_3, U_4, U_5 \}, & & C_6 = \{ U_1, U_2, U_3 \}. \\ \end{array} $$

Заданное множество коалиций с доступом не является минимальным, так как одни коалиции входят в другие:

$$ C_1 \subset C_6, ~ C_2 \subset C_6. $$

Исключая $C_6$, получим минимальное множество коалиций с доступом к секрету: ни одна из оставшихся коалиций не входит в другую $C_i \nsubseteq C_j$ для $i \neq j$. Пользователям выдаются тени по минимальному множеству коалиций с доступом. В строках таблицы [tab:secret-share-coalition-2] содержатся частичные секреты каждого из пользователей, в столбцах таблицы показаны частичные секреты, соответствующие каждой из коалиций.

 $C_1$$C_2$$C_3$$C_4$$C_5$
$U_1$$a_1$$b_1$
$U_2$$K - a_1$$c_2$$d_2$
$U_3$$K - b_1$$c_3$$d_3$$e_3$
$U_4$$K - c_2 - c_3$$e_4$
$U_5$$K - d_2 - d_3$$K - e_3 - e_4$
Таблица 12.2 — Распределение секрета по определённым коалициям

Тени выбираются случайно из кольца $\mathbb{{{\mathbb{Z}}}}_m$. В результате у пользователей будут тени.

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

Рассмотрим схему Брикелла (англ. Ernest Francis Brickell, [19]) разделения секрета по коалициям. По-прежнему

$$ \{ U_1, U_2, \dots, U_N \} $$

– легальные пользователи. Пусть ${{\mathbb{Z}}}_p$ – кольцо целых чисел по модулю $p$. Рассмотрим векторы

$$ \mathcal{U} = \left\{ (u_1, u_2, \dots, u_d) \right\}, ~~ u_i \in {{\mathbb{Z}}}_p $$

длины $d$. Каждому пользователю $U_i, ~ i = 1, \dots, N$ ставится в соответствие вектор

$$ \varphi(U_i) \in \mathcal{U}, ~~ i = 1, \dots, N. $$

Тогда каждой из коалиций, например

$$ C_1 = \{ U_1, U_2, U_3 \}, $$

соответствует набор векторов

$$ \varphi(U_1), \varphi(U_2), \varphi(U_3). $$

Эти векторы должны быть выбраны так, чтобы их линейная оболочка содержала вектор

$$ (1, 0, 0, \dots, 0) $$

длины $d$. Линейная оболочка любого набора векторов, не образующих коалицию, не должна содержать вектор $(1, 0, 0, \dots, 0)$ длины $d$.

Пусть $K_0 \in {{\mathbb{Z}}}_p$ – общий секрет. Случайным образом из ${{\mathbb{Z}}}_p$ выбираются координаты $K_1$, $K_2$, $\dots$, $K_{d-1}$. Далее вместе с $K_0$ они объединяются в вектор $(K_0, K_1, \dots, K_{d-1})$ и вычисляются $N$ скалярных произведений:

$$\begin{array}{l} \left( \left( K_0, K_1, \dots, K_{d-1} \right), ~ \varphi(U_1) \right) ~=~ a_1, \\ \left( \left( K_0, K_1, \dots, K_{d-1} \right), ~ \varphi(U_2) \right) ~=~ a_2, \\ \dots \\ \left( \left( K_0, K_1, \dots, K_{d-1} \right), ~ \varphi(U_N) \right) ~=~ a_N. \\ \end{array}$$

Пользователям $U_i, ~ i = 1, 2, \dots, N$ выдаются следы – их частичные секреты:

$$ U_i \colon \left\{ \varphi(U_i), a_i \right\}. $$

Пусть коалиция $C$ – допустимая, например:

$$ C = C_1 = \{ U_1, U_2, U_3 \}. $$

Тогда члены коалиции совместно находят такие коэффициенты $\lambda_1, \lambda_2, \lambda_3$, что

$$ \lambda_1\varphi(U_1)+\lambda_2\varphi(U_2)+\lambda_3\varphi(U_3) ~=~ (1,0, \dots, 0). $$

После этого вычисляется выражение

$$\begin{array}{l} \lambda_1 a_1 + \lambda_2 a_2 + \lambda_3 a_3 = \\ = \left( \left( K_0, K_1, \dots, K_{d-1} \right), ~ \lambda_1 \varphi(U_1) + \lambda_2 \varphi(U_2) + \lambda_3 \varphi(U_3) \right) = \\ = \left( \left( K_0, K_1, \dots, K_{d-1} \right), ~ \left( 1, 0, \dots, 0 \right) \right) = K_0, \\ \end{array}$$

которое и является общим секретом.

Пример. Для сети из $n = 4$ участников

$$ \{ U_1, U_2, U_3, U_4 \} $$

выбраны следующие векторы длины $k = 3$ над полем ${{\mathbb{Z}}}_{23}$:

$$ \begin{array}{l} \varphi(U_1) = (0,2,0), \\ \varphi(U_2) = (2,0,7), \\ \varphi(U_3) = (0,5,7), \\ \varphi(U_4) = (0,2,9). \\ \end{array} $$

Найдём все коалиции, которые могут раскрыть секрет.

Запишем

$$ (1,0,0) = c_1 (0,2,0) + c_2 (2,0,7) + c_3 (0,5,7) + c_4 (0,2,9). $$

Ясно, что $c_2 \neq 0$ и коалициями пользователей, которые дают единичный вектор и, следовательно, могут восстановить секрет, являются:

$$ \begin{array}{l} C_1 = \{ U_1, U_2, U_3 \}, \\ C_2 = \{ U_1, U_2, U_4 \}, \\ C_3 = \{ U_2, U_3, U_4 \}. \\ \end{array} $$

Пусть доверенный центр для секрета $K = 4$ выбрал вектор $\bar{a} = (4, 2, 9)$. Тогда участники получают тени:

$$ s_1 = (4,2,9) \cdot (0,2,0) = 4 \mod 23, $$
$$ s_2 = (4,2,9) \cdot (2,0,7) = 2 \mod 23, $$
$$ s_3 = (4,2,9) \cdot (0,5,7) = 4 \mod 23, $$
$$ s_4 = (4,2,9) \cdot (0,2,9) = 16 \mod 23. $$

Возьмём коалицию $C_1 = \{ U_1, U_2, U_3 \}$ и вычислим коэффициенты $c_i$:

$$ (1,0,0) = c_1 (0,2,0) + c_2 (2,0,7) + c_3 (0,5,7), $$
$$ \begin{array}{l} c_1 = 7 \mod 23, \\ c_2 = 12 \mod 23, \\ c_3 = 11 \mod 23. \\ \end{array} $$

Найдём секрет:

$$ K = 7 \cdot 4 + 12 \cdot 2 + 11 \cdot 4 = 4 \mod 23.$$