Криптографический протокол
Криптографический протокол (Шаблон:Lang-en) — это абстрактный или конкретный протокол, включающий набор криптографических алгоритмов, часто являющихся последовательностью криптографических примитивов. В основе протокола лежит набор правил, регламентирующих использование криптографических преобразований и алгоритмов в информационных процессах для обмена сообщениями между двумя и более участниками, а также описание используемых структурШаблон:Переход.
В протоколе участниками (субъектом, стороной) могут быть приложения, люди, их группы или, например, организации. Другими словами — всё, по каким-либо причинам способное иметь активную или пассивную роль в работе протокола. Так, в частности, большинство протоколов разрабатывается с учётом наличия пассивного слушателя, способного перехватывать сообщенияШаблон:Переход.
Появление самых простых протоколов датируется концом 1970-х, началом 1980-х годов[1]. Вклад в их появление внесли такие специалисты, как Рональд Ривест, Ади Шамир[2], Роджер Нидхем, Майкл Шрёдер[3] и многие другие. Брюс Шнайер приводит описание известных протоколов в своей книге «Прикладная Криптография»[4].
Функции
Криптографический протокол имеет следующие функции[5]:
- Формирование ключей
- Обмен ключами
- Аутентификация сторон
- Доказательство целостности и происхождения данных (ЭЦП)
- Разделение ключей
- Безопасные распределённые вычисления
- Обеспечение конфиденциальности данных
- Обеспечение невозможности отказа
- Обеспечение целостности данных
- Обеспечение целостности соединения
- Разграничение доступа
Состав
Протокол делится на проходы (Шаблон:Lang-en) или циклы (Шаблон:Lang-en), являющиеся интервалом времени активности только одного участника. В протоколах, рассчитанных на количество участников большее двух, при необходимости их синхронизации циклом называют период времени между двумя точками синхронизации[6].
Проход, в свою очередь, состоит из шагов (Шаблон:Lang-en) — конкретных законченных действий, выполняемых участником[6].
Например:
- генерация случайного значения
- вычисление значений функции
- проверка сертификатов, ключей, подписей, и др.
- приём и отправка сообщений
Реализация протокола или даже теоретическое её описание для конкретных участников, каждый из которых имеет одну или несколько ролей, называется сеансом (Шаблон:Lang-en). В другом сеансе протокола участники могут поменяться ролями и выполнять уже совсем другие функции[6].
Таким образом, протокол описывает правила поведения каждой абстрактного участника в протоколе. А сеанс описывает уже состоявшейся в прошлом конкретную реализацию протокола[6].
Условные обозначения
При записи криптографических протоколов для обозначения участников принято использовать либо термины «отправитель», «получатель», пр., либо экземплификанты. Соответствие между ними следующее[6]:
- Алиса, Боб (от Шаблон:Lang-en) — отправитель сообщения и его получатель.
- Карл, Клара, Чарли (от Шаблон:Lang-en) — равноправная Алисе и Бобу третья сторона в случае её наличия.
- Ева (от Шаблон:Lang-en) — пассивный криптоаналитик.
- Меллори (от Шаблон:Lang-en) — активный криптоаналитик.
- Трент (от Шаблон:Lang-en) — доверенная сторона. Например, — удостоверяющий центр в протоколах проверки подписей.
Для записи примитивов принято использовать следующие обозначения[6]:
- (от Шаблон:Lang-en) — сообщение в исходном виде, открытая информация в том виде, в котором её способен прочесть любой участник протокола. То есть, под может пониматься и исходный текст в прямом понимании или, например, массив бит, звук и так далее.
- (от Шаблон:Lang-en) — ключ. Без дополнительных уточнений обычно обозначает секретный сеансовый ключ.
- — общий между Алисой и Трентом секретный ключ (в случае симметричных криптосистем).
- — открытый ключ Алисы (в случае асимметричных криптосистем).
- (от Шаблон:Lang-en) — время жизни примитивов. К примеру, ключа или сертификата.
- (от Шаблон:Lang-en) — данные, зашифрованные на ключе .
- , — данные, зашифрованные на ключах Алисы и Боба соответственно.
- (от Шаблон:Lang-en) — данные и соответствующая цифровая подпись на открытом ключе .
- , (от Шаблон:Lang-en) — метки времени от соответствующих участников. Часто используется в паре с
- , (от Шаблон:Lang-en) — случайные числа, выбранные Алисой и Бобом соответственно.
Примеры использования обозначений[6]:
- или просто — сообщение , зашифрованное ключом Боба .
- — случайное число , сгенерированное Алисой и ей же подписанное. То есть в сообщении будет и случайное число (открытым текстом), и электронная подпись этого числа.
- — идентификатор и ключ Алисы, метка времени и срок жизни данной записи, всё вместе подписанное открытым ключом доверенного центра (Трента). То есть фактически сертификат ключа Алисы.
Классификация
Глобально протоколы можно разделить на две группы: примитивные и прикладные[7].
Примитивный криптографический протокол (Шаблон:Lang-en) сам по себе не имеет практической пользы, однако может быть частью прикладного протокола. Решает одну абстрактную задачу[7].
Прикладной криптографический протокол (Шаблон:Lang-en) имеет практическое применение, используется для решения практических задач безопасности. Данные протоколы обычно реализуют сразу несколько криптографических функций. А порой и вовсе являются целым семейством протоколов, способных менять параметры системы по необходимости. Например, система электронных платежей[7].
Однако существуют и более точные классификации[5]:
- Классификация по числу участников:
- двусторонний
- трёхсторонний
- многосторонний
- Классификация по числу передаваемых сообщений:
- интерактивный (есть взаимный обмен сообщениями)
- неинтерактивный (однократная передача)
- Классификация по целевому назначению протокола:
- обеспечение целостности сообщений с аутентификацией источника / без аутентификации источника
- индивидуальная / групповая
- с восстановлением / без восстановления сообщения
- вслепую
- с доказуемостью подделки
- односторонняя / двусторонняя (взаимная) аутентификация / идентификация
- обычная конфиденциальная передача
- конфиденциальная широковещательная / циркулярная передача сообщений
- честный обмен секретами
- забывающая передача
- привязка к биту (строке)
- предварительное
- передача ключа (обмена ключами)
- совместная выработка ключа (открытое распределение ключей)
- парное / групповое
- разделение секрета
- Классификация по типу используемых криптографических систем:
- на основе симметричных криптосистем
- на основе асимметричных криптосистем
- смешанные
- Классификация по способу функционирования:
- интерактивный / неинтерактивный
- однопроходный / двух- / трёх- и т. д. проходный
- протокол с арбитром (протокол с посредником)
- двусторонний / с доверенной третьей стороной (с центром доверия)
Атаки
Бывают следующих направленностей[8]:
- против криптографических алгоритмов
- против криптографических методов, применяемых для реализации протоколов
- против самих протоколов (активные или пассивные)
Виды атак на криптографические протоколы
- Человек посередине (Шаблон:Lang-en) — вид атак, в которых злоумышленник встраивается в канал общения между участниками, внося изменения в передаваемые сообщения или перенаправляя их. Для неё уязвимы протоколы, в которых отсутствует взаимная аутентификация сторон[6].
- Повтором сообщения (Шаблон:Lang-en) — повторное использование ранее переданного сообщения или какой-либо его части в текущем сеансе протокола. Например, сначала записав сообщение, содержащее ключ в зашифрованном виде, можно потратить произвольное количество времени на его расшифровку, а далее заставить участников использовать его повторно[5].
- Подмены типа (Шаблон:Lang-en) — похожа на атаку повтором с той лишь разницей, что сообщение передаётся на другом раунде протокола, тем самым изменяется его значение в протоколе[6].
- Атака с параллельными сеансами (Шаблон:Lang-en) — атака, в ходе которой злоумышленник инициирует несколько параллельных сеансов с участниками и предаёт сообщения из одного сеанса в другой[6].
Устаревший протокол
Устаревший протокол для криптовалюты - это протокол, который был использован в прошлом для функционирования криптовалютной сети, но в настоящее время не рекомендуется или не поддерживается разработчиками из-за различных причин.
Причины, по которым протокол может стать устаревшим, могут включать в себя:
- Уязвимости безопасности: Обнаружение уязвимостей в протоколе, которые могут быть использованы злоумышленниками для атаки на сеть.
- Неэффективность: Протокол может стать неэффективным или медленным в обработке транзакций при увеличении нагрузки на сеть.
- Отсутствие поддержки или развития: Если разработчики перестают поддерживать или развивать протокол, это может привести к его устареванию.
Когда протокол становится устаревшим, разработчики могут предпринимать различные действия, такие как выпуск обновлений для устранения уязвимостей или переход на новый протокол с улучшенными функциями и безопасностью. В некоторых случаях сообщество криптовалюты может принять решение о хардфорке (жёстком разделении сети) для обновления протокола и реализации необходимых изменений.
Обновления протокола
Чтобы возобновить устаревший протокол криптовалюты, часто требуется обратиться к майнингу для создания дополнительного обновлённого протокола. Майнеры играют ключевую роль в обеспечении безопасности и надёжности сети криптовалюты, поэтому их поддержка и участие в процессе обновления протокола крайне важны.
Для этого могут быть предприняты следующие шаги:
- Согласование изменений: Разработчики протокола могут предложить обновленную версию протокола, включающую исправление уязвимостей или улучшение функциональности. Эти изменения должны быть обсуждены и согласованы с сообществом и майнерами.
- Майнинг обновлений: Майнеры могут выбрать, принять или отклонить предложенные изменения протокола путем голосования или других механизмов принятия решений, таких как форки или апгрейды.
- Развертывание обновлений: После согласования изменений и их принятия майнерами, разработчики могут развернуть обновленную версию протокола, которая будет принята всеми участниками сети.
Процесс обновления протокола может быть сложным и требует согласованных усилий со стороны разработчиков, майнеров и других участников сети. Однако это необходимо для обеспечения безопасности и эффективности функционирования криптовалютной сети.
Свойства безопасности
Свойств, характеризующих безопасность криптографического протокола, достаточно много. Обычно свойства протоколов, характеризующие их стойкость к различным атакам, формулируют как цели (Шаблон:Lang-en) или требования к протоколам. Трактовка этих целей со временем меняется и уточняется. Наиболее полное и современное толкование этих целей даётся в документах международной организации IETF. Под свойствами (целями, требованиями) безопасности в документах IETF в настоящее время понимаются следующие 20 целей, сгруппированные в 10 групп[9]:
- Аутентификация (нешироковещательная):
- G1 Аутентификация субъекта
- (Шаблон:Lang-en) Проверка подлинности участников протокола наличия, их полномочий, а также того, что они действительно принимают участие в выполнении текущего сеанса протокола.
- G2 Аутентификация сообщения
- (Шаблон:Lang-en) Проверка подлинности источника данных. Поскольку без гарантии того, что сообщение не было модифицировано, данное свойство становится бесполезным, возникает также требование целостности сообщения.
- G3 Защита от повтора
- (Шаблон:Lang-en) Гарантирование того, что сообщение не является повторно отправленным. В зависимости от контекста, это может иметь либо смысл того, что сообщение было сгенерировано в данном сеансе, либо что сообщение было сгенерировано в течение известного промежутка времени. либо что сообщение не было принято ранее.
- G1 Аутентификация субъекта
- Аутентификация при рассылке по многим адресам или при подключении к службе подписки/уведомления:
- G4 Неявная (скрытая) аутентификация получателя
- (Шаблон:Lang-en) Протокол должен гарантировать, что к отправленной информации, многоадресному сообщению или групповому общению будут иметь доступ только те участники, которым разрешил отправитель.
- G5 Аутентификация источника
- (Шаблон:Lang-en) Легитимные члены группы могут проверить подлинность источника и содержимого информации или группового сообщения. Сюда относятся случаи, когда члены группы не доверяют друг другу.
- G4 Неявная (скрытая) аутентификация получателя
- G6 Авторизация (доверенной третьей стороной)
- (Шаблон:Lang-en) Доверенная третья сторона представляет одного участника другому участнику, давая уверенность в том, что они могут доверять друг другу.
- Свойства совместной генерации ключа:
- G7 Аутентификация ключа
- (Шаблон:Lang-en) Один из участников получает подтверждение того, что никакой другой участник, кроме заранее определённого второго участника (и, возможно, других доверенных участников), не может получить доступа ни к одному секретному ключу.
- G8 Подтверждение правильности ключа
- (Шаблон:Lang-en) Один из участников получает подтверждение того, что второй участник (возможно, неопределённый) действительно обладает конкретным секретным ключом (либо имеет доступ ко всем ключевым материалам, необходимым для его вычисления).
- G9 Защищённость от чтения назад
- (Шаблон:Lang-en) Компрометация долговременных ключей не приводит к компрометации старых сеансовых ключей.
- G10 Формирование новых ключей
- (Шаблон:Lang-en) Использование динамического управления ключами для получения свежих сеансовых ключей.
- G11 Защищённая возможность договориться о параметрах безопасности
- (Шаблон:Lang-en) Обнаружение криптографических возможностей и предпочтений участников, а также согласовывание параметров безопасности (как, например, стойкость ключей и шифры).
- G7 Аутентификация ключа
- G12 Конфиденциальность
- (Шаблон:Lang-en) Гарантия, что сообщение или его часть не станут доступными или раскрытыми для неавторизованных участников и злоумышленника.
- Анонимность:
- G13 Защита личности от неучастников (несвязываемость)
- (Шаблон:Lang-en) Злоумышленник, не являющийся правомерным участником протокола, не должен иметь возможности связать сообщение, которым обменивается одна сторона, с реальной личностью этой стороны.
- G14 Защита личности от участников
- (Шаблон:Lang-en) Правомерный участник протокола не должен иметь возможности связать сообщение, переданное одной стороной, с реальной личностью этой стороны.
- G13 Защита личности от неучастников (несвязываемость)
- G15 (Ограниченная) защищённость от атак типа «отказ в обслуживании»
- (Шаблон:Lang-en) Устойчивость к DoS. Трудно проверить, так как протокол может быть подвержен DoS-атакам по разным причинам, наиболее распространённой из которых является потребление слишком большого количества ресурсов (памяти, вычислительной мощности), прежде чем участник аутентифицирует себя. Но существует множество других причин: среди прочего, протоколы могут быть уязвимы для атаки DoS на распределение памяти, вычислительную мощность.
- G16 Инвариантность отправителя
- (Шаблон:Lang-en) Сторона получает уверенность в том, что источник сообщения остался тем же, что и тот, кто начал сообщение.
- Невозможность отказа от ранее совершённых действий:
- G17 Подотчётность
- (Шаблон:Lang-en) Гарантия, что действия участника могут быть однозначно отслежены.
- G18 Доказательство источника
- (Шаблон:Lang-en) Неоспоримое доказательство отправки сообщения.
- G19 Доказательство получателя
- (Шаблон:Lang-en) Неоспоримое доказательство получения сообщения.
- G17 Подотчётность
- G20 Безопасное временное свойство
- (Шаблон:Lang-en) Возможность использовать оператор когда-то в прошлом для описания отношений между раундами протокола. Например, если пользователь хочет слушать музыку на сервисе, когда-то в прошлом он должен был оплатить подписку.