Безопасность и анонимность в сети.

Безопасность и анонимность в сети.

31337 [WFA]

Ускоренный курс по шифрованию

Целью обучения в этом разделе является понять фундаментальные основы шифрования, мы изучим симметричное и асимметричное шифрование, хеши, SSL, TLS, сертификаты, перехват данных при помощи утилиты SSLStrip и слабости, связанные с шифрованием. Это фундаментальные знания, необходимые для выбора подходящих средств обеспечения безопасности с целью снижения рисков.

Симметричное шифрование

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

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

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

Смотрите, это Google.co.uk Любой наблюдатель, сидящий между мной и Google, узнает лишь, что я заходил на этот сайт. Он не узнает, что именно я искал, потому что это оконечное (или абонентское) шифрование между моим браузером и сервером.

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

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

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

Здесь у нас файл для Боба, кликнем по нему правой кнопкой мыши, WinZip, "Добавить в Zip-файл", используем ознакомительную версию для демонстрации и видим, что у нас тут есть опция "Зашифровать файлы". Если вы не знакомы, WinZip - это инструмент для сжатия файлов, он уменьшит размер файла перед тем, как я его отправлю, и упакует его в .zip-файл, и одновременно с этим я могу выбрать шифрование этого файла.

Итак, я кликаю "Зашифровать файл" и смотрю на доступные варианты. Можно выбрать 256-бит AES, 128-бит AES и Legacy (Zip 2.0). AES - это симметричный алгоритм, он использует всего один ключ. Если я кликну "ОК" и "Добавить", у меня тут появится какое-то предупреждение, и затем мне будет предложено ввести пароль, и далее будет сгенерирован ключ. Итак, AES - это симметричный алгоритм шифрования, который использует всего один ключ.

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

AES = симметричный алгоритм (используется 1 ключ)
Пароль преобразуется в ключ
Пример: password123 > zcEXvO!XMITczI8!G%u0

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

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

При помощи AES с длиной ключа 256 бит можно создать следующее количество комбинаций, то есть возможных ключей: 1,1*10^77 и эта цифра настолько велика, что нет слова для ее описания. Это много. Все это означает, что ключ крайне сложно подобрать, даже при помощи очень мощных компьютеров, но при условии, что вы использовали длинный и рандомный пароль при генерации ключа.

Люди и правительства постоянно пытаются взломать эти алгоритмы. Мы знаем, какие алгоритмы хороши, а какие нет. Мы знаем, какие из них поддаются взлому, а какие на сегодняшний день невозможно взломать.

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

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

Собственно говоря, оно находится в топ-10 слов, используемых в паролях. И мы также знаем, что в окончании паролей часто добавляются цифры. Зная это, мы можем использовать слово "обезьяна" из словаря и мы можем использовать различные комбинации цифр в окончании этого слова, чтобы проверить, можем ли мы взломать ключ.

Мы поговорим о паролях, как их устанавливать, о взломе паролей немного позже.

Итак, вернемся к WinZip. Здесь у нас AES - это симметричное шифрование, оно использует один ключ. Если я кликну "ОК", "Добавить", появится какое-то предупреждение, будет предложено ввести пароль, далее будет сгенерирован мой ключ. Симметричное шифрование AES использует всего один ключ.

Алгоритмы симметричного шифрования

• Data Encryption Standard (DES)

• Triple-DES (3DES)

• Blowfish

• RC4

• RC5

• RC6

• Advanced Encryption Standard (AES)

Другие виды симметричного шифрования: DES - в переводе "стандарт шифрования данных", triple-DES (тройной DES), RC4, RC5, RC6 и собственно, AES, который переводится как "продвинутый стандарт шифрования". Симметричные алгоритмы используются в большинстве систем шифрования, которые вы используете ежедневно: HTTPS, полное шифрование диска, шифрование файлов, Tor, VPN, практически все. AES - это общепринятый стандарт симметричного шифрования. Для максимальной защиты используйте, где это возможно, AES 256, избегайте RC4 и DES, если есть такая возможность. AES быстрый и на сегодняшний день его невозможно взломать.

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

Асимметричное шифрование

Итак, у нас есть файл для Боба, который был зашифрован при помощи AES и сильного пароля. Но как нам доставить пароль Бобу, чтобы он смог дешифровать файл? Не очень хорошая затея отправлять пароль по электронной почте. Мы могли бы отправить его другим способом. Может быть, позвонив ему или отправив ему текстовое сообщение.

Асимметричное = 2 ключа (открытый и закрытый)
Симметричное = 1 ключ (закрытый)

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

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

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

Асимметричные алгоритмы (с применением открытого и закрытого ключей):

• Rivest-Shamir-Adleman (RSA)

• Криптосистемы на эллиптических кривых (ECC)

• Diffie-Hellman (DH)

• El Gamal

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

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

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

И далее у нас идет схема Эль-Гамаля, и криптостойкость этого алгоритма также основана на сложности задачи дискретного логарифмирования в конечном поле.

Обмен ключами и соглашение
Электронные цифровые подписи

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

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

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

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

Они используют эти открытые/закрытые ключи и затем им нужно отправить другой ключ, типа ключа, который мы используем для zip-файла, с целью осуществить шифрование.

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

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

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

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

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

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

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

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

• Конфиденциальность

• Аутентификация

• Предотвращение отказа

• Достоверность

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

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

Примерами криптосистем являются любые вещи, которые используют технологию шифрования, это PGP, BitLocker, TrueCrypt, TLS, даже BitTorrent, и даже WinZip, который мы юзали для шифрования того простого маленького файла.

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

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

Асимметричные:

• Распределение ключей лучше

• Масштабируемость

• Аутентификация, предотвращение отказа

• Медленные

• Математически-интенсивные

Симметричные:

• Быстрые

• Надежные

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

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

Если вы используете симметричные ключи и желаете отправить ваш zip-файл Бобу и, скажем, еще десяти людям, вам придется передать свой пароль 10 раз. Это совершенно не масштабируемо. Асимметричные алгоритмы имеют более хорошую масштабируемость, нежели чем симметричные системы.

1024-битные RSA ключи эквиваленты по стойкости 80-битным симметричным ключам
2048-битные RSA ключи эквиваленты по стойкости 110-битным симметричным ключам
3072-битные RSA ключи эквиваленты по стойкости 128-битным симметричным ключам
15360-битные RSA ключи эквиваленты по стойкости 256-битным симметричным ключам

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

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

Открытые и закрытые ключи используются для обмена ключами согласования, и мы используем симметричные алгоритмы типа AES для шифрования данных, тем самым извлекая максимальную выгоду. HTTPS, использующий протоколы TLS и SSL, является примером подобного типа гибридных систем, как и PGP. И мы поговорим об HTTPS и TLS далее по ходу курса.

Специально для: https://t.me/HackersUniverse

Report Page