Как в IPsec VPN шифруется предварительный общий ключ?


11

Я делал IPsec VPN на ASA 8.0, и я немного понимаю об этом. Инициатор начинает с отправки своей политики ISAKMP ответчику, а ответчик отправляет обратно соответствующую политику. После этого ключ Диффи-Хеллмана получает обмен, а затем оба отправляют предварительный общий ключ другому для аутентификации.

Теперь у нас есть два ключа:

  • Один будет сгенерирован шифрованием AES
  • Один будет создан группой Диффи-Хеллмана

Какой ключ используется для шифрования предварительного общего ключа?

Ответы:


16

Вы задали отличный вопрос. Вопрос кажется очень простым, но на самом деле ответ несколько сложнее. Я сделаю все возможное, чтобы ответить на него в сжатой форме. Кроме того, поскольку вы упомянули ISAKMP, я предполагаю, что вы заинтересованы в IKEv1. Ситуация немного изменилась для IKEv2 (ну, очень), но я хотел бы упомянуть, что ответ ниже относится только к IKEv1.

Этап 1 может быть выполнен в двух разных модах: Основной режим и Агрессивный режим. В любом режиме первое сообщение отправляется Инициатором, а второе сообщение отправляется Ответчиком. Оба эти сообщения включают в себя то, что известно в мире криптографии как Nonce . Одноразовый номер - это просто случайное число, используемое для генерации ключей. (термин Nonce происходит от _N_umber, использованного _Once_) . Итак, после сообщения 1 и сообщения 2 обе стороны знают одноразовые номера друг друга.

Nonce объединяются с Pre-Shared-Key для создания значения Seed для генерации секретных ключей. Относительная часть IKE RFC здесь:

 For pre-shared keys:       SKEYID = prf(pre-shared-key, Ni_b | Nr_b)

SKEYID - это значение Seed, которое позже будет использовано для создания дополнительных секретных ключей. Pre-Shared-Key и оба значения Nonce (Ni_b - одноразовый номер инициатора, а Nr_B - одноразовый номер ответчика) объединяются с использованием PRF или случайной функции Psuedo. PRF похож на алгоритм хеширования, за исключением того, что результат может содержать столько бит, сколько вам нужно.

Теперь, если вы изначально работали в основном режиме, сообщения 3 и 4 совместно используют открытые ключи Диффи-Хеллмана Инициатора и Ответчика (соответственно). Они оба используют эти значения для генерации общего секрета Диффи-Хеллмана . Если вы работали в агрессивном режиме, эти общедоступные значения DH также включены в Сообщение 1 и Сообщение 2 (вместе с Одноразовыми номерами).

Затем значение Seed объединяется с общим секретом DH (и несколькими другими значениями) для создания трех ключей сеанса : ключа отмены, ключа аутентификации и ключа шифрования. RFC утверждает это так:

Результатом основного режима или агрессивного режима являются три группы аутентифицированного ключевого материала:

 SKEYID_d = prf(SKEYID, g^xy | CKY-I | CKY-R | 0)
 SKEYID_a = prf(SKEYID, SKEYID_d | g^xy | CKY-I | CKY-R | 1)
 SKEYID_e = prf(SKEYID, SKEYID_a | g^xy | CKY-I | CKY-R | 2)

SKEYID_d, _a и _e - три упомянутых выше ключа сеанса. SKEYIDэто значение семени. g^xyявляется общим секретом DH. CKY-Iи CKI-Rэто файлы cookie Инициатора и Ответчика, это просто дополнительные случайно сгенерированные значения, которые позже используются для идентификации этого конкретного обмена ISAKMP и ассоциации безопасности. 0 1 2являются буквальными числами 0, 1 и 2. Символ трубы |представляет конкатенацию.

В любом случае все эти значения объединяются с использованием PRF, который создает три ключа сеанса:

  • Производный ключ - этот ключ не используется ISAKMP, а вместо этого передается IPsec, чтобы IPsec мог создавать свои собственные секретные ключи.
  • Ключ аутентификации - этот ключ используется ISAKMP в его HMAC (иначе, алгоритм хеширования защищен секретным ключом)
  • Ключ шифрования - этот ключ используется ISAKMP для симметричного шифрования всего, что ISAKMP хочет безопасно передать другому узлу. Таким образом, если выбран алгоритм шифрования для Фазы 1 AES, AES будет использовать этот ключ для симметричного шифрования данных - AES не будет генерировать свой собственный материал ключа .

Ключ аутентификации и ключ шифрования используются для защиты / шифрования последующего согласования фазы 2. В основном режиме сообщения 5 и 6 фазы 1 также защищены этими ключами. Кроме того, любые будущие информационные обмены ISAKMP (DPD, события Rekey, сообщения Delete и т. Д.) Также защищены этими двумя ключами.

Производный ключ передается IPsec, и IPsec генерирует свой собственный материал ключей из этого ключа. Если вы помните, IPsec не включает в себя механизм обмена ключами, поэтому единственный способ получить секретные ключи - это либо установить их вручную (что архаично, но больше никогда не выполняется), либо ИЛИ полагаться на внешнюю службу для предоставить материал для ввода, например, ISAKMP.

RFC говорит это так:

SKEYID_e - материал ключей, используемый ISAKMP SA для защиты конфиденциальности своих сообщений.

SKEYID_a - это материал ключей, используемый ISAKMP SA для аутентификации своих сообщений.

SKEYID_d - это материал ключей, используемый для получения ключей для ассоциаций безопасности не-ISAKMP.

После всего сказанного мы можем вернуться к вашему вопросу: какой ключ используется для защиты предварительного общего ключа?

В основном режиме предварительный общий ключ (PSK) проверяется в сообщениях 5 и 6. Сообщения 5 и 6 защищены сессионными ключами, которые генерирует ISAKMP, как описано выше.

В агрессивном режиме ни одно из сообщений в согласовании не шифруется. И PSK проверяется в сообщениях 2 и 3. Обратите внимание, я сказал , в обеих случаях PSK является проверенными , и я никогда не говорил , что это PSK обмена . Очевидно, что если в Агрессивном режиме ничего не зашифровано, и вы просто отправили Pre-Shared-Key по проводу в незашифрованном виде, была бы огромная зияющая уязвимость безопасности.

К счастью для нас, авторы ISAKMP уже думали об этом. И в результате они создали специальный метод для проверки того, что каждая сторона имеет правильный PSK, фактически не передавая его по проводам. Есть два элемента, которые использовать для проверки каждой Peer , что они оба имеют один и тот же ключ PSK: в удостоверениях методу и удостоверения Hash .

VPN Peers могут выбрать для идентификации себя различными методами; чаще всего одноранговые узлы просто используют свой IP-адрес источника. Но у них есть возможность использовать полное доменное имя или имя хоста. Каждый из них, наряду с коррелирующим значением для выбранного метода, составляют метод идентификации. Так, например, если бы у меня был IP 5.5.5.5, и я хотел использовать свой IP-адрес, чтобы идентифицировать себя, мой метод идентификации был бы [IP Address, 5.5.5.5] . (Примечание: оба значения составляют весь метод идентификации)

Затем метод ID объединяется (с использованием PRF) со значением Seed, которое мы обсуждали ранее (SKEYID), и несколькими другими значениями, чтобы создать хэш Identity . Напомним, что прежде всего при создании SKEYID использовался Pre-Shared-Key.

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

Это описано в RFC здесь:

Для аутентификации любого обмена инициатор протокола генерирует HASH_I, а ответчик генерирует HASH_R, где:

HASH_I = prf(SKEYID, g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b )
HASH_R = prf(SKEYID, g^xr | g^xi | CKY-R | CKY-I | SAi_b | IDir_b )

IDii и IDir - это метод идентификации. И HASH_I и HASH_R - это хэш инициатора и ответчика. Оба из них являются общими в Phase1. Из RFC:

При выполнении аутентификации с предварительным общим ключом основной режим определяется следующим образом:

         Initiator                        Responder
        ----------                       -----------
         HDR, SA             -->
                             <--    HDR, SA
         HDR, KE, Ni         -->
                             <--    HDR, KE, Nr
         HDR*, IDii, HASH_I  -->
                             <--    HDR*, IDir, HASH_R

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

       Initiator                        Responder
      -----------                      -----------
       HDR, SA, KE, Ni, IDii -->
                             <--    HDR, SA, KE, Nr, IDir, HASH_R
       HDR, HASH_I           -->

И теперь мы можем наконец ответить на ваш вопрос полностью:

Pre-Shared-Key комбинируется с использованием PRF с одноразовыми номерами и кучей других значений, известных любому другому в процессе переговоров. Результатом является значение, которое может быть достигнуто взаимно только двумя сторонами, если обе стороны начали с одних и тех же значений - иначе говоря, одного и того же предварительного ключа. Результирующее значение - это то, что совместно используется по проводам, что позволяет двум сторонам проверять наличие соответствующих предварительных ключей без фактического раскрытия какой-либо информации о самом предварительном ключе.

Основной режим становится еще более безопасным за счет шифрования обмена «результирующим значением», описанным выше, что еще более затрудняет извлечение какой-либо полезной информации о том, чем был Pre-Shared-Key.


(кажется, я с треском провалился, ответив кратко)


И последнее. Как шифрование не генерирует ключ, я изучаю книгу ccnp vpn, и в этой книге написано, что алгоритм симметричного ключа генерирует и использует шифрование с одним ключом, примером симметричного ключа является алгоритм, дес
user3347934

Если AES случайно сгенерировал ключ, проблема безопасной передачи этого ключа по проводам другой стороне все еще существует. Вот почему вам нужен какой-то метод обмена ключами . Сам AES - это не алгоритм обмена ключами, это просто алгоритм симметричного шифрования. Как правило, AES использует ключ, предоставленный ему другим протоколом, таким как ISAKMP. Что касается того, как работает AES, мне больше всего нравится эта флэш-анимация для ее объяснения. PS: Если мой ответ ответил на ваш вопрос, отметьте его как принятый ответ.
Эдди

Большое спасибо, это действительно помогло мне понять, как на самом деле работает vpn с предварительным общим ключом
user3347934

У меня есть одна проблема также, пожалуйста, посмотрите на это также networkengineering.stackexchange.com/questions/13484/…
user3347934

На самом деле я не понимал, какой ключ используется для создания общего секретного ключа
diffi-helmen

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.