учебники, программирование, основы, введение в,

 

Алгоритмы обмена ключей и протоколы аутентификации

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

  1. Ключ может быть создан А и физически передан B.
  2. Третья сторона может создать ключ и физически передать его А и B.
  3. А и В имеют предварительно созданный и недолго используемый ключ, один участник может передать новый ключ другому, применив для шифрования старый ключ.
  4. Если А и В каждый имеют безопасное соединение с третьим участником C, C может передать ключ по этому безопасному каналу А и B.

Первый и второй способы называются ручным распределением ключа. Это самые надежные способы распределения ключа, однако во многих случаях пользоваться ими неудобно и даже невозможно. В распределенной системе любой хост или сервер должен иметь возможность обмениваться конфиденциальной информацией со многими аутентифицированными хостами и серверами. Таким образом, каждый хост должен иметь набор ключей, поддерживаемый динамически. Проблема особенно актуальна в больших распределенных системах.
Количество требуемых ключей зависит от числа участников, которые должны взаимодействовать. Если выполняется шифрование на сетевом или IP-уровне, то ключ необходим для каждой пары хостов в сети. Таким образом, если есть N хостов, то необходимое число ключей [N (N - 1)]/2. Если шифрование выполняется на прикладном уровне, то ключ нужен для каждой пары прикладных процессов, которых гораздо больше, чем хостов.
Третий способ распределения ключей может применяться на любом уровне стека протоколов, но если атакующий получает возможность доступа к одному ключу, то вся последовательность ключей будет раскрыта. Более того, все равно должно быть проведено первоначальное распространение большого количества ключей.
Поэтому в больших автоматизированных системах широко применяются различные варианты четвертого способа. В этой схеме предполагается существование так называемого центра распределения ключей (Key Destribution Center - KDC), который отвечает за распределение ключей для хостов, процессов и приложений. Каждый участник должен разделять уникальный ключ с KDC.
Использование центра распределения ключей основано на использовании иерархии ключей. Как минимум используется два типа ключей: мастер-ключи и ключи сессии.
Для обеспечения конфиденциальной связи между конечными системами используется временный ключ, называемый ключом сессии. Обычно ключ сессии используется для шифрования транспортного соединения и затем уничтожается. Каждый ключ сессии должен быть получен по сети из центра распределения ключей. Ключи сессии передаются в зашифрованном виде, используя мастер-ключ, который разделяется между центром распределения ключей и конечной системой.
Эти мастер-ключи также должны распределяться некоторым безопасным способом. Однако при этом существенно уменьшается количество ключей, требующих ручного распределения. Если существует N участников, которые хотят устанавливать соединения, то в каждый момент времени необходимо [N (N - 1)]/2 ключей сессии. Но требуется только N мастер-ключей, по одному для каждого участника.
Время жизни ключа сессии как правило равно времени жизни самой сессии.
Чем чаще меняются ключи сессии, тем более безопасными они являются, так как противник имеет меньше времени для взламывания данного ключа сессии. С другой стороны, распределение ключей сессии задерживает начало любого обмена и загружает сеть. Политика безопасности должна сбалансировать эти условия для определения оптимального времени жизни конкретного ключа сессии.
Если соединение имеет долгое время жизни, то должна существовать возможность периодически менять ключ сессии.
Для протоколов, не поддерживающих соединение, таких как протокол, ориентированный на транзакции, нет явной инициализации или прерывания соединения. Следовательно, неясно, как часто надо менять ключ сессии. Большинство подходов основывается на использовании нового ключа сессии для каждого нового обмена. Наиболее часто применяется стратегия использования ключа сессии только для фиксированного периода времени или только для определенного количества транзакций.

Протоколы аутентификации

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

Взаимная аутентификация

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

  1. Простое повторение: противник просто копирует сообщение и повторяет его позднее.
  2. Повторение, которое не может быть определено: противник уничтожает исходное сообщение и посылает скопированное ранее сообщение.

Один из возможных подходов для предотвращения replay-атак мог бы состоять в присоединении последовательного номера (sequence number) к каждому сообщению, используемому в аутентификационном обмене. Новое сообщение принимается только тогда, когда его последовательный номер правильный. Трудность данного подхода состоит в том, что каждому участнику требуется поддерживать значения sequence number для каждого участника, с которым он взаимодействует в данный момент. Поэтому обычно sequence number не используются для аутентификации и обмена ключами. Вместо этого применяется один из следующих способов:

  1. Отметки времени: участник А принимает сообщение как не устаревшее только в том случае, если оно содержит отметку времени, которая, по мнению А, соответствует текущему времени. Этот подход требует, чтобы часы всех участников были синхронизированы.
  2. Запрос/ответ: участник А посылает в запросе к В случайное число (nonce - number only once) и проверяет, чтобы ответ от В содержал корректное значение этого nonce.

Считается, что подход с отметкой времени не следует использовать в приложениях, ориентированных на соединение, потому что это технически трудно, так как таким протоколам, кроме поддержки соединения, необходимо будет поддерживать синхронизацию часов различных процессоров. При этом возможный способ осуществления успешной атаки может возникнуть, если временно будет отсутствовать синхронизация часов одного из участников. В результате различной и непредсказуемой природы сетевых задержек распределенные часы не могут поддерживать точную синхронизацию. Следовательно, процедуры, основанные на любых отметках времени, должны допускать окно времени, достаточно большое для приспособления к сетевым задержкам, и достаточно маленькое для минимизации возможности атак.
С другой стороны, подход запрос/ответ не годится для приложений, не устанавливающих соединения, так как он требует предварительного рукопожатия перед началом передач, тем самым отвергая основное свойство транзакции без установления соединения. Для таких приложений доверие к некоторому безопасному серверу часов и постоянные попытки каждой из частей синхронизировать свои часы с этим сервером может быть оптимальным подходом.
Использование симметричного шифрования
Для обеспечения аутентификации и распределения ключа сессии часто используется двухуровневая иерархия ключей симметричного шифрования. В общих чертах эта стратегия включает использование доверенного центра распределения ключей (KDC). Каждый участник разделяет секретный ключ, называемый также мастер-ключом, с KDC. KDC отвечает за создание ключей, называемых ключами сессии, и за распределение этих ключей с использованием мастер-ключей. Ключи сессии применяются в течение короткого времени для шифрования только данной сессии между двумя участниками.
Большинство алгоритмов распределения секретного ключа с использованием KDC, включает также возможность аутентификации участников.
Протокол Нидхэма и Шредера
Предполагается, что секретные мастер-ключи KA и KB разделяют соответственно А и KDC и В и KDC. Целью протокола является безопасное распределение ключа сессии KS между А и В. Протокол представляет собой следующую последовательность шагов:

1. A  KDC:  IDA || IDB || N1
2. KDC  A:  EKa [KS || IDB || N1 || 
             EKb [KS || IDA] ]
3. A  B:    EKb [KS || IDA]
4. B  A:    EKS [N2]
5. A  B:    EKS [f (N2)]
  1. А запрашивает у KDC ключ сессии для установления защищенного соединения с В. Сообщение включает идентификацию А и В и уникальный идентификатор данной транзакции, который обозначен как N1 и называется nonce. Nonce может быть временной меткой, счетчиком или случайным числом; минимальное требование состоит в том, чтобы он отличался для каждого запроса. Кроме того, для предотвращения подделки желательно, чтобы противнику было трудно предугадать nonce. Таким образом, случайное число является лучшим вариантом для nonce.
  2. KDC отвечает сообщением, зашифрованным ключом KА. Таким образом, только А может расшифровать сообщение, и А уверен, что оно получено от KDC, так как предполагается, что кроме А и KDC этот ключ не знает никто. Это сообщение включает следующие элементы, предназначенные для А:
    • Одноразовый ключ сессии.
    • Идентификатор В.
    • nonce, который идентифицирует данную сессию .

А должен убедиться, что полученный nonce равен значению nonce из первого запроса. Это доказывает, что ответ от KDC не был модифицирован при пересылке и не является повтором некоторого предыдущего запроса. Кроме того, сообщение включает два элемента, предназначенные для В:

    • Одноразовый ключ сессии KS.
    • Идентификатор А IDA.

Эти два последних элемента шифруются мастер-ключом, который KDC разделяет с В. Они посылаются В при установлении соединения и доказывают идентификацию А.

  1. А сохраняет у себя ключ сессии и передает В информацию от KDC, предназначенную В: ЕKb [KS || IDA]. Так как эта информация зашифрована KВ, она защищена от просмотра. Теперь В знает ключ сессии (KS), знает, что другим участником является А, (IDA) и что начальная информация передана от KDC, т.к. она зашифрована с использованием KB.

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

  1. Используя созданный ключ сессии, В пересылает A nonce N2.
  2. Также используя KS, А отвечает f (N2), где f - функция, выполняющая некоторую модификацию N2.

Эти шаги гарантируют B, что сообщение, которое он получил, не изменено и не является повтором предыдущего сообщения.
Заметим, что реальное распределение ключа включает только шаги 1 - 3, а шаги 4 и 5, как и 3, выполняют функцию аутентификации.
А безопасно получает ключ сессии на шаге 2. Сообщение на шаге 3 может быть дешифровано только B. Шаг 4 отражает знание В ключа KS, и шаг 5 гарантирует В знание участником А ключа KS и подтверждает, что это не устаревшее сообщение, так как используется nonce N2. Шаги 4 и 5 призваны предотвратить общий тип replay-атак. В частности, если противник имеет возможность захватить сообщение на шаге 3 и повторить его, то это должно привести к разрыву соединения.
Разрывая рукопожатие на шагах 4 и 5, протокол все еще уязвим для некоторых форм атак повторения. Предположим, что противник Х имеет возможность скомпрометировать старый ключ сессии. Маловероятно, чтобы противник мог сделать больше, чем просто копировать сообщение шага 3. Потенциальный риск состоит в том, что Х может заставить взаимодействовать А и B, используя старый ключ сессии. Для этого Х просто повторяет сообщение шага 3, которое было перехвачено ранее и содержит скомпрометированный ключ сессии. Если В не запоминает идентификацию всех предыдущих ключей сессий с А, он не сможет определить, что это повтор. Далее Х должен перехватить сообщение рукопожатия на шаге 4 и представиться А в ответе на шаге 5.
Протокол Деннинга
Деннинг предложил преодолеть эту слабость модификацией протокола Нидхэма и Шредера, которая включает дополнительную отметку времени на шагах 2 и 3:

1. A -> KDC:  IDA || IDB
2. KDC -> A:  EKa [KS || IDB || T || 
              EKb [KS || IDA || T] ]
3. A -> B:    EKb [KS || IDA || T]
4. B -> A:    EKS [N1]
5. A -> B:    EKS [f (N1)]

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

|Clock - T| < Δt1 + Δt2 

где Δ t1 - оцениваемое нормальное расхождение между часами KDC и локальными часами (у А или B) и t2 - ожидаемая сетевая задержка времени. Каждый участник может установить свои часы, ориентируясь на определенный доверенный источник. Поскольку временная отметка Т шифруется с использованием секретных мастер-ключей, взломщик, даже зная старый ключ сессии, не сможет достигнуть цели повторением шага 3 так, чтобы В не заметил искажения времени.
Шаги 4 и 5 не были включены в первоначальное представление, но были добавлены позднее. Эти шаги подтверждают А, что В получил ключ сессии.
Протокол Деннинга обеспечивает большую степень безопасности по сравнению с протоколом Нидхэма и Шредера. Однако данная схема требует доверия к часам, которые должны быть синхронизированы в сети. В этом есть определенный риск, который состоит в том, что распределенные часы могут рассинхронизироваться в результате диверсии или повреждений. Проблема возникает, когда часы отправителя спешат по отношению к часам получателя. В этом случае противник может перехватить сообщение от отправителя и повторить его позднее, когда отметка времени в сообщении станет равной времени на узле получателя. Это повторение может иметь непредсказуемые последствия.
Один способ вычисления атак повторения состоит в требовании, чтобы участники регулярно сверяли свои часы с часами KDC. Другая альтернатива, при которой нет необходимости всем синхронизировать часы, состоит в доверии протоколам рукопожатия, использующим nonce.
Протокол аутентификации с использованием билета
Данный протокол пытается преодолеть проблемы, возникшие в предыдущих двух протоколах. Он выглядит следующим образом:

1. A -> B:   IDA || Na
2. B -> KDC: IDB || Nb || EKb [IDA || Na || Tb]
3. KDC -> A: EKa [IDB || Na || KS || Tb] || 
             EKb [IDA || KS || Tb] || Nb
4. A -> B:   EKb [IDA || KS || Tb] || EKS [Nb]
  1. А инициализирует аутентификационный обмен созданием nonce Na и посылкой его и своего идентификатора к В в незашифрованном виде. Этот nonce вернется к А в зашифрованном сообщении, включающем ключ сессии, гарантируя А, что ключ сессии не старый.
  2. B сообщает KDC, что необходим ключ сессии. Это сообщение к KDС включает идентификатор В и nonce Nb. Данный nonce вернется к В в зашифрованном сообщении, которое включает ключ сессии, гарантируя B, что ключ сессии не устарел. Сообщение В к KDC также включает блок, зашифрованный секретным ключом, разделяемым В и KDC. Этот блок используется для указания KDC, когда заканчивается время жизни данного ключа сессии. Блок также специфицирует намеченного получателя и содержит nonce, полученный от А. Этот блок является своего рода "верительной грамотой" или "билетом" для А.
  3. KDC получил nonces от А и В и блок, зашифрованный секретным ключом, который В разделяет с KDC. Блок служит билетом, который может быть использован А для последующих аутентификаций. KDC также посылает А блок, зашифрованный секретным ключом, разделяемым А и KDC. Этот блок доказывает, что В получил начальное сообщение А (IDB), что в нем содержится допустимая отметка времени и нет повтора (Na). Этот блок обеспечивает А ключом сессии (KS) и устанавливает ограничение времени на его использование (Тb).
  4. А посылает полученный билет В вместе с nonce B, зашифрованным ключом сессии. Этот билет обеспечивает В ключом сессии, который тот использует для дешифрования и проверки nonce. Тот факт, что nonce B расшифрован ключом сессии, доказывает, что сообщение пришло от А и не является повтором.

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

1. A -> B:  EKb [IDA || KS || Tb], Na'
2. B -> A:  Nb', ES [Na']
3. A -> B:  ES [Nb']

Когда В получает сообщение на шаге 1, он проверяет, что билет не просрочен. Заново созданные nonces Na' и Nb' гарантируют каждому участнику, что не было атак повтора. Время Tb является временем относительно часов B. Таким образом, эта временная метка не требует синхронизации, потому что В проверяет только им самим созданные временные отметки.

Использование шифрования с открытым ключом
Протокол аутентификации с использованием аутентификационного сервера.
Рассмотрим протокол, использующий отметки времени и аутентификационный сервер:
1. A -> AS:  IDA || IDB
2. AS -> A:  EKRas [IDA || KUa || T] ||
EKRas [IDB || KUb || T]
3. A -> B:   EKRas [IDA || KUa || T] ||
EKRas [IDB || KUb || T] ||
EKUb [EKRa [KS || T]]
В данном случае третья доверенная сторона является просто аутентификационным сервером AS, потому что третья сторона не создает и не распределяет секретный ключ. AS просто обеспечивает сертификацию открытых ключей участников. Ключ сессии выбирается и шифруется А, следовательно, не существует риска, что AS взломают и заставят распределять скомпрометированные ключи сессии. Отметки времени защищают от повтора скомпрометированных ключей сессии.
Данный протокол компактный, но, как и прежде, требует синхронизации часов.
Протокол аутентификации с использованием KDC
Другой подход использует nonces. Этот протокол состоит из следующих шагов:
1. A -> KDC: IDA || IDB
2. KDC -> A: EKRkdc [IDB || KUb]
3. A -> B:   EKUb [Na || IDA]
4. B -> KDC: IDB || IDA || EKUkdc [Na]
5. KDC -> B: EKRkdc [IDA || KUa] ||
EKUb [EKRkdc [Na || KS || IDB]]
6. B -> A:   EKUa [EKRkdc [Na || KS || IDB] || Nb]
7. A -> B:   EKS [Nb]
На первом шаге А информирует KDC, что хочет установить безопасное соединение с B. KDC возвращает А сертификат открытого ключа В (шаг 2). Используя открытый ключ B, А информирует В о создании защищенного соединения и посылает nonce Na (шаг 3). На 4-м шаге В спрашивает KDC о сертификате открытого ключа А и запрашивает ключ сессии. В включает nonce A, чтобы KDC мог пометить ключ сессии этим nonce. Nonce защищен использованием открытого ключа KDC. На 5-м шаге KDC возвращает В сертификат открытого ключа А плюс информацию {Na, KS, IDB}. Эта информация означает, что KS является секретным ключом, созданным KDC в интересах В и связан с Na. Связывание KS и Na гарантирует А, что KS не устарел. Эта тройка шифруется с использованием закрытого ключа KDC, это гарантирует B, что тройка действительно получена от KDC. Она также шифруется с использованием открытого ключа B, чтобы никто другой не мог подсмотреть ключ сессии и использовать эту тройку для установления соединения с А. На шаге 6 тройка {Na, KS, IDB}, зашифрованная закрытым ключом KDC, передается А вместе с nonce Nb, созданным B. Все сообщение шифруется открытым ключом А. А восстанавливает ключ сессии KS, использует его для шифрования Nb, который возвращает B. Это последнеее сообщение гарантирует B, что А знает ключ сессии.
Это достаточно безопасный протокол при различного рода атаках. Однако авторы предложили пересмотренную версию данного алгоритма:
1. A -> KDC: IDA || IDB
2. KDC -> A: EKRauth [IDB || KUb]
3. A -> B:   EKUb [Na || IDA]
4. B -> KDC: IDB || IDA || EKUauth [Na]
5. KDC -> B: EKRauth [IDA || KUa] || EKUb [
EKRauth [Na || KS || IDA || IDB]]
6. B -> A:   EKUa [EKRauth [Na || KS ||
IDA || IDB] || Nb]
7. A -> B:   EKS [Nb]
Добавляется идентификатор А IDA к данным, зашифрованных с использованием закрытого ключа KDC на шагах 5 и 6 для идентификации обоих участников сессии. Это включение IDA приводит к тому, что значение nonce Na должно быть уникальным только среди всех nonces, созданных А, но не среди nonces, созданных всеми участниками. Таким образом, пара {IDA, Na} уникально идентифицирует соединение, созданное А.

Односторонняя аутентификация

Существует специфическое приложение - электронная почта, для которого шифрование также имеет большое значение. Особенность e-mail состоит в том, что отправителю и получателю нет необходимости быть на связи в одно и то же время. Вместо этого сообщения направляются в почтовый ящик получателя, где они хранятся до тех пор, пока у того не появится возможность получить их.
Заголовок сообщения должен быть незашифрованным, чтобы сообщение могло пересылаться протоколами e-mail, такими как Х.400 или SMTP. Однако желательно, чтобы протоколы управления почтой не имели бы доступа к самому сообщению. Соответственно, e-mail сообщение должно быть зашифровано так, чтобы система управления почтой могла бы не знать ключ шифрования.
Вторым требованием является аутентификация сообщения. Обычно получателю нужна определенная гарантия того, что сообщение пришло от законного отправителя.
Использование симметричного шифрования
При использовании симметричного шифрования сценарий централизованного распределения ключей в полном объеме непригоден. Эти схемы требуют, чтобы в двух заключительных шагах отправитель посылал запрос получателю, ожидая ответа с созданным ключом сессии, и только после этого отправитель может послать сообщение.
С учетом перечисленных ограничений протоколы использования KDC являются возможными кандидатами для шифрования электронной почты. Для того чтобы избежать требования к получателю В находиться на связи в то же самое время, когда и отправитель А, шаги 4 и 5 должны быть опущены. Таким образом, остается последовательность шагов:

1. A -> KDC:  IDA || IDB || N1
2. KDC -> A:  EKa [KS || IDB || N1 || 
              EKb [KS || IDA]]
3. A -> B:    EKb [KS , IDA ] || EKS [M]

Данный подход гарантирует, что только требуемый получатель сообщения сможет прочитать его. Это также обеспечивает определенный уровень аутентификации, что отправителем является А. Очевидно, что протокол не защищает от атак повтора. Некоторая мера защиты может быть обеспечена включением отметки времени в сообщение. Однако поскольку существуют потенциальные задержки в процессе передачи e-mail сообщений, такие временные отметки имеют ограниченный срок действия.
Использование шифрования с открытым ключом
При использовании шифрования с открытым ключом требуется, чтобы отправитель знал открытый ключ получателя (для обеспечения конфиденциальности), получатель знал открытый ключ отправителя (для обеспечения аутентификации), или и то, и другое (для обеспечения конфиденциальности и аутентификации).
Если требуется конфиденциальность, то может быть использована следующая схема:

A -> B:   EKUb [KS] || EKS [M]  

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

A -> B:   M || EKRa [H (M)]  

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

A -> B:   EKS [M || EKRa [H (M)]] || EKUb [KS]  

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

A -> B:   M || EKRa [H (M) ] || 
          EKRas [T || IDA || KUa]  

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

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика