Лекция: Понимание криптографии и ее роли в защите конфиденциальности в интернете.
Пересобрал и предоставил: HUTSLE
И так, приступим, начнем с того, что же такое криптография
Криптография - это наука о защите информации путем преобразования ее в код, который может быть прочитан только теми, у кого есть ключ для его разблокировки. Это способ сохранить ваши секреты в безопасности от людей, не имеющих права доступа к ним.
Другими словами, криптография - это способ убедиться в том, что информацию могут прочитать только те люди, которые должны ее видеть. Это как поставить замок на дверь, чтобы не пускать людей, но вместо физического замка - цифровой.
Криптография уже тысячи лет используется для защиты важной информации, такой как военные секреты, финансовые операции и личные сообщения. На самом деле, самый ранний известный пример криптографии относится к Древнему Египту, где иероглифы использовались для кодирования сообщений.
Сегодня криптография используется во многих сферах, включая интернет-банкинг, электронную почту и приложения для обмена сообщениями. Это важный инструмент для обеспечения безопасности и сохранности нашей личной и конфиденциальной информации.
Существует множество различных видов криптографии, но все они имеют одну общую черту: они используют сложные математические алгоритмы для скремблирования информации таким образом, что только человек с правильным ключом может ее расшифровать. Некоторые общие примеры криптографии включают криптографию с симметричным ключом, криптографию с открытым ключом и хэш-функции.
Криптография - это один из самых современных и сложных разделов математики, криптография играет решающую роль в обеспечении безопасности нашей информации в современном цифровом мире.
Существует несколько типов алгоритмов шифрования, каждый из которых имеет свои сильные и слабые стороны. Вот некоторые из наиболее распространенных типов:
1. Шифрование с симметричным ключом - этот тип шифрования использует один ключ для шифрования и расшифровки данных. И отправитель, и получатель должны иметь один и тот же ключ. Примерами алгоритмов с симметричным ключом являются AES, DES и Blowfish.
2. Асимметричное шифрование - также известный как шифрование с открытым ключом, этот тип шифрования использует пару ключей - открытый ключ и закрытый ключ. Отправитель использует открытый ключ получателя для шифрования сообщения, а получатель использует свой закрытый ключ для его расшифровки. Примерами алгоритмов с асимметричными ключами являются RSA и криптография с эллиптическими кривыми (ECC).
3. Хеш-функции - этот тип алгоритмов принимает данные и выдает строку символов фиксированной длины, называемую хэшем. Хэш-функции часто используются для обеспечения целостности данных, поскольку любые изменения в данных приведут к изменению хэша. Примерами хэш-функций являются SHA-256 (512) и MD5.
Рассмотрим симметричный тип шифрования более подробно:
Симметричное шифрование работает путем преобразования незашифрованных данных в зашифрованные данные с помощью секретного ключа. Процесс шифрования данных включает применение математической функции к открытому тексту и секретному ключу для получения зашифрованного текста. Процесс расшифровки данных включает применение той же математической функции к шифротексту и секретному ключу для восстановления исходного открытого текста.
Математическая функция, используемая в симметричном шифровании, обычно представляет собой блочный шифр, который принимает на вход блок открытого текста фиксированной длины и выдает на выходе блок зашифрованного текста фиксированной длины. Блочный шифр обрабатывает открытый текст и секретный ключ с помощью ряда математических операций, таких как подстановка и перестановка, чтобы получить шифрованный текст.
Безопасность алгоритмов симметричного шифрования основана на сложности определения секретного ключа по шифротексту. Если бы злоумышленник смог определить секретный ключ, он мог бы легко расшифровать шифротекст и получить доступ к данным. Поэтому секретный ключ должен храниться в тайне.
Поскольку математическая интерпретация механизма работы данного алгоритма достаточно объемная, описать её в рамках этой лекции я не смогу, поскольку это сильно увеличит объем лекции.
Теперь рассмотрим асимметричный тип шифрования более подробно
Шифрование с открытым ключом опирается на математические свойства определенных математических функций, таких как проблема факторизации или проблема дискретного логарифма, которые, как считается, трудно решить с помощью современных вычислительных ресурсов. Эти математические проблемы составляют основу безопасности алгоритмов шифрования с открытым ключом.
На высоком уровне шифрование с открытым ключом работает путем преобразования открытого текста (незашифрованных данных) в шифрованный текст (зашифрованные данные) с помощью открытого ключа получателя. Процесс шифрования данных включает применение математической функции к открытому тексту и открытому ключу для получения шифрованного текста. Процесс расшифровки данных включает применение математической функции к шифрованному тексту и закрытому ключу получателя для восстановления исходного открытого текста.
Математическая функция, используемая в шифровании с открытым ключом, обычно является односторонней функцией, которую легко вычислить в одном направлении, но трудно - в другом. Одним из примеров такой функции является модульное экспонирование, которое заключается в возведении числа в степень и последующем вычислении остатка при делении на другое число.
В схеме шифрования с открытым ключом каждый пользователь генерирует пару ключей - открытый ключ и закрытый ключ. Открытый ключ передается другим пользователям, а закрытый ключ хранится в тайне. Любой может использовать открытый ключ получателя для шифрования сообщения, но расшифровать сообщение может только получатель, владеющий закрытым ключом.
В качестве примера рассмотрим на практике, как работает алгоритм RSA
RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — алгоритм ширования с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших полупростых чисел.
Ниже я представлю математическую интерпретацию RSA:
Для начала необходимо сгенерировать открытый и секретные ключи:
Возьмем два больших простых числа p и q
Определим n, как результат умножения p на q - n= p*q
Выберем случайное число, которое назовем d. Это число должно быть взаимно простым (не иметь ни одного общего делителя, кроме 1) с результатом умножения (p-1)*(q-1)
Определим такое число е, для которого является истинным следующее соотношение (e*d) mod ((p-1)*(q-1))=1
Hазовем открытым ключем числа e и n, а секретным - d и n
Для того, чтобы зашифровать данные по открытому ключу {e,n}, необходимо следующее:
Разбить шифруемый текст на блоки, каждый из которых может быть представлен в виде числа M(i)=0,1,2..., n-1( т.е. только до n-1)
Зашифровать текст, рассматриваемый как последовательность чисел M(i) по формуле C(i)=(M(i)^e) mod n
Чтобы расшифровать эти данные, используя секретный ключ {d,n}, необходимо выполнить следующие вычисления:
В результате будет получено множество чисел M(i), которые представляют собой исходный текст.
Как видим, алгоритм работает достаточно просто, без громоздких формул, но при этом весьма эффективно.
Теперь рассмотрим хэш-функции более подробно:
Хэш-функция работает, принимая входное сообщение и применяя к нему серию математических операций для получения выходного сигнала фиксированного размера. Выход хэш-функции представляет собой последовательность двоичных или шестнадцатеричных цифр, которая представлена в виде строки символов.
Одним из важных свойств хэш-функций является то, что они разработаны как односторонние функции. Это означает, что легко вычислить хэш сообщения, учитывая само сообщение, но восстановить исходное сообщение по хэшу вычислительно невозможно. Это свойство известно как устойчивость к атаке нахождения прообраза.
Еще одно важное свойство хэш-функций заключается в том, что они разработаны таким образом, чтобы быть устойчивыми к коллизиям. Это означает, что найти два разных сообщения, которые дают одно и то же хэш-значение, не представляется возможным с вычислительной точки зрения. Это свойство важно для таких приложений, как цифровые подписи и хранение паролей, где необходимо убедиться, что два разных входных сообщения не могут дать одинаковый выходной хэш.
Хеш-функции обычно разрабатываются как детерминированные, то есть при одном и том же входном сообщении всегда будет получено одно и то же хеш-значение. Кроме того, хэш-функции разрабатываются таким образом, чтобы быть чувствительными даже к небольшим изменениям во входном сообщении, то есть даже небольшое изменение во входном сообщении приведет к совершенно другому хэш-значению.
Математическая интерпретация алгоритмов SHA так же является достаточно объемной, поэтому я не стал включать её в лекицю.
Мы рассмотрели 3 типа шифрования, если вы внимательно читали, то видели, что ключ симметричного алгоритма и закрытый ключ асимметричного должны быть защищены и тут возникает проблема безопасной передачи ключей между пользователями, эту проблему решает алгоритм Диффи-Хеллмана (DH), который мы сейчас рассмотрим.
Алгоритм обмена ключами Диффи-Хеллмана (DH) - это широко используемый метод безопасного обмена криптографическими ключами по незащищенному каналу связи. Он был изобретен Уитфилдом Диффи и Мартином Хеллманом в 1976 году и считается одним из основополагающих алгоритмов современной криптографии.
Алгоритм Диффи-Хеллмана позволяет двум сторонам договориться об общем секретном ключе без фактической передачи ключа по каналу связи. Вместо этого обе стороны генерируют пару открытый-частный ключ и обмениваются друг с другом открытыми ключами. Открытые ключи используются для создания общего секретного ключа, который известен только обеим сторонам.
Вот пошаговый обзор того, как работает алгоритм Диффи-Хеллмана:
Обе стороны, Алиса и Боб, договариваются о большом простом числе p и генераторе g, где g - это число, которое меньше p и обладает определенным свойством.
Алиса генерирует случайное секретное число a и вычисляет A = g^a mod p Она отправляет A Бобу.
Боб генерирует случайное секретное число b и вычисляет B = g^b mod p Он отправляет B Алисе.
Алиса вычисляет общий секретный ключ s = B^a mod p
Боб вычисляет общий секретный ключ s = A^b mod p
Теперь и Алиса, и Боб имеют один и тот же общий секретный ключ s, который они могут использовать для шифрования и дешифрования сообщений между собой.
Алгоритм Диффи-Хеллмана используется во многих криптографических протоколах, включая SSL/TLS, SSH и других. Он особенно полезен в сценариях, когда двум сторонам необходимо установить общий секретный ключ без предварительного обмена информацией, например, при онлайн-транзакциях, VPN-соединениях или удаленном доступе к сети.
Одним из ключевых достоинств алгоритма Диффи-Хеллмана является то, что даже если подслушивающее лицо перехватит открытые ключи, которыми обменялись Алиса и Боб, оно не сможет легко вычислить общий секретный ключ, не зная также секретных значений a и b. Это свойство известно как "вычислительная безопасность" алгоритма. Однако алгоритм Диффи-Хеллмана уязвим для определенных атак при неправильной реализации, таких как атака "человек посередине", которая может быть ослаблена с помощью дополнительных мер безопасности, таких как цифровые подписи или сертификаты открытых ключей.
Теперь перейдем к тому, где же в интернете применяются технологии криптографии, начнем с того, с чем сталкивались абсолютно все пользователи – передача данных по зашифрованному протоколу HTTPS, сейчас я объясню, что это такое и почему важно использовать HTTPS, а не HTTP при работе с сайтами в клирнете
HTTPS (Hypertext Transfer Protocol Secure) - это защищенная версия протокола HTTP, который используется для передачи данных между веб-браузером и веб-сервером. HTTPS использует шифрование для защиты конфиденциальных данных, таких как учетные данные, номера кредитных карт и другая личная информация, от перехвата и чтения третьими лицами.
Когда вы посещаете веб-сайт, использующий HTTPS, данные, которыми обмениваются ваш веб-браузер и веб-сервер, шифруются с помощью протокола SSL/TLS (Secure Socket Layer/Transport Layer Security). Это означает, что даже если третья сторона перехватит данные, она не сможет их прочитать, не имея криптографического ключа для их расшифровки. Вот почему HTTPS так важен для защиты конфиденциальности и безопасности в интернете.
Обычно вы можете определить, использует ли сайт HTTPS, посмотрев на URL-адрес в адресной строке вашего браузера. Если URL начинается с "https://", а не с "http://", значит, сайт использует HTTPS.
Помимо шифрования данных, HTTPS также обеспечивает аутентификацию и проверку целостности. Протокол SSL/TLS предоставляет средства для проверки того, что сайт, который вы посещаете, является подлинным и не был подделан. Для этого используются цифровые сертификаты, которые выдаются доверенными сторонними организациями, известными как центры сертификации (ЦС). Цифровые сертификаты позволяют проверить подлинность сайта и убедиться в том, что шифрование SSL/TLS работает должным образом.
HTTPS является важным инструментом для защиты конфиденциальности и безопасности в Интернете. Шифруя данные и обеспечивая аутентификацию и проверку целостности, он помогает обеспечить конфиденциальность и безопасность конфиденциальной информации. Важно искать протокол HTTPS при посещении сайтов, требующих ввода личной информации, например, учетных данных для входа в систему или номеров кредитных карт.
Теперь рассмотрим, что такое цифровой сертификат сайта (TLS-сертификат)
Сертификат сайта TLS, также известный как сертификат SSL/TLS, - это цифровой сертификат, который используется для проверки подлинности веб-сайта и установления безопасного соединения между веб-сайтом и браузером пользователя.
Когда пользователь посещает сайт, использующий TLS, его браузер устанавливает защищенное соединение с сервером сайта. Во время этого процесса сервер отправляет браузеру свой сертификат сайта TLS. Сертификат содержит доменное имя сайта, открытый ключ сервера сайта и другую информацию, которая может быть использована для проверки подлинности сайта.
Сертификат сайта TLS выдается доверенной сторонней организацией, называемой центром сертификации (ЦС), которая проверяет подлинность сайта перед выдачей сертификата. ЦС использует различные методы для проверки подлинности сайта, например, проверяет принадлежность домена и удостоверяет личность владельца или администратора сайта.
После того как браузер получает сертификат сайта TLS, он проверяет сертификат, чтобы убедиться, что он был выдан доверенным ЦС и что сертификат действителен для доменного имени сайта. Браузер также использует открытый ключ в сертификате для установления безопасного соединения с сервером сайта. Это защищенное соединение используется для шифрования всех данных, которыми обмениваются браузер и сервер, гарантируя, что данные не могут быть перехвачены или подделаны злоумышленниками.
Сертификаты сайтов TLS играют важную роль в обеспечении безопасности и конфиденциальности. Проверяя подлинность веб-сайтов и шифруя данные, которыми обмениваются пользователи и веб-сайты, сертификаты сайтов TLS помогают предотвратить различные типы атак, такие как атака "человек посередине", когда злоумышленники перехватывают и изменяют данные, которыми обмениваются пользователи и веб-сайты.
В общем, сертификат сайта TLS - это цифровой сертификат, который используется для проверки подлинности веб-сайта и установления безопасного соединения между веб-сайтом и браузером пользователя. Сертификат выдается доверенной сторонней организацией, называемой центром сертификации, и содержит такую информацию, как доменное имя сайта и открытый ключ. Сертификаты сайтов TLS играют важную роль в обеспечении безопасности, проверяя подлинность веб-сайтов и шифруя данные, которыми обмениваются пользователи и веб-сайты.
Теперь рассмотрим как работает TLS шифрование при взаимодействии с сайтом
TLS (Transport Layer Security) – шифрование транспортного уровня) является преемником SSL и используется для обеспечения безопасной связи через Интернет. TLS использует комбинацию криптографических протоколов и алгоритмов для шифрования и защиты данных, передаваемых между веб-сервером и веб-браузером пользователя.
Криптографические протоколы, используемые в TLS, включают:
Протокол рукопожатия - тот протокол используется для установления безопасного соединения между веб-сервером и веб-браузером пользователя. В процессе квитирования обе стороны обмениваются криптографическими ключами и согласовывают параметры алгоритма шифрования, который будет использоваться для сессии.
Протокол записи - этот протокол используется для шифрования и дешифрования данных, передаваемых между веб-сервером и веб-браузером пользователя. Он использует комбинацию шифрования с симметричным ключом и кодов аутентификации сообщений (MAC) для обеспечения конфиденциальности и целостности данных.
Протокол изменения шифра - этот протокол используется для изменения алгоритма шифрования и ключей, используемых протоколом записи. Он используется в процессе рукопожатия для перехода на более сильный алгоритм шифрования или для повторного согласования параметров шифрования.
Алгоритмы шифрования, используемые в TLS, включают:
Шифрование с симметричным ключом - этот алгоритм шифрования использует один и тот же ключ как для шифрования, так и для расшифровки данных. TLS поддерживает несколько алгоритмов шифрования с симметричным ключом, включая Advanced Encryption Standard (AES).
Шифрование с открытым ключом - этот алгоритм шифрования использует пару ключей, один открытый и один закрытый, для шифрования и дешифрования данных. TLS поддерживает несколько алгоритмов шифрования с открытым ключом, включая RSA в качестве асимметричный шифра, Diffie-Hellman (DH) для безопасного обмена ключами и ECDSA (замена DSA) в качестве алгоритма цифровой подписи.
Хеш-функции - TLS использует хэш-функции для генерации дайджестов сообщений, которые используются для обеспечения целостности данных, передаваемых между веб-сервером и веб-браузером пользователя. TLS поддерживает несколько хэш-функций, включая Secure Hash Algorithm (SHA).
TLS использует комбинацию криптографических протоколов и алгоритмов для обеспечения безопасной связи через Интернет. Шифруя данные, передаваемые между веб-сервером и веб-браузером пользователя, и используя коды аутентификации сообщений для обеспечения целостности данных, TLS помогает защитить конфиденциальную информацию и обеспечить конфиденциальность и безопасность в интернете.
Рассомтрим ещё 1 поплуярный протокол, где используются вышеперечисленные криптографические алгоритмы - SSH
SSH (Secure Shell) - это протокол, используемый для безопасного удаленного доступа через интернет. Он обеспечивает безопасную аутентификацию и шифрование, что делает его популярным выбором для системных администраторов, разработчиков и других специалистов, которым необходим доступ к удаленным серверам и сетям.
SSH использует комбинацию симметричного и асимметричного шифрования для обеспечения безопасной связи между двумя устройствами. Когда клиент подключается к серверу с помощью SSH, первое, что происходит, - это обмен ключами. Этот обмен ключами используется для установления безопасного канала связи и аутентификации клиента и сервера друг с другом.
SSH использует алгоритм обмена ключами Диффи-Хеллмана для создания общего секретного ключа между клиентом и сервером. Этот ключ используется для шифрования и дешифрования всех данных, передаваемых между двумя устройствами.
После завершения обмена ключами SSH использует общий секретный ключ для шифрования всех данных, передаваемых между клиентом и сервером. Для этого используется симметричный алгоритм шифрования, например AES (Advanced Encryption Standard). Симметричное шифрование используется потому, что оно быстрее и эффективнее асимметричного шифрования для шифрования больших объемов данных.
В дополнение к симметричному шифрованию, SSH также использует асимметричное шифрование для аутентификации. Асимметричное шифрование использует два ключа - открытый и закрытый. Открытым ключом можно поделиться с кем угодно, в то время как закрытый ключ хранится в секрете. SSH использует схему криптографии с открытым ключом, такую как RSA или DSA, для аутентификации клиента и сервера друг с другом.
Когда клиент подключается к серверу с помощью SSH, сервер отправляет клиенту свой открытый ключ. Затем клиент использует открытый ключ сервера для шифрования случайного значения и отправляет его обратно на сервер. Если сервер может успешно расшифровать случайное значение с помощью своего закрытого ключа, то клиент аутентифицирован, и обмен данными может быть продолжен.
SSH также обеспечивает защиту от атак типа "человек посередине" (MITM), когда злоумышленник перехватывает и изменяет обмен данными между клиентом и сервером. Для предотвращения атак MITM в SSH используются цифровые сертификаты для проверки подлинности сервера и клиента. Клиент проверяет цифровой сертификат сервера перед подключением, гарантируя, что он общается с правильным сервером, а не с поддельным, созданным злоумышленником.
Теперь рассмотрим криптографические алгоритмы, которые используются в одном из самых популярных протоколов VPN - Wireguard
Wireguard - это современный протокол VPN (Virtual Private Network), который обеспечивает безопасную связь между двумя устройствами через интернет. Он разработан, чтобы быть быстрым, эффективным и простым в использовании, обеспечивая при этом надежную защиту за счет использования современных криптографических методов.
В основе Wireguard лежит концепция виртуального сетевого интерфейса, который позволяет двум устройствам общаться так, как будто они находятся в одной локальной сети. Когда клиентское устройство подключается к серверу с помощью Wireguard, на клиентском устройстве создается виртуальный сетевой интерфейс, который подключается к виртуальному сетевому интерфейсу сервера. Весь трафик, передаваемый между двумя устройствами, направляется через этот виртуальный сетевой интерфейс, который шифруется и аутентифицируется с помощью современных криптографических технологий.
Wireguard использует комбинацию симметричного и асимметричного шифрования для обеспечения безопасной связи между двумя устройствами. Когда клиентское устройство подключается к серверу с помощью Wireguard, первое, что происходит, - это обмен ключами. Этот обмен ключами используется для создания общего секретного ключа между клиентом и сервером, который используется для симметричного шифрования.
Для обмена ключами Wireguard использует протокол Noise, который является современным и эффективным протоколом, предназначенным для безопасного обмена данными в незащищенных сетях. Протокол Noise использует комбинацию предварительных общих ключей и криптографии с открытым ключом для обеспечения безопасного обмена ключами между двумя устройствами, не требуя центра сертификации или доверенной третьей стороны.
После завершения обмена ключами Wireguard использует общий секретный ключ для шифрования и расшифровки всего трафика, передаваемого между клиентом и сервером. Для этого используется симметричный алгоритм шифрования, такой как ChaCha20. Симметричное шифрование используется потому, что оно быстрее и эффективнее асимметричного шифрования для шифрования больших объемов данных.
Wireguard также обеспечивает совершенную прямую секретность (PFS), что означает, что даже если злоумышленник скомпрометирует общий секретный ключ, он не сможет расшифровать прошлые сообщения. Это достигается за счет использования нового общего секретного ключа для каждой новой сессии, который получается из обмена ключами Диффи-Хеллмана, используемого на этапе обмена ключами.
В дополнение к симметричному шифрованию Wireguard также использует асимметричное шифрование для аутентификации. При асимметричном шифровании используются два ключа - открытый и закрытый. Открытый ключ может быть передан кому угодно, в то время как закрытый ключ хранится в секрете. Wireguard использует схему криптографии с открытым ключом, например Curve25519 или Ed25519, для аутентификации клиента и сервера друг с другом.
Когда клиентское устройство подключается к серверу с помощью Wireguard, сервер отправляет клиенту свой открытый ключ. Затем клиент использует открытый ключ сервера для шифрования сообщения и отправляет его обратно на сервер. Если сервер может успешно расшифровать сообщение с помощью своего закрытого ключа, то клиент аутентифицирован и связь может быть продолжена.
На этом основная часть лекции законечна, основной целью лекции было описание базовых понятий криптографии и примеров использования различных алгоритмов шифрования в популярных интернет-протоколах.