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

Теперь, как насчет того, когда я получаю доступ к аутентифицированной странице. Допустим, я захожу на страницу моего банковского счета. Как веб-сайт шифрует пакет, предназначенный для меня. Как мне открыть это и как я знаю, что кто-то по пути не читал это.

7 ответов7

6

Это довольно большой вопрос =) Ниже приведен общий обзор HTTPS; кричите, если что-то непонятно, и я укажу больше деталей.

При использовании HTTPS-соединения криптография с открытым ключом используется только во время инициализации сеанса. Частью этой инициализации является безопасная замена частного общего ключа, который затем используется для симметричного шифрования. Причиной этого является то, что асимметричное шифрование (с открытым ключом) значительно медленнее, чем шифрование с симметричным ключом, из-за математики.

SSL рукопожатие

На очень высоком уровне протокол выглядит примерно так:

  1. Клиент отправляет начальное сообщение "HELLO", которое содержит версию ssl, которую он хотел бы использовать, псевдослучайную строку битов (назовем это B1) и список различных шифров, которые он поддерживает.

  2. Сервер отвечает своим собственным сообщением "HELLO", другой псевдослучайной строкой битов (назовем это B2), выбранным шифром (обычно это самый сильный шифр из списка, отправленного клиентом, который поддерживает сервер), и его сертификат, который содержит его открытый ключ (назовем это k).

  3. Затем клиент использует сертификат для аутентификации сервера (см. Ниже) и создает "секрет мастера" - еще одну строку псевдослучайных битов, которую мы назовем S.

  4. Если клиент удовлетворен результатами проверки подлинности сервера, он шифрует секретный ключ перед мастером S с помощью открытого ключа сервера k и отправляет его на сервер (сам S шифруется, но соединение по-прежнему отсутствует).

  5. На этом этапе сервер и клиент совместно используют три строки битов - B1, B2 и S. B1 и B2 были отправлены в незашифрованном виде - S был зашифрован, и поэтому, предполагая, что частный ключ сервера действительно является закрытым, известен только клиент и сервер.

  6. И клиент, и сервер затем используют эти три битовые строки для создания ключа сеанса - строки, которая известна только им, и может использоваться в качестве ключа в ранее выбранном симметричном шифре.

  7. Клиент и сервер затем обмениваются сообщениями, которые указывают, что они меняют протокол, и все последующие сообщения шифруются (симметрично, с ключом, вычисленным выше).

Проверка подлинности сервера

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

Весь цифровой сертификат является третьей стороной, утверждающей, что «этот объект содержит закрытый ключ, который соответствует этому открытому ключу, который встроен в этот сертификат». Такие организации, как Verisign, сделают это утверждение - по цене. Причина, по которой люди платят Verisign и другим за сертификаты, заключается в том, что Verisign столкнулась с проблемой внедрения своих промежуточных сертификатов в большинство распространенных браузеров.

Итак, когда клиент получает сервер HELLO, он выполнит следующие проверки:

  • Соответствует ли сегодняшняя дата сроку действия сертификата?
  • Имя субъекта сертификата совпадает с именем сервера, к которому я пытаюсь подключиться?
  • Совпадает ли имя эмитента в сертификате с каким-либо из тех ЦС, о открытых ключах которых я знаю?
    • Если да, проверяет ли этот открытый ключ, который у меня есть, для этого центра сертификации?

Если все эти проверки пройдены, клиент предполагает, что он может поверить, что сервер - это тот, кого он ожидал. Затем он берет открытый ключ (все еще k) из сертификата и использует его для безопасной передачи S на сервер. На данный момент идея заключается в том, что у вас есть какое-то стороннее (Verisign) утверждение о том, что открытый ключ принадлежит серверу; таким образом, только сервер сможет расшифровать результат E (S, k), и, следовательно, только сервер может создать соответствующий ключ, который вы будете использовать для симметричного шифра.

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

(Существуют и другие приятные повороты - например, причина в том, что используются трехбитные строки, для предотвращения атак воспроизведения. Если используется только S, злоумышленник может записать весь сеанс и воспроизвести его в свободное время - например, многократно повторяя инструкцию по переводу денег. Благодаря тому, что и клиент, и сервер генерируют дополнительные псевдослучайные строки, вы значительно уменьшаете вероятность того, что два независимых SSL-рукопожатия произведут один и тот же S.)

1

На самом деле это проще, чем это.

Открытые ключи являются открытыми. Любой может их видеть, любой может их использовать ...Но они только один путь. То, что зашифровано вашим открытым ключом, может быть дешифровано только ВАШИМ секретным ключом.

Итак, в вашем примере происходит то, что вы отправляете в банк пакеты, зашифрованные с помощью открытого ключа, принадлежащего банку, и банк отправляет обратно пакеты, зашифрованные с помощью ВАШЕГО открытого ключа. Только вы можете прочитать, что банк отправляет вам, и только банк может прочитать то, что вы отправляете в банк. Даже если вы зашифруете его открытым ключом, вы не сможете его прочитать. Вы можете только читать пакеты, если у вас есть соответствующий закрытый ключ.

Если предположить, что закрытые ключи действительно являются закрытыми, никто не сможет прочитать ваши пакеты, не взломав закрытый ключ.

Теперь, предостережение - атака "Человек посередине". Это место, где между вами и вашим собеседником устанавливается прокси-сервер или сайт ретрансляции, и вынуждает вас принять их открытый ключ вместо ключа сайта, который вы считаете посещаемым. Таким образом, вы отправляете им пакеты, зашифрованные их открытым ключом, которые они затем читают, перешифровывают с помощью их открытого ключа и пересылают на сайт, который затем отправляет им пакеты, которые они читают, и затем пересылает вам.

0

Простой ответ: точно так же.

Предположим, что A может безопасно отправлять данные в B, но B может только небезопасно отправлять данные в A. Все, что вам нужно сделать, это сделать, чтобы А составил случайный ключ и безопасно отправить его в B. Теперь B может зашифровать данные этим случайным ключом и отправить их. к, и это безопасно.

Поэтому, если у вас есть двунаправленная ссылка, которая защищена только в одном направлении, сделать ее безопасной в обоих направлениях тривиально.

0

Вы знаете, кто является банком, потому что ваш браузер признает их сертификат действительным. Но откуда банк узнает, что это ты? Ответ заключается в том, что это не так, по крайней мере, из SSL. Ваш браузер делает личный ключ на сессию. Этот закрытый ключ ничего не значит для банка, потому что вы все равно можете быть кем угодно. Тем не менее, что закрытый ключ дает вам безопасное соединение. Поскольку вы доверяете веб-сайту банка, вы входите в систему с использованием безопасного соединения, и в этот момент он знает, что вы являетесь вами, и что сеанс безопасен для данных о вас.

Банк шифрует данные для вашего браузера, используя открытый ключ, который браузер дал ему в начале сеанса, а вы зашифруете данные для банка, используя их открытый ключ. Процесс одинаков в обоих направлениях, по сути, когда вы устанавливаете личность.

0

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

Причина использования шифрования с открытым ключом только для передачи секретного ключа заключается в том, что симметричное шифрование выполняется намного быстрее. Это также одинаково безопасно. И, как вы указали, только одна сторона должна иметь открытый ключ.

Фактически, единственная причина, по которой веб-сайту вообще нужен открытый ключ, заключается в том, что вы можете быть уверены, с кем разговариваете. Это предотвращает атаки "человек посередине". В целях обеспечения безопасности соединения от перехватчиков это не является строго обязательным. Фактически, многие веб-сайты используют открытые ключи, которые являются самозаверяющими (в отличие от сертифицированных органом регистрации) для SSL. В этом случае вы не можете быть уверены, что другая сторона действительно является тем, кем они себя называют, но вы можете быть уверены, что ни одна третья сторона не сможет их прослушать.

0

Ваш вопрос немного общий. Что именно вы ищете?

  • реализации протокола (как открыть зашифрованный пакет)
  • математические детали (как веб-сайт шифрует пакет, предназначенный для меня)
  • вопросы безопасности (атака «человек посередине»)

Вы читали соответствующую запись в Википедии ?

0

Здесь используются два типа шифров. Существует открытый ключ (асимметричный) тип и более распространенный тип общего ключа (симметричный). Симметричные шифры намного эффективнее, так как способов шифрования с открытым ключом не так много.

Поэтому вы используете открытый ключ для установления контакта. Ваш браузер может затем зашифровать общий ключ с открытым ключом сайта, и только этот сайт может получить общий ключ. Затем ваш браузер и веб-сайт обмениваются данными со стандартным шифром. Ключ обычно сбрасывается в конце сеанса. Поэтому, пока все идет правильно, ваше общение безопасно.

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

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

(Я не буду вдаваться в технические подробности, но это довольно простое применение шифров с открытым ключом и криптографических хэшей. Хеш - это метод приведения файла или чего-либо к идентификатору с фиксированной длиной, так что два файла вряд ли будут иметь одинаковое значение. Криптографический хеш - это тот, где действительно трудно создать два файла с одинаковым хеш-значением.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .