Google первой среди крупных интернет-компаний внедрила на HTTPS-серверах функцию защиты от будущей потери секретного ключа (функция называется perfect forward secrecy или PFS). Для этого разработано open-source дополнение к OpenSSL, в частности, написан быстрый генератор ключей на эллиптических кривых P-224, P-256 и P-521. По ходу работы специалисты Google также исправили несколько багов в OpenSSL.
PFS означает, что даже в случае получения (взлома) секретного серверного ключа злоумышленник не сможет расшифровать ранее перехваченный и записанный HTTPS-трафик. Пример из реальной жизни: предположим, что какая-то организация на уровне провайдера записывает и хранит весь ваш HTTPS-трафик, а в случае необходимости получает на сервере секретный ключ (или через много лет мощности компьютеров хватит, чтобы его взломать простым брутфорсом), после чего без проблем читает всю накопленную переписку.
В случае с Google такой вариант не пройдёт. Теперь здесь используются недолговечные («эфемерные») сеансовые ключи, которые обмениваются по схеме ECDHE (аббревиатура ECDHE расшифровывается как «эфемерный алгоритм Диффи-Хеллмана с использованием эллиптических кривых»). После сеанса связи ключи уничтожаются, и даже владелец сервера не сможет расшифровать сессию, которую его сервер зашифровал прошлым ключом.
Стандартная схема HTTPS предполагает «рукопожатие» с использованием алгоритмов RSA, RC4 и SHA, то есть клиент (браузер) выбирает случайный ключ для сессии, зашифровывает его с помощью открытого ключа сервера, подписывает своим закрытым ключом — и отправляет на сервер. Данную сессию можно расшифровать только с помощью закрытого ключа сервера и открытого ключа пользователя, так что сессия считается безопасной.
Добавление в схему ECDHE означает, что сервер для каждой сессии генерирует новый открытый ключ и подписывает его своим закрытым ключом. Таким образом, сессия не только является безопасной в данный момент, но и защищена от будущей потери секретного ключа сервера. Для генерации открытых ключей Google использует эллиптические кривые P-256, криптостойкость которых примерно соответствует 3248-битному RSA.
В настоящее время PFS считается опциональной фичей и редко используется в качестве опции HTTPS, и Google стал первой крупной компанией, которая внедрила его по умолчанию.
Система perfect forward secrecy реализована во всех HTTPS-сервисах Google (это Gmail, Google+, Google Docs, SSL Search) и поддерживается браузерами Chrome и Firefox. К сожалению, браузер IE пока не поддерживает сочетание ECDHE и RC4.
Вы можете убедиться в том, что используется механизм обмена ключами ECDHE, если во время защищённого сеанса связи с Google нажмёте на SSL-значок в адресной строке.
Поскольку дополнение для OpenSSL выложено open-source, аналогичный апгрейд HTTPS могут реализовать у себя и другие веб-сервисы.
via Google Online Security Blog, Adam Langley
PFS означает, что даже в случае получения (взлома) секретного серверного ключа злоумышленник не сможет расшифровать ранее перехваченный и записанный HTTPS-трафик. Пример из реальной жизни: предположим, что какая-то организация на уровне провайдера записывает и хранит весь ваш HTTPS-трафик, а в случае необходимости получает на сервере секретный ключ (или через много лет мощности компьютеров хватит, чтобы его взломать простым брутфорсом), после чего без проблем читает всю накопленную переписку.
В случае с Google такой вариант не пройдёт. Теперь здесь используются недолговечные («эфемерные») сеансовые ключи, которые обмениваются по схеме ECDHE (аббревиатура ECDHE расшифровывается как «эфемерный алгоритм Диффи-Хеллмана с использованием эллиптических кривых»). После сеанса связи ключи уничтожаются, и даже владелец сервера не сможет расшифровать сессию, которую его сервер зашифровал прошлым ключом.
Стандартная схема HTTPS предполагает «рукопожатие» с использованием алгоритмов RSA, RC4 и SHA, то есть клиент (браузер) выбирает случайный ключ для сессии, зашифровывает его с помощью открытого ключа сервера, подписывает своим закрытым ключом — и отправляет на сервер. Данную сессию можно расшифровать только с помощью закрытого ключа сервера и открытого ключа пользователя, так что сессия считается безопасной.
Добавление в схему ECDHE означает, что сервер для каждой сессии генерирует новый открытый ключ и подписывает его своим закрытым ключом. Таким образом, сессия не только является безопасной в данный момент, но и защищена от будущей потери секретного ключа сервера. Для генерации открытых ключей Google использует эллиптические кривые P-256, криптостойкость которых примерно соответствует 3248-битному RSA.
В настоящее время PFS считается опциональной фичей и редко используется в качестве опции HTTPS, и Google стал первой крупной компанией, которая внедрила его по умолчанию.
![](https://habrastorage.org/storage1/9b811da2/85b8dfc4/85b94f69/1f56dbe3.png)
Вы можете убедиться в том, что используется механизм обмена ключами ECDHE, если во время защищённого сеанса связи с Google нажмёте на SSL-значок в адресной строке.
Поскольку дополнение для OpenSSL выложено open-source, аналогичный апгрейд HTTPS могут реализовать у себя и другие веб-сервисы.
via Google Online Security Blog, Adam Langley