2013-12-10 1 views
11

Я нахожусь в классе infosec, и я наткнулся на эту концепцию онлайн, и это заинтриговало меня. Я также рассмотрел несколько веб-сайтов и википедию, которые объясняют концепцию, а также несколько сообщений о stackoverflow, но я все еще запутался. Из того, что я понимаю, в типичном обмене открытым ключом HTTPS, браузер и сервер объединяются с ключами для создания ключа сеанса ... если кто-то когда-либо получал закрытый ключ, который выводил ключ сеанса, они могли видеть все данные, которые было отправлено между этой связью, даже в прошлом.Как работает совершенная прямая секретность (PFS)

Я понимаю, что с помощью PFS «сеансовый ключ» никогда не отправляется даже в зашифрованном виде. Он хранится в секрете, так что даже если кто-то найдет закрытый ключ, они не смогут получить доступ к зашифрованной записанной информации из прошлого. Это верно?

Я также задавался вопросом, если я принимаю участие в обмене PFS, позвоните мне «A», с сервером «B», PFS должен работать с тем фактом, что если мой ключ станет скомпрометированным, разговор A и B не будет становятся скомпрометированными, потому что они не знают ключа сеанса. Но как «B» аутентифицирует меня как «A», если мой ключ фактически стал скомпрометированным ... например. как бы он знал разницу между мной (A) или другим пользователем (C), используя мой ключ, пытающийся получить доступ к данным.

+3

Этот вопрос не соответствует теме, поскольку речь идет о криптологии. Попробуйте [crypto.stackexchange.com] (http://crypto.stackexchange.com/) –

ответ

9

В сеансе, отличном от PFS, браузер определяет ключ сеанса (или, скорее, секрет, из которого он получен), и шифрует его с помощью RSA с открытым ключом RSA, полученным из сертификата, принадлежащего серверу. Сертификат также используется для аутентификации сервера. Затем сервер использует свой закрытый ключ (то, что вы называете основным ключом) для дешифрования ключа сеанса. Все подключения к серверу используют разные ключи сеанса, но если у вас есть главный ключ, вы можете понять их все, как это делает сервер. В PFS вы используете такие алгоритмы, как Diffie-Hellman, где главный ключ не используется. В этом случае мастер-ключ используется для аутентификации параметров для алгоритма. После согласования параметров обмен ключами происходит с использованием этих параметров и секрет обеих сторон. Параметры не секретны, и секреты, которые использовались сторонами, являются отбрасывателями после того, как ключ сеанса установлен (эфемерный). Таким образом, если вы обнаружите главный ключ, вы не сможете открыть ключ сеанса. Однако вы можете создать сервер, если вы получите ключ, а сертификат не будет признан недействительным. Чтобы узнать больше, о Диффи-Хеллман.

30

мне очень нравится ответ на Quora данной Роберт Любовь: http://www.quora.com/What-is-perfect-forward-secrecy-PFS-as-used-in-SSL

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

Алиса (клиент) хочет поговорить с Бобом (сервер).

Боб имеет закрытый ключ X и открытый ключ Y. X является секретным, Y является общедоступным.

Алиса генерирует большое случайное число, М.

Алиса шифрует M с помощью Y и посылает Y (М) к Бобу.

Боб расшифровывает Y (M) с помощью X, получая M.

Алиса и Боб теперь M и использовать его в качестве ключа к любому шифру они согласились использовать для сессии, например, SSL, AES.

Довольно просто, не так ли? Проблема, конечно, в том, что, если кто-либо узнает X, каждое отдельное сообщение скомпрометировано: X позволяет злоумышленнику расшифровать Y (M), уступая M.Давайте посмотрим на версию PFS этого сценария:

Алиса (клиент) хочет поговорить с Бобом (сервером).

Боб генерирует новый набор открытых и закрытых ключей Y и X.

Боб отправляет Й 'Алисе.

Алиса генерирует большое случайное число, М.

Алиса шифрует М с помощью Y 'и посылает Y' (M) к Бобу.

Боб расшифровывает Y «(M) с помощью X», что дает М.

Алисе и Бобу теперь M и использовать его в качестве ключа к любому шифру они согласились использовать для сессии, например, SSL, AES.

(X и Y по-прежнему используются для проверки идентичности;. Я уезжаю, что из)

В этом втором примере, X не используется для создания общего секрета, так что даже если X становится скомпрометирован, M не подлежит определению. Но вы просто подтолкнули проблему к X ', вы можете сказать. Что, если X 'станет известно? Но это гений, я говорю. Предполагая, что X 'никогда не используется повторно и никогда не хранится, единственный способ получить X' - это если противник имеет доступ к памяти хоста во время связи. Если ваш противник имеет такой физический доступ, то шифрование любого рода не принесет вам никакой пользы. Более того, даже если бы X 'было каким-то образом скомпрометировано, оно только раскрыло бы это конкретное сообщение.

Это PFS.

+0

Возможно, это глупый вопрос, но является ли новый ключ ** Y '** зашифрованным с использованием ** Y ** для передачи? Или ** Y '** отправлен в виде обычного текста? – Tara

+1

Оба Y и Y являются публичными. Также нет необходимости шифровать. (Шифрование с Y будет иметь ограниченную ценность, потому что только владелец X сможет расшифровать его.) – user1683793

Смежные вопросы