Некоторые приложения теории кодирования. Учебное пособие
.pdf
8.3. Линейная СРС
Если решение существует, то секрет вычисляется по формуле
X
xaya. (8.8)
a TA
При r = n и биективном отображении ψ ЛСРС называется одномерной, а в противном случае – многомерной. В случае одномерной ЛСРС всегда можно считать, что ψ(j) = j для j [n]. Тогда TA = A для любого A 2P.
Теорема 12. Если для ЛСРС Ω вида (8.4) и коалиции A( P) систе-
ма (8.7) имеет решение, то любой секрет s Fq восстанавливается по формуле (8.8).
Доказательство. Для произвольного s Fq доли секрета имеют вид (8.6). Пусть y — решение уравнения (8.7). Тогда для матрицы M и вектора b вида (8.5) имеет место следующая цепочка равенств:
XX
xaya = ma, b ya
a TA a TA
* +
XX
= yama, b = |
yama, b |
a TA |
a TA |
= (1, 0, ..., 0), (s, p) = s.
Вектор y, являющийся решением уравнения (8.7), называется вектором реконструкции для правомочной коалиции A. Он не зависит от значения секрета и случайных значений, выбираемых в процессе выполнения протокола Share, а зависит только от состава коалиции и матрицы M.
Теорема 13. Если для ЛСРС Ω вида (8.4) и коалиции A( P) система (8.7) не имеет решения, то A не получает информации о секрете.
Доказательство. Идея доказательства: если для коалиции система (8.7) не имеет решения, то e = (1, 0, ..., 0) ̸ (LM|TA). Следовательно совокупность значений долей коалиции A не зависит от значения секрета. 
81
Глава 8. Схема разделения секрета
8.4. Пример
Рассмотрим ЛСРС Ω, построенную на основе МПП M = (F2, M, e, ψ), где ψ и M определены в (8.2) и (8.3) соответственно. Трем участникам
схемы соответствуют матрицы |
0 |
|
|
1 |
, M( 3 ) = 0 |
|
|
1 . |
||||||
M( 1 ) = |
0 |
1 |
1 |
0 |
, M( 2 ) = |
0 |
0 |
0 |
0 |
|||||
|
0 |
1 |
0 |
1 |
|
0 |
1 |
0 |
1 |
|
"0 |
|
|
0# |
{ } |
0 |
1 |
1 |
1 |
{ } |
1 |
1 |
1 |
1 |
{ } |
1 |
1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Так как линейные оболочки L(M({1})), L(M({2})) и L(M({3})) не содержат вектор e = (1, 0, 0, 0), то каждый из участников по отдельности не может восстановить однозначно секрет. В то же время оболочки L(M({1, 2})), L(M({2, 3})) и L(M({1, 2, 3})) такой вектор содержат. Поэтому коалиции {1, 2}, {2, 3} и {1, 2, 3} могут восстановить секрет, решив уравнение вида (8.7) и вычислив (8.8).
8.5. Связь ЛСРС и линейных кодов
Пусть C – [n + 1, k, d]q-код с проверочной (n − k + 1) × n-матрицей H, в которой первый столбец имеет вид eT = (1, 0, ..., 0)T Fnq −k+1. Напомним, что L(H) = C . На основе H может быть построена ЛСРС для n участников. Для этого в протоколах Share и Recon достаточно использовать МПП
Mˆ T
=(Fq, H , e, ψ),
где для , ˆ — − × -матрица, полученная
ψ(j) = j j = 1, ..., n H (n k + 1) n
из H удалением первого столбца. Будем говорить, что ЛСРС построена на основе кода C.
Пронумеровав строки и столбцы матрицы H от 0 до n − k и от 0 до n соответственно, представим матрицу H = (h)ni=0−k в виде
|
h1 |
|
|
0 |
h1,1 |
|
h0 |
|
|
1 |
h0,1 |
H = |
. |
= |
. . |
||
|
|
|
|
|
|
|
hn−k |
|
|
0 hn−k,1 |
|
|
|
|
|
|
|
...
...
...
...
h1,n |
|
h0 |
T ˆ |
|
h0,n |
|
= "H˜ # |
= he |Hi. |
|
. |
(8.9) |
|||
|
|
|
|
|
hn−k,n
82
8.5. Связь ЛСРС и линейных кодов
Из определения протокола Share для ЛСРС получаем, что секрету s Fq можно поставить в соответствие множество
S { } L ˜
(s) = y = (y0, ..., yn) C : y0 = s = sh0 + (H).
Тогда разделить секрет s — это значит выбрать случайно и равновероятно вектор из S(s).
Лемма 1. Пусть C — [n + 1, k]q-код, (1, 0, ..., 0) ̸ C. Тогда в одномерной ЛСРС Ω, построенной на основе кода C, структура противника A(Ω)
состоит из таких подмножеств A, для которых в C найдется такое кодовое слово c, что c0 = 1 и c|A = 0|A| F|qA|.
Доказательство. Так как (1, 0, ..., 0) ̸ C, то в любой проверочной матрице этого кода первый по счету столбец ненулевой. Пусть c = (c0, ..., cn) C такое, что c0 = 1 и c|A = 0|A| для некоторого A [n]. В качестве проверочной можно выбрать матрицу H вида (8.9), где h0 = c. Так как c|A = 0|A|, то первый столбец (1, 0, ..., 0)T линейно не зависит от столбцов с номерами из A. Поэтому, учитывая, что ЛСРС одномерная (тем самым,
TA = A), получаем, что при |
ˆ T |
система (8.7) не имеет решения. |
M = H |
Откуда, по теореме 13, A A(Ω).
Лемма 2. Пусть C — [n + 1, k]q-код, (1, 0, ..., 0) ̸ C. Тогда в одномерной ЛСРС Ω, построенной на основе кода C, структура доступа Γ(Ω) состоит из таких, и только таких, подмножеств B, для каждого из которых найдется такой набор коэффициентов b = (bi)i B, что для всех c = (c0, ..., cn) из C выполняется равенство:
X
c0 = b, c|B = bici.
i B
Доказательство. Так как (1, 0, ..., 0) ̸ C, то в любой проверочной матрице этого кода первый по счету столбец ненулевой. Пусть H — проверочная матрица C вида (8.9). Из теорем 12 и 13 вытекает, что B Γ(Ω), толь-
ко если некоторая линейная комбинация столбцов ˆ с номерами из дает
H B
вектор eT . Набор b = (bi)i B и есть искомый набор коэффициентов.
Из (8.1) вытекает, что структуру доступа Γ(Ω) легко построить на основе минимальной структуры доступа ∆(Γ(Ω)). В свою очередь минимальная
83
Глава 8. Схема разделения секрета
структура доступа ∆(Γ(Ω)) для ЛСРС может быть описана с помощью минимальных кодовых векторов кода C (см. определение в разделе 1.3.).
Теорема 14. Для одномерной ЛСРС, построенной на основе [n+1, k, d]q- кода C с проверочной матрицей H вида (8.9), справедливо равенство:
∆(Γ(Ω)) = {supp(c) \ {0} : c = (c0, ..., cn) M(C), c0 ̸= 0}.
Доказательство. Сначала докажем, что любое минимальное кодовое слово такое, что c0 ̸= 0, определяет правомочную коалицию. Пусть c – одно из таких кодовых слов, A = supp(c) \ {0}. Тогда линейная оболоч-
ˆ |
T |
, содержит вектор (1, 0, ..., 0). Из |
ка, натянутая на строки матрицы (H|A) |
|
|
теоремы 12 получаем, что A – правомочная коалиция. |
||
Пусть теперь A — минимальная правомочная коалиция, тогда A {0}
— носитель некоторого кодового слова c C. В силу минимальности A получаем, что c – минимальное кодовое слово, у которого c0 ̸= 0. 

Теорема 15. Пусть C — [n + 1, k, d]q-код, (1, 0, ..., 0) ̸ C, Ω — ЛСРС, построенная на основе проверочной матрицы кода C. Тогда любая коалиция мощности (d − 2) и менее принадлежит A(Ω), а любая коалиция мощности (n − d + 2) и более принадлежит Γ(Ω).
Доказательство. Так как d – кодовое расстояние кода C, то любые d−1 столбцов проверочной матрицы этого кода линейно независимые (см. теорему 1). Следовательно, столбец с номером 0 линейно независим от любых d − 2 столбцов этой матрицы, то есть не принадлежит линейной оболочке, натянутой на соответствующие столбцы. Из теоремы 13 получаем, что любая коалиция мощности d − 2 не получает информации о секрете.
Для доказательства того, что любые (n − d + 2) участников могут восстановить секрет, достаточно показать, что любые n − d + 2 столбцов любой проверочной матрицы H кода C порождают пространство столбцов Fnq −k+1. Предположим, что существует такой набор столбцов, для которого этого не так. Без потери общности можно полагать, что это столбцы с номерами от 1 до n −d + 2. Линейной комбинацией строк матрицы H получим строку матрицы, у которой на выбранных координатах нули, так как, по предположению, выбранные n − d + 2 столбцов образуют матрицу ранга меньше n − k + 1. Следовательно, в этой строке в оставшихся координатах
84
8.6. Пример
не более (n + 1) − (n − d + 2) = d − 1 ненулевых координат. А это противоречит тому, что d — минимальное кодовое расстояние кода C . Из теоремы 12 вытекает, что любая коалиция мощности n − d + 2 получает всю информацию о секрете. 
Теорема 16. Матрица H над полем Fq порождает пороговую (n, r)- схему разделения секрета тогда и только тогда, когда H – проверочная матрица [n + 1, n − r + 1, r + 1]q-кода (МДР-кода).
Доказательство. Достаточность следует из теорем 3 и 15. Докажем необходимость. Пусть H порождает пороговую (n, r)-схему. Предположим, что в матрице H имеется r линейно зависимых столбцов: H|i1 , ..., H|ir . Так как схема разделения секрета пороговая, то вектор (1, 0, ..., 0)T порождается, в частности, этими столбцами. Из линейной зависимости столбцов H|i1 , ..., H|ir следует, что вектор (1, 0, ..., 0)T порождается некоторыми r −1 столбцами из этого набора. Но это противоречит тому, что только r и более участников могут восстановить секрет. Получено противоречие к результату, доказанному в теореме 13. Докажем теперь, что rank(H) = r. Рассмотрим набор столбцов: H|i1 , ..., H|ir+1 . Вектор (1, 0, ..., 0)T порождается как набором H|i1 , ..., H|ir , так и набором H|i2 , ..., H|ir+1 :
rr
XX
(1, 0, ..., 0)T = αjH|ij = |
βlH|i1+l, |
j=1 |
l=1 |
где (α1, ..., αr), (β1, ..., βr) – ненулевые векторы коэффициентов. Тогда из
равенства |
|
jr=1 αjH|ij − lr=1 βlH|i1+l = 0r получаем, что набор из r + 1 |
|
столбца |
линейно зависим. Следовательно, ранг матрицы H равен r. |
||
|
P |
P |
|
8.6. Пример
Рассмотрим [7, 3]2-код C с порождающей матрицей G вида:
G = |
1 |
0 |
1 |
1 |
0 |
1 |
0 . |
|
0 |
1 |
1 |
1 |
1 |
0 |
0 |
|
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
85
Глава 8. Схема разделения секрета
Все ненулевые кодовые векторы этого кода являются минимальными. Так как порождающая матрица кода имеет систематический вид, то проверочная матрица этого кода имеет вид:
|
0 |
1 |
0 |
0 |
1 |
0 |
1 |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
H = |
0 0 1 |
0 |
1 |
1 |
0 . |
||
|
0 |
0 |
0 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Эта матрица имеет вид (8.9). Поэтому на основе кода C может быть построена ЛСРС для распределения секрета из F2 для 6-ти участников. Из теоремы 14 вытекает, что ∆(Γ(Ω)) имеет вид:
∆(Γ(Ω)) = {{2, 3, 5}, {1, 3, 6}, {1, 4, 5}, {2, 4, 6}},
откуда, в частности, получаем, что эта ЛСРС не является пороговой.
8.7. Выявление активных нарушителей в одномерных ЛСРС
Среди легитимных участников могут быть и активные нарушители, которые способны отклоняться от предписываемого протоколом порядка действий. Целью активных нарушителей может быть, например, реализация атаки типа отказ в обслуживании, когда протокол Recon восстанавливает неправильное значение секрета или сообщает о невозможности выполнить протокол.
Линейные схемы разделения секрета, порожденные проверочными матрицами линейных кодов, позволяют выявлять активных внутренних нарушителей. Пусть C – МДР [n + 1, n −r + 1, r + 1]q-код, проверочная матрица H которого порождает пороговую (n, r)-схему (см. теорему 16). Из теоремы 7 вытекает, что этот код позволяет исправить до t ошибок и p стираний, если r + 1 2t + 1 + p, или r 2t + p. Вычитая обе части неравенства из n + 1, получим что
n − (p − 1) 2t + n − r + 1. |
(8.10) |
Это неравенство может быть получено также из неравенства (2.4). Напомним, что n – число легитимных участников, среди которых раз-
86
8.8. Вопросы для самоконтроля
деляется секрет, а p − 1 – уменьшенное на единицу количество стираний, которое может исправить код C, если среди нестертых координат имеется t испорченных. В терминах схем разделения секрета уменьшение числа исправляемых стираний на единицу означает, что первая координата кодового слова (то есть сам секрет) неизвестна. Следовательно, n − (p − 1) – число участников некоторой коалиции. Таким образом, справедлива следующая теорема.
Теорема 17. Пусть линейная пороговая (n, r)-схема разделения секрета порождена проверочной матрицей H некоторого [n+1, n−r+1, r+1]q- кода. Тогда каждая коалиция мощности не менее 2t + n − r + 1, среди которых не более t активных нарушителей, секрет восстанавливает однозначно, и будут выявлены все активные нарушители.
Доказательство. Доказательство вытекает из (8.10), теоремы 7 и того, что C – МДР-код. Для выявления активных нарушителей используется алгоритм декодирования кода C. 
8.8. Вопросы для самоконтроля
1.Схемы разделения секрета. Линейная СРС.
2.Связь ЛСРС и линейных кодов.
3.Выявление активных нарушителей в одномерных ЛСРС.
87
Глава 9
Схема сокрытия информации
9.1. Постановка задачи
В ряде прикладных задач может потребоваться организация скрытого канала передачи данных (СКПД), то есть такого канала передачи, который трудно или невозможно обнаружить. Область защиты информации, в которой рассматриваются задачи построения СКПД, называется стеганографией. Отличие стеганографии от криптографии состоит в том, что при криптографическом сокрытии прячется только содержание сообщения, а при стеганографическом сокрытии важно скрыть сам факт присутствия секретного сообщения. При этом обычно перед сокрытием секретное сообщение шифруется.
Обычно секретные сообщения внедряются (скрываются) в цифровые объекты путем изменения отдельных битов и/или путем вставки новых битов. Такие цифровые объекты обычно называются покрывающими объектами. К примерам таких объектов можно отнести фотографии, видео- и аудиофайлы, текстовые файлы, программный код.
Во многих методах перед сокрытием по покрывающему объекту строится последовательность битов, называемая контейнером (обозначим алгоритм построения такой последовательности getbits). Сокрытие выполняется путем изменения битов контейнера (этот алгоритм обозначим embed). В алгоритме построения контейнера getbits могут использоваться такие параметры, как секретный ключ и плотность: секретный ключ может определять номера битов покрывающего контейнера, из которых строится контейнер, а плотность определяет долю битов покрывающего объекта, из
88
9.2. Наивное сокрытие
которых строится контейнер. Измененный контейнер (контейнер, содержащий вложенное секретное сообщение), называется стегоконтейнером. Стегоконтейнер является выходом алгоритма embed. После формирование стегоконтейнера, битовая последовательность, представляющая его, возвращается в покрывающий объект (алгоритм возвращения битов в покрывающий объект обозначим setbits). При этом могут использоваться такие параметры, как секретный ключ и плотность, которые были задействованы при формировании контейнера, чтобы вернуть задействованные биты «на свое место». Схема сокрытия информации в покрывающем объекте может быть представлена алгоритмом EmbedInCoverObject (см. алгоритм 5). Схема извлечения – ExtractFromCoverObject – представлена в алгоритме 6, где extract
— алгоритм извлечения данных из стегоконтейнера.
Скрытность секретного сообщения в стегоконтейнере бывает комбинаторная и статистическая. В первом случае считается, что чем меньше изменений сделано в контейнере, тем более скрытно сообщение. Во втором случае скрытность оценивается как статистическая разность контейнера и стегоконтейнера. В пособии скрытность рассматривается в комбинаторном смысле.
Если обозначить через α отношение битовой длины скрываемого секретного сообщения к битовой длине контейнера, то одной из главных задач разработчиков СКПД является построение необнаруживаемого или трудно обнаруживаемого способа сокрытия информации, при котором величина α принимает как можно большее значение. Отметим, что при передаче покрывающих объектов по ЦКПД могут возникать искажения, приводящие к появлению ошибок в стегоконтейнере. Поэтому актуальной может также быть разработка методов сокрытия, устойчивых к таким ошибкам.
9.2. Наивное сокрытие
Пусть C FN2 — контейнер, извлеченный из покрывающего объекта, l — максимальная битовая длина сообщения M, которое можно вложить в контейнер, k — количество изменений контейнера при сокрытии сообщения. Число α = l/N называется относительной длиной вкладываемого
сообщения, а e = l/k — эффективностью сокрытия.
89
Глава 9. Схема сокрытия информации
Алгоритм 5: EmbedInCoverObject — сокрытие в покрывающий объект
|
Вход: O — покрывающий объект, m — секретное сообщение, par — |
|
|
параметры сокрытия |
|
|
Выход: O′ — измененный покрывающий объект |
|
|
/*По объекту O построить контейнер c |
*/ |
1 |
c = getbits(O, par) |
|
|
/*Выполнить вложение секретного сообщения в контейнер |
*/ |
2 |
c′ = embed(c, m, par) |
|
|
/*«Вернуть» биты стегоконтейнера в O, тем самым получив O′ |
*/ |
3 |
O′ = setbits(O, c′, par) |
|
4 |
вернуть O′ |
|
Алгоритм 6: ExtractFromCoverObject — извлечение из покрывающего объекта
|
Вход: O — покрывающий объект, par — параметры извлечения |
|
|
Выход: m′ — секретное сообщение |
|
|
/*По объекту O построить контейнер c |
*/ |
1 |
c = getbits(O, par) |
|
|
/*Выполнить извлечение секретного сообщения |
*/ |
2 |
m′ = extract(c, par) |
|
3 |
вернуть m′ |
|
При наивной реализации алгоритма embed можно вложить в этот контейнер сообщение длиной N битов (задействуются все биты контейнера), изменив, при этом в среднем N/2 битов. То есть α = 1, e = 2. Но в каждый бит контейнера обычно информация не вкладывается, так как такие СКПД могут быть обнаружены. Для повышения скрытности можно, например, вкладывать один бит в каждые n битов так, чтобы их сумма равнялась вкладываемому биту. В этом случае
α = n1 , e = 2.
90
