Encrypting data (шифрование данных)

Оглавление

Введение в RC6.

Алгоритм RC6 (Rivest’s Cipher 6) — симметричный блочный шифр, использующий в качестве своей основы сеть Фестеля, разработанный Рональдом Ривестом в 1998 году.

Для начала разберемся с терминологией:

Что значит симметричный?

Есть два типа людей шифров:

  1. Симметричные (то, что нам нужно)

  2. Ассиметричные (как-нибудь в другой раз, бро)

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

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

Что значит блочный?

Блочное шифрование это один из видов симметричного шифрования. Называется он так, потому что работает с блоками: группами бит, фиксированной длины.

Чтобы стало яснее, рассмотрим один из методов построения блочных шифров: сеть Фестеля.

Какая, какая сеть?

Фестеля. Это конструкция из ячеек. На вход каждой ячейки поступают данные и ключ. А на выходе каждой из них изменённые данные и изменённый ключ.

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

Алгоритм шифрования:

  • Каждый из блоков делится на два подблока одинакового размера — левый и правый.

  • Правый подблок скармливается функции .

  • После чего умножается по модулю 2 (операция xor) с левым блоком .

  • Полученный результат в следующем раунде будет играть роль правого подблока.

  • А правый подблок (без изменений) выступит в роли левого подблока.

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

Далее операции повторяются столько раз, сколько задано раундов.

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

Выглядит это примерно так:

Преимущества AES

К основным преимуществам данного алгоритма относят:

  • Рассеивание — изменение любого знака ключа или открытого текста влияет на большое количество знаков шифротекста.

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

  • Не подвержен многим видам криптоаналитических атак, таких как: дифференциальный криптоанализ, линейный криптоанализ, square — атака.

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

  • Высокое быстродействие на различных платформах.

Другая проблема: если злоумышленник захочет выдать себя за вашего собеседника? Anchor link

В нашем примере с Юлией и Сезаром посредники постоянно способны получать метаданные.

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

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

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

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

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

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

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

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

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

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

Напомним:

  • Атака посредника – перехват злоумышленником сообщения, предназначенного вашему собеседнику. Атакующий может внести изменения в это сообщение, а может переслать его дальше, просто ознакомившись с содержимым.
  • Криптография (шифрование) с открытым ключом позволяет противостоять атаке посредника с помощью проверки личностей отправителя и получателя. Это делается с помощью проверки отпечатков ключей.
  • Открытый ключ вашего собеседника используется для шифрования сообщений, отправляемых ему. У каждого открытого ключа есть сокращенная версия — так называемый «отпечаток открытого ключа». Вы можете использовать его для проверки личности вашего собеседника.
  • Закрытый ключ используется для шифрования сообщений в качестве цифровой подписи, подтверждающей ваше авторство.

Параметры алгоритма

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

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

Все основные вычисления, которыми оперирует алгоритм, имеют битные машинные слова в качестве входа и выхода. Как мы уже выяснили, RC6 блочный шифр. Причем входной и выходной блоки имеют 4 регистра A, B, C, D каждый размером по бит. Обычно . Тогда размер блока будет бит.

Таким образом является одним из параметров алгоритма, который мы можем задавать. Выпишем их все:

  • размер слова в битах. Каждое слово содержит слов в байтах. Блоки открытого текста и шифротекста имеют длину побит (т.к. 4 регистра).

  • количество раундов. Так же размер расширенного массива ключейбудет иметьслово (об этом далее). Допустимые значения .

  • количество бит в секретном ключе .

  • секретный ключ размеров байт: .

Чтобы было ясно, о каком алгоритме идем речь принято писать .

Как работает шифрование на примере iMessage?

Пожалуй, именно Apple можно отнести к категории тех компаний, которые максимально беспокоятся о конфиденциальности данных своих пользователей. Шифрование и защита в продуктах Apple находится на высоком уровне.

Понять это можно, разобравшись в принципах работы одного из сервисов — iMessage.

Итак, вы решили использовать iMessage. Зарегистрировали Apple ID, зашли в настройки и включили сервис.

На iOS-девайсе тут же создаются две пары ключей: публичная и приватная. Да-да, iMessage работает по ассиметричному типу шифрования.

Приватная пара остается в памяти устройства, публичная же отправляется на сервера Apple.

Ну что, iMessage включен. Вы открываете приложение «Сообщения», выбираете адресата и начинаете писать сообщение. Тем временем сервис проверяет наличие публичного ключа адресата, который прикреплен к учетной записи Apple ID. Найдя его, абонент подсвечивается доступным для отправки сообщений через сервис.

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

Зашифрованное сообщение поступает на устройство получателя. Оно привязано к публичному ключу отправителя и требует дешифровки. Тем временем на сервере удаляется та самая зашифрованная копия.

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

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

Главные условия построения шифрования

Шифрование асимметричным способом строится по следующему принципу:

  1. Переменная P, взятая из функции Y x (mod P),должна при зашифровке не вычисляться при попытках её взлома. Это означает, что простым или сложным перебором значений машинным методом скомпрометировать параметр невозможно.
  2. Из Р должно браться вычлененное значение. Основной показатель такого решения должен заключаться в доступности его расшифровки за полиномиальное линейное время соразмерно объёму задачи.
  3. Полученный вычлененный параметр ещё раз по установленному значению модифицируется. В итоге получает измененное значение Р, которое полностью отличается от исходного.
  4. Конечное значение имеет инструкцию по расшифровке. Начальное и вычлененное значение переменной Р остаётся скрытой.

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

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

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

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

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

Асимметричное шифрование: закрытые и открытые ключи Anchor link

Закрытый и открытый ключи создаются парами. Они математически связаны друг с другом. Вы можете представить их в виде камня, расколотого пополам. Если соединить обе половинки, то они идеально подойдут друг к другу, образуя единое целое. Ни одна часть никакого другого камня не подойдёт. Файлы открытого и закрытого ключей совпадают также. Они состоят из очень больших чисел, генерируемых компьютером.

Несмотря на своё название, открытый ключ не используется для открытия чего-либо (в отличии от реального ключа). Его предназначение заключается в другом. Более подробную информацию о работе открытых и закрытых ключей вы можете найти в нашем руководстве «Глубокое погружение в мир сквозного шифрования».

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

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

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

Открытый ключ

Закрытый ключ

 

Можно сказать, что, отправляя информацию по каналам связи, вы будто отправляете обычную почтовую открытку. На открытке отправитель напишет «Привет!» и отправит её получателю. Сообщение не зашифровано, и поэтому сотрудники почты и вообще все, кому в руки попадёт открытка, смогут прочитать это сообщение.

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

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

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

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

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

В общем суть данного алгоритма заключается в том, что принимающая сторона перед приемкой сообщения генерирует пару ключей на основе алгоритма модульной арифметики (принцип такой же как и в алгоритме Диффи-Хеллмана), собственно приватный и публичный ключ. Отправитель перед отправкой получает публичный ключ и шифрует сообщение данным ключом, после чего данное сообщение можно расшифровать только приватным ключом, который хранится в секрете у принимающей стороны.
Если вернуться к аналогии с замками, то шифрование с открытым ключом можно представить себе следующим образом:

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

Тарабарщина, цифирь и другие шифры

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

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

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

Тайнопись XVI века, в основе которой числовые значения церковнославянских букв

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

Около 1466 года итальянский ученый Леон Альберти изобретает шифровальный диск, состоящий из двух частей: внешней и внутренней. На неподвижном внешнем диске был написан алфавит и цифры. Внутренний подвижный диск также содержал буквы и цифры в другом порядке и являлся ключом к шифру. Для шифрования нужно было найти нужную букву текста на внешнем диске и заменить ее на букву на внутреннем, стоящую под ней. После этого внутренний диск сдвигался, и новая буква зашифровывалась уже с новой позиции. Таким образом, шифр Альберти стал одним из первых шифров многоалфавитной замены, основанных на принципе комбинаторики. Кроме того, Леон Альберти написал одну из первых научных работ по криптографии − «Трактат о шифрах». 

Шифровальный диск Леона Альберти

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

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

Прорывом в криптографии стала книга «Полиграфия» аббата Иоганеса Тритемия 1518 года, рассказывающая в том числе о шифрах с полиалфавитной заменой. Самым известным шифровальщиком XVI века считается дипломат и алхимик из Франции Блез де Виженер, придумавший абсолютно стойкий шифр, в котором использовалось 26 алфавитов, а порядок использования шифра определялся знанием пароля. Можно сказать, что шифр Виженера представлял собой комбинацию нескольких уже упоминавшихся шифров Цезаря.  
 

Чем являются эти ключи? И как они связаны друг с другом? Anchor link

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

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

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

Мы собираемся изучить процесс создания ключей в широко используемом алгоритме шифрования с открытым ключом, который называется RSA (Rivest-Shamir-Adleman). Алгоритм RSA часто используется для создания пар ключей для PGP-шифрования электронной почты.

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

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

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

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

Можно представить себе это иначе: открытый ключ и закрытый ключ связаны друг с другом как символ инь-янь. Они сплетены в единое целое.

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

Описание алгоритма дешифрования

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

  1. Расширение ключа — KeyExpansion;

  2. 9 раундов дешифрования, каждый из которых состоит из преобразований:

    · AddRoundKey — суммирование state с раундовым ключом;

    · InverseMixColumns — обратная перестановка столбцов state;

    · InverseShiftRows — обратный циклический сдвиг столбцов state;

    · SubBytes — замена байтов state по обратной таблице замен InverseS- box;

  3. Финальный раунд:

    · AddRoundKey

    · InverseShiftRows

    · InverseSubBytes

Достоинства и недостатки симметричного шифрования

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

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

Недостатки симметричного шифрования

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

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

Также требуется большое количество уникальных ключей, например, нам понадобится n (n-1)/2 ключей для n пользователей.

Что такое электронная подпись

Электронная подпись — это технология, которая помогает подтвердить подлинность электронного документа: договора, справки, выписки или чего-то ещё. 

Если упрощённо, работает так: 

Есть некий документ, подписанный ЭП

С помощью специальной программы можно проверить подлинность этой подписи и документа

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

Или программа может сказать, что подпись не совпала. Это значит, что либо документ подписал другой человек, либо после подписания кто-то изменил этот документ (например, дописал ноль в стоимость контракта). Так мы поймём, что этому документу нельзя доверять. 

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

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

Практическая демонстрация

# virsh destroy debian9-boothack 
Домен debian9-boothack разрушен

# cp -v /var/lib/libvirt/images/debian9-boothack.qcow2 ~
'/var/lib/libvirt/images/debian9-boothack.qcow2' -> '/root/debian9-boothack.qcow2'
# mkdir /guest
# guestmount -a /var/lib/libvirt/images/debian9-boothack.qcow2 -m /dev/sda1 /guest
# cp -v /guest/initrd.img-4.9.0-9-amd64 ~user/tmp
'/guest/initrd.img-4.9.0-9-amd64' -> '/home/user/tmp/initrd.img-4.9.0-9-amd64'
$ mkdir unpacked
$ cd unpacked/
$ zcat ../initrd.img-4.9.0-9-amd64 | cpio -idm
$ ls
bin  conf  etc  init  lib  lib64  run  sbin  scripts
$ find . | cpio -o -c | gzip -9 > ../initrd.img-4.9.0-9-amd64
125736 блоков
$ sudo cp -v ../initrd.img-4.9.0-9-amd64 /guest
'../initrd.img-4.9.0-9-amd64' -> '/guest/initrd.img-4.9.0-9-amd64'
$ sudo guestunmount /guest
# echo 'fa0c53***********4bd8c' | xxd -r -p > master.key
# modprobe nbd max_part=8
# qemu-nbd --connect=/dev/nbd0 /root/debian9-boothack.qcow2 
# ls /dev/nbd0*
/dev/nbd0  /dev/nbd0p1  /dev/nbd0p2  /dev/nbd0p5
# file -s /dev/nbd0p5
/dev/nbd0p5: LUKS encrypted file, ver 1  UUID: fb732477-ef98-40b5-86a2-8526c349f031
# cryptsetup --master-key-file=master.key luksOpen /dev/nbd0p5 crackeddisk
# pvs
  PV                      VG                  Fmt  Attr PSize    PFree
  /dev/mapper/crackeddisk debian9-boothack-vg lvm2 a--    19,75g    0 
  /dev/sda3               dt1                 lvm2 a--  <215,01g 8,00m
# lvs
  LV     VG                  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian9-boothack-vg -wi-a-----  18,75g                                                    
  swap_1 debian9-boothack-vg -wi-a-----   1,00g                                                    
  root   dt1                 -wi-ao---- 215,00g                                                    
# mkdir /hackedroot
# mount /dev/mapper/debian9--boothack--vg-root /hackedroot/
# ls /hackedroot/
bin  boot  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old
# cat /hackedroot/etc/hostname 
debian9-boothack

Как работает: алгоритмы шифрования

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

Проблема в том, что ЭП основана на алгоритмах асимметричного шифрования, а их много: разложение на простые множители, дискретное логарифмирование, эллиптические кривые и множество других. Ключ из одного алгоритма не подойдёт для использования в другом, поэтому в России договорились использовать стандарт шифрования ГОСТ Р 34.10-2012, основанный на эллиптических кривых. Все государственные органы работают только с таким алгоритмом и не принимают другие ЭП.

Это значит, что нам нужен специальный софт, в котором уже есть этот алгоритм. Чаще всего используют КриптоПРО, реже — ViPNet CSP. С помощью этих программ можно подписать документы и проверить сертификаты на подлинность.

Немножко реальной жизни

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

И вот начинает казаться что обмен ключами является неизбежной частью шифрования — или все-таки нет?

Представим другую картину. Распишу пошагово:

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

Принцип работы симметричных алгоритмов

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

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

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

Поэтому современные симметричные алгоритмы считаются надежными, если отвечают следующим требованиям:

  • Выходные данные не должны содержать статистических паттернов исходных данных (как в примере выше: наиболее частотные символы осмысленного текста не должны соответствовать наиболее частотным символам шифра).
  • Шифр должен быть нелинейным (то есть в шифрованных данных не должно быть закономерностей, которые можно отследить, имея на руках несколько открытых текстов и шифров к ним).

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

Симметричное шифрование ключа (шифр)

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

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

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

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

В потоковом шифре данные обрабатываются как непрерывный поток. Простой текст обрабатывается по одному байту за раз. У них меньшая скорость распространения ошибок. RC4 – это пример потокового шифра. Кстати, RC4 используется в протоколе Transport Layer Security (TLS).

Схема подготовки ключа

Алгоритм подготовки ключа состоит из трех простых этапов и использует две магические константы:

Генерация констант

Для конкретного мы определяем две величины:

где (экспонента), (золотое сечение). операция округления до ближайшего нечетного целого.

Например, если взять , то значения получатся такие:

Теперь рассмотрим основные этапы. Их три:

1 этап. Конвертация секретного ключа

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

2 этап. Инициализация массива ключей

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

3 этап. Перемешивание

Этот шаг состоит в том, чтобы перемешать секретный ключ, который нам дал пользователь:

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

Операция

Основной принцип

Асимметричное шифрование или криптография с открытым ключом основывается на существовании односторонних функций и тайного нарушения .

Односторонние функции — это математические функции , которые при применении к сообщению чрезвычайно трудно найти исходное сообщение.

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

Предположим, Алиса хочет получить секретное сообщение от Боба по каналу, который может прослушивать пассивная злоумышленница Ева  :

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

Обычно используется следующая терминология:

  • для односторонней функции: «открытый ключ»;
  • за нарушение секретности: «закрытый ключ».

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

Распространение открытых ключей

Затем он генерирует значение из односторонней функции взлома секрета, используя алгоритм асимметричного шифрования ( список здесь ), например RSA .

Алиса транслирует функцию кодирования сообщений всем (обозначается открытым ключом), но сохраняет функцию декодирования в секрете (обозначается закрытым ключом).

1- й  шаг: Алиса генерирует два ключа: открытый ключ (зеленый), который она отправляет Бобу, и его закрытый ключ (красный), который она хранит драгоценно, не раскрывая его никому.

 Шаги 2 e и 3 e : Боб шифрует сообщение открытым ключом, а Алиса отправляет зашифрованный текст. Алиса расшифровывает сообщение, используя свой закрытый ключ.

Шифрование

Одна из функций открытого ключа — обеспечить шифрование  ; Итак, это ключ, который Боб будет использовать для отправки зашифрованных сообщений Алисе. Другой ключ — секретная информация — используется для кости количественной оценки. Таким образом, Алиса и только она может читать сообщения Боба. Знание одного ключа не позволяет нам вывести другой.

Аутентификация источника

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