|
Клин Несколько дней назад опубликовала Rumor Crusher: «Может ли доступ в Интернет с общественным WiFi угрожать безопасности банковских счетов? В статье приводятся некоторые ситуации использования HTTPS для сетевой шифрованной передачи, и, судя по ответу, споры всё ещё существуют. По мере того как интернет становится всё более популярным, приложение становится всё более распространённым, и некоторые вопросы сетевой безопасности также привлекают всё больше внимания пользователей сети. Здесь мы поговорим о TLS/SSL, который мы часто называем HTTPS, от принципа до самого приложения, чтобы понять, что это такое и на какие проблемы стоит обращать внимание при использовании HTTPS и связанных с ним методов безопасности. Кибербезопасность — это комплексное мероприятие, включающее безопасность персональных компьютеров, протоколов, передачи данных, а также компаний и веб-сайтов по разработке программного обеспечения. Я надеюсь, что, постепенно объясняя вопросы, связанные с безопасностью, в будущем больше людей смогут понять сетевую безопасность и использовать её более безопасно. Статья будет длинной, и планируется разделить на три части на данный момент: Первая часть в основном описывает принцип HTTPS; Вторая часть в основном описывает процесс проверки SSL-сертификатов и некоторые меры предосторожности при использовании. В третьей части приводятся случаи HTTPS-атак. 1. Что такое HTTPS?Прежде чем говорить о HTTPS, давайте поговорим о том, что такое HTTP — протокол, который мы обычно используем при серфинге в интернете. Данные, передаваемые HTTP-протоколом, не зашифрованы, то есть в открытом виде, поэтому передача личной информации с помощью протокола HTTP очень небезопасна. Для обеспечения возможности шифрования и передачи этих частных данных Netscape разработала протокол SSL (Secure Sockets Layer) для шифрования данных, передаваемых протоколом HTTP, что породило HTTPS. Текущая версия SSL — 3.0, которая определена в RFC 6101 IETF (Internet Engineering Task Force), а затем IETF обновила SSL 3.0, что привело к созданию TLS (Transport Layer Security) 1.0, определённой в RFC 2246. На самом деле, наш текущий HTTPS — это протокол TLS, но поскольку SSL появился относительно рано и до сих пор поддерживается современными браузерами, SSL всё ещё ассоциируется с HTTPS, но будь это TLS или SSL — это явление прошлого века, последняя версия SSL — 3.0, и TLS продолжит предоставлять нам услуги шифрования в будущем. Текущая версия TLS — 1.2, определенная в RFC 5246, и пока не широко используется. Для тех, кто интересуется историей, вы можете обратиться к http://en.wikipedia.org/wiki/Transport_Layer_Security, где подробно описано TLS/SSL.
2. Насколько HTTPS безопасен?Ответ — да, это безопасно. В ближайшие недели Google включит HTTPS для всех локальных доменов по всему миру, пользователям нужно будет только войти через свой аккаунт Google перед поиском, а все поисковые операции будут зашифрованы с помощью протокола TLS, см. http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. Как работает HTTPSHTTPS требует рукопожатия между клиентом (браузером) и сервером (веб-сайтом) перед передачей данных, и информация о паролах обеих сторон устанавливается в процессе рукопожатия. Протокол TLS/SSL — это не просто набор зашифрованных протоколов передачи, но и произведение искусства, тщательно разработанное художниками с использованием асимметричного, симметричного шифрования и алгоритмов HASH. Простое описание процесса рукопожатия следующее:
- Браузер отправляет на сайт набор поддерживаемых правил шифрования.
- Веб-сайт выбирает набор алгоритмов шифрования и HASH-алгоритмов из них и отправляет свою идентификационную информацию обратно в браузер в виде сертификата. Сертификат содержит информацию, такую как адрес сайта, открытый ключ шифрования и эмитент сертификата.
- После получения сертификата сайта браузер делает следующее:
- Проверьте достоверность сертификата (является ли орган, выдающий сертификат, совпадает ли адрес сайта, соответствующий адресу посещаемого и т.д.), если сертификат доверен, в панели браузера появится небольшой блокировочный блок, в противном случае появится запрос о недоверенности сертификату.
- Если сертификат доверен или пользователь принимает недоверенный сертификат, браузер генерирует случайное количество паролей и шифрует их публичным ключом, указанным в сертификате.
- Сообщение с рукопожатием вычисляется с использованием согласованного ХЕША, оно шифруется сгенерированным случайным числом, после чего вся ранее сгенерированная информация отправляется на сайт.
4. После получения данных из браузера сайт делает следующее: - Используйте свой собственный приватный ключ для расшифровки пароля, используйте пароль для расшифровки сообщения о рукопожатии, отправленного браузером, и убедитесь, что HASH совпадает с тем, что был отправлен браузером.
- Сообщение о рукопожатии шифруется паролем и отправляется в браузер.
5. Браузер расшифровывает и вычисляет ХЭШ сообщения рукопожатия, если он совпадает с HASH, отправленным сервером, процесс рукопожатия заканчивается, и тогда все коммуникационные данные будут зашифрованы случайным паролем, сгенерированным предыдущим браузером с использованием симметричного алгоритма шифрования.
Здесь браузер и сайт отправляют друг другу зашифрованное сообщение с рукопожатием и проверяют, чтобы убедиться, что обе стороны получили одинаковый пароль, могут нормально шифровать и расшифровать данные, а также провести тест для последующего обмена реальными данными. Кроме того, алгоритмы шифрования и HASH, которые обычно используются в HTTPS, следующие: - Алгоритмы асимметричного шифрования: RSA, DSA/DSS
- Симметричные алгоритмы шифрования: AES, RC4, 3DES
- Алгоритм HASH: MD5, SHA1, SHA256
Среди них алгоритм асимметричного шифрования используется для шифрования сгенерированного пароля во время процесса рукопожатия, симметричный алгоритм шифрования — для шифрования реальных передаваемых данных, а алгоритм HASH — для проверки целостности данных. Поскольку пароль, генерируемый браузером, является ключом к шифрованию всех данных, он шифруется с помощью асимметричного алгоритма шифрования во время передачи. Асимметричный алгоритм шифрования генерирует публичные и приватные ключи, публичные ключи можно использовать только для шифрования данных, поэтому их можно передавать по своему желанию, а приватные ключи сайта используются для расшифровки данных, поэтому сайт будет очень тщательно хранить приватный ключ, чтобы предотвратить утечку. Любая ошибка в процессе рукопожатия TLS может нарушить зашифрованное соединение, препятствуя передаче личной информации. Именно из-за высокой безопасности HTTPS злоумышленники не могут найти отправную точку, поэтому используют поддельные сертификаты, чтобы обмануть клиентов и получить открытую информацию, но эти методы можно выявить, о чём я расскажу в следующей статье. Однако в 2010 году эксперты по безопасности обнаружили уязвимость в работе с протоколом TLS 1.0: http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/ этот метод атаки, называемый BEAST, был обнаружен экспертами по безопасности ещё в 2002 году, но не был обнародован. Microsoft и Google устранили эту уязвимость. См.: http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 Упрощённая версия HTTPS также работает в сочетании симметричного шифрования против асимметричного шифрования. |