Глава_6._Криптографические_протоколы.md 25 KB

6.1. Понятие криптографического протокола Протокол — это последовательность шагов, которые предпринимают две или большее количество сторон для совместного решения некоторой задачи. Все шаги предпринимаются в порядке строгой очередности и ни один из них не может быть сделан прежде, чем закончится предыдущий. Криптографические протоколы используются для выполнения некоторых действий по обмену информацией в ситуации, когда цели участников могут быть нарушены злоумышленником (например, под угрозой оказывается конфиденциальность, целостность или подтверждаемость сообщений). Шаги криптографического протокола позволяют осуществить информационный обмен таким образом, что цели участников оказываются выполненными, а цели злоумышленника — нет. Приведенная в предыдущем разделе последовательность шагов по созданию и проверке электронной цифровой подписи может служить примером протокола, в котором целью участников являются гарантия подлинности сообщения, а целью злоумышленника — его фальсификация. Криптографические протоколы широко используют шифрование, хэширование, односторонние функции, генерацию случайных чисел. 6.2. Протоколы аутентификации Аутентификация пользователей — процесс, с помощью которого одна сторона (проверяющий) убеждается в идентичности другой стороны.
Протоколы аутентификации должны обеспечивать защиту от потенциального злоумышленника, цель которого — выдать себя за другого пользователя. В частности, протокол аутентификации не должен позволить проверяющему получить такую информацию о стороне, доказывающей свою подлинность (аутентичность), которая впоследствии помогла бы ей выдать себя за нее. Все протоколы аутентификации можно разбить на три класса: 1.На основе знания чего-либо. Наиболее распространенный вариант — пароли. 2.На основе обладания чем-либо (магнитные карты, смарт-карты и т.д.) 3.На основе неотъемлемых характеристик (голос, сетчатка глаза, отпечатки пальцев). В данной категории криптографические методы обычно не используются. Также протоколы аутентификации классифицируются по уровню обеспечиваемой безопасности: 1.Простая аутентификация (на основе паролей). Самый простой вариант такой аутентификации — когда система хранит пароли в открытом виде в специальном файле и сравнивает с ними пароль, вводимый пользователем при входе в систему. С точки зрения безопасности такой подход очень уязвим: файл с паролями может быть похищен злоумышленником. Поэтому гораздо надежнее, когда в специальном файле хранятся только хэши паролей. Когда пользователь вводит пароль, вычисляется его хэш с сравнивается. Если злоумышленник похитит файл, содержащихся в нем хэшей будет недостаточно, чтобы восстановить пароли. 2.Строгая аутентификация (на основе криптографических методов). Чаще всего заключается в том, что пользователь идентифицируется по признаку владения некоторым закрытым ключом, но сам ключ в ходе протокола не раскрывается. 3.Протоколы доказательства с нулевым разглашением. Рассмотрим примеры протоколов: Строгая односторонняя аутентификация на основе случайных чисел. Обе стороны разделяют ( им известен) общий ключ K и выбрали симметричный алгоритм шифрования.
1.Сторона B (проверяющий) генерирует случайное число r и отправляет его стороне A. 2.Сторона A составляет сообщение, включающее полученное число r и свое имя, шифрует его ключом K и отправляет стороне B. 3.Сторона B расшифровывает сообщение и убеждается в том, что имя A и число r совпадает.
Если злоумышленник перехватывает отправляемые по сети сообщения, он не сможет воспользоваться ими, чтобы выдать себя за A или B, поскольку ключ K в явном виде не передается, а каждый сеанс аутентификации использует новое случайное число. Строгая двусторонняя аутентификация на основе случайных чисел. Двусторонность означает, что во время сеанса аутентификации обе стороны убеждаются в подлинности друг друга. Обмен сообщениями происходит по следующей схеме: B → A: случайное число r1. A → B: сообщение, содержащее r1, имя B и случайное число r2, зашифрованное ключом K. B → A: сообщение, содержащее r1 и r2, зашифрованное ключом K. Аутентификация на основе асимметричного алгоритма.
1.Сторона B (проверяющий) выбирает случайное чиcло r и отправляет стороне B набор значений: H(r), B, PА(r, B). Здесь H — некоторая хэш-функция, а PA — алгоритм асимметричного шифрования (шифрование осуществляется посредством открытого ключа A). 2.Сторона A расшифровывает PА(r, B), убеждается, что хэш r совпадает с полученным значением H(r) и отправляет стороне B число r.
3.Сторона B проверяет полученное значение и, если оно совпадает с r, убеждается в подлинности A (т.е. в том, что сторона A знает закрытый ключ). 6.3. Протоколы обмена ключами Протокол обмена ключами — это такой протокол, с помощью которого знание некоторого секретного ключа (который может впоследствии использоваться для шифрования с помощью симметричного алгоритма) разделяется между двумя или более сторонами, причем противник, имеющий возможность перехватывать пересылаемые сообщения, не способен этот ключ получить. Различают три вида протоколов обмена ключами: протоколы передачи (уже сгенерированных) ключей, протоколы совместной выработки общего ключа и схемы предварительного распределения ключей.
Схема предварительного распределения ключей состоит из двух алгоритмов: распределения исходной ключевой информации и формирования ключа. С помощью первого алгоритма генерируется открытая часть исходной ключевой информации, которая размещается на общедоступном сервере и секретные части (для каждой стороны). Второй предназначен для вычисления действующего ключа для взаимодействия между абонентами по имеющимся у них секретной и общей открытой части исходной ключевой информации. Применяется для уменьшения объема хранимой и распределяемой секретной ключевой информации. Схема предварительного распределения ключей должна быть устойчивой, то есть учитывать возможность раскрытия части ключей при компрометации (утечке), обмане или сговоре части абонентов и гибкой — допускать возможность быстрого восстановления путем удаления скомпрометированных ключей и подключения новых абонентов . Один из самых известных протоколов обмена ключами — алгоритм ДиффиХеллмана. Он является весьма надежным для обмена ключами по каналу, исключающему возможность модификации (т.е. злоумышленник имеет возможность перехватывать данные, но не изменять их). Стойкость алгоритма проистекает из сложности дискретного логарифмирования: не существует эффективного алгоритма решения уравнения ax mod n = b (для простого n такое x < n существует и единственно). 1.Участники обмена ключами выбирают два больших числа v и n (эти числа могут быть определены заранее и даже быть фиксированными, например, «зашитыми» в программное обеспечение).
2.Каждый участник генерирует случайное простое число (x и у соответственно). 3.Первый участник вычисляет значение vx mod n и пересылает его второму, а второй вычисляет vy mod n и передает первому.
4.Первый участник возводит полученное значение в степень x по модулю n, а второй участник — в степень y по модулю n. В результате оба участника получают одно и то же число vxy mod n. Оно и берется в качестве секретного ключа. Нетрудно заметить, что, располагая значениями v, n, vx mod n и vy mod n, но не зная x и y, злоумышленник не может вычислить ключ vxy mod n. 6.4. Специфические протоколы Протоколы аутентификации и протоколы обмена ключами — наиболее многочисленные классы криптографиечских протоколов. Однако существует ряд протоколов, предназначенных для решения других специфических задач, в частности: Протоколы голосования. Предназначены для обеспечения проведения выборов, в ходе которых каждый участник может анонимно подать свой голос. При этом ни один участник не может проголосовать дважды; голосовать могут только зарегистрированные участники; каждый участник может проверить, правильно ли учтен его голос.
Протокол безопасного голосования основывается на использовании двух доверенных сторон — агентства по проверке голосующего T1 и агентства для подведения итогов голосования T2. Перед проведением голосования T1 должно отослать T2 список всех разрешенных идентификаторов участников голосования. Каждый голосующий (i) посылает T1 некоторую идентифицирующую его информацию, после чего, если голосующему разрешено голосовать, то T1 отправляет ему значение E1(i) — идентификатор голосующего и фиксирует факт участия в выборах. Далее голосующий вычисляет секретный идентификатор E2(i) и результат голосования E3(i) и посылает T2 набор (E1(i), E2(i), E3(i)). T2 проверяет, существует ли E1(i) в списке разрешенных идентификаторов голосующих; если существует, то добавляет E2(i) к списку голосующих за E3(i). Преобразования E1, E2, и E3 основаны на асимметричных алгоритмах или необратимых функциях . Протоколы одновременной подписи. Цель участников: подписать некоторый документ таким образом, чтобы каждая сторона имела гарантию, что если она поставит свою подпись, это сделает и другая сторона. При этом участники могут быть удалены друг отдруга и подписывать документ при помощи ЭЦП. Протоколы групповой подписи. Только члены группы могут подписывать сообщение, при этом получатель подписи может убедиться, что сообщение подписано членом группы, но не может определить — каким именно. Тем не менее, при споре подпись может быть раскрыта для определения личности подписавшего.
Самый простой протокол групповой подписи — с использованием доверенного арбитра. Арбитр генерирует большое количество пар открытых и закрытых ключей и раздает их членам группы (по m ключей каждому из n членов). Список открытых ключей публикуется. Чтобы подписать сообщение, член группы выбирает любой из своих закрытых ключей. Чтобы убедиться, что сообщение подписано одним из членов группы, достаточно проверить, что открытый ключ, с помощью которого проверяется ЭЦП, входит в набор открытых ключей группы. Наконец, проверка личности подписавшего определяется посредством обращения к арбитру. Единственная слабость этого протокола — сам арбитр, который может подделывать подписи всех участников. Неоспариваемая подпись. Отличается от обычной цифровой подписи тем, что для ее проверки необходимо разрешение подписавшего. Слепая подпись. Обладает свойствами электронной цифровой подписи, но при этом подписывающий не может ознакомиться с содержанием документа (пример: заверение завещания у нотариуса). Протоколы разделения секрета. Позволяют разделить сообщение на несколько частей между членами группы таким образом, что каждый член группы не сможет извлечь никакой информации из своей части и только собравшись вместе участники группы смогут прочитать сообщение.
Наиболее распространенный протокол разделения секрета требует участия арбитра, который генерирует множество бессмысленных сообщений, которые дают исходное, будучи сложенными вместе операцией XOR. Например, чтобы разделить сообщение между двумя участниками арбитр генерирует случайное число R той же длины, что и исходное сообщение M, а затем вычисляет R ⊕ M = S. Части R и S раздаются участникам. Чтобы получить исходное сообщение, выполняется операция R ⊕ S = M. 6.5. Генерация случайных чисел Большое значение для криптографии имеет генерация истинно случайных (непредсказуемых) чисел. Случайные числа используются при генерации сеасовых ключей (а также открытых и закрытых ключей асимметричных алгоритмов), во многих криптографических протоколах. Многие приложения имеют уязвимости связанные именно с предсказуемостью генерируемых паролей, сеансовых ключей и т.д. Проблема заключается в том, что программное приложение не может генерировать абсолютно случайные числа в силу свойства детерминированности алгоритма. Поэтому для целей криптографии используются генераторы псевдослучайных чисел. Генератор псевдослучайных чисел (ГПСЧ) — алгоритм, генерирующий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному). Криптографически стойкие генераторы псевдослучайных чисел должны обладать следующими свойствами: — Существенно большой период генератора (последовательность, выдаваемая ГПСЧ, является периодической). — Последовательно выдаваемые элементы последовательности независимы друг от друга. — Все элементы генерируемой последовательности являются одинаково «случайными» (т.е. можно говорить о равномерном распределении). — Непредсказуемость. Зная алгоритм генератора и все предыдущие элементы последовательности (но не зная секретного ключа, инициализирующего генератор) противник не может вычислить следующий элемент (если не пройден период ГПСЧ). Рассмотрим примеры ГПСЧ: 1.Линейный конгруэнтный генератор. Выбираются три константы m > 0 (модуль), a (множитель) и c (приращение), такие что 0 ≤ a < m, 0 ≤ c < m. Выбирается начальное значение x0. Значения элементов последовательности вычисляются по формуле: xn+1 = (axn + c) mod m При этом число m должно быть очень большим, для a предпочтительный диапазон 0.01 ≤ a < 0.99m, а с не должно иметь общего множителя с m. Генератор следует использовать для получения не более, чем m/1000 элементов последовательности, далее их случайность уменьшается. 2.Смешанный квадратичный генератор. Применяется для генерации битовой последовательности b1, b2, ... по следующим соотношениям: xn+1 = xn2 mod m, bn = xn⋅z mod 2, где произведение x⋅z — скалярное произведение чисел x и z, представленных в дво- ичной форме, т.е. x z= xr xr−1... x0 zr zr−1... z0= xr zr xr−1zr−1 x0z0 . Кроме того m должно представлять собой произведение двух больших простых чисел вида 4k + 3, а x0 взаимно просто с m. В мощных криптосистемах военного применения используются действительно случайные генераторы чисел, основанные на физических процессах. Они представляют собой платы, либо внешние устройства, подключаемые к ЭВМ через порт ввода-вывода. Два основных источника белого Гауссовского шума – высокоточное измерение тепловых флуктуаций и запись радиоэфира на частоте, свободной от радиовещания.