Чем является пароль от файла архива стандартом шифрования ключом шифрования алгоритмом шифрования
Шифрование является основным методом защиты; рассмотрим его подробно далее.
Шифрование информации - это преобразование открытой информации в зашифрованную (которая чаще всего называется шифртекстом или криптограммой), и наоборот. Первая часть этого процесса называется зашифрованием, вторая - расшифрованием.
Можно представить зашифрование в виде следующей формулы:
где:
M (message) - открытая информация,
С (cipher text) - полученный в результате зашифрования шифртекст,
E (encryption) - функция зашифрования, выполняющая криптографические преобразования над M,
k1 (key) - параметр функции E, называемый ключом зашифрования.
В стандарте ГОСТ 28147-89 (стандарт определяет отечественный алгоритм симметричного шифрования) понятие ключ определено следующим образом: "Конкретное секретное состояние некоторых параметров алгоритма криптографического преобразования, обеспечивающее выбор одного преобразования из совокупности всевозможных для данного алгоритма преобразований".
Ключ может принадлежать определенному пользователю или группе пользователей и являться для них уникальным. Зашифрованная с использованием конкретного ключа информация может быть расшифрована только с использованием только этого же ключа или ключа, связанного с ним определенным соотношением.
Аналогичным образом можно представить и расшифрование:
- Функция расшифрования должна соответствовать функции зашифрования.
- Ключ расшифрования должен соответствовать ключу зашифрования.
- Алгоритмы симметричного шифрования.
- Алгоритмы асимметричного шифрования.
В алгоритмах симметричного шифрования для расшифрования обычно используется тот же самый ключ, что и для зашифрования, или ключ, связанный с ним каким-либо простым соотношением. Последнее встречается существенно реже, особенно в современных алгоритмах шифрования. Такой ключ (общий для зашифрования и расшифрования) обычно называется просто ключом шифрования.
В асимметричном шифровании ключ зашифрования k1 легко вычисляется из ключа k2 таким образом, что обратное вычисление невозможно. Например, соотношение ключей может быть таким:
Такое соотношение ключей используется и в алгоритмах электронной подписи.
Основной характеристикой алгоритма шифрования является криптостойкость, которая определяет его стойкость к раскрытию методами криптоанализа. Обычно эта характеристика определяется интервалом времени, необходимым для раскрытия шифра.
Симметричное шифрование менее удобно из-за того, что при передаче зашифрованной информации кому-либо необходимо, чтобы адресат заранее получил ключ для расшифрования информации. У асимметричного шифрования такой проблемы нет (поскольку открытый ключ можно свободно передавать по сети), однако, есть свои проблемы, в частности, проблема подмены открытого ключа и медленная скорость шифрования. Наиболее часто асимметричное шифрование используется в паре с симметричным - для передачи ключа симметричного шифрования, на котором шифруется основной объем данных. Впрочем, схемы хранения и передачи ключей - это тема отдельной статьи. Здесь же позволю себе утверждать, что симметричное шифрование используется гораздо чаще асимметричного, поэтому остальная часть статьи будет посвящена только симметричному шифрованию.
- Блочное шифрование - информация разбивается на блоки фиксированной длины (например, 64 или 128 бит), после чего эти блоки поочередно шифруются. Причем, в различных алгоритмах шифрования или даже в разных режимах работы одного и того же алгоритма блоки могут шифроваться независимо друг от друга или "со сцеплением" - когда результат зашифрования текущего блока данных зависит от значения предыдущего блока или от результата зашифрования предыдущего блока.
- Поточное шифрование - необходимо, прежде всего, в тех случаях, когда информацию невозможно разбить на блоки - скажем, некий поток данных, каждый символ которых должен быть зашифрован и отправлен куда-либо, не дожидаясь остальных данных, достаточных для формирования блока. Поэтому алгоритмы поточного шифрования шифруют данные побитно или посимвольно. Хотя стоит сказать, что некоторые классификации не разделяют блочное и поточное шифрование, считая, что поточное шифрование - это шифрование блоков единичной длины.
Рассмотрим, как выглядят изнутри алгоритмы блочного симметричного шифрования.Структура алгоритмов шифрования
-
Алгоритмы на основе сети Фейстеля.
Сеть Фейстеля подразумевает разбиение обрабатываемого блока данных на несколько субблоков (чаще всего - на два), один из которых обрабатывается некоей функцией f() и накладывается на один или несколько остальных субблоков. На рис. 2 приведена наиболее часто встречающаяся структура алгоритмов на основе сети Фейстеля.
Дополнительный аргумент функции f(), обозначенный на рис. 2 как Ki, называется ключом раунда. Ключ раунда является результатом обработки ключа шифрования процедурой расширения ключа, задача которой - получение необходимого количества ключей Ki из исходного ключа шифрования относительно небольшого размера (в настоящее время достаточным для ключа симметричного шифрования считается размер 128 бит). В простейших случаях процедура расширения ключа просто разбивает ключ на несколько фрагментов, которые поочередно используются в раундах шифрования; существенно чаще процедура расширения ключа является достаточно сложной, а ключи Ki зависят от значений большинства бит исходного ключа шифрования.
Наложение обработанного субблока на необработанный чаще всего выполняется с помощью логической операции "исключающее или" - XOR (как показано на рис. 2). Достаточно часто вместо XOR здесь используется сложение по модулю 2 n , где n - размер субблока в битах. После наложения субблоки меняются местами, то есть в следующем раунде алгоритма обрабатывается уже другой субблок данных.
Такая структура алгоритмов шифрования получила свое название по имени Хорста Фейстеля (Horst Feistel) - одного из разработчиков алгоритма шифрования Lucifer и разработанного на его основе алгоритма DES (Data Encryption Standard) - бывшего (но до сих пор широко используемого) стандарта шифрования США. Оба этих алгоритма имеют структуру, аналогичную показанной на рис. 2. Среди других алгоритмов, основанных на сети Фейстеля, можно привести в пример отечественный стандарт шифрования ГОСТ 28147-89, а также другие весьма известные алгоритмы: RC5, Blowfish, TEA, CAST-128 и т.д.
- Алгоритмы на основе сети Фейстеля могут быть сконструированы таким образом, что для зашифрования и расшифрования могут использоваться один и тот же код алгоритма - разница между этими операциями может состоять лишь в порядке применения ключей Ki; такое свойство алгоритма наиболее полезно при его аппаратной реализации или на платформах с ограниченными ресурсами; в качестве примера такого алгоритма можно привести ГОСТ 28147-89.
Алгоритмы на основе сети Фейстеля являются наиболее изученными - таким алгоритмам посвящено огромное количество криптоаналитических исследований, что является несомненным преимуществом как при разработке алгоритма, так и при его анализе.
Существует и более сложная структура сети Фейстеля, пример которой приведен на рис. 3.
В отличие от сети Фейстеля, SP-сети обрабатывают за один раунд целиком шифруемый блок. Обработка данных сводится, в основном, к заменам (когда, например, фрагмент входного значения заменяется другим фрагментом в соответствии с таблицей замен, которая может зависеть от значения ключа Ki) и перестановкам, зависящим от ключа Ki (упрощенная схема показана на рис. 4).
Впрочем, такие операции характерны и для других видов алгоритмов шифрования, поэтому, на мой взгляд, название "подстановочно-перестановочная сеть" является достаточно условным.
Для структуры "квадрат" характерно представление шифруемого блока данных в виде двумерного байтового массива. Криптографические преобразования могут выполняться над отдельными байтами массива, а также над его строками или столбцами.
Структура алгоритма получила свое название от алгоритма Square, который был разработан в 1996 году Винсентом Риджменом (Vincent Rijmen) и Джоан Деймен (Joan Daemen) - будущими авторами алгоритма Rijndael, ставшего новым стандартом шифрования США AES после победы на открытом конкурсе. Алгоритм Rijndael также имеет Square-подобную структуру; также в качестве примера можно привести алгоритмы Shark (более ранняя разработка Риджмена и Деймен) и Crypton. Недостатком алгоритмов со структурой "квадрат" является их недостаточная изученность, что не помешало алгоритму Rijndael стать новым стандартом США.
На рис. 5 приведен пример операции над блоком данных, выполняемой алгоритмом Rijndael.
Алгоритмы с нестандартной структурой, то есть те алгоритмы, которые невозможно причислить ни к одному из перечисленных типов. Ясно, что изобретательность может быть безгранична, поэтому классифицировать все возможные варианты алгоритмов шифрования представляется сложным. В качестве примера алгоритма с нестандартной структурой можно привести уникальный по своей структуре алгоритм FROG, в каждом раунде которого по достаточно сложным правилам выполняется модификация двух байт шифруемых данных (см. рис. 6).
Строгие границы между описанными выше структурами не определены, поэтому достаточно часто встречаются алгоритмы, причисляемые различными экспертами к разным типам структур. Например, алгоритм CAST-256 относится его автором к SP-сети, а многими экспертами называется расширенной сетью Фейстеля. Другой пример - алгоритм HPC, называемый его автором сетью Фейстеля, но относимый экспертами к алгоритмам с нестандартной структурой.
Вы наверняка слышали об опасностях обмена файлами через интернет. В них тайком «подселяют» вредоносный код, который с определёнными правами может натворить на устройстве чёрт-те что. А если речь идёт об обмене важными рабочими файлами, опасность выходит на новый уровень: корпоративные данные сольют, текст договоров подменят — в общем, караул.
Для защиты на этом уровне используются криптографические алгоритмы. Базовая информация о них неплохо изложена в википедии. Если отбросить всю теорию, то обычно рассматривают симметричные, асимметричные и бесключевые криптографические алгоритмы. В первых для шифрования и дешифрования используется один и тот же ключ, во вторых — разные ключи, а в третьих ключи не используются вовсе. Каждый из типов алгоритмов применяется по-своему.
Хеш-функции
Беcключевые алгоритмы обычно используются для вычисления хеш-функций, или функций свёртки. Хеш-функция преобразовывает массив входных данных произвольной длины в выходную битовую строку установленной длины. Прелесть такого преобразования в том, что если объект изменился, то скорректируется и его хеш-функция.
Рассмотрим это на примере утилиты openssl, установленной в Linux. К примеру, у нас есть текстовый файл, содержащий «this is simple text»:
Вычислим от этого файла хеш-функцию при помощи алгоритма md5:
А теперь изменим содержимое файла:
Обратите внимание: мы добавили в файл новую строку («but changed»), вычислили заново хеш от файла, и он стал другим. То есть при любом изменении содержимого файла хеш-функция не останется прежней. Это можно использовать для контроля целостности критических файлов: если их хеш изменится — системному администратору придёт оповещение. Или для проверки, загрузился ли файл полностью: если это так, на сайте опубликуется его хеш.
В Windows для вычисления хеша я рекомендую утилиту Sigcheck из пакета Sysinternals. Для примера вычислим значение хеша md5 от файла PsExec.exe:
Другой вариант — использовать утилиту certutil, предустановленную в Windows. Вычислим с её помощью значение хеша md5 от файла PsExec.exe:
Также можно загрузить пакет openssl для ОС Windows. Качаем архив под нужную архитектуру процессора отсюда, распаковываем его и переходим в консоли в каталог bin. Нам нужен файл openssl.exe:
Теперь нам доступны почти все возможности пакета openssl в Windows. Например, вычислить хеш, как делали в предыдущих примерах для Linux (не забываем про абсолютные и относительные пути к файлам):
Пакет лучше переместить в каталог C:/OpenSSL, а конфигурационный файл openssl.cnf — из каталога bin в каталог OpenSSL. Избежим ошибки, как на скрине выше:
Теперь рассмотрим реализацию криптографических алгоритмов.
Общение
Почтовый сервис ProtonMail
Для общения на расстоянии можно использовать и почту. Например, как это сделал Эдвард Сноуден, который поведал миру о тотальной слежке спец служб США.
Есть сервисы, которые предоставляют шифрованный почтовый ящик. Наиболее проверенный и удобный вариант на данный момент ProtonMail. Сам ProtonMail создали под влиянием тех событий что произошли с Сноуденом. Это бесплатный сервис, который предоставляет пользователям зарегистрировать бесплатный зашифрованный почтовый ящик.
За дополнительные функции и расширении памяти хранилища придется заплатить, но для обычной передачи текстовой информации и небольших файлов хватит и бесплатного аккаунта.
Есть веб версия, клиенты под Android и iOS. Сервис переведен на многие языки включая русский.
Защищенный мессенджер Signal
Иногда общения через почту не подходит. Информация нужна здесь и сейчас. Тогда можно использовать формат всем нам знакомым мессенджеров. И тут на помощь приходит приложение Signal. Опять же, есть куча приложений, которые также заявляют о полной безопасности и анонимности, но именно к Signal меньше всего вопросов и подозрений. Его так-же использовал Эдвард Сноуден. Еще его использует Мэт Грин, который довольно известен среди специалистов по шифрованию и безопасности.
Приложение проходило аудит и постоянно проверяется.
Приложение выглядит как обычный мессенджер. В нем можно передавать текст, смайлики, фотографии, аудио, файлы. Есть даже голосовая и видео связь. Информация передается довольно быстро. Интерфейс не перегружен и удобен всем тем кто хоть когда-то отправлял СМС на смартфоне.
Но нужно быть осторожным с данным приложением. Приложение само по себе защищенное, есть даже защита от снятия скриншотов. А вот ваш смартфон скорее всего не так безопасен и защищен. Так что передавать информацию сначала помещая ее на память телефона не очень безопасно. Но при этом отправлять текст и совершать аудио и видео звонки вполне безопасно.
Есть клиенты для Android, iOS, Windows, macOS, Linux.
Как проверяется пароль
Для проверки пароля (например, в онлайновых сервисах или при входе в локальную учётную запись Windows, Linux или macOS) по заданному алгоритму подсчитывается его хэш, который система сравнивает с контрольной строкой. Рассмотрим для примера файл /etc/shadow, в котором хранятся пароли к ОС Linux.
В описаниях формата /etc/shadow часто можно встретить упоминание, что в файле хранятся «зашифрованные пароли». Как вы уже знаете, это не так: на самом деле в файле /etc/shadow хранятся хеши паролей, соль и некоторая дополнительная информация, включая информацию о том, каким образом должен вычисляться хэш. Хэши паролей хранятся хранятся в виде $type$salt$hashed, где значение переменной type указывает на тип хеш-функции из следующего списка:
В примере ниже приводится начало строки из файла /etc/shadow (у неё есть продолжение, в котором содержится сервисная информация — такая, как время последней смены пароля, оставшийся срок действия пароля и т.п.)
Здесь «root» — имя пользователя, $6$ указывает на то, что используется алгоритм хеширования SHA-512, «Zwg4GkPw» — соль, а строка, начинающаяся с «$5ggbs» — соответственно, хэш от пароля. В качестве эксперимента вы можете попробовать восстановить этот пароль или самостоятельно сгенерировать его командой mkpasswd -m sha-512 PASSWORD [SALT]
Обратите внимание: если отредактировать файл /etc/shadow (для этого нужен доступ root), то пароль любого пользователя можно сменить, зайдя от его имени. А можно ли сделать так же, например, для зашифрованного архива или документа?
Когда хэш не хранится
В ряде случаев при шифровании файла или документа хэш от оригинального пароля не сохраняется и, соответственно, не проверяется. Так работает, например, шифрование в формате RAR4 (а вот в пришедшем ему на смену формате RAR5 хэш от пароля вычисляется и сохраняется в заголовке архива). Вариантов два:
- ключом, сгенерированным из пароля, шифруется фиксированная строка, которая используется для шифрования файла или документа (так, например, работает BitLocker)
- ключом, сгенерированным из пароля, шифруется весь документ (так работает формат RAR4)
В обоих случаях хеширование используется для генерации ключа из пароля, однако во втором случае, если был указан неправильный пароль, файл или документ будет расшифрован, но «расшифрованные» данные не пройдут валидации. В таком случае скорость проверки пароля (и, соответственно, скорость атаки) не будет детерминированной. Вот скорость перебора паролей в Elcomsoft Distributed Password Recovery для формата RAR5, в котором хэш от пароля сохраняется в заголовке архива:
Логично было бы сравнить скорость атаки на этот формат с предшествующим форматом RAR4, но сделать это невозможно: из-за того, что в RAR4 не сохраняется хэш от пароля, для проверки пароля необходимо расшифровать хотя бы один файл, вычислить его контрольную сумму и проверить её совпадение с той, которая хранится в архиве. Если контрольная сумма расшифрованного файла совпадёт с эталоном, пароль считается правильным. Если же пароль неправильный, то файл до конца распаковать не удастся. Ошибка распаковки — тоже индикатор неправильного пароля, и этот момент учтён в процессе оптимизации перебора в Elcomsoft Distributed Password Recovery.
Заключение
Спасибо что дочитали статью до конца. Надеюсь описанные мною вещи стали понятными. За дополнительными деталями вы всегда можете обратиться к сети Интернет.
Проблемы безопасности — это слабое место большинства из нас. Всем нам неприятно сталкиваться и тем более терять что—то ценное из—за случайного клика мышью. И именно поэтому я решила поделиться найденными материалами с вами.
В стремлении развеять наиболее часто задаваемый вопрос — почему будут атаковать меня? Кому я нужен? — мы начнем статью именно с него.
Нужно учитывать, что атаковать вас может не только человек. Это может делать, например, бот.
Каждый из нас подключен к интернет провайдеру. А на него, скорее всего, происходят атаки буквально каждый день. Замечали у себя на почте раздел «спам»? В каждом таком письме потенциально есть фишинговая атака. Это атака не персонально на вас. Это масштабная атака, ориентированная на широкий круг лиц. Мы потенциально жертвы.
Чаще всего их цель — деньги. Как они могут их получить?
Например, использовать ваш компьютер в качестве web сервера, красть ваш контент, производить email атаки, деятельность в ботнете, кража аккаунтов, атаки с целью вымогательства. Да и email аккаунт — потенциально важная вещь, потому что все мы достаточно часто используем один и тот же пароль на нескольких сервисах.
Время дорого, и мы хотим тратить как можно меньше времени на вопросы, связанные с безопасностью.
И поэтому первое, что нужно сделать — это ответить для себя на несколько вопросов:
- В каких файлах хранятся наиболее важные данные?
- Какие аккаунты в соц сетях вы не можете потерять?
- Что может причинить наибольший вред?
- А что может ударить по вашей репутации?
Окей, мы определились с тем, что нам необходимо защитить. Следующий шаг — выбор метода защиты.
Да, разумеется, в мире существует множество атак и защититься от всех просто невозможно.
Поэтому мы рассмотрим один из наиболее эффективных инструментов — шифрование.
Асимметричные алгоритмы шифрования
Главное преимущество асимметричного шифрования по сравнению с симметричным — возможность сторон обмениваться данными друг с другом, не используя секретные каналы связи.
Криптографическая система на основе асимметричного шифрования использует открытые (public key) и закрытые (private key) ключи для шифрования и расшифровки данных. Эти ключи образуют ключевую пару, компоненты которой связаны зависимостью, но отличаются друг от друга. Идея в том, что, зная открытый ключ, нельзя из него получить закрытый, хотя алгоритм генерации известен.
Открытый ключ передаётся по незащищённым каналам связи и известен всем. Его можно использовать для шифрования файлов и не только. Для расшифровки применяется закрытый ключ, который хранится в тайне.
У многих асимметричных алгоритмов, особенно тех, что основаны на проблемах теории чисел, минимальная длина ключа для надёжного шифрования — 1024 бит. Это сильно ограничивает их применение — симметричные алгоритмы позволяют с меньшей длиной ключа надёжно зашифровать файлы.
При практической реализации асимметричных алгоритмов обычно используют сертификат. Это файл, хранящий ключ (открытый и закрытый) в определённом формате. Подробнее об этом можно почитать в статье «Формат SSL-сертификата».
Рассмотрим два основных стандарта для реализации сертификатов шифрования.
X.509 — стандарт ITU-T для инфраструктуры открытых ключей. Определяет стандартные форматы данных и процедуры распределения открытых ключей с помощью соответствующих сертификатов с цифровыми подписями. Именно он обычно используется для электронной цифровой подписи (ЭЦП) и шифрования, например, в openssl.
OpenPGP — стандарт, выросший из программы PGP (к середине 90-х годов она распространилась в интернете как надёжное средство шифрования электронной почты). Став стандартом де-факто, PGP начал встраиваться во множество приложений и систем. С особенностями можно ознакомиться на специализированном ресурсе об OpenPGP.
Посмотрим, как это выглядит на практике. Начнём с асимметричных алгоритмов в openssl — для этого в Windows командную строку надо запустить с правами администратора.
Создадим закрытый ключ в виде сертификата. Команда следующая:
openssl genrsa -aes256 -out private.pem 8912
- genrsa — указывает, что мы используем модуль для генерации закрытого ключа на основе алгоритма RSA;
- -aes256 — указывает на алгоритм AES для шифрования сертификата;
- -out private.pem — файл для сохранения сертификата;
- 8912 — размер ключа.
Теперь надо извлечь из полученного закрытого ключа публичный. Сделать это можно командой:
openssl rsa -in private.pem -pubout -out public.pem
- rsa — модуль для работы с RSA;
- -in private.pem — задаёт путь к закрытому ключу, из которого извлечём открытый;
- -pubout — извлекает публичный ключ;
- -out public.pem — имя файла для полученного открытого ключа.
Ключ мы получили в виде сертификата в формате pem (ASCII-файл в кодировке base64). Это не единственный формат хранения сертификатов — с другими можно ознакомиться в материале, который уже рекомендовался выше.
Стоит учесть, что таким сертификатом мы не сможем зашифровать объект, превосходящий по размеру сам сертификат. Поэтому поступим хитрее: зашифруем файл симметричным алгоритмом, а ключ шифрования от этого алгоритма зашифруем при помощи сертификата. По шагам:
- Генерируем сертификаты (пару из открытого и закрытого ключа).
- Шифруем текст симметричным алгоритмом AES (его вроде бы ещё не взломали). Предположим, получим файл enc.1.
- Далее выбранный для шифрования пароль шифруем публичным ключом (предположим, получим файл enc.2).
- Теперь можно передать зашифрованный файл enc.1 и файл enc.2 по незащищённому каналу связи.
- На другом конце у получателя должна быть вторая часть ключа (закрытый ключ). Ей он вначале расшифровывает файл enc.2 и извлекает оттуда пароль для дешифровки файла enc.1.
- …
- Profit!
Вот как это выглядит на практике. Вначале шифруем текстовый файл алгоритмом AES (пароль 123456):
Теперь сохраним наш пароль (123456) в файл pass.txt. И зашифруем файл при помощи сертификата. Команда:
openssl rsautl -encrypt -inkey public.pem -pubin -in pass.txt -out pass.ssl
- rsautl — включаем модуль для шифрования, дешифрования и подписывания данных алгоритмом RSA;
- -inkey public.pem — указывает путь к открытому ключу;
- -pubin — указывает, что файл ключа является публичным ключом;
- -in pass.txt — файл для шифрования;
- -out pass.ssl — выходной зашифрованный файл.
Теперь можем переслать этот файл по открытому каналу связи. Перехват такой информации мало что даст злоумышленнику, если у него нет закрытого ключа. Попробуем расшифровать файл закрытым ключом и извлечь пароль для расшифровки:
Мы получили пароль — теперь с его помощью можно расшифровать файл, который мы с ним зашифровали при помощи алгоритма AES:
В этой статье я показал, как работать с шифрованием файлов. В следующей мы подробнее остановимся на стандарте OpenPGP и научимся использовать шифрование в электронной почте.
Работа с криптографическими алгоритмами — это лишь малая часть одного из курсов факультета информационной безопасности Geek University. Ближайший поток стартует 28 декабря — неплохой подарок на Новый год ;) Кроме того, до 29 декабря вы сможете выбрать ещё один факультет Geek University для себя или в подарок и получить его бесплатно.
Сколько раз вы видели фразу: «ваш пароль надёжно зашифрован»? Если воспринимать написанное буквально, то получается, что пароль где-то хранится и при необходимости может быть извлечён (расшифрован). Для узкого множества продуктов (например, программ для хранения паролей) это имеет смысл, но для защиты документов, шифрования файлов на диске или защиты учётной записи сохранять пароль в составе файла/документа или на удалённом сервере не только не нужно, но и категорически небезопасно. В этой публикации мы расскажем о различиях между шифрованием и хешированием.
Что такое шифрование?
Чтобы сделать правильный выбор в области безопасности, вам нужно понимать, что такое шифрование. Не обязательно знать хардкорную математику. Достаточно понять на базовом уровне. Это один из лучших и незаменимых инструментов в нашем арсенале.
Шифрование — это метод преобразования данных, пригодных для чтения человеком, в форму, которую человек не сможет прочитать. За счет этого данные остаются конфиденциальными и приватными.
Дешифрование — обратная операция. Преобразование нечитаемых данных в читаемые.
Но вернемся к базовой теории. В процессе шифрования участвуют 2 основных компонента — алгоритм и ключ.
Алгоритм — это в каком-то смысле замок, который позволяет хранить ваши данные в тайне. За счет него происходит преобразование текста.
Ключ — это, уж простите за тавтологию, ключ от замка. Кусочек уникальных данных, с помощью которых происходит преобразование текста
Хм, хорошо. Едем дальше. Слегка повысим напряжение.
Хранение данных
Менеджер паролей KeePassX
Если использовать везде стойкий, но одинаковый пароль это ставит под угрозу все ваши данные разом. Ведь если злоумышленникам удастся подсмотреть или узнать ваш пароль, иным другим способ, то они автоматически получают доступ ко всем используемым вами сервисам.
Рекомендуется использовать для разных сервисов разные пароли, лучше всего их генерировать. Но тогда встает вопрос о запоминании всех паролей.
И тут стоит использовать менеджер паролей. Есть разные сервисы, которые предоставляют сохранение и менеджмент паролей. Лично я и различные специалисты по безопасности советуют использовать KeePassX.
Дело в том, что данный проект имеет долгую историю. Все это время у него открытые исходные ходы и разработчики предоставляют все данные, что бы быть уверенным что в программе нет закладок.
Данная программа абсолютно бесплатна, у нее открытые исходные коды и она запускается на всех основных платформах (Windows, macOS, Linux).
Пароли хранятся в специальных базах данных, которые используют шифрование AES и TwoFish. Саму базу данных (хранится в одном файле) лучше хранить в безопасном месте, например, на USB носителе.
В программе есть генератор стойких паролей.
Использовать интернет сервисы для хранения пароля удобнее и мобильнее, но намного менее безопаснее. Ваши пароли могут запросить спецслужбы или может быть заплатка в программном обеспечении, которое используется на серверах сервиса менеджера паролей. Также пароли могут перехватить с помощью уязвимостей в браузере.
Шифрование данных VeraCrypt
Также стоит позаботится о надежном хранении файлов на носителях. Дабы исключить вариант, что если устройство, на котором вы храните важные данные, попадет в чужие руки, то данные будут открыты и доступны злоумышленнику.
Довольно надежным способом является – шифрование данных. Есть много различных программ, которые позволяют шифровать данные. Есть платные и бесплатные. Есть даже решения, встроенные в операционную систему. Например, BitLocker в Windows и FireVault в macOS.
К сожалению, в программном обеспечении такого класса часто внедряют закладки для легкого взлома. Да и к разработчикам такого программного обеспечения всегда максимальные требования по безопасности и защищенности их продукта.
Ранее безусловным лидером была программа TrueCrypt. К сожалению, разработчики прекратили развитие данной программы. Тема с TrueCrypt вообще максимально запутанная, многие считают, что там замешаны спец службы и именно они вынудили прекратить разработку программы.
Но так как исходный код TrueCrypt был открытым, за дальнейшую разработку и поддержку взялась другая команда. Они устранили несколько уязвимостей и выпустили новую версию под название VeraCrypt.
Данная программа постоянно проверяется и проходит аудиты безопасности.
Смысл программы в создании зашифрованных контейнеров (на диске располагаются в виде файла), шифровании съемных носителей или полное шифрование жесткого диска включая локальный диск где установлена операционная система.
В случаи создания зашифрованного контейнера, создается файл на диске. Вы задаете его название и размер. Далее выбираете метод шифрования (стоит отметить что выбор довольно большой, а также есть возможность шифрования сразу 3 алгоритмами подряд), пароль и остальные параметры.
Далее вы подключаете (монтируете) ваш контейнер к любой доступному диску. И можете записать любые данные в него. При прекращении работы, вы размонтируете его. Все файлы что расположены в контейнере, будут надежно сохранены в нем. Такой файл можно передавать по менее защищенным каналам, но все-же оставлять его в открытом доступе не стоит.
Есть возможность создания скрытого контейнера в контейнере. Это сделано для того, чтобы если вас схватят и заставят вести пароль к контейнеру с данными, там располагались фиктивные данные, а основные данные, которые вы и намеревались скрыть будут находится в скрытом контейнере внутри этого контейнера.
Можно зашифровать флеш накопитель и тогда его содержимое будет также доступно вам через пароль.
Риск = уязвимость * угрозы * последствия
Например, кража ноутбука. Что мы можем сделать? Зашифровать весь диск, добавить дополнительные этапы авторизации.
Виды шифрования
Как еще мы можем использовать шифрование в своих, корыстных целях? Для простоты понимания мы рассмотрим шифрование архива. При архивации во многих архиваторах присутствует возможность установить пароль. При этом архиватор использует какой-либо алгоритм для шифрования. И чаще всего это симметричный алгоритм.
Заключение
Мы разобрали различия между алгоритмами шифрования и хеширования. Знание об этих различиях позволит лучше понять смысл, который маркетологи самых разных продуктов вкладывают во фразу «ваш пароль надёжно зашифрован», и не удивляться, если окажется, что фактический смысл фразы прямо противоположен буквальному.
В современном мире сложно сохранить какую-либо информацию в тайне. Особенно если она представляет ценность для кого-либо и вам нужно ее передать. Не важно, какие у вас причины на сокрытие тех или иных данных, в этой статье рассмотрим основные методы и программные средства для сохранения информации в тайне.
Постараюсь объяснить сложные и непонятные технологии простым и доступным языком, чтобы было понятно и новичку.
Важно! Все программы, представленные в статье бесплатные. Скачивать их можно и нужно только с официальных сайтов разработчиков.
Дисклеймер: я, то есть автор статьи — неспециалист в информационной безопасности и оперирую данными из открытых источников. Я против использования описанных ниже методов для сокрытия противоправных действий.
Безопасный выход в интернет
Безопасный браузер Tor Browser
Для безопасного посещения сайтов стоит использовать Tor Browser. Вы наверняка слышали о нем. Tor Browser работает на основе луковичных сетей. Смысл такой сети в том, что соединение от вашего устройства до конечного сервера проходит через определенное количество слоев сети. Каждый слой сети или подключение шифруется отдельно. И получается, что передаваемый вами трафик шифруется несколько раз. Это влияет на скорость соединения, но очень эффективно в плане безопасности.
Виртуальная частная сеть ProtonVPN
Если вам нужно скрыть и зашифровать весь трафик вашего устройства, можно воспользоваться VPN. VPN расшифровывается как виртуальная персональная сеть. При подключении к VPN абсолютно все соединения вашего устройства проходят через выбранный сервер.
Это позволяет не только скрыть изначальный источник запроса, но и зашифровать данные.
Также это можно использовать для доступа к заблокированным сайтам в вашей сети. Поскольку трафик идет, например, через Нидерланды, где может быть не заблокирован российский локальный информационный ресурс, вы сможете зайти на него.
Я использую программное обеспечение ProtonVPN, от создателей ProtonMail. Их почтовый сервис прекрасно себя зарекомендовал, и увидев доступность VPN клиента от данной команды сразу решил установить и использовать.
Приложение бесплатное, но еще не имеет русского интерфейса. Но разобраться в его работе очень просто.
Если выбрать платный тарифный план, то у вас будет больший выбор стран для подключения. Платные сервера менее загружены, поэтому скорость будет выше. А также будет возможность использовать P2P траффик и сети TOR.
Анонимная операционная система Tails
Tails это самый ультимативный вариант. Это операционная система, основанная на ядре Linux.
Обычно ее записывают на флеш накопитель или DVD диск и загружаются с них. При том, сами создатели рекомендуют сначала записать операционную систему на флеш накопитель, далее загрузится с него. И уже с этого носителя с помощью специального программного обеспечения записать операционную систему на другой флеш накопитель или DVD диск.
В данной операционной системе можно работать в интернете, работать с почтой и максимально важными данными на компьютере.
В ней используются самые передовые технологии шифрования. Максимальная защита всех данных. Данную ОС постоянно проверяют и исследуют.
Симметричные криптоалгоритмы
Если говорить упрощённо, то симметричные алгоритмы шифрования применяют один ключ для шифрования и дешифрования. Таких алгоритмов много, и на практике обычно применяют те, которые имеют достаточную длину ключа и ещё не были скомпрометированы. Симметричные алгоритмы делятся на блочные (DES, RC2, Blowfish, AES, «Кузнечик» и т. д.) и потоковые (RC4, SEAL, CryptMT и другие).
Стойкость к взлому у всех блочных криптографических алгоритмов во многом определяется длиной ключа. Если она составляет 128 бит и более, шифрование считается сильным, так как для расшифровки информации без ключа потребуются годы работы на мощных компьютерах. Кому любопытно — об алгоритмах шифрования с точки зрения длины ключа можно прочитать в посте на Хабре.
Попрактикуемся: при помощи пакета openssl зашифруем созданный нами ранее текстовый файл. Для этого используем команду:
openssl enc -e -aes256 -in simpletext.txt -out simple_enc_text.txt
- enc — указывает модуль для шифрования;
- -e — указывает, что файлы нужно шифровать;
- -aes256 — алгоритм шифрования;
- -in — указывает на исходный файл;
- -out — указывает на зашифрованный файл.
Выглядит это так:
Для расшифровки нужно указать введённый при шифровании ключ и используемый алгоритм. Команда примерно следующая:
openssl enc -d-aes256 -in simple_enc_text.txt -out simpletext.txt
- enc — указывает модуль для шифрования;
- -d — указывает, что файлы нужно расшифровать;
- -aes256 — алгоритм шифрования;
- -in — указывает на исходный файл;
- -out — указывает на расшифрованный файл.
При шифровании симметричными алгоритмами есть несколько интересных проблем.
- Длина ключа. Как уже упоминали, желательно не менее 128 бит
- Сложность использования при большом количестве шифруемых объектов — приходится запоминать много параметров.
- Сложность обмена параметрами шифрования (паролями, алгоритмами и подобным) — необходимо обеспечить их надёжную передачу адресату.
Такие проблемы обычно решают при помощи асимметричных алгоритмов шифрования.
Основы
Сначала следует разобрать основные, базовые понятия.
Шифрование
Для начала определение:
Шифрование — обратимое преобразование информации в целях скрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней. Главным образом, шифрование служит задачей соблюдения конфиденциальности передаваемой информации. Важной особенностью любого алгоритма шифрования является использование ключа, который утверждает выбор конкретного преобразования из совокупности возможных для данного алгоритма.
Не вдаваясь в технические подробности, можно сказать что шифрование — это преобразование данных для сокрытия информации.
Есть различные алгоритмы шифрования, мы же поверхностно познакомимся с основными актуальными алгоритмами шифрования.
Алгоритмами шифрования делятся на симметричные алгоритмы и ассиметричные алгоритмы:
- Симметричное шифрование использует один и тот же ключ и для зашифровывания, и для расшифровывания.
- Асимметричное шифрование использует два разных ключа: один для зашифровывания (который также называется открытым), другой для расшифровывания (называется закрытым).
DES — алгоритм для симметричного шифрования, разработанный фирмой IBM и утверждённый правительством США в 1977 году как официальный стандарт.
Прямым развитием DES в настоящее время является алгоритм Triple DES (3DES). В 3DES шифрование/расшифровка выполняются путём троекратного выполнения алгоритма DES.
AES — также известный как Rijndael (произносится [rɛindaːl] (Рэндал)) — симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит), принятый в качестве стандарта шифрования правительством США по результатам конкурса AES. Этот алгоритм хорошо проанализирован и сейчас широко используется, как это было с его предшественником DES.
Blowfish (произносится [бло́уфиш]) — криптографический алгоритм, реализующий блочное симметричное шифрование с переменной длиной ключа. Разработан Брюсом Шнайером в 1993 году.
ГОСТ 28147-89 (Магма) — российский стандарт симметричного блочного шифрования, принятый в 1989 году. Является примером DES-подобных криптосистем.
В 2015 г. вместе с новым алгоритмом «Кузнечик» один из вариантов алгоритма ГОСТ-89 был опубликован под названием «Магма» как часть стандарта ГОСТ Р 34.12-2015.
Блочный шифр «Кузнечик» — симметричный алгоритм блочного шифрования с размером блока 128 битов и длиной ключа 256 битов.
Примеры ассиметричных алгоритмов:
RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.
Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других.
ГОСТ Р 34.10-2012 — российский стандарт, описывающий алгоритмы формирования и проверки электронной цифровой подписи.
SSL шифрование
TLS (англ. Transport Layer Security — Протокол защиты транспортного уровня), как и его предшественник SSL— криптографические протоколы, обеспечивающие защищённую передачу данных между узлами в сети Интернет.
SSL-сертификат — содержит в себе информацию о своем владельце, а также открытый ключ, использующийся для создания защищенного канала связи. Организации и физические лица получают для подтверждения того, что сайт или иной ресурс действительно представлен ими и это не поддельный ресурс. Сертификаты получают или покупают у авторизированных доверенных центрах сертификации.
Все это делается чтобы человек, который вклинится в канал связи посередине, между вами и адресатом не смог прочитать информацию или изменить ее.
Хеширование
Хеширование или получение контрольные суммы, представляет собой преобразование данных (будь это строка текста или архив данных) произвольной длины в (выходную) строку фиксированной длины, выполняемое определённым алгоритмом.
Особенность в том, что если входные данные поменяются хоть на бит информации, то итоговая (выходная) строка уже будет другая. Таким образом, можно проверить что файл или данные не изменялись.
Перед тем как устанавливать программное обеспечение, скачанное даже с официальных сайтов, следует сравнить контрольную сумму файла что вы скачали с контрольной суммой, указанной на сайте. Атакующий человек может контролировать вашу сеть и при скачивании файла, как вам кажется с официального сайта, может подсовываться модифицированный файл установки с уязвимостью или вовсе с троянским кодом.
Базовые принципы создания стойкого пароля
Для обеспечения безопасности информации доступ к ней необходимо блокировать хорошим паролем. Есть основные принципы создания стойкого пароля:
Двухфакторная аутентификация
Двухфакторная аутентификация – это способ аутентификации (подтверждения личности) который подразумевает под собой использования два способа подтверждения личности.
Например, при входе в аккаунт на каком-либо сайте, вы сначала вводите ваш пароль, а дальше код присланный по СМС на доверенный номер телефона.
Есть много различных способов аутентификации:
- Пароль
- ПИН код
- СМС с кодом
- Отпечаток пальца
- Флеш токен (флешка с записанным уникальным ключом)
- Push уведомления в приложении на смартфоне
Двухфакторную аутентификацию можно включить во многих популярных сервисах:
Криптографическая соль
Что произойдёт, если группа злоумышленников вычислит хэш-функции для десятков миллионов популярных паролей? В таком случае для взлома пароля будет достаточно подсчитать хэш, который будет достаточно просто найти в таблице. Существует и более продвинутая версия атаки под названием Rainbow Tables.
Rainbow Tables – это реализация метода time-memory trade-off, при котором нет необходимости хранить все возможные хэши. Вместо этого они разбиваются на взаимосвязанные цепочки, от которых сохраняются только начало и конец. «Радужные таблицы» требуют усилий по перебору, но перебирать нужно гораздо меньше полного диапазона, причём параметры атаки можно подобрать или вычислить заранее. Вычисление подобных таблиц занимает у хакеров длительное время, после чего сами атаки осуществляются крайне быстро.
Для противодействия подобным атакам был разработан метод, применяющий к хэшу так называемую криптографическую соль. Теперь хэш вычисляется не от самого пароля, а от комбинации пароля и добавленной к нему случайной строки («соли»). Значение соли (повторимся — это строка, состоящая из случайных данных) сохраняется рядом с хэшем; без неё восстановить правильный пароль не получится. В редких случаях в дополнение к соли используется ещё одна строка — Pepper («перец»), значение которой хранится на отдельном физическом сервере для обеспечения дополнительного уровня безопасности.
Для обеспечения адекватной защиты недостаточно использовать стойкий алгоритм шифрования и криптографически безопасную хеш-функцию; необходимо правильно реализовать всю систему защиты. Так, даже самый безопасный хэш можно атаковать с помощью таблиц, в которых содержатся как сами пароли, так и результат их обращения посредством популярных хеш-функций.
Но чаще всего используется асимметричное шифрование
И это приводит нас к новому типу шифрования.
В ассиметричном шифровании используется 2 ключа — открытый и закрытый(тайный).
Открытый ключ для шифрования, закрытый — для дешифрования.
Какие алгоритмы позволяют пользоваться этой технологией?
- Rivest—Shamir—Adleman (RSA) (наиболее распространенный)
- Elliptic curve cryptosystem (ECC)
- Diffie—Hellman (DH)
- El Gamal
Так как во мне есть жилка программиста, а также любовь к математике, то я просто не могу не рассказать о том, как все работает «под капотом»
Рассмотрим на примере алгоритма RSA.
Первое, что нам необходимо сделать — сгенерировать открытый и закрытый ключи. Последовательность действий примерно такая:
1) Мы выбираем два простых числа. Желательно, чтобы они были достаточно близкими
2) Вычисляем их произведение, а также функцию Эйлера
n = p * s
f = (p — 1) * (s — 1)
3) Теперь наиболее затратная по времени часть — выбор экспоненты и произвольного коэффициента.
Дело в том, что при выбранных коэффициентах значение «d» должно быть целым. «d» — необходимая составляющая алгоритма
e = 5
k = 9
d = (k * f + 1)/e
Ну и с точки зрения программиста, мы можем использовать эту информацию следующим образом:
- Создать массив соответствий символу и его коду (например, ASCII код)
- Применить алгоритм для каждого символа, создавая массив преобразованных значений
- Перевести полученный массив обратно в строковый вид
- Profit!
Теперь, зная теорию, плюсы и минусы алгоритма, а также для чего вообще нужно им пользоваться, мы можем говорить о практическом применении.
Среди всех найденных программ, наиболее удобной мне показалась gpg4usb.
Данная программа использует PGP шифрование. Почему я рекомендую использовать именно его?
Все просто. Этот тип шифрования до сих пор еще не удалось взломать. Никому. Так что пользуйтесь.
Пользоваться программой достаточно просто. Нужно лишь знать куда нажимать.
И именно об этом сейчас пойдет речь.
Первое, что необходимо сделать — скачать программу. Вы можете это сделать по ссылке:
ссылка.
Скажу сразу — эта программа кросс—платформенная. То есть вы можете использовать ее как на Windows, так и на Linux.
Второе — это создание пары ключей шифрования.
Это можно сделать, выполнив следующую последовательность действий:
1) Переходим в раздел «Менеджер ключей»
2) Выбираем в верхней панели «Ключ», затем «Генерировать ключ»
Должно выглядеть примерно так:
Теперь ключ создан, и мы можем приступать непосредственно к шифрованию.
Дешифровка происходит аналогично, разве что вместо «Зашифровать» вы пользуетесь кнопкой «Расшифровать».
Так, а теперь я хочу получить закрытый ключ (а вдруг буду работать с другого компьютера? Ведь ключи хранятся локально).
Чтобы решить эту задачу, мы вновь возвращаемся на главный экран, в правой боковой панели нажимаем правой кнопкой мыши на нужный ключ и выбираем «Показать свойства ключа». А в открывшемся окне выбираем «Экспортировать Секретный ключ».
Готово, теперь у вас «на руках» открытый и закрытый ключи шифрования, которыми вы можете распоряжаться по своему усмотрению.
Ну и в завершении статьи хочу поделиться полезной методикой: моделирование угроз и оценка рисков.
Первое, что нужно понять — нельзя обеспечить 100% безопасность, как и свести все риски к нулю. Нельзя получить 100% анонимность. Нельзя получить 100% безопасность (разве что не использовать телефон и ПК).
Используя интернет мы так или иначе принимаем риски. Он дает нам шанс расширить свои возможности, но при этом есть риск потери наших данных. Поэтому безопасность — это балансирование между удобством, расширением знаний, комфортом и сохранением уже определенных, важных для нас данных.
Мы должны использовать риск—ориентированный подход.
Шифрование и хеширование
Пароли используются для защиты документов, баз данных, сжатых архивов, отдельных файлов и дисков целиком, а также учётных записей. За редкими исключениями (например, пароли в веб-браузерах, связке ключей или учётных записях IMAP / POP3), пароли практически никогда не сохраняются — ни в открытом виде, ни в зашифрованном. Вместо этого пароли «хешируются», а точнее — преобразуются с помощью односторонней математической функции. Результат преобразования, если он выполнен правильно, невозможно обратить, а исходный пароль, соответственно, невозможно «расшифровать».
Шифрование — обратимая двусторонняя операция
Суть хеширования — в детерминированном одностороннем (необратимом) преобразовании набора данных произвольного размера в массив фиксированной длины.
Хеширование — одностороннее необратимое преобразование данных
Помимо необратимости преобразования, криптографические алгоритмы хеширования обладают несколькими интересными свойствами, основное из которых — недопустимость так называемых коллизий. Изменение единственного бита в исходном наборе данных выдаст хэш, который не будет даже минимально похож на исходный. Рассмотрим два хэша:
Как легко заметить, изменение единственного бита привело к радикальному изменению всего хэша. Вы можете самостоятельно проверить различные комбинации в онлайновом калькуляторе SHA-1 hash generator.
Подводя итог, хеширование — это одностороннее преобразование, которое не может быть обращено (по крайней мере, тогда, когда применяется качественный алгоритм хеширования). Максимум, который доступен в процессе атаки — сгенерировать так называемую «коллизию», то есть найти другой текст, преобразование которого посредством заданной хеш-функции выдаст совпадение (то есть, такой же хэш, как при использовании оригинального пароля). Современные алгоритмы хеширования спроектированы таким образом, чтобы свести вероятность возникновения коллизий к статистической погрешности.
Впрочем, не все пользуются готовыми безопасными решениями. Время от времени находятся разработчики, уверенные, что смогут сделать лучше. Как правило, такая уверенность не имеет под собой оснований, а в результате появляется катастрофически безграмотное, небезопасное решение. Яркий пример — популярная в Индии бухгалтерская программа Tally ERP 9 Vault, исследование системы безопасности которой мы описали в статье Вскрываем защиту Tally ERP 9. Ниже — цитата из неё:
Разработчики Tally Vault решили не полагаться на существующие криптографические преобразования и создали свой собственный вариант, настоящий кошмар криптографа. Все существующие алгоритмы хеширования без исключений гарантируют, что изменение всего одного бита в хешируемой последовательности приведёт к полному изменению всей контрольной суммы. Индийским разработчикам удалось сделать невероятное: они создали хеш-функцию, в которой при небольшом изменении пароля результат тоже меняется очень незначительно. Более того, у нас создалось впечатление, что при определённых условиях этот хэш можно обратить, получив из него оригинальный пароль (разумеется, если энтропия пароля не превышает энтропии его контрольной суммы). Вишенка на торте: преобразование применяется ровно один раз.
Итерации (раунды) хеширования
Итак, для преобразования пароля в ключ шифрования, как правило, используется хеширование, а число алгоритмов хеширования фактически ограничено «большой тройкой» — SHA-1, SHA-256 и SHA-512. В то же время скорость работы атак методом полного перебора может отличаться на многие порядки в зависимости от того, какой именно набор данных подвергается атаке. Почему так происходит?
Разумеется, нельзя сбрасывать со счетов разницу в алгоритмах хеширования. Так, преобразование SHA-1 работает быстрее, чем SHA-512, которое, в свою очередь, быстрее, чем SHA-256. Самым медленным из популярных алгоритмов является Whirlpool. В зависимости от того, какой именно алгоритм хеширования используют разработчики конкретного приложения или формата данных, атака может происходить с большей или меньшей скоростью.
Впрочем, скорость алгоритмов хеширования различается в считанные разы, а скорость перебора паролей в разных форматах может отличаться на многие порядки. Значит, дело не только и даже не столько в том, какой алгоритм хеширования используется. Основное влияние на скорость перебора оказывает количество итераций, или раундов хеширования.
Количество раундов (итераций хеширования) оказывает сильнейшее влияние на скорость проверки пароля. На современном оборудовании вычисление одного значения хеш-функции от короткой строки, которой является пароль, занимает доли миллисекунды. Если бы файлы были защищены с помощью единственной итерации хеширования, мы бы получили атаки, работающие со скоростью в диапазоне десятков, а то и сотен миллионов паролей в секунду. Подобные атаки были возможны в iOS 10.0 (порядка 6 миллионов паролей в секунду на процессоре Intel шестилетней давности).
В современных приложениях используются сотни тысяч и даже миллионы итераций хеш-функции. Так, документы Microsoft Office используют 100,000 итераций, что позволяет проверить порядка десятка паролей в секунду. После фиаско с iOS 10.0 разработчики Apple увеличили число раундов хеширования до миллиона (!), в результате чего скорость проверки паролей к резервным копиям iTunes составляет единицы паролей в минуту. Криптоконтейнеры VeraCrypt защищены 500,000 раундами хеширования, причём у пользователя есть возможность изменить это значение в большую сторону.
Разумеется, под «итерацией» хеширования не имеется в виду бесконечный цикл вычислений значения хэш-функции от предыдущего хэша. В такой прямолинейной реализации алгоритм хеширования вырождается, существенно увеличивается риск коллизий. Борются с этим путём добавления промежуточных значений соли на каждом этапе. Промежуточная соль вычисляется алгоритмически для каждой итерации; случайным образом генерируется только оригинальная соль, которая хранится вместе с паролем. Таким образом в результате получается стойкий детерминированный хэш, вычисление которого на заданном оборудовании занимает заранее заданное время.
Симметричное шифрование
Симметричный алгоритм шифрования — алгоритм, при котором для шифрования и дешифрования используется один и тот же ключ. Ярким и, в то же простым примером, будет шифр Цезаря.
Вся работа этого алгоритма заключается в том, чтобы изменить символ на другой с определенным шагом.
Например, при смещении в 5 символов, символ, который стоит на первой позиции заменить на символ 6 позиции и так далее.
Наиболее стойким на данный момент считается алгоритм AES (Advanced Encryption Standard).
Стоит упомянуть еще один момент — мощность пароля. Мощность пароля измеряется в битах. Одним из наиболее распространенных решений является 128 или 256 бит. Это то количество бит, которое будет выделено для пароля. Так же это число означает количество паролей, которое вы можете получить при данном алгоритме шифрования. Но чем больше длина ключа, тем медленнее протекает процесс шифрования или дешифрования.
Современные хеш-функции
На сегодняшний день самыми распространёнными (и считающимися в достаточной степени безопасными) являются хеш-функции SHA-256 и SHA-512, пришедшие на замену алгоритму SHA-1, в котором была обнаружена возможность коллизий.
Существуют и другие функции хеширования — к примеру, алгоритм Whirlpool. Все современные хеш-функции должны отвечать ряду требований как к безопасности (те самые коллизии), так и к скорости как вычисления, так и проверки хэша. Разумеется, результат работы хеш-функции должен быть абсолютно односторонним и абсолютно необратимым.
Каким образом «абсолютная необратимость» хеш-функций соотносится с существованием многочисленных программ для взлома паролей, включая наши собственные разработки? Дело в том, что пароли обычно состоят из ограниченного числа символов. Ограниченная длина большинства паролей позволяет проверить на совпадение результаты хеширования, произведённые от всех возможных комбинаций букв, цифр и специальных символов вплоть до заданной максимальной длины. Так работает атака методом полного перебора.
Читайте также: