Поясните принципы симметричного и асимметричного шифрования, покажите схему обмена ключами Diffie‑Hellman, опишите возможные атаки на неё и способы защиты (аутентификация, PKI)
Синтез ответа по пунктам. Симметричное шифрование — принципы: - Один и тот же секретный ключ используется для шифрования и дешифрования. Ключ: K\;KK. - Быстрое шифрование больших объёмов данных (блочные алгоритмы: AES, потоковые: ChaCha20). - Требование: безопасная доставка и хранение ключа между участниками; масштабируемость проблемна при большом числе участников (нужны O(n2)O(n^2)O(n2) ключей для полной пары участников). - Свойства: конфиденциальность (шифр), целостность и аутентификация достигаются сочетанием с MAC/HMAC или режимами AEAD (например, AES-GCM, ChaCha20-Poly1305). Асимметричное (публично‑ключевое) шифрование — принципы: - У каждого участника есть пара ключей: открытый KpubK_{pub}Kpub и закрытый KprivK_{priv}Kpriv. - Открытый ключ можно распространять свободно; сообщение, зашифрованное открытым ключом, может расшифровать только владелец закрытого ключа (RSA, эллиптические схемы — ECIES). - Также используются для цифровой подписи: подпись, созданная KprivK_{priv}Kpriv, проверяется по KpubK_{pub}Kpub (RSA, ECDSA). - Медленнее симметричного, поэтому часто используется для обмена ключами и аутентификации, а затем для симметричного шифрования сессии. Схема обмена ключами Diffie–Hellman (классическая): - Параметры: большое простое число p\;pp и примитивный корень (генератор) g\;gg (оба публичны). - Участник A выбирает секрет aaa, вычисляет A=ga mod pA = g^{a} \bmod pA=gamodp и отправляет AAA участнику B. - Участник B выбирает секрет bbb, вычисляет B=gb mod pB = g^{b} \bmod pB=gbmodp и отправляет BBB участнику A. - A вычисляет общий секрет: s=Ba mod p=(gb)a mod p=gab mod p\;s = B^{a} \bmod p = (g^{b})^{a} \bmod p = g^{ab} \bmod ps=Bamodp=(gb)amodp=gabmodp. - B вычисляет общий секрет: s=Ab mod p=gab mod p\;s = A^{b} \bmod p = g^{ab} \bmod ps=Abmodp=gabmodp. - Общий ключ затем обрабатывают KDF и используют как симметричный сессионный ключ. В компактной форме: A=ga mod p,B=gb mod p,s=gab mod p.
A=g^{a}\bmod p,\quad B=g^{b}\bmod p,\quad s=g^{ab}\bmod p. A=gamodp,B=gbmodp,s=gabmodp. Варианты: групповые/множественные, эллиптический DH (ECDH) — то же, но на кривых для меньших параметров и большей эффективности. Возможные атаки на Diffie–Hellman и ответы: 1) Man‑in‑the‑Middle (MITM) - Описание: атакующий M перехватывает AAA и BBB, подставляет свои AM=gm1A_M=g^{m_1}AM=gm1, BM=gm2B_M=g^{m_2}BM=gm2, устанавливая с A и B разные общие секреты; A и B думают, что общаются друг с другом. - Защита: обязательная аутентификация сторон — цифровые подписи или сертификаты. Пример: A подписывает A=gaA=g^{a}A=ga подписью на Kpriv,AK_{priv,A}Kpriv,A; B проверяет по Kpub,AK_{pub,A}Kpub,A. Или использовать протоколы с аутентификацией (SIGMA, TLS с (EC)DHE + сертификат). 2) Подмена/манипуляция параметрами (p, g) - Описание: атакующий подставляет слабые параметры (малые факторы), чтобы упростить вычисление дискретного логарифма. - Защита: использовать проверенные безопасные параметры (стандартные группы, безопасные простые/сильные простые), проверять параметры и публичные элементы (A, B) на допустимость (не равны 0,1; находятся в правильной подгруппе). 3) Атаки на дискретный логарифм (криптоанализ) - Описание: вычисление aaa или bbb из A=ga mod pA=g^{a}\bmod pA=gamodp. - Защита: выбирать крупные параметры: для классического DH — достаточно большой ppp (сейчас рекомендуют минимум 2048‑бит для классического DH) или предпочтение ECDH с подходящей кривой (например, Curve25519, P‑256) где безопасность при меньших размерах ключа выше. 4) Атаки повторного воспроизведения (replay) - Описание: повторная отправка старых сообщений. - Защита: использование свежести — неповторяемые nonces, метки сессии, временные метки, и подтверждение ключа (key confirmation). 5) Малые подгрупповые и фальшивые элементы - Описание: A или B может добиться вывода ключа, заставив оппонента работать в маленькой подгруппе. - Защита: проверка принадлежности публичных значений правильной подгруппе; использование безопасных (strong) простых и соответствующих генераторов; применять cofactor‑checks в эллиптических схемах. 6) Боковые каналы и компрометация ключей - Описание: утечка через временные задержки, потребление энергии, крошки памяти. - Защита: защищённая реализация, постоянное время, аппаратные модули безопасности (HSM), регулярная ротация ключей. Способы защиты: аутентификация и PKI - Аутентификация: - Цифровые подписи: стороны подписывают свои DH‑выражения; проверка подписей исключает MITM. - Пред‑доверенные ключи: предустановленные публичные ключи (static public keys), PSK. - Каналы контроля (out‑of‑band) для сравнения ключей/хэшей (например, голосом, QR). - Протоколы с взаимной аутентификацией: TLS (сертификаты), SSH (fingerprint verification), IKE (IPsec). - PKI (инфраструктура открытых ключей): - Центры сертификации (CA) выдают сертификаты, связывающие KpubK_{pub}Kpub с субъектом. - Сертификат содержит подпись CA: проверка цепочки доверия до корневого CA. - PKI обеспечивает масштабируемую централизованную валидацию публичных ключей, поддерживает отзыв сертификатов (CRL, OCSP). - Риски PKI: компрометация CA, ошибки в проверке цепочки, необходимость управления отзывами — поэтому возможны расширения: OCSP stapling, certificate pinning, децентрализованные решения. Рекомендации практики безопасности при использовании DH: - Использовать аутентифицированные вариации: (EC)DHE + сертификаты/подписи (TLS, SSH). - Предпочитать эпhemerial DH (DHE/ ECDHE) для прямой секретности (PFS) — ключи сессии не зависят от долгосрочных ключей. - Применять KDF для получения симметричных ключей из sss: Ksess=KDF(s ∣∣ context)K_{sess} = \mathrm{KDF}(s\,||\,\text{context})Ksess=KDF(s∣∣context). - Использовать AEAD для шифрования канала и отдельные механизмы для целостности/аутентификации. - Валидировать параметры и публичные значения, использовать рекомендованные группы/кривые (например, Curve25519, secp384r1 по требованиям), и контролировать размер параметров (минимум рекомендованные стандарты). Краткая итоговая формула общего секрета DH: s=gab mod p,
s = g^{ab}\bmod p, s=gabmodp,
но эта схема безопасна только при обязательной аутентификации участников и корректной валидации параметров (PKI/подписи, проверка групп, KDF, AEAD).
Симметричное шифрование — принципы:
- Один и тот же секретный ключ используется для шифрования и дешифрования. Ключ: K\;KK.
- Быстрое шифрование больших объёмов данных (блочные алгоритмы: AES, потоковые: ChaCha20).
- Требование: безопасная доставка и хранение ключа между участниками; масштабируемость проблемна при большом числе участников (нужны O(n2)O(n^2)O(n2) ключей для полной пары участников).
- Свойства: конфиденциальность (шифр), целостность и аутентификация достигаются сочетанием с MAC/HMAC или режимами AEAD (например, AES-GCM, ChaCha20-Poly1305).
Асимметричное (публично‑ключевое) шифрование — принципы:
- У каждого участника есть пара ключей: открытый KpubK_{pub}Kpub и закрытый KprivK_{priv}Kpriv .
- Открытый ключ можно распространять свободно; сообщение, зашифрованное открытым ключом, может расшифровать только владелец закрытого ключа (RSA, эллиптические схемы — ECIES).
- Также используются для цифровой подписи: подпись, созданная KprivK_{priv}Kpriv , проверяется по KpubK_{pub}Kpub (RSA, ECDSA).
- Медленнее симметричного, поэтому часто используется для обмена ключами и аутентификации, а затем для симметричного шифрования сессии.
Схема обмена ключами Diffie–Hellman (классическая):
- Параметры: большое простое число p\;pp и примитивный корень (генератор) g\;gg (оба публичны).
- Участник A выбирает секрет aaa, вычисляет A=ga mod pA = g^{a} \bmod pA=gamodp и отправляет AAA участнику B.
- Участник B выбирает секрет bbb, вычисляет B=gb mod pB = g^{b} \bmod pB=gbmodp и отправляет BBB участнику A.
- A вычисляет общий секрет: s=Ba mod p=(gb)a mod p=gab mod p\;s = B^{a} \bmod p = (g^{b})^{a} \bmod p = g^{ab} \bmod ps=Bamodp=(gb)amodp=gabmodp.
- B вычисляет общий секрет: s=Ab mod p=gab mod p\;s = A^{b} \bmod p = g^{ab} \bmod ps=Abmodp=gabmodp.
- Общий ключ затем обрабатывают KDF и используют как симметричный сессионный ключ.
В компактной форме:
A=ga mod p,B=gb mod p,s=gab mod p. A=g^{a}\bmod p,\quad B=g^{b}\bmod p,\quad s=g^{ab}\bmod p.
A=gamodp,B=gbmodp,s=gabmodp.
Варианты: групповые/множественные, эллиптический DH (ECDH) — то же, но на кривых для меньших параметров и большей эффективности.
Возможные атаки на Diffie–Hellman и ответы:
1) Man‑in‑the‑Middle (MITM)
- Описание: атакующий M перехватывает AAA и BBB, подставляет свои AM=gm1A_M=g^{m_1}AM =gm1 , BM=gm2B_M=g^{m_2}BM =gm2 , устанавливая с A и B разные общие секреты; A и B думают, что общаются друг с другом.
- Защита: обязательная аутентификация сторон — цифровые подписи или сертификаты. Пример: A подписывает A=gaA=g^{a}A=ga подписью на Kpriv,AK_{priv,A}Kpriv,A ; B проверяет по Kpub,AK_{pub,A}Kpub,A . Или использовать протоколы с аутентификацией (SIGMA, TLS с (EC)DHE + сертификат).
2) Подмена/манипуляция параметрами (p, g)
- Описание: атакующий подставляет слабые параметры (малые факторы), чтобы упростить вычисление дискретного логарифма.
- Защита: использовать проверенные безопасные параметры (стандартные группы, безопасные простые/сильные простые), проверять параметры и публичные элементы (A, B) на допустимость (не равны 0,1; находятся в правильной подгруппе).
3) Атаки на дискретный логарифм (криптоанализ)
- Описание: вычисление aaa или bbb из A=ga mod pA=g^{a}\bmod pA=gamodp.
- Защита: выбирать крупные параметры: для классического DH — достаточно большой ppp (сейчас рекомендуют минимум 2048‑бит для классического DH) или предпочтение ECDH с подходящей кривой (например, Curve25519, P‑256) где безопасность при меньших размерах ключа выше.
4) Атаки повторного воспроизведения (replay)
- Описание: повторная отправка старых сообщений.
- Защита: использование свежести — неповторяемые nonces, метки сессии, временные метки, и подтверждение ключа (key confirmation).
5) Малые подгрупповые и фальшивые элементы
- Описание: A или B может добиться вывода ключа, заставив оппонента работать в маленькой подгруппе.
- Защита: проверка принадлежности публичных значений правильной подгруппе; использование безопасных (strong) простых и соответствующих генераторов; применять cofactor‑checks в эллиптических схемах.
6) Боковые каналы и компрометация ключей
- Описание: утечка через временные задержки, потребление энергии, крошки памяти.
- Защита: защищённая реализация, постоянное время, аппаратные модули безопасности (HSM), регулярная ротация ключей.
Способы защиты: аутентификация и PKI
- Аутентификация:
- Цифровые подписи: стороны подписывают свои DH‑выражения; проверка подписей исключает MITM.
- Пред‑доверенные ключи: предустановленные публичные ключи (static public keys), PSK.
- Каналы контроля (out‑of‑band) для сравнения ключей/хэшей (например, голосом, QR).
- Протоколы с взаимной аутентификацией: TLS (сертификаты), SSH (fingerprint verification), IKE (IPsec).
- PKI (инфраструктура открытых ключей):
- Центры сертификации (CA) выдают сертификаты, связывающие KpubK_{pub}Kpub с субъектом.
- Сертификат содержит подпись CA: проверка цепочки доверия до корневого CA.
- PKI обеспечивает масштабируемую централизованную валидацию публичных ключей, поддерживает отзыв сертификатов (CRL, OCSP).
- Риски PKI: компрометация CA, ошибки в проверке цепочки, необходимость управления отзывами — поэтому возможны расширения: OCSP stapling, certificate pinning, децентрализованные решения.
Рекомендации практики безопасности при использовании DH:
- Использовать аутентифицированные вариации: (EC)DHE + сертификаты/подписи (TLS, SSH).
- Предпочитать эпhemerial DH (DHE/ ECDHE) для прямой секретности (PFS) — ключи сессии не зависят от долгосрочных ключей.
- Применять KDF для получения симметричных ключей из sss: Ksess=KDF(s ∣∣ context)K_{sess} = \mathrm{KDF}(s\,||\,\text{context})Ksess =KDF(s∣∣context).
- Использовать AEAD для шифрования канала и отдельные механизмы для целостности/аутентификации.
- Валидировать параметры и публичные значения, использовать рекомендованные группы/кривые (например, Curve25519, secp384r1 по требованиям), и контролировать размер параметров (минимум рекомендованные стандарты).
Краткая итоговая формула общего секрета DH:
s=gab mod p, s = g^{ab}\bmod p,
s=gabmodp, но эта схема безопасна только при обязательной аутентификации участников и корректной валидации параметров (PKI/подписи, проверка групп, KDF, AEAD).