Яндекс.Метрика

    Песочница

    Заметки про SSL

    После прочтения новостей про Google SSL PFS создается впечатление, что даже те, кто анонсируют новости, могут путать следующие два понятия:
    • Forward secrecy — секретность будущих сообщений
    • Backward secrecy — секретность прошлых сообщений

    Используя термин Perfect forward secrecy в статье про Google SSL PFS приводится пример backward secrecy. Для большинства это не будет иметь большого значения, но для тех, кто хочет разобраться — милости прошу.

    Секретность будущих сообщений означает, что при утечке приватного ключа в асимметрическом шифровании (private key), все будущие сообщения можно будет расшифровать «на лету».

    Секретность прошлых сообщений означает, что при утечке приватного ключа в асимметрическом шифровании (private key), все прошлые сообщения записанные хакером(network attacker threat model) можно будет расшифровать.

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

    Также следует добавить, что для данного конкретного примера в контексте использования алгоритма Ephemeral Diffie-Hellman, сам алгоритм имеет оба свойства (секретность будущих и прошлых сообщений). Но в других алгоритмах и схемах доставки сообщений (commitment schemes) алгоритм может предоставлять секретность будущих сообщений, но не прошлых. Один из примеров — Timed effecient commitment scheme with bounded sender.

    Давайте теперь рассмотрим механизмы образования ключа для текущей сессии в SSL/TLS.
    Каким же образом могут образовываться ключи в SSL/TLS? Существуют четыре основных способа.
    • RSA
    • Fixed Diffie-Hellman
    • Ephemenral Diffie-Hellman
    • Anonymous Diffie-Hellman

    Не вдаваясь в подробности каждого способа образования ключа, давайте рассмотрим какими же свойствами обладает каждый из способов или «What's the worst thing that can happen?».

    При утере приватного ключа RSA хакер получает возможность расшифровать все записанные прошлые сообщения и будущие сообщения. Реализация обмена ключей в RSA является односторонней (non-contributory): вся необходимая информация для образования симметричного ключа, который создается на этапе рукопожатия (SSL/TLS handshake), пересылается на сервер и зашифрована публичным ключом (public key) сервера. Раскрытие приватного ключа дает возможность узнать симметричный ключ данной сессии.

    Механизм Fixed Diffie-Hellman использует постоянный публичный ключ (g^a mod p), который прописан в сертификате сервера. Это также означает, что при каждом новом соединении, клиент (браузер) предоставляет свою часть ключа (g^b mod p). После обмена ключами, образуется новый симметрический ключ (g^(ab) mod p) для обмена информацией для текущей сессии. При раскрытии приватного ключа Diffie-Hellman (a из g^a mod p) сервера, хакер сможет расшифровать ранее записанные сообщения, а также все будущие сообщения. Это становится возможным из-за самого механизма Diffie-Hellman: (g^b mod p) ^b mod p = g^(ab) mod p. Так как хакеру известен частный ключ сервера, он сможет узнать симметричный ключ каждой сессии и даже тот факт, что механизм образования ключа является двусторонним (contributory) не поможет.

    Механизм Anonymous Diffie-Hellman не предоставляет гарантий секретности ибо данные передаются незашифрованными.

    Единственный вариант, при котором гарантируется безопасность прошлых и будущих сообщений — Ephemenral Diffie-Hellman. Разница по сравнению с ранее рассмотренными методами заключается в том, что при каждом новом соединении сервером и клиентом создается одноразовый ключ (g^a mod p и g^b mod p). Таким образом, даже если хакеру достанется текущий частный ключ, он сможет расшифровать только текущую сессию, но не предыдущие или будущие сессии.