Некоторые приложения теории кодирования. Учебное пособие
.pdf
3.6. Стойкость схемы Рао-Нама
Алгоритм генерации ключа Gen случайно генерирует тройку k = (S, P, T ), где S — невырожденная (k×k)-матрица, P — (n×n)-матрица перестановки, T — таблица пар вида
T = {(s = zHT , z) : z Fnq , wt(z) ≈ n(q − 1)/q}, |T | = N qn−k,
причем в T нет разных пар (s, z) и (˜s, z˜), таких, что s = ˜s. Множество всех значений вектора z в парах (s, z) из таблице T обозначим Z. Алгоритм шифрования Enc на вход принимает открытый текст x Fkq , ключ k и возвращает шифртекст y:
y = Enc(k, x) = (xSG + z)P,
где вектор z выбирается случайно и равновероятно из Z. Для удобства описания алгоритма расшифрования через T (s) обозначим вектор z из пары (s, z) в таблице T . Тогда алгоритм расшифрования вектора y, используя псевдообратную к G матрицу G−1, можно представить так:
Dec(k, y) = (yP −1 − T (yP −1HT ))G−1S−1
=((xSG + z)P P −1 − T ((xSG + z)P P −1HT ))G−1S−1
=(xSG + z − T (zHT ))G−1S−1 = x.
3.6. Стойкость схемы Рао-Нама
Для того, чтобы сократить размер секретного ключа, размер N таблицы T ограничен. Но это приводит и к тому, что схема Рао-Нама не является IND-CPA-стойкой. Например, атакующий, используя алгоритм A1 может попытаться найти два таких сообщения x0, x1 Fkq , что
C(x0) ∩ C(x1) = ,
где C(xb) = {xbSGP + zP : z Z}. Тогда несложно определить, какому из двух открытых текстов соответствует шифртекст y.
Используя алгоритм A1 можно найти и матрицу SGP , и, как следствие, множество {zP : z Z}, для последующего использования в дешифровании. Алгоритм такой атаки предложен в [3]. Приведем этот алгоритм. Для нахождения SGP достаточно сначала построить множества C(gi), i =
31
Глава 3. Схема симметричного шифрования
0, ..., k, где g0 = 0k, а при i = 1, ..., k в gi Fkq на i-ой координате размещена единица, а на остальных – нули. Для i = 0, ..., k через G(C(gi), Ei)
обозначим ориентированный граф, в котором C(gi) — множество узлов, Ei
— множество рёбер, причем ребро (y, y˜) из узла y = giSGP + zP в узел y˜ = giSGP + z˜P имеет метку
y˜ − y = (z˜ − z)P. |
(3.4) |
Из (3.4) вытекает, что структура этих графов не зависит от шифруемого сообщения, поэтому они изоморфны (графы отличаются только метками вершин). Тогда для каждой пары графов (G(C(gi), Ei), G(C(gj), Ej)) существует изоморфизм πi,j, устанавливающий соответствие между вершинами множеств C(gi) и C(gj). Отметим, что этот изоморфизм не будет единственным, если группа автоморфизмов Aut(G(C(g0), E0)) содержит не только тождественное отображение. Например, если в графе C(g0), E0) имеются две вершины, метки входящих и выходящих узлов которых совпадают, тогда |Aut(G(C(g0), E0))| 2, так как, взаимно поменяв метки этих вершин, получим тот же граф. Таким образом, неравенство |Aut(G(C(g0), E0))| > 1 означает, что при сопоставлении меток двух графов можем получить ситуацию, когда метки соответствующих вершин из двух графов получены с помощью разных векторов из Z. А целью криптоаналитика является нахождение такого изоморфизма, при котором все (или почти все) метки соответствующих пар получены с помощью одинаковых векторов из Z. Поэтому, чем меньше |Aut(G(C(g0), E0))|, тем меньше вычислительная сложность атаки (перебор меньшего числа изоморфизмов).
Пусть, для простоты, Aut(G(C(g0), E0)) содержит только тождественное отображение (для других графов их группы автоморфизмов также будут содержать только тождественное отображение). Тогда, если π0,1 — изомор-
физм G(C(g0), E0) и G(C(g1), E1), то для каждой вершины y C(g0) получаем, что (π0,1(y) − y) – это первая строка матрицы SGP . Аналогично
могут быть найдены остальные строки этой матрицы.
Отметим, что чем больше |Aut(G(C(g0), E0))|, тем вычислительно сложнее может быть поиск строк SGP . Однако усиление стойкости системы путем подбора множества Z, увеличивающего мощность группы автоморфизмов, является малоперспективным, так как усложняет алгоритм Gen.
32
3.7. Пример
3.7. Пример
Пусть q = 2, k = 3, n = 5, N = 4, |
|
|
|
1 0 0 0 0 |
|
||||||||
|
0 0 1 1 1 |
0 1 |
|
|
1 1 0 |
|
|||||||
G = 1 1 1 0 1 , HT = |
1 |
0 |
|
|
0 1 1 , P = |
0 |
0 |
0 |
1 |
0 |
|
||
1 0 |
, S = |
0 1 0 0 0 |
, |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 0 1 0 0 |
1 1 |
|
|
1 0 0 |
0 0 0 0 1 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
0 1 |
|
|
|
|
0 0 1 0 0 |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T = {(00, 00111), (01, 10010), (10, 11001), (11, 01011)}. |
|
|
|
|
||||||||
Матрица SGP имеет вид |
|
1 |
|
|
|
0 . |
|
|
|
|
|
|
|
|
SGP = |
0 |
1 |
0 |
|
|
|
|
|
|
|||
|
|
|
1 |
0 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
0 |
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пусть атакующий имеет возможность шифровать любое сообщение и наблюдать результат зашифрования. Тогда атакующий, выполняя запросы на шифрование, может построить множества
C(000) = {(01101), (00011), (10110), (10101)},
C(001) = {(00000), (01110), (11011), (11000)},
C(010) = {(11001), (10111), (00010), (00001)},
C(100) = {(11110), (10000), (00101), (00110)}.
С одной стороны, видно, что множества не пересекаются, поэтому по шифртексту можно определить, какое сообщение шифровалось (шифр не является IND-CPA-стойким).
Покажем, как по этим множествам может быть найдена матрица SGP . Во множествах выше для удобства первый элемент соответствует первому элементу таблицы T , второй – второму и так далее. Однако, при проведении атаки заранее неизвестно, в каком порядке выбираются векторы z при шифровании. Другими словами, атакующий может построить указанные выше множества, но порядок элементов внутри этих множеств может
33
Глава 3. Схема симметричного шифрования
быть произвольным. Поэтому атакующему необходимо найти соответствие между элементами C(000) и элементами каждого из оставшихся множеств. Такое соответствие может быть найдено с помощью графов.
На рис. 2 показано соответствие между элементами множеств C(000) и C(001) с помощью соответствующих графов G(C(000), E0) и G(C(001), E1). Отметим, что так как q = 2, то метки рёбер (y, y˜) и (y˜, y) совпадают, поэтому вместо двух направленных рёбер между вершинами y˜ и y, имеющих одинаковые метки, на 2 изображено одно ненаправленное ребро с одной меткой. Так как |Aut(G(C(001), E0))| = |Aut(G(C(001), E1))| = 1, то найденный изоморфизм позволяет найти третью строку матрицы SGP (разница между двумя вершинами, соединенными пунктирной линией на рисунке 2 равна (01101), то есть равна третьей строке матрицы SGP ).
|
00011 |
|
01110 |
01101 |
10110 |
11000 |
10101 |
|
11011 |
|
00011 |
10101 |
10110 |
11011
00011
11011
10101
10110
01110
01110
10101
11000
0000
Рис. 2. Изоморфизм графов G(C(000), E0) и G(C(001), E1) (соответствие вершин показано пунктирной линией)
3.8. Модификация схемы Рао-Нама
Проблема схемы Рао-нама заключается в том, что разница двух шифртекстов, соответствующих одному открытому тексту, равна разнице векторов ошибок, умноженной на перестановочную матрицу (то есть эта разница не зависит от сообщения). Р. Стройк и Дж. ван Тилбург предложили в [3] следующую модификацию, лишенную такого недостатка. Пусть f : Fnq −k × Fkq → Fkq — отображение, которое при фиксации первого аргумента представляет собой обратимое отображение. Примером такого отоб-
34
3.9. LPN-проблема
ражения может быть
f(s, x) = x + h(s),
где h : Fnq −k → Fkq — произвольное, необязательно обратимое, отображение; f−1(s, y) = y − h(s). Если q = 2p, p N, то в качестве отображения h может быть, например, криптографическая хеш-функция, множество образов которой вложено в {0, 1}p·k.
Алгоритм генерации секретного ключа не отличается от соответствующего алгоритма схемы Рао-Нама. А правила шифрования и расшифрования соответственно примут вид:
y= Enc(k, x) = (f(zH, x)SG + z)P, z Z,
x = Dec(k, y) = f−1(yP −1HT , (yP −1 − T (yP −1HT ))G−1S−1)
=f−1(yP −1HT , ((xSG + z)P P −1 − T ((xSG + z)P P −1HT ))G−1S−1)
=f−1(yP −1HT , (xSG + z − T (zHT ))G−1S−1).
3.9. LPN-проблема
Стойкость системы Стройка-Тилбурга основана на том, что известные для криптосистемы Рао-Нама атаки не проходят. Стоит также отметить, что в системах Рао-Нама и Стройка-Тилбурга не используется возможность исправления ошибок кодом, что затрудняет сведение стойкости этих систем, например, к сложности декодирования случайного кода. Более надежными принято считать криптосистемы, стойкость которых можно свести к сложности решения некоторой известной трудной математической задачи.
В следующем разделе будет рассмотрена кодовая схема симметричного шифрования, стойкость которой основана на сложности решения проблемы, дословный перевод которой с английского звучит как проблема обучения четности с шумом (Learnin Parity with Noise). Далее для краткости будем называть эту проблему LPN-проблемой. Введем ее определение.
Пусть Berη — алгоритм, реализующий распределение Бернулли, при η (0, 12); e ← Berη — бит, значение которого получено в соответствии с этим распределением. Таким образом e = 1 с вероятностью η, и e = 0 с вероятностью 1 − η.
35
Глава 3. Схема симметричного шифрования
Пусть Πs,η — оракул, который возвращает пару (a, z) вида |
|
a ← F2k, z = a, s + e , |
(3.5) |
где e ← Berη. Другими словами, оракул Πs,η — это некоторый алгоритм, в котором «зашит» вектор s Fk2 (секрет). Каждый раз, когда происходит запрос к оракулу (вызов алгоритма), в этом алгоритме случайно и равновероятно выбирается вектор a Fk2, вычисляется скалярное произведениеa, s векторов a и s, после чего значение a, s «зашумляется» с помощью бита e, полученного в соответствии с распределением Berη. При обращении к оракулу вызывающей стороне значение секрета s и значение бита e неизвестны. Наряду с оракулом Πs,η далее также будет использоваться оракул Uk+1, который на каждый запрос возвращает вектор, случайно и равновероятно выбранный из Fk2+1.
LPN-проблемой называется проблема нахождения вектора s, когда имеется возможность только выполнять запросы (возможно, несколько раз) к оракулу Πs,η и получать в ответ пары вида (3.5).
Говорят, что алгоритм A(T, q, δ) решает LPN-проблему для заданного η, если его вычислительная сложность не превышает T , алгоритм выполняет не более q запросов к оракулу Πs,η, причем
Pr AΠs,η (T, q, δ) = s : s ← Fk2 δ.
Другими словами, алгоритм A(T, q, δ) за время T находит любой загаданный оракулом секрет s с вероятностью не менее δ, обращаясь не более q раз к оракулу (обращение к оракулу в формуле обозначено как AΠs,η (T, q, δ)).
Известно, что LPN-проблема является трудной: любой эффективный алгоритм решает эту проблему с пренебрежимой вероятностью. Наилучшим алгоритмом решения LPN-проблемы считается алгоритм Блюма - Калаи - Вассермана [4] (кратко BKW-алгоритм по первым буквам фамилий авторов: Blum, Kalai, Wasserman) и его модификации. Все эти алгоритмы требуют порядка 2Θ(k/ log k) запросов к оракулу и такое же число операций.
LPN-проблему можно переписать в матричной форме. Пусть алгоритм решения LPN-проблемы делает n запросов к оракулу,
(a1, z1 = a1, s + e1), ..., (an, zn = an, s + en)
36
3.10. Пример
— набор ответов, полученных от оракула. Введем обозначения:
G = [aT1 |...|aTn ], e = (e1, ..., en), z = (z1, ..., zn).
Следовательно, имеет место равенство:
sG + e = z.
Тогда задача нахождения s эквивалентна задаче декодирования случайного линейного [n, k]2-кода с порождающей матрицей G, когда кодовое слово принято из канала, в котором биты искажаются с вероятностью η.
Утверждение 1. Если существует алгоритм M, который за q запросов к оракулу Or {Πs,η, Uk+1}, и время T может отличить с вероятностью не менее δ, какой это оракул: Uk+1 или Πs,η, — то существует алгоритм A, который за q′ = O(qδ−2 log k) запросов и время T ′ = O(T kδ−2 log k) с вероятностью не менее δ/4 решает LPN-проблему.
3.10. Пример
LPN-проблема естественным образом возникает в протоколе аутентификации Хоппера-Блюма [5]. Пусть участник V (проверяющая сторона) намерен проверить, что другой участник P (доказывающая сторона) знает секрет s Fk2, причем участнику V этот секрет также известен. Кроме того, требуется, чтобы протокол проверки был вычислительно простым. Например, в качестве P может выступать RFID-метка (Radio Frequency IDentification, метка радиочастотной идентификации) с ограниченными вычислительными возможностями, а проверяющей стороной V в этом случае будет считыватель метки. Проверка выполняется за n раундов. Один раунд состоит из следующих шагов: 1) V отправляет P случайный вектор a; 2) P вычисляет z = a, s + e, где e ← Berη и отправляет его V ; 3) V проверяет равенство z = a, s . Если за n раундов это равенство выполнилось не менее, чем пороговое значение T , то аутентификация пройдена успешно. Порог T на минимальное число успешных проверок обычно находится в пределах (1 − η)n (среднее число значений z, для которых e = 0).
Пассивному наблюдателю для нахождения секрета s необходимо решить LPN-проблему с оракулом Πs,η. Например, при k = 128 и η = 1/4
37
Глава 3. Схема симметричного шифрования
аутентификация выполняется за n = 1143 раундов.
3.11. Схема шифрования LPN-C
Симметричная криптосистема на основе LPN-проблемы (система LPN- C) предложена в [6]. Пусть C — [n, r, d]2-код, для которого известен эффективный алгоритм декодирования, G — его общеизвестная порождающая матрица. Ключевое множество K в рассматриваемой схеме шифрования — это множество (k × n)-матриц. Пусть M K — секретная (k × n)-матрица. При шифровании открытого текста x X = Fr2 случайно и равновероятно выбирается вектор a Fk2 и вычисляется шифртекст y = (a, z), где
z = xG + aM + e, e = (e1, ..., en), ei ← Berη, i = 1, ..., n. |
(3.6) |
Для расшифрования выполняется декодирование вектора z−aM = xG+e. Отметим, что декодирование может завершиться ошибкой , так как вектор e может иметь вес Хэмминга, превышающий корректирующую способность эффективного алгоритма декодирования кода C. Если для декодирования используется алгоритм, исправляющий ошибки веса не более t = (d −1)/2 , то вероятность ошибочного декодирования (DFR, Decoding Failure Rate) равна
n |
i ηi(1 − η)n−i. |
DFR = i=t+1 |
|
X |
n |
|
При шифровании может выполняться проверка веса вектора e. Это усложняет алгоритм шифрования, но позволяет нивелировать ошибки расшифрования. Обычно параметры криптосистемы выбирают так, чтобы nη < t, что позволяет пренебречь вероятностью DFR.
3.12. Стойкость LPN-C
OW-стойкость криптосистемы LPN-C основана на том, что атакующему для дешифрования приходится решать задачу декодирования линейного кода C, когда вес ошибки aM + e, как правило, существенно больше исправляющей способности кода.
38
3.12. Стойкость LPN-C
Шифр LPN-C также является и IND-CPA-стойким. Приведем соответствующее обоснование. Предположим, что существует алгоритм A, который за время T и q запросов к шифратору системы LPN-C с вероятностью не менее 1/2 + δ отличает, какому из двух открытых текстов (x0 или x1) соответствует данный шифртекст y.
Идея доказательства состоит в том, что если такой алгоритм A существует, то можно построить алгоритм-различитель M, который будет отличать оракул Πs,η от Uk+1 с вероятностью не менее 1/2+δ/n. Тогда, согласно утверждению 1, существует алгоритм, который решает LPN-проблему. Если параметры криптосистемы LPN-C выбраны так, что LPN-проблема не может быть решена с вероятностью успеха более заданного значения, то придем к противоречию, то есть A не существует. Отметим, что параметры криптосистемы обычно выбираются так, чтобы вероятность успешного решения LPN-проблемы была не более 2−λ, где λ N — требуемый уровень стойкости криптосистемы (например, λ {80, 128, 192, 256, ...}).
Итак, предположим, что A существует. Построим на его основе различитель M, который, имея возможность отправлять запросы к неизвестному ему оракулу Or {Πs,η, Uk+1}, может «понять» какой именно это оракул.
Введем ряд обозначений. Для j {0, ..., n} и (k × (n − j))-матрицы M′ определим случайный вектор
Vj,M′ = (a, bj), bj = (rj, aM′ + ej),
где a и rj выбираются случайно и равновероятно соответственно из Fk2 и Fj2, а биты вектора ej Fn2−j выбираются в соответствии с распределением Berη. Для этих же j определим шифрующий оракул Ej,M′,η, секретным ключом которого является (k × (n − j))-матрица M′. Когда этому оракулу поступает запрос x Fr2 (открытый текст), он возвращает шифртекст вида
(0k, xG) + Vj,M′ = (a, xG + bj).
Заметим, что шифртекст y системы LPN-C может быть представлен в виде (см. правило (3.6)):
y= (0k, xG) + V0,M = (0k, xG) + (a, b0),
аVn,M′ — это вектор с равновероятным распределением на Fk2+n.
39
Глава 3. Схема симметричного шифрования
Различитель M перед началом взаимодействия с Or случайно и равновероятно выбирает j [n], и в случае j < n генерирует случайно и равновероятно (k ×(n−j))-матрицу M′. После этого M обращается к алгоритму A, а именно к алгоритму A1. То есть M выступает в роли шифрующей стороны для A1. Один раунд взаимодействия M и A1 состоит в следующем. Когда A1 обращается к M с просьбой зашифровать некоторый открытый текст x Fr2, алгоритм M обращается к Or, который возвращает вектор (a, z). Получив (a, z) от Or, алгоритм M выбирает случайно и равновероятно вектор rj−1 длины j − 1 и возвращает алгоритму A1 шифртекст (a, xG + bj), где bj = (rj−1, z, aM′ + ej). На этом раунд завершается.
По условию, алгоритм A1 может сделать q запросов, поэтому таких раундов будет q. После этого алгоритм A1 возвращает алгоритму M пару (x0, x1). M случайно и равновероятно выбирает из пары один вектор xb, b {0, 1}, и шифрует как в предыдущих раундах: 1) обращается к Or; 2) получает (a′, z′); 3) вычисляет шифртекст y′ = (a′, xG + b′j), где b′j = (rj−1, z, aM′ + e′j).
После этого M передает y′ алгоритму A2, который в ответ возвращает b′ {0, 1}. Если b = b′, то M возвращает 1, иначе — 0.
Заметим, что если Or = Uk+1, то возвращаемая от Or пара (a, z) будет такой, что a и z случайно и равновероятно выбраны соответственно из Fk2 и F2; если же Or = Πs,η, то a выбран случайно и равновероятно из Fk2, а
z = a, s + e, где e ← Berη. Поэтому, в случае, когда Or = Uk+1, алгоритм M симулирует шифрующий оракул Ej,M′,η, а в случае Or = Πs,η, когда
секрет s выбирается случайно и равновероятно, алгоритм M симулирует шифрующий оракул Ej−1,M′′,η, где M′′ = [sT |M′].
Поэтому при Or = Πs,η вероятность того, что M вернет 1, равна
1 |
n |
|
|
|
Xj |
P1 = |
n |
P [A, Ej−1,M′′,η], |
|
|
=1 |
где P [A, Ej−1,M′′,η] — вероятность того, что A успешно распознает номер зашифрованного сообщения, когда шифрующим оракулом выступает Ej−1,M′′,η.
40
