Управление ключами симметричных криптосистем

From CryptoWiki
Jump to: navigation, search

Управление ключами криптографических систем – одна из самых сложных задач прикладной и теоретической криптографии.

Contents

Управление ключевым материалом в системах криптографической защиты информации

Для защиты информации от несанкционированного доступа применяется целый комплекс различных мер, направленных на сокрытие защищаемой информации от злоумышленника. Один из таких способов – применение методов криптографической защиты информации. Для этого применяются специальные алгоритмы преобразования исходной информации, называемой также открытым текстом, в формат, недоступный для злоумышленника. Результат такого преобразования называется зашифрованным текстом, или кратко – шифртекстом.

Алгоритмы такого преобразования информации – криптографическими алгоритмами. Процесс преобразования открытого текста в зашифрованный называется зашифрованием информации. Процесс, обратный зашифрованию, называется расшифрованием, если его выполняет легитимный пользователь, для которого предназначено зашифрованное сообщение. Если этот процесс воплощается в жизнь злоумышленником – он называется дешифрованием информации.

На сегодняшний день все без исключения криптографические системы предполагают, что алгоритм преобразования информации, применяемый в конкретной криптосистеме, известен всем, в том числе и злоумышленнику. Помимо самого алгоритма преобразования информации криптосистема предусматривает наличие некоего секрета, который известен только отправителю и получателю сообщения и никому, кроме них. Без знания этого секрета невозможно за разумное время восстановить открытый текст по зашифрованному. Применительно к криптографическим системам такой секрет называется ключом шифрования.

Одним из самых главных качеств криптографической системы является её надежность или стойкость. Под надежностью понимается возможность быть уверенным, что при использовании конкретной криптосистемы злоумышленник будет неспособен прочитать передаваемое сообщение за разумное время.

Как правило, современные криптографические алгоритмы, используемые на практике для зашифрования информации, являются достаточно стойкими, т.е. устойчивыми к большинству известных атак на криптографические алгоритмы. Проведение атаки считается успешным, если удалось снизить сложность задачи дешифрования, однако сама реализация такой атаки на практике может быть очень затруднительной и не привести к желаемому результату.

Любая криптографическая система должна включать в себя не только алгоритм преобразования информации, но и алгоритм смены ключа шифрования. Использование одного ключа шифрования для зашифрования большого объема информации приводит к очень большой нагрузке на ключ, что существенно облегчает задачу криптоаналитику. Существует большое количество различных механизмов обновления ключевого материала участниками связи.

Стандарт генерации ключей X9.17

Стандарт определяет два типа ключей: ключи шифрования ключей и ключи шифрования данных. Ключи шифрования ключей используются для зашифрования распределяемых между участниками связи ключей шифрования данных.

Ключи шифрования ключей распределяются между участниками достаточно редко, но при этом требуется какой-либо другой метод распределения, отличный от метода распределения ключей шифрования данных. Например, ключи шифрования ключей могут быть распределены между участниками при личной встрече. Распределение ключей шифрования данных происходит гораздо чаще, поскольку они используются намного более интенсивно. Следующая схема иллюстрирует процесс распределения ключей согласно X9.17.

X9.17.jpg

Пусть E_K (X) – результат зашифрования сообщения X на ключе K с использованием некоторого криптографического алгоритма. V_0 – секретная начальная последовательность или синхропосылка. T – временная метка. Для генерации очередного ключа R_i используется соотношение

X9.17-Formula-1.jpg

Очередное значение V_i вычисляется по формуле

X9.17-Formula-2.jpg

На каком-то заранее определенном шаге процесс останавливается, и текущее значение R_i используется в качестве ключа шифрования. В стандарте X9.17 в качестве алгоритма шифрования приводится американский криптографический алгоритм DES.

Распределение ключей по параллельным каналам

Одним из решений проблемы распределения ключа является процесс его разделения на части и передачи по независимым каналам. Одна часть может быть передана по телефону, другая – почтой, и т.д. Для перехвата ключа шифрования злоумышленнику потребуется перехватить сразу все каналы передачи, выделить в них на фоне других данных передаваемую часть ключа и только затем правильно скомпоновать ключ. Такую задачу достаточно непросто решить на практике. Следующий рисунок иллюстрирует процесс разбиения, передачи и восстановления ключа участниками связи.

Keys-distribution.jpg

В процессе передачи некоторые части ключа могут быть искажены или утрачены, поэтому необходимо также предусмотреть меры по повышению надежности передачи частей ключа и их целостности.

Распределение ключей в больших сетях

Ключи шифрования ключей, общие для пары пользователей, очень удобно использовать в небольших сетях. Однако при таком способе распределения ключей в сети из N человек потребуется (N(N-1))/2 обменов, что на практике резко ограничивает возможность использования такой схемы.

В случаях, когда количество участников в сети может быть достаточно велико, гораздо более эффективным будет использование центрального сервера ключей.

Использование одноразовых ключей связи

В ряде случаев, например при шифровании телефонного разговора, могут использоваться одноразовые или сеансовые ключи. Сеансовым называется ключ, который используется только для одного сеанса связи – единственного телефонного разговора – и затем уничтожается. Нет необходимости хранить этот ключ после того как он был использован. Существует множество специальных протоколов, называемых протоколами согласования или распределения общего ключа. В их задачу входит согласование сеансового ключа связи между участниками. Некоторые протоколы могут предусматривать наличие у участников ранее установленного общего секрета, на основании которого происходит аутентификация сторон и генерация сеансового ключа. Могут также использоваться протоколы, не требующие общего секрета, например, протокол Диффи-Хеллмана.

Обновление ключей шифрования

Иногда частое распределение новых ключей может быть непростой задачей. Более простое решение – генерировать новый ключ из старого. Такую схему называют обновлением ключа. Для этого потребуется использовать общую однонаправленную функцию, которая также может выступать в качестве общего секрета двух и более пользователей. Новый ключ формируется согласно некоторому заранее определенному алгоритму, на вход которого подается результат однонаправленной функции.

Стоит отметить, что в этом случае безопасность нового ключа определяется безопасностью старого ключа. В случае если злоумышленнику удастся заполучить некоторый ключ шифрования, то с этого момента вся последующая переписка будет ему доступна для прочтения, поскольку обновление ключа он сможет производить уже самостоятельно. Дополнительной мерой безопасности может служить удерживание однонаправленной функции и алгоритма выработки нового ключа в секрете, но на практике это реализуется не так часто.

Хранение ключей

В некоторых системах используется простой подход – пользователь просто запоминает ключ шифрования или пароль, на основании которого однозначно генерируется ключ. Такой подход имеет существенные недостатки: во-первых, при достаточно большой длине ключа или пароля пользователь может запросто забыть его. Во-вторых, вводя пароль или ключ шифрования каждый раз, ключ подвергается дополнительной опасности, поскольку он может быть подсмотрен коллегой-злоумышленником, или же перехвачен по каналам ПЭМИН.

Другим решением является хранение ключа в нечитаемом виде на физическом носителе, который активируется при подключении его к считывающему устройству. В этом случае пользователь может использовать ключ шифрования не зная его, что дополнительно оберегает ключ от умышленной или случайной компрометации пользователем.

Любой человек осознает, что такое физический ключ, каково его назначение и как его защищать. Придание криптографическому ключу некоторой физической формы делает хранение и защиту такого ключа интуитивно более понятным.

Дальнейшим развитием идеи хранения ключа на физическом носителе является хранение части ключа на физическом носителе пользователя, другой части – на устройстве считывания. Утрата ключа пользователя в этом случае не компрометирует ключ шифрования – достаточно заменить ключ пользователя. Аналогичное утверждение справедливо и для устройства считывания.

Резервирование ключей

Весь смысл зашифрования данных – в невозможности их восстановить без ключа. В случае если ключ шифрования будет утрачен, практически гарантированно данные будут безвозвратно потеряны.

Условное вручение ключей

Метод условного вручения ключей требует, чтобы все сотрудники записали свои ключи, например, на бумажный носитель и сдали администратору безопасности, который зашифрует их главным ключом (мастер-ключом). Помимо администратора безопасности главный ключ также должен быть известен вышестоящему руководству, чтобы при необходимости расшифровать ключи пользователей.

Проблема такой схемы заключается в том, что администратор безопасности должен быть безоговорочно доверенным лицом, которое не будет использовать чужие ключи и не скомпрометирует их намеренно.

Существенно лучшим решением будет использование протокола совместного использования секрета.

Протокол совместного использования секрета

При генерации ключа пользователь одновременно делит ключ на несколько частей и затем посылает в зашифрованном виде различным должностным лицам компании. Ни одна из этих частей не является ключом, но собрав все части вместе, можно восстановить ключ.

В случае применения ассиметричной криптографии пользователь может не отправлять части ключа в зашифрованном виде, а хранить их локально. При этом каждая часть должна быть зашифрована открытым ключом некоего должностного лица компании.

Еще одной альтернативой может служить использование физического контейнера для ключа. Например, пользователь записывает свой ключ шифрования на физический носитель и сдает его администратору безопасности на время своего отсутствия. Администратор безопасности может воспользоваться ключом пользователя, но не узнает его, что защищает ключ от компрометации со стороны администратора. Помимо этого пользователь может контролировать использовался ли его ключ администратором, и если да, то сколько раз и в каких сценариях.

Компрометация ключей

Как уже было отмечено, управление ключами шифрования и сохранение их в секрете – сложнейшая задача прикладной криптографии.

В случае компрометации ключа необходимо отказаться от его использования и как можно скорее заменить новым. Жизненно необходимо, чтобы все соответствующие должностные лица были максимально быстро проинформированы о случившемся, чтобы в адрес пользователя не отправлялась информация, зашифрованная скомпрометированным ключом. Рекомендуется, чтобы используемое программное обеспечение во время работы использовало метки времени, чтобы была возможность установить приблизительное предполагаемое время компрометации ключа шифрования.

Описанные проблемы показывают, насколько могут быть серьезными последствия при компрометации единственного ключа шифрования пользователя. В идеале у пользователя должны быть индивидуальные ключи для каждой задачи и каждого приложения. В этом случае компрометация одного ключа может принести значительно меньший ущерб. Необходимости наличия разных криптографических ключей у одного пользователя можно сопоставить необходимость иметь разные физические ключи от различных замков.

Вывести решение проблемы на качественно новый уровень можно с использованием систем биометрической аутентификации владельца ключа, наложения ограничений на возможности использования конкретного ключа и иных организационных мер.

Запланированная смена ключей

Любой ключ шифрования должен быть использован ограниченное количество раз. Время его действия может истекать в зависимости от различных показателей: астрономическое время, количество зашифрованных сообщений, объем зашифрованного сетевого трафика и т. п.

Стоит выделить основные причины, обуславливающие необходимость регулярной смены ключа шифрования:

  • Вероятность компрометации ключа прямо пропорциональна времени его использования
  • Ущерб при компрометации ключа тем выше, чем дольше он использовался – чем больше данных было им зашифровано
  • При длительном использовании ключа возрастает нагрузка на ключ, которая может существенно облегчить задачу криптоанализа, когда злоумышленник располагает большим количеством шифртекстов на одном ключе
  • Если ключ используется длительное время – у злоумышленника больше времени и шансов на его компрометацию, в том числе с использованием методов полного или частичного перебора.

В любом прикладном сценарии использования криптографических методов защиты необходима стратегия, определяющая допустимую нагрузку на ключ и время его жизни. Для систем с установлением соединения имеет смысл использовать сеансовые ключи. У ключей должно быть относительно короткое время жизни, которое также может зависеть от важности данных, зашифрованных на конкретном ключе. Если есть возможность часто менять ключи – не стоит ей пренебрегать.

Уничтожение ключей

Каждый раз, когда происходит смена ключа шифрования, старый ключ должен быть гарантированно уничтожен. Старые ключи имеют принципиальное значение – завладев одним из таких ключей, злоумышленник может прочитать зашифрованную этим ключом информацию, которую ему ранее удалось перехватить по техническим каналам утечки информации.

В случае использования схемы обновления ключа на основании предыдущего, утрата одного из старых ключей может привести к катастрофическим последствиям – злоумышленник сможет не только прочитать ранее переданную зашифрованную информацию, но и использовать методы навязывания, поскольку ему заранее известны все ключи, которые будут использованы в будущем.

Если ключ располагается на физическом носителе, его необходимо несколько раз перезаписать случайными данными или же уничтожить физический носитель, что более надежно.

Протоколы обмена ключами

Протокол Диффи-Хеллмана

Классический алгоритм Диффи-Хеллмана позволяет согласовать двум участникам секретный ключ по открытому каналу, который может прослушивать злоумышленник. При этом злоумышленнику будет достаточно сложно восстановить секретный ключ по информации, которую он смог перехватить прослушивая канал связи пользователей.

Стойкость алгоритма Диффи-Хеллмана базируется на труднорешаемости задачи дискретного логарифмирования в поле вычетов по большому простому модулю. Пусть пользователей зовут Алиса и Боб. Описание протокола выглядит следующим образом:

На предварительном этапе Алиса и Боб договариваются о двух числах – g и n. Значение n – большое простое число - порядок поля вычетов, значение g¬ – любой примитивный корень по модулю n.

1. Алиса генерирует достаточно большое случайное число x, вычисляет и отправляет значение 01.jpg

2. Аналогично поступает Боб, выбирая число y и отправляя Алисе результат вычисления 02.jpg

3. Алиса со своей стороны вычисляет значение 03.jpg

4. Аналогично поступает Боб 04.jpg

В силу коммутативности операции возведения в степень в конечном поле вычетов, оба участника получают на этапах (3) и (4) одинаковые результаты – общий секрет. Злоумышленник, не зная значений x и y, не сможет восстановить общий секрет по имеющемуся перехваченному материалу. Для восстановления секрета злоумышленник должен решить задачу дискретного логарифмирования в конечном поле вычетов большого порядка, что при определенном подборе параметров схемы является очень сложной задачей.


Протокол Диффи-Хеллмана с тремя и более участниками

Использование алгоритма Диффи — Хеллмана не ограничивается двумя участниками. Он может быть применен на неограниченное количество пользователей. Рассмотрим ситуацию, когда Алиса, Боб и Кэрол вместе генерируют исходный ключ. В данном случае последовательность действий будет следующая

  1. Стороны договариваются о параметрах алгоритма p и g
  2. Стороны генерируют свои ключи — a, b и c
  3. Алиса вычисляет 05.png и посылает его Бобу
  4. Боб вычисляет 06.png и посылает его Кэрол
  5. Боб вычисляет 07.png и посылает его Кэрол
  6. Кэрол вычисляет 08.png и посылает его Алисе.
  7. Алиса вычисляет 09.png и использует его как свою тайну.
  8. Кэрол вычисляет 10.png и посылает его Алисе
  9. Алиса вычисляет 11.png и посылает его Бобу
  10. Боб вычисляет 12.png и использует его как свою тайну

В данной ситуации любой участник может видеть 05.png, 07.png, 10.png, 06.png, 11.png, 08.png, но при этом не может видеть любую комбинацию 13.png.

Для того чтобы данный алгоритм был эффективно применен для большой группы людей, необходимо соблюдение двух основных принципов:

  • Передача ключа должна начинаться с «пустого» ключа g. Весь секрет состоит в повышении текущего значения показателя каждого участника один раз;
  • Любое промежуточное значение может быть раскрыто публично, но окончательное значение представляет из себя секретный ключ, который никогда не должен быть публично раскрыт. Таким образом, каждый пользователь получает свою копию тайного ключа и передает его последующему.

Трехпроходный протокол Шамира

Протокол позволяет участникам безопасно обмениваться информацией, не используя предварительного обмена никакими секретами. Протокол предполагает использование симметричного блочного шифра, для которого справедливо равенство

3PSP-01.jpg

Алиса и Боб сгенерировали каждый для себя ключи шифрования – A и B. Обмен этими ключами не происходит – они нужны исключительно для использования в симметричном шифре.

1. Алиса зашифровывает сообщение M своим ключом и отправляет Бобу 3PSP-02.jpg

2. Боб зашифровывает принятое сообщение C1 и отправляет Алисе обратно 3PSP-03.jpg

3. Алиса расшифровывает сообщение C2 своим ключом и отправляет результат Бобу 3PSP-04.jpg

4. Боб расшифровывает C3 и получает исходное сообщение M.

В качестве сообщение M может выступать секретный ключ шифрования или какой-либо иной секретный параметр для дальнейшей выработки общего симметричного ключа.

Стоит отдельно отметить, что, несмотря на совершенную стойкость, шифр Вернама использован быть не может в силу того, что все переданные сообщения будут иметь следующий вид

3PSP-05.jpg

Злоумышленник, выполнив побитовое сложение всех сообщений по модулю 2, может получить исходное сообщение:

3PSP-06.jpg

Защищенные переговоры о ключе

В отличие от протоколов Диффи-Хеллмана и Шамира протокол защищенных переговоров защищает переговоры участников о ключе от некачественных паролей и атаки «человек в середине». В протоколе используется хэш-функция от двух переменных, обладающая необычным свойством – она часто приводит к коллизиям по первой переменной и почти никогда по второй.

SToK-01.jpg

Предполагается, что Алиса и Боб используют общий секретный пароль P и уже обменялись секретным ключом K по протоколу Диффи-Хеллмана. Пароль P используется для проверки идентичности их сеансовых ключей, не позволяя злоумышленнику проводить атаку «человек в середине».

1. Алиса вычисляет значение и отправляет Бобу SToK-02.jpg
2. Боб также вычисляет значение SToK-02.jpg и, если оно совпадает с тем, что прислала Алиса, отвечает ей сообщением SToK-03.jpg
3. Алиса вычисляет значение SToK-03.jpg и сравнивает результат с тем, что прислал Боб.

При попытке реализовать атаку «человек в середине» злоумышленник будет использовать разные ключи K1 и K2 для Алисы и Боба соответственно. При использовании предполагаемой хэш-функции многие пароли будут давать одинаковый результат на ключе K1. Поэтому, когда злоумышленник находит совпадение, вероятнее всего это неправильный пароль, поэтому обмануть Боба будет очень трудно.

Глоссарий (Glossary)

Библиографический указатель (Bibliography)

Перейти к списку литературы по разделу "Управление ключами симметричных криптосистем".


Вернуться к оглавлению

Калмыков В. В.
Москва, 2013