Что такое ключ шифра
Ключ (криптография)
Ключ — секретная информация, используемая криптографическим алгоритмом при шифровании/расшифровке сообщений, постановке и проверке цифровой подписи, вычислении кодов аутентичности (MAC). При использовании одного и того же алгоритма результат шифрования зависит от ключа. Для современных алгоритмов сильной криптографии утрата ключа приводит к практической невозможности расшифровать информацию.
Согласно принципу Керхгоффса, надёжность криптографической системы должна определяться сокрытием секретных ключей, но не сокрытием используемых алгоритмов или их особенностей.
Длина ключа
Количество информации в ключе, как правило, измеряется в битах.
Для современных симметричных алгоритмов (AES, CAST5, IDEA, Blowfish, Twofish) основной характеристикой криптостойкости является длина ключа. Шифрование с ключами длиной 128 бит и выше считается сильным, так как для расшифровки информации без ключа требуются годы работы мощных суперкомпьютеров. Для асимметричных алгоритмов, основанных на проблемах теории чисел (проблема факторизации — RSA, проблема дискретного логарифма — Elgamal) в силу их особенностей минимальная надёжная длина ключа в настоящее время — 1024 бит. Для асимметричных алгоритмов, основанных на использовании теории эллиптических кривых (ECDSA, ГОСТ Р 34.10-2001, ДСТУ 4145-2002), минимальной надёжной длиной ключа считается 163 бит, но рекомендуются длины от 191 бит и выше.
Классификация ключей
Криптографические ключи различаются согласно алгоритмам, в которых они используются.
Главное свойство ключевой пары: по секретному ключу легко вычисляется открытый ключ, но по известному открытому ключу практически невозможно вычислить секретный. В алгоритмах ЭЦП подпись обычно ставится на секретном ключе пользователя, а проверяется на открытом. Таким образом, любой может проверить, действительно ли данный пользователь поставил данную подпись. Тем самым асимметричные алгоритмы обеспечивают не только целостность информации, но и её аутентичность. При шифровании же наоборот, сообщения шифруются на открытом ключе, а расшифровываются на секретном. Таким образом, расшифровать сообщение может только адресат и больше никто (включая отправителя). Использование асимметричных алгоритмов снимает проблему распространения ключей пользователей в системе, но ставит новые проблемы: достоверность полученных ключей. Эти проблемы более-менее успешно решаются в рамках инфраструктуры открытых ключей (PKI).
Элементарные шифры на понятном языке
Все мы довольно часто слышим такие слова и словосочетания, как «шифрование данных», «секретные шифры», «криптозащита», «шифрование», но далеко не все понимают, о чем конкретно идет речь. В этом посте разберемся, что из себя представляет шифрование и рассмотрим элементарные шифры с тем расчетом, чтобы даже далекие от IT люди поняли суть этого явления.
Прежде всего, разберемся в терминологии.
Шифрование – это такое преобразование исходного сообщения, которое не позволит всяким нехорошим людям прочитать данные, если они это сообщение перехватят. Делается это преобразование по специальным математическим и логическим алгоритмам, некоторые из которых мы рассмотрим ниже.
Исходное сообщение – это, собственно, то, что мы хотим зашифровать. Классический пример — текст.
Шифрованное сообщение – это сообщение, прошедшее процесс шифрования.
Шифр — это сам алгоритм, по которому мы преобразовываем сообщение.
Ключ — это компонент, на основе которого можно произвести шифрование или дешифрование.
Алфавит – это перечень всех возможных символов в исходном и зашифрованном сообщении. Включая цифры, знаки препинания, пробелы, отдельно строчные и заглавные буквы и т.д.
Теперь, когда мы говорим на более-менее одном языке, разберем простые шифры.
Шифр Атбаша
Самый-самый простой шифр. Его суть – переворот алфавита с ног на голову.
Например, есть у нас алфавит, который полностью соответствует обычной латинице.
Для реализации шифра Атбаша просто инвертируем его. «А» станет «Z», «B» превратится в «Y» и наоборот. На выходе получим такую картину:
И теперь пишем нужное сообшение на исходном алфавите и алфавите шифра
Исходное сообщение: I love habr
Зашифрованное: r olev szyi
Шифр Цезаря
Тут добавляется еще один параметр — примитивный ключ в виде числа от 1 до 25 (для латиницы). На практике, ключ будет от 4 до 10.
Опять же, для наглядности, возьмем латиницу
И теперь сместим вправо или влево каждую букву на ключевое число значений.
Например, ключ у нас будет 4 и смещение вправо.
Исходный алфавит: a b c d e f g h i j k l m n o p q r s t u v w x y z
Зашифрованный: w x y z a b c d e f g h i j k l m n o p q r s t u v
Пробуем написать сообщение:
Шифруем его и получаем следующий несвязный текст:
Шифр Вернама (XOR-шифр)
Простейший шифр на основе бинарной логики, который обладает абсолютной криптографической стойкостью. Без знания ключа, расшифровать его невозможно (доказано Клодом Шенноном).
Исходный алфавит — все та же латиница.
Сообщение разбиваем на отдельные символы и каждый символ представляем в бинарном виде.
Классики криптографии предлагают пятизначный код бодо для каждой буквы. Мы же попробуем изменить этот шифр для кодирования в 8 бит/символ на примере ASCII-таблицы. Каждую букву представим в виде бинарного кода.
Теперь вспомним курс электроники и элемент «Исключающее ИЛИ», также известный как XOR.
XOR принимает сигналы (0 или 1 каждый), проводит над ними логическую операцию и выдает один сигнал, исходя из входных значений.
Если все сигналы равны между собой (0-0 или 1-1 или 0-0-0 и т.д.), то на выходе получаем 0.
Если сигналы не равны (0-1 или 1-0 или 1-0-0 и т.д.), то на выходе получаем 1.
Теперь для шифровки сообщения, введем сам текст для шифровки и ключ такой же длины. Переведем каждую букву в ее бинарный код и выполним формулу сообщение XOR ключ
сообщение: LONDON
ключ: SYSTEM
Переведем их в бинарный код и выполним XOR:
В данном конкретном примере на месте результирующих символов мы увидим только пустое место, ведь все символы попали в первые 32 служебных символа. Однако, если перевести полученный результат в числа, то получим следующую картину:
С виду — совершенно несвязный набор чисел, но мы-то знаем.
Шифр кодового слова
Принцип шифрования примерно такой же, как у шифра цезаря. Только в этом случае мы сдвигаем алфавит не на определенное число позиций, а на кодовое слово.
Например, возьмем для разнообразия, кириллический алфавит.
Придумаем кодовое слово. Например, «Лукоморье». Выдернем из него все повторяющиеся символы. На выходе получаем слово «Лукомрье».
Теперь вписываем данное слово в начале алфавита, а остальные символы оставляем без изменений.
И теперь запишем любое сообщение и зашифруем его.
Получим в итоге следующий нечитаемый бред:
Шифр Плейфера
Классический шифр Плейфера предполагает в основе матрицу 5х5, заполненную символами латинского алфавита (i и j пишутся в одну клетку), кодовое слово и дальнейшую манипуляцию над ними.
Пусть кодовое слово у нас будет «HELLO».
Сначала поступаем как с предыдущим шифром, т.е. уберем повторы и запишем слово в начале алфавита.
Теперь возьмем любое сообщение. Например, «I LOVE HABR AND GITHUB».
Разобьем его на биграммы, т.е. на пары символов, не учитывая пробелы.
Если бы сообщение было из нечетного количества символов, или в биграмме были бы два одинаковых символа (LL, например), то на место недостающего или повторившегося символа ставится символ X.
Шифрование выполняется по нескольким несложным правилам:
1) Если символы биграммы находятся в матрице на одной строке — смещаем их вправо на одну позицию. Если символ был крайним в ряду — он становится первым.
Например, EH становится LE.
2) Если символы биграммы находятся в одном столбце, то они смещаются на одну позицию вниз. Если символ находился в самом низу столбца, то он принимает значение самого верхнего.
Например, если бы у нас была биграмма LX, то она стала бы DL.
3) Если символы не находятся ни на одной строке, ни на одном столбце, то строим прямоугольник, где наши символы — края диагонали. И меняем углы местами.
Например, биграмма RA.
По этим правилам, шифруем все сообщение.
Если убрать пробелы, то получим следующее зашифрованное сообщение:
Поздравляю. После прочтения этой статьи вы хотя бы примерно понимаете, что такое шифрование и знаете как использовать некоторые примитивные шифры и можете приступать к изучению несколько более сложных образцов шифров, о которых мы поговорим позднее.
Шифр Виженера
Калькулятор шифрует входной текст на русском языке шифром Виженера. Неалфавитные символы (пробелы, знаки препинания, цифры) — не преобразуются.
Так как Шифр Цезаря у нас уже есть, было бы логично дополнить его калькулятором, который шифрует/расшифровывает текст используя шифр Виженера.
Суть алгоритма шифрования проста. Шифр Виженера — это последовательность шифров Цезаря с различными значениями сдвига (ROTX — см. Шифр Цезаря). То есть к первой букве текста применяется преобразование, например, ROT5, ко второй, например, ROT17, и так далее. Последовательность применяемых преобразований определяется ключевой фразой, в которой каждая буква слова обозначает требуемый сдвиг, например, фраза ГДЕ ОН задает такую последовательность шифров Цезаря: ROT3-ROT4-ROT5-ROT15-ROT14, которая повторяется, пока не будет зашифрован весь текст сообщения.
Как повествует Википедия, шифр Виженера является шифром подстановки, то есть шифром, в котором каждая буква исходного текста заменяется буквой шифр-текста. Для вскрытия подобных шифров используется частотный криптоанализ.
Еще там можно прочитать про вариант шифра с бегущим ключом (running key), который был когда-то был невзламываемым. Этот вариант заключается в использовании в качестве ключа блока текста, равного по длине исходному тексту. Впрочем, и этот вариант, как оказалось, успешно поддается взлому. Проблема с бегущим ключом шифра Виженера состоит в том, что криптоаналитик имеет статистическую информацию о ключе (учитывая, что блок текста написан на известном языке) и эта информация будет отражаться в шифрованном тексте. Если ключ действительно случайный, его длина равна длине сообщения и он использовался единожды, то шифр Виженера теоретически будет невзламываемым, но такие системы уже относятся к классу систем одноразового кода, или одноразового шифр-блокнота (one-time pad). Они действительно не поддаются взлому, однако их практическое применение довольно затруднительно.
Что такое «ключи шифрования» (8 фото)
1) А. Саломаа «Кpиптогpафия с откpытым ключом» Москва ”Миp” 1995
3) Баричев С. «Криптография без секретов»
Ну и много других книг есть на эту тему. Любопытно, что ГОСТ до сих пор грифован как ДСП. А начальные его версии имели гриф «Совершенно секретно». Это несмотря на то, что автор алгоритма опубликовал его в открытой печати ещё в 1995 году в издательстве MIT Press. Более того, он даже опублииковал исходный код программы, реализующей этот алгоритм. Но, как всегда, «заставь дурака Богу молиться..».
Причём (это очень важно!) в процессе шифрования мы использовали некий ключ шифрования. Неважно, что это в реальном мире.
Эту самую абракадабру засунули в канал связи. Опять же, совершенно неважно, что это в реальном мире.
Потом мы взяли ключ на другом конце, с его помощью РАСшифровали абракадабру и получили исходный текст сообщения. Здесь важно то, что мы на приёмном конце использовали ключ для дешифрования.
Я попытаюсь проиллюстрировать это «на пальцах». Предположим, я хочу передать по каналу связи всего один символ. Ну, для простоты, пусть этот символ отображается на 7-и сегментном индикаторе. Я думаю, все знакомы с этой штукой:
1 Семисегментный индикатор.
Очень часто они используются в электронных часах и другой технике. С их помощью можно даже буквы пытаться отображать:
2 Символы на семисегментном индикаторе
Дальше у меня пойдут разные элктрические схемы. Так как никаких KiCad-ов и прочих чудес буржуинской конструкторской мысли у меня нет, то рисовал я эти схемки шариковой ручкой на кухонном столе в старой тетрадке. Прошу меня извинить за качество картинок!
Если я хочу передать всего один символ куда-то далеко, без всякого шифрования, то можно воспользоваться такой схемой:
4 Передача кода символа без шифрования.
На передающей стороне, там где переключатели a. g, можно выбрать те сегменты, которые которые я желаю зажечь. По проводам потечёт ток, сегменты загорятся и мой получатель увидит именно тот символ, который я набрал. Информация передана. Плохо то, что если кто-то где-то подключится к моим проводам (каналу связи), то он тоже увидит именно тот символ, который я передаю. Шифрования нет.
Попробуем зашифровать передаваемый символ. Для этого возьмёт отрезок кабеля, по которому мы передаём информацию и ПЕРЕПУТАЕМ отдельные проводники в нём, как попало. Получится вот что:
5 Зашифрованная передача
6 Передача с шифрованием и расшифровка принятого сообщения.
Такая схема шифрования называется «шифрование с симметричным ключом». Эта схема в самых разных вариантах использовалась человечеством на протяжении тысяч лет. В первой половине ХХ века она достигла своей вершины. Выше подыматься было некуда по двум принципиально неустранимым причинам:
1. Перед установлением связи надо было передать ключ шифования приёмнику каким-то способом, выходящим за стандартный протокол. Привезти в тайном кармане, передать голубиной почтой, через объявление в газете и т.д. Это было очень рисковано. А если противник перехватит ключ? Он получит возможность читать ВСЕ последующие сообщения.
2. Понятно, что в целях безопастности, надо как можно чаще менять ключи шифрования. Однако, если противник уже перехватил старый ключ, то передача нового ключа по вскрытому каналу не приведёт ни к чему хорошему.
Два «Голиафа» (американский и советский) пытались побороть друг друга и тут появился Давид, который отправил в нокаут и того и другого. Давида звали Филипп Циммерман. Он программист (даже не математик) и по образованию и по профессии. Долгое вроемя работал на правительство США в разных исследованиях по криптографии. Создавал программные инструменты для криптозащиты и взлома. И чем больше он знакомился с методами работы спецслужб, тем меньше это всё ему нравилось.
В конце концов он пришёл к борьбе за права человека вообще и тайне переписки в частности. Он и разработал алгоритм и программу шифрования, которая нынче называется во всём мире «Pretty Good Privacy» (Очень хорошая защита приватности). И эта программа произвела революцию в технологии криптозащиты.
В 1991 году Циммерман написал программу Pretty Good Privacy (PGP) — первую широкодоступную программу, которая использовала шифрование с открытым ключом (программист опубликовал её в Интернете для свободного доступа). Вскоре она стала доступна за границей — по утверждению Циммермана, он не принимал никакого участия в её распространении за пределы США.
Несмотря на недостаток финансирования, отсутствие какого-либо оплачиваемого персонала, рекламной компании и т. д., PGP стало наиболее широко используемым в мире программным обеспечением для шифрования электронной почты.
Ну так в чём же идея PGP? Попытаюсь, опять-таки, на самом примитивном уровне. Предупреждаю, что в реальности, за моими картинками стоит достаточно зубодробительная математика. Итак, давайте будем долго-долго запутывать наш кабель, что бы его хватило на ДВА ключа:
7 Несимметричные ключи.
Обращаю Ваше вниманиена то, что слева и справа стоят буквы a. g БЕЗ штрихов. Т.е. каждый проводок в нашей схеме, откуда вышел, туда и пришёл. А теперь берём ножницы и из нашего перепутанного кабеля делаем ДВА ключа: К1 и К2.
Зачем нам две половинки одного ключа?! Дело в том, что совместно они выполняют передачу без шифрования, а между ними выполняется передача зашифрованного сообщения. Вот как это происходит:
Соответственно, вторую (оставшуюся) половинку ключа Вы храните у себя под семью запорами и никуда не выносите. Эта половинка ключа называется приватной, или секретной. Теперь понятно, почему этот метод называется шифрованием с НЕсимметричным ключом?
1. Скачиваем себе ПУБЛИЧНЫЙ ключ Васи Пупкина (пусть это К1).
2. Имея этот ключ и программу PGP (GnuPG) шифруем письмо до границы между ключами К1 и К2.
3. Отпраляем обычной почтой. Прочитать его, не имея К2 невозможно.
Стойкость к взлому
Исследователи уверены, что с использованием их метода факторизации взломать 1024-битный RSA-ключ будет возможно в течение следующего десятилетия.
По словам исследователей, после их работы в качестве надёжной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года.
В переводе на человеческий: ещё несколько лет можно пользоваться ключами 1024 бита и НИКТО вас не вскроет. Потом рекомендуется перейти на ключи длиной 2048 бит. Хотя расчёт ключа занимает довольно много времени, но выполняется он один раз. А скорость самого процесса шифрования от длины ключа зависит не сильно.
Так можно отдать ключи шифрования?
Когда адвокаты П. Дурова в суде пытались это объяснить, судья вынес решение, в котором сказано, что «ответчик не представил убедительных доказательств, того, что у него не хранятся ключи». Тут есть два крючка:
8 Сон Александра Александровича
Увы и ах. В реальной жизни всё несколько хуже. 🙁 А почему он так не любит интернет вообще и «телеграм» в частности? Тема эта давня. А.А. Жаров когда-то защитил дисер на звание кандидата медицинских наук. Тему оцените: «Медико-гигиенические основы формирования здорового образа жизни в Российской Федерации». Это вам не гудрон жевать! В свою «диссертацию» Жаров тупо переписал два государственных доклада, подготовленных Департаментом госсанэпиднадзора Минздрава России и Федеральным центром госсанэпиднадзора Минздрава России в 1998 и в 2002 г., без ссылок на источник, разумеется. В списке авторов докладов Жарова конечно нет и быть не могло. (https://nikitich.livejournal.com/1435192.html)
* Медуза признана судом России иноагентом
Ключевые понятия в шифровании
Иногда процесс шифрования является достаточно простым и автоматическим. Но иногда в нём случаются сбои. Чем больше вы знаете о шифровании, тем в большей безопасности вы будете при возникновении подобных ситуаций. Для начала, если вы этого ещё не сделали, рекомендуем ознакомиться с руководством «Что я должен знать о шифровании?»
В настоящем руководстве мы рассмотрим пять основных идей. Это важные понятия о процессе шифрования:
Шифр и ключ Anchor link
Вы наверняка сталкивались с чем-либо на первый взгляд непонятным. Это могло быть похоже на надпись на чужом языке или вовсе на какую-то бессмыслицу. Что-то препятствовало прочтению и пониманию. Но это вовсе не означает, что было использовано шифрование.
Каковы отличия чего-то зашифрованного от непонятного?
Шифрование — это математический процесс, используемый для превращения информации в нечитаемый (зашифрованный) вид. При этом восстановление первоначального вида информации (расшифровывание) возможно лишь с помощью специальных знаний. В процессе шифрования используются шифр и ключ.
Шифр — это набор правил (алгоритм), используемый при шифровании и расшифровывании. Это чётко определённые, выраженные в виде формулы правила, которым необходимо следовать.
Ключом является инструкция для шифра: как именно нужно шифровать и расшифровывать данные. Ключи являются одной из наиболее важных концепций в шифровании.
Один ключ или несколько? Anchor link
При использовании симметричного шифрования существует единственный ключ как для шифрования, так и расшифровывания данных.
Старые способы шифрования были симметричными. В «шифре Цезаря», использованном Юлием Цезарем, ключом для шифрования и для расшифровывания сообщений был сдвиг по алфавиту на три символа. Например, символ «A» будет изменён на «Г». Сообщение «ШИФРОВАНИЕ — ЭТО КРУТО» превратится с помощью этого ключа («три») в «ЫЛЧУСЕГРЛЗ АХС НУЦХС». Тот же самый ключ используется и для расшифровывания сообщения обратно в исходный вид. |
Симметричное шифрование все ещё применяется сегодня. Оно часто существует в форме «потоковых» и «блочных шифров», которые используют сложные математические процессы для усложнения взлома. В настоящее время процесс шифрования данных проходит в несколько этапов, максимально усложняя извлечение исходных данных при отсутствии подходящего ключа. Современные алгоритмы симметричного шифрования, такие как алгоритм Advanced Encryption Standard (AES), являются надёжными и быстрыми. Симметричное шифрование широко используется компьютерами для таких задач, как шифрование файлов, разделов жёстких дисков на компьютере, полного шифрования дисков и устройств, а также шифрования баз данных, например в менеджерах паролей. При расшифровывании информации, зашифрованной с помощью симметричного шифрования, у вас будут запрашивать пароль. Именно поэтому мы рекомендуем использовать надёжные пароли и предоставляем пособие по созданию надёжных паролей для защиты зашифрованной информации.
Наличие лишь одного ключа может быть полезно, если вы единственный человек, нуждающийся в доступе к зашифрованной информации. Но обладание единственным ключом может стать проблемой при желании поделиться доступом к зашифрованной информации с другом, находящимся вдали от вас. Что, если вы не можете лично встретиться с ним для передачи ключа? И как поделиться ключом через небезопасное подключение к интернету?
Асимметричное шифрование, также называемое шифрованием с открытым ключом, решает эти проблемы. Асимметричное шифрование использует два ключа: закрытый ключ (для расшифровывания) и открытый ключ (для шифрования).
Симметричное шифрование
Асимметричное шифрование
Симметричное и асимметричное шифрование часто используются совместно для шифрования при передаче данных.
Асимметричное шифрование: закрытые и открытые ключи Anchor link
Закрытый и открытый ключи создаются парами. Они математически связаны друг с другом. Вы можете представить их в виде камня, расколотого пополам. Если соединить обе половинки, то они идеально подойдут друг к другу, образуя единое целое. Ни одна часть никакого другого камня не подойдёт. Файлы открытого и закрытого ключей совпадают также. Они состоят из очень больших чисел, генерируемых компьютером.
Несмотря на своё название, открытый ключ не используется для открытия чего-либо (в отличии от реального ключа). Его предназначение заключается в другом. Более подробную информацию о работе открытых и закрытых ключей вы можете найти в нашем руководстве «Глубокое погружение в мир сквозного шифрования».