Основы криптографии: от математики до физики
Рассмотрим основы криптографии, поговорим о самых популярных шифрах и о том, как новое поколение криптографии связано с физикой.
Основы криптографии включают шифры, специальную терминологию и отдельные компоненты криптосистемы. Сегодня эта наука тесно связана с информационной безопасностью.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
- Популярные шифры
- Полиморфизм
- Распространённые алгоритмы
- Виды алгоритмов
- Квантовая криптография
Задачи, которые решает криптография:
- Конфиденциальность — когда нужно передать данные так, чтобы человек, перехвативший зашифрованное сообщение, не смог узнать его содержание.
- Аутентификация — получатель сообщения хочет быть уверен, что оно пришло от определённой стороны, а не от кого-либо ещё.
- Целостность — получатель сообщения хочет доказательства того, что оно не было изменено третьей стороной.
- Отказ от ответственности — предотвратить отказ автора за создание или отправку сообщения.
Популярные шифры
Чтобы понять основы шифрования, необходимо обратиться к популярным примерам.
Квадрат Полибия
Квадрат Полибия — шифр простой замены. В данном примере будет использоваться двумерная матрица 6х6, содержащая заглавные буквы алфавита и цифры от 0 до 9:
С матрицей 6х6 (36 буквенно-цифровых знаков) мы можем начать замену. Например, буква «А» имеет адрес 1х1 или x=1, y=1. Эту запись можно упростить до 11. Другой пример: адрес буквы «N» будет 2х3 или x=2, y=3 или 23.
- Сообщение: ENCRYPT ME 2 DAY
- Шифротекст: 51–23–31–63–15–43–24 13–51 55 41–11–15
Шифр может сделать достаточно длинным и сложным, используя прописные буквы и специальные символы. Также повторение символов и написание алфавита вразброс может дать непредсказуемый результат, устойчивый для метода полного перебора.
Шифр Цезаря
Шифр Цезаря считается самым первым. Цезарь использовал его для кодирования сообщений своим генералам, чтобы враги из Римской Империи не смогли прочитать приказы при перехвате. Шифр Цезаря имеет элементарную форму шифрования, и сегодня его легко взломать: алфавит просто сдвигается вправо или влево. Разные значения сдвига приводят к разным результатам шифровки. Число сдвига — это число букв, на которое происходит смещение в одну из сторон, для создания шифротекста.
Пример использования шифра со сдвигом влево на 3:
- Сообщение: ENCRYPT ME
- Шифротекст: HQFUBSW PH
Шифротекст выше может быть легко взломан методом полного перебора, который заключается в сдвиге в одну из сторон на одну позицию, пока не получится какое-то смысловое сообщение.
Прим. пер. Существует более простой способ взлома шифра Цезаря — частотный анализ. Он заключается в подсчёте частоты встреч каждого символа в любом обычном тексте и в шифротексте. Потом символы с похожими частотами заменяются. Например, если в шифротексте чаще всего встречается буква «T», то она заменяется на букву «Е» для английского алфавита. Этот способ действует только для текстов свыше 300 символов.
Квадрат Виженера
Это усовершенствованный шифр Цезаря с разными значениями сдвига. Например, к первой букве сообщения применяется преобразование ROT5, ко второй — ROT16, etc.
Также у нас есть статья, из которой вы узнаете о самых популярных кодах и шифрах.
Полиморфизм
Основы шифрования и криптографии включают в себя полиморфизм. Это более продвинутая практика в криптографии и часто используется в техниках компьютерного шифрования. Такая техника, которая самостоятельно модифицирует криптоалгоритм после каждого выполнения, и на каждой итерации получаются разные результаты. Если понадобится зашифровать одну и ту же информацию два раза, то алгоритм выдаст разные шифротексты.
Распространённые алгоритмы
Сегодня шифры используют алгоритмы либо с секретным, либо с публичным ключом. В шифрах с закрытым ключом используется единственный ключ, которым обмениваются стороны. Такой ключ или шифр также называют симметричным.
В 1949 году Клод Шеннон из Bell Laboratories опубликовал фундаментальную теорию, положившую начало симметричному шифрованию, а десятилетия эволюции принесли примеры высокого качества. Однако только в 1975 году мощный алгоритм с закрытым ключом DES стал доступен для общего пользования.
Шифрование с помощью открытого ключа или асимметричное шифрование также возникло в середине 1970-х. Асимметричные шифры используют пару ключей — открытый, им делятся с другими людьми, и соответствующий ему закрытый, пользователь должен хранить его в секрете от других.
Стойкость шифровального алгоритма зависит от трёх важных факторов:
- Инфраструктура — если криптография встроена в ПО, то самым слабым звеном будет среда выполнения этого ПО.
- Длина ключа — практичный шифр должен использовать такую длину ключа, при которой полный перебор будет нецелесообразным.
- Качество алгоритма — ошибки шифрования могут ускорить процесс взлома для злоумышленников.
Виды алгоритмов
DES выдержал испытание временем и вошёл в основы криптографии. После четверти века исследований учёным удалось найти несколько спекулятивных атак, которые в конечном итоге не были столь эффективными, как метод полного перебора. Единственная реальная слабость DES-шифра — маленькая длина ключа в 56 бит.
Triple DES (3DES) — модификация DES, позволяющая увеличить длину ключа до 112 или 168 бит.
AES (Advanced Encryption Standard или Rijndael) поддерживает три длины ключа: 128, 192 и 256 бит. Использует 128-битный размер блоков. Считается стойким и используется по всему миру.
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Так как DES был специально разработан для аппаратного обеспечения, то не было предусмотрено, чтобы он эффективно работал в ПО. NIST протестировал работу алгоритма AES в программной среде и разработал требования к хранению криптоматериала, чтобы гарантировать, что AES будет эффективно работать на C и Java, которые используются на рабочих станциях, а также в более ограниченных средах встроенных процессоров ARM и смарт-карт.
Архитектура AES основана на принципе, известном как замена и перестановка, и быстро работает как в программном, так и на аппаратном уровнях. В отличие от своего предшественника — DES, AES не использует сеть Фейстеля.
Длина ключа, используемого для шифрования AES, указывает на количество повторений раундов преобразования, которые преобразуют входной сигнал, называемый исходным текстом, а конечный вывод — шифротекстом. Число циклов повторения выглядит следующим образом:
- 10 циклов повторения для 128-битных ключей;
- 12 циклов повторения для 192-битных ключей;
- 14 циклов повторения для 256-битных ключей.
Каждый раунд состоит из нескольких этапов обработки. Набор обратных повторений применяется для преобразования шифротекста в исходный текст с использованием того же самого ключа шифрования.
Квантовая криптография
Это уже не совсем основы криптографии, а более продвинутый уровень.
На приведённой диаграмме квантовое распределение ключей (протокол BB84), являющееся безопасным способом связи, который реализует криптографический протокол с участием компонентов квантовой механики. Он позволяет двум сторонам создавать общий закрытый ключ, известный только им.
Новое поколение криптографии будет основываться не на математике, а на физике. Учёные в области физики атомов и частиц уже вошли в мир основ криптографии и хотят использовать законы квантовой механики для отправки сообщений, которые невозможно взломать. Они основоположники новой науки — квантовой криптографии.
Криптография с чего начать изучение
Разные люди понимают под шифрованием разные вещи. Дети играют в игрушечные шифры и секретные языки. Это, однако, не имеет ничего общего с настоящей криптографией. Настоящая криптография ( strong cryptography ) должна обеспечивать такой уровень секретности, чтобы можно было надежно защитить критическую информацию от расшифровки крупными организациями — такими как мафия, транснациональные корпорации и крупные государства. Настоящая криптография в прошлом использовалась лишь в военных целях. Однако сейчас, с становлением информационного общества, она становится центральным инструментом для обеспечения конфиденциальности.
По мере образования информационного общества, крупным государствам становятся доступны технологические средства тотального надзора за миллионами людей. Поэтому криптография становится одним из основных инструментов обеспечивающих конфиденциальность, доверие, авторизацию, электронные платежи, корпоративную безопасность и бесчисленное множество других важных вещей.
Криптография не является более придумкой военных, с которой не стоит связываться. Настала пора снять с криптографии покровы таинственности и использовать все ее возможности на пользу современному обществу. Широкое распространение криптографии является одним из немногих способов защитить человека от ситуации, когда он вдруг обнаруживает, что живет в тоталитарном государстве, которое может контролировать каждый его шаг.
Базовая терминология
Представьте, что вам надо отправить сообщение адресату. Вы хотите, чтобы никто кроме адресата не смог прочитать отправленную информацию. Однако всегда есть вероятность, что кто-либо вскроет конверт или перехватит электронное послание.
В криптографической терминологии исходное послание именуют открытым текстом ( plaintext или cleartext ). Изменение исходного текста так, чтобы скрыть от прочих его содержание, называют шифрованием ( encryption ). Зашифрованное сообщение называют шифротекстом ( ciphertext ). Процесс, при котором из шифротекста извлекается открытый текст называют дешифровкой ( decryption ). Обычно в процессе шифровки и дешифровки используется некий ключ ( key ) и алгоритм обеспечивает, что дешифрование можно сделать лишь зная этот ключ.
Криптография — это наука о том, как обеспечить секретность сообщения. Криптоанализ — это наука о том, как вскрыть шифрованное сообщение, то есть как извлечь открытый текст не зная ключа. Криптографией занимаются криптографы , а криптоанализом занимаются криптоаналитики .
Алгоритмы с использованием ключа делятся на два класса: симметричные (или алгоритмы секретным ключом) и асиметричные (или алгоритмы с открытым ключом). Разница в том, что симметричные алгоритмы используют один и тот же ключ для шифрования и для дешифрования (или же ключ для дешифровки просто вычисляется по ключу шифровки). В то время как асимметричные алгоритмы используют разные ключи, и ключ для дешифровки не может быть вычислен по ключу шифровки.
Смметричные алгоритмы подразделяют на потоковые шифры и блочные шифры . Потоковые позволяют шифровать информацию побитово, в то время как блочные работают с некоторым набором бит данных (обычно размер блока составляет 64 бита) и шифруют этот набор как единое целое.
Ассиметричные шифры (также именуемые алгоритмами с открытым ключом, или — в более общем плане — криптографией с открытым ключом) допускают, чтобы открытый ключ был доступн всем (скажем, опубликован в газете). Это позволяет любому зашифровать сообщение. Однако расшифровать это сообщение сможет только нужный человек (тот, кто владеет ключом дешифровки). Ключ для шифрования называют открытым ключом , а ключ для дешифрования — закрытым ключом или секретным ключом .
Современные алгоритмы шифровки/дешифровки достаточно сложны и их невозможно проводить вручную. Настоящие криптографические алгоритмы разработаны для использования компьютерами или специальными аппаратными устройствами. В большинстве приложений криптография производится программным обеспечением и имеется множество доступных криптографических пакетов.
Вообще говоря, симметричные алгоритмы работают быстрее, чем ассиметричные. На практке оба типа алгоритмов часто используются вместе: алгоритм с открытым ключом используется для того, чтобы передать случайным образом сгенерированный секретный ключ, который затем используется для дешифровки сообщения.
Многие качественные криптографические алгоритмы доступны широко — в книжном магазине, библиотеке, патентном бюро или в Интернет. К широко известным симметричным алгоритмам относятся DES и IDEA, Наверное самым лучшим асимметричным алгоритмом является RSA.
Цифровые подписи
Некоторые из асимметричных алгоритмов могут использоваться для генерирования цифровой подписи . Цифровой подписью называют блок данных, сгенерированный с использованием некоторого секретного ключа. При этом с помощью открытого ключа можно проверить, что данные были действительно сгенерированы с помощью этого секретного ключа. Алгоритм генерации цифровой подписи должен обеспечивать, чтобы было невозможно без секретного ключа создать подпись, которая при проверке окажется правильной.
Цифровые подписи используются для того, чтобы подтвердить, что сообщение пришло действительно от данного отправителя (в предположении, что лишь отправитель обладает секретным ключом, соответствующим его открытому ключу). Также подписи используются для проставления штампа времени ( timestamp ) на документах: сторона, которой мы доверяем, подписывает документ со штампом времени с помошью своего секретного ключа и, таким образом, подтверждает, что документ уже существовал в момент, объявленный в штампе времени.
Цифровые подписи также можно использовать для удостоверения ( сертификации — to certify ) того, что документ принадлежит определенному лицу. Это делается так: открытый ключ и информация о том, кому он принадлежит подписываются стороной, которой доверяем. При этом доверять подписывающей стороне мы можем на основании того, что ее ключ был подписан третьей стороной. Таким образом возникает иерархия доверия. Очевидно, что некоторый ключ должен быть корнем иерархии (то есть ему мы доверяем не потому, что он кем-то подписан, а потому, что мы верим a-priori, что ему можно доверять). В централизованной инфраструктуре ключей имеется очень небольшое количество корневых ключей сети (например, облеченные полномочиями государственные агенства; их также называют сертификационными агенствами — certification authorities ). В распределенной инфраструктуре нет необходимости иметь универсальные для всех корневые ключи, и каждая из сторон может доверять своему набору корневых ключей (скажем своему собственному ключу и ключам, ею подписанным). Эта концепция носит название сети доверия ( web of trust ) и реализована, например, в PGP.
Цифровая подпись документа обычно создается так: из документа генерируется так называемый дайджест ( message digest ) и к нему добавляется информация о том, кто подписывает документ, штамп времени и прочее. Получившаяся строка далее зашифровывается секретным ключом подписывающего с использованием того или иного алгоритма. Получившийся зашифрованный набор бит и представляет собой подпись. К подписи обычно прикладывается открытый ключ подписывающего. Получатель сначала решает для себя доверяет ли он тому, что открытый ключ принадлежит именно тому, кому должен принадлежать (с помощью сети доверия или априорного знания), и затем дешифрует подпись с помощью открытого ключа. Если подпись нормально дешифровалась, и ее содержимое соответствует документу (дайджест и др.), то сообщение считается подтвержденным.
Свободно доступны несколько методов создания и проверки цифровых подписей. Наиболее известным является алгоритм RSA.
Криптографические хэш-функции
Криптографические хэш-функции используются обычно для генерации дайджеста сообщения при создании цифровой подписи. Хэш-функции отображают сообщение в имеющее фиксированный размер хэш-значение ( hash value ) таким образом, что все множество возможных сообщений распределяется равномерно по множеству хэш-значений. При этом криптографическая хэш-функция делает это таким образом, что практически невозможно подогнать документ к заданному хэш-значению.
Криптографические хэш-функции обычно производят значения длиной в 128 и более бит. Это число значительно больше, чем количество собщений, которые когда-либо будут существовать в мире.
Много хороших криптографических хэш-функций доступно бесплатно. Широко известные включают MD5 и SHA.
Криптографические генераторы случайных чисел
Криптографические генераторы случайных чисел производят случайные числа, которые используются в криптографических приложениях, например — для генерации ключей. Обычные генераторы случайных чисел, имеющиеся во многих языках программирования и программных средах, не подходят для нужд криптографии (они создавались с целью получить статистически случайное распределение, криптоаналитики могут предсказать поведение таких случайных генераторов).
В идеале случайные числа должны основываться на настоящем физическом источнике случайной информации, которую невозможно предсказать. Примеры таких источников включают шумящие полупроводниковые приборы, младшие биты оцифрованного звука, интервалы между прерываниями устройств или нажатиями клавиш. Полученный от физического источника шум затем «дистиллируется» криптографической хэш-функцией так, чтобы каждый бит зависел от каждого бита. Достаточно часто для хранения случайной информации используется довольно большой пул (несколько тысяч бит) и каждый бит пула делается зависимым от каждого бита шумовой информаци и каждого другого бита пула криптографически надежным ( strong ) способом.
Когда нет настоящего физического источника шума, приходится пользоваться псевдослучайными числами. Такая ситуация нежелательна, но часто возникает на компьютерах общего назначения. Всегда желательно получить некий шум окружения — скажем от величины задержек в устройствах, цифры статистики использования ресурсов, сетевой статистики, прерываний от клавиатуры или чего-то иного. Задачей является получить данные, непредсказуемые для внешнего наблюдателя. Для достижения этого случайный пул должен содержать как минимум 128 бит настоящей энтропии.
Криптографические генераторы псевдослучайных чисел обычно используют большой пул (seed-значение), содержащий случайную информацию. Биты генерируется путем выборки из пула с возможным прогоном через криптографическую хэш-функцию, чтобы спрятать содержимое пула от внешнего наблюдателя. Когда требуется новая порция бит, пул перемешивается путем шифровки со случайным ключом (его можно взять из неиспользованной пока части пула) так, чтобы каждый бит пула зависел от каждого другого бита. Новый шум окружения должен добавляться к пулу перед перемешиваниям, дабы сделать предсказание новых значений пула еще более сложным.
Несмотря на то, что при аккуратном проектировании криптографически надежный генератор случайных чисел реализовать не так уж и трудно, этот вопрос часто упускают из вида. Таким образом, следует подчеркнуть важность криптографического генератора случайных чисел — если он сделан плохо, он может легко стать самым уязвимым элементом системы.
Обеспечиваемая шифром степень защиты
Хорошие криптографические системы создаются таким образом, чтобы сделать их вскрытие как можно более трудным делом. Можно построить системы, которые на практике невозможно вскрыть (хотя доказать сей факт обычно нельзя). При этом не требуется очень больших усилий для реализации. Единственное, что требуется — это аккуратность и базовые знания. Нет прощения разработчику, если он оставил возможность для вскрытия системы. Все механизмы, которые могут использоваться для взлома системы надо задокументировать и довести до сведения конечных пользователей.
Теоретически, любой шифровальный алгоритм с использованием ключа может быть вскрыт методом перебора всех значений ключа. Если ключ подбирается методом грубой силы ( brute force ), требуемая мощность компьютера растет экспоненциально с увеличением длины ключа. Ключ длиной в 32 бита требует 2^32 (около 10^9) шагов. Такая задача под силу любому дилетанту и решается на домашнем компьютере. Системы с 40-битным ключом (например, экспортный американский вариант алгоритма RC4) требуют 2^40 шагов — такие компьютерные мощности имеются в большинстве университетов и даже в небольших компаниях. Системы с 56-битными ключами (DES) требуют для вскрытия заметных усилий, однако могут быть легко вскрыты с помощью специальной аппаратуры. Стоимость такой аппаратуры значительна, но доступна для мафии, крупных компаний и правительств. Ключи длиной 64 бита в настоящий момент, возможно, могут быть вскрыты крупными государствами и уже в ближайшие несколько лет будут доступны для вскрытия преступными организацими, крупными компаниями и небольшими государствами. Ключи длиной 80 бит могут в будущем стать уязвимыми. Ключи длиной 128 бит вероятно останутся недоступными для вскрытия методом грубой силы в обозримом будущем. Можно использовать и более длинные ключи. В пределе нетрудно добиться того, чтобы энергия, требуемая для вскрытия (считая, что на один шаг затрачивается минимальный квантовомеханический квант энергии) превзойдет массу солнца или вселенной.
Однако, длина ключа это еще не все. Многие шифры можно вскрыть и не перебирая всех возможных комбинаций. Вообще говоря, очень трудно придумать шифр, который нельзя было бы вскрыть другим более эффективным способом. Разработка собственных шифров может стать приятным занятием, но для реальных приложений использовать самодельные шифры не рекомендуется если вы не являетесь экспертом и не уверены на 100 процентов в том, что делаете.
Вообще говоря, следует держаться в стороне от неопубликованных или секретных алгоритмов. Часто разработчик такого алгоритма не уверен в его надежности, или же надежность зависит от секретности самого алгоритма. Вообще говоря, ни один алгоритм, секретность которого зависит от секретности самого алгоритма не явяется надежным. В частности, имея шифрующую программу, можно нанять прграммиста, который дизассемблирует ее и восстановит алгоритм методом обратной инженерии. Опыт показывает, что большинство секретных алгоритмов, ставших впоследствии достоянием общественности, оказались до смешного ненадежными.
Длины ключей, используемых в криптографии с открытым ключом обычно значительно больше, чем в симметричных алгоритмах. Здесь проблема заключается не в подборе ключа, а в воссоздании секретного ключа по открытому. В случае RSA проблема эквивалентна разложению на множители большого целого числа, которое является произведением пары неизвестных простых чисел. В случае некоторых других криптосистем, проблема эквивалентна вычислению дискретного логарифма по модулю большого целого числа (такая задача считается примерно аналогичной по трудности задаче разложения на множители). Имеются криптосистемы, которые используют другие проблемы.
Чтобы дать представление о степени сложности вскрытия RSA, скажем, что модули длиной 256 бит легко факторизуются обычными программистами. Ключи в 384 бита могут быть вскрыты исследовательской группой университета или компании. 512-битные ключи находятся в пределах досягаемости крупных государств. Ключи длиной в 768 бит вероятно не будут надежны продолжительное время. Ключи длиной в 1024 бит могут считаться безопасными до тех пор, пока не будет существенного прогресса в алгоритме факторизации; ключи длиной в 2048 большинство считает надежными на десятилетия. Более подробную информацию о длинах ключей RSA можно почерпнуть из статьи Брюса Шнайера (Bruce Scheier).
Важно подчеркнуть, что степень надежности криптографической системы определяется ее слабейшим звеном . Нельзя упускать из вида ни одного аспекта разработки системы — от выбора алгоритма до политики использования и распространения ключей.
Криптоанализ и атаки на криптосистемы
- Атака со знанием лишь шифрованного текста ( ciphertext-only attack ): Это ситуация, когда атакующий не знает ничего о содержании сообщения, и ему приходтся работать лишь с самим шифрованным текстом. На практике, часто можно сделать правдоподобные предположения о структуре текста, поскольку многие сообщения имеют стандартные заголовки. Даже обычные письма и документы начинаются с легко предсказумой информации. Также часто можно предположить, что некоторый блок информации содержит заданное слово.
- Атака со знанием содержимого шифровки ( known-plaintext attack ): Атакующий знает или может угадать содержимое всего или части зашифрованного текста. Задача заключается в расшифровке остального сообщения. Это можно сделать либо путем вычисления ключа шифровки, либо минуя это.
- Атака с заданным текстом ( chosen-plaintext attack ): Атакующий имеет возможнот получить шифрованный документ для любого нужного ему текста, но не знает ключа. Задачей является нахождение ключа. Некоторые методы шифрования и, в частности, RSA, весьма уязвимы для атак этого типа. При использовании таких алгоритмов надо тщательно следить, чтобы атакующий не мог зашифровать заданный им текст.
- Атака с подставкой ( Man-in-the-middle attack ): Атака направлена на обмен шифрованными сообщениями и, в особенности, на протокол обмена ключами. Идея заключается в том, что когда две стороны обмениваются ключами для секретной коммуникации (например, используя шифр Диффи-Хелмана, Diffie-Hellman), противник внедряется между ними на линии обмена сообщениями. Далее противник выдает каждой стороне свои ключи. В результате, каждая из сторон будет иметь разные ключи, каждый из которых известен противнику. Теперь противник будет расшифровывать каждое сообщение своим ключом и затем зашифровывать его с помощью другого ключа перед отправкой адресату. Стороны будут иметь иллюзию секретной переписки, в то время как на самом деле противник читает все сообщения. Одним из способов предотвратить такой тип атак заключается в том, что стороны при обмене ключами вычисляют криптографическую хэш-функцию значения протокола обмена (или по меньшей мере значения ключей), подписывают ее алгоритмом цифровой подписи и посылают подпись другой стороне. Получатель проверит подпись и то, что значение хэш-функции совпадает с вычисленным значением. Такой метод используется, в частности, в системе Фотурис (Photuris).
- Атака с помощью таймера ( timing attack ): Этот новый тип атак основан на последовательном измерении времен, затрачиваемых на выполнение операции возведения в стенень по модулю целого числа. Ей подвержены по крайней мере следующие шифры: RSA, Диффи-Хеллман и метод эллиптических кривых. Дополнительную информацию смотрите в оригинальной статье и во множестве последовавших статей.
Disclaimer. Все приведенные здесь мнения и выводы являются субъективной точкой зрения автора, и автор не может нести ответственность за их ильность.
Основы криптографии. Часть 0
Целью данного цикла статей я хотел бы поставить создание простейшего криптозащищенного мессенджера с упором исключительно на криптографию, исключая из рассмотрения технические тонкости непосредственно коммуникаций, сетевых протоколов, графики и всего остального.
Шаг за шагом обходя уязвимости, которые будет иметь наш разрабатываемый с нуля протокол, в конце мы получим собранную своими руками криптографическую систему, противостоящую подавлящему количеству вариаций атак.
Большинство людей, незнакомых с криптографией, думая о шифровании, представляют себе некий сейф, в который кладется исходная информация в чистом виде, и для того, чтобы получить пользователь получил ее назад, необходимо предъявить системе комбинацию, отпирающую замок сейфа и достать информацию из абстрактного ящика.
Однако с подобным подходом возникает ряд проблем:
- Сейф можно вскрыть болгаркой или иным силовым методом
- Производитель сейфов может оставить обходную лазейку и получить доступ к содержимому
Поэтому перед криптографией стоит вопрос, как сохранить неприкосновенность информации даже при условии попадания «сейфа» в руки противника.
Необходимое условие для подобного — изменение самой структуры информации таким образом, что ее восстановление было возможно только при применении некого ключа, размер которого гораздо меньше исходного набора данных
Примерно в таком виде оставляет вашу информацию шифрование, с тем лишь отличием, что она остается восстановимой при условии, если известен ключ
Восстановить информацию возможно лишь с помощью того же ключа, который должен знать принимающий информацию на другой стороне
Подобное информационное месиво можно передавать по открытым каналам связи, оно не предстваляет никакой ценности ни для кого, кроме людей, знающих пароль.
Подобное шифрование называется симметричным, поскольку для шифрования информации оно использует точно такой же шифр, как и для дешифрования.
Забегая вперед, можно сказать, что подобный метод шифрования не лишен недостатков, поэтому были изобретены ассимметричные методы шифрования, но о них мы поговорим позже.
При симметричном шифровании используется следующий протокол передачи информации:
- Предположим, что симметричный ключ: password
- Алиса шифрует сообщение и получает шифрованный набор битов в виде, очень похожем на информационный мусор и передает его по открытому каналу связи
- Ева, подслушав зашифрованное сообщение, не может придумать ничего лучше, как начать перебирать пароль, с целью получить исходное сообщение, поскольку, при идеальном или близком к идеальному симметричном алгоритме, подбор пароля — самый приемлимый способ получения допуска к информации.
Учитывая, что длинна пароля у нас — 12 символов, а каждый символ — 8 битов, полный перебор займет у алисы (2^8)^(12), или 2^96 операций. Подобный перебор займет у злоумышленника несколько веков и вряд ли зашифрованная информация к этому времени сохранит актуальность.
Алиса на своем компьютере имеет простейшую программу
public class User < private String password = "qdghjfTTfbfs4852"; // SymmEncrypor - класс, отвечающий за симметричное шифрование private SymmEncryptor SE = new SymmEncryptor(); // Метод для зашифровки сообщений private String encryptMessage(String message) < String encMessage = SE.encrypt(message, password); System.out.print("Зашифрованное сообщение: " + encMessage); return encMessage; >// Метод для расшифровки сообщений private String decryptMessage(String EncryptedMessage) < String encMessage = SE.decrypt(EncryptedMessage, password); System.out.print("Исходное сообщение: " + decMessage); return decMessage; >public static void main(String[] args) < String message = encryptMessage("Hello, Bob!"); >>
Алиса получила зашифрованную строчку и передает ее Бобу через телефонную линию, которая круглосуточно прослушивается Евой. Перехватив зашифрованное сообщение, Евой, не сможет ничего с ним сделать, но Боб, в свою очередь, получив сообщение, в такой же программе применит пароль ddghjfTTfbfs4852, который он знает заранее, и сможет расшифровать сообщение.
Программа, установленная у Боба:
public class User < private String password = "qdghjfTTfbfs4852"; private SymmEncryptor SE = new SymmEncryptor(); private String encryptMessage(String message) < SymmEncryptor SE = new SymmEncryptor(); String encMessage = SE.encrypt(message, password); System.out.print("Зашифрованное сообщение: " + encMessage); return encMessage; >private String decryptMessage(String message) < String encMessage = SE.decrypt(message, password); System.out.print("Исходное сообщение: " + decMessage); return decMessage; >public static void main(String[] args) < // сообщение, полученное Бобом через небезопасный прослушиваемый канал связи String message = "FJekjfisdf7f33fFFDf788dsfvUHVUDIUSiusdyf&D&F^8" // Боб дешифрует сообщение, полученное от Алисы, с помощью пароля qdghjfTTfbfs4852 String DecryptedMessage = decryptMessage(message); * Вывод : Исходное сообщение: Hello, Bob! >>
Метод SymmEncryptor пока остается для нас черным ящиком, мы не знаем, как он работает, а лишь полагаемся на его надежность
Общепризнанные алгоритмы шифрования уже ни один десяток лет проверяются на прочность криптографическим сообществом всего мира, и если за этот срок не продоставлено доказательств его компроментации, то можно с уверенностью предположить, что алгоритм надежен, самостоятельно проверить старые алгоритмы шифрования, не будучи специалистом-криптографом, достаточно сложно
Вы по умолчанию не должны доверять новым алгоритмам шифрования, пока они не прошли достаточную проверку на прочность. И тем более, не пытаться создать свой собственнй, наивно полагая, что вам удасться учесть все нюансы, которые может приметить потенциальный взломщик.
В следующий раз мы разберем черный ящик класса SymmEncryptor и напишем простейший механизм шифрования, чтобы разобраться на личном примере — что это и как это работает
C чего начать изучать криптографию
Братка, ты хоть это в мою тему там где Си добавь, а то всё выпелил, даже главное:
«Подскажите что ли план действий, с чего начать учить программирование или еще что, чтобы, например, написать такую программу, чтобы с пацанами можно было писать между собой что хочешь, а КГБ и всякие шпийоны прочие не могли нас читать и вычислять. Литературу с которой начинать, какие-то личные советы или вообще чего. Реально?»
Извиняюсь что тут пишу, не знаю как тебе телеграммы писать.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
С чего начать изучать скрипты.
Всем привет! Вопрос думаю для вас заезженный, но все же. Хочу научится програмировать, подскажите.
с чего начать изучать язык программирования и какой именно
Всем добрый вечер.Подскажите с чего начать изучать язык программирования и какой именно.Спросите.
Что начать изучать
Учусь на програмиста. В ходе учебы осваивали С, С++(на уровне лаб, курсового). С# из личной.
Какой язык программирования начать изучать
Какой язык программирования начать изучать?