В криптографии шифр (или cypher ) — это алгоритм выполнения шифрования или дешифрования — серия четко определенных шагов, которым можно следовать как процедура. Альтернативный, менее распространенный термин — шифрование . Зашифровать или закодировать — значит преобразовать информацию в шифр или код. В просторечии «шифр» является синонимом « кода », поскольку оба они представляют собой набор шагов, которые шифруют сообщение; однако в криптографии, особенно в классической криптографии, эти понятия различны .
Коды обычно заменяют на выходе строки символов разной длины, тогда как шифры обычно заменяют то же количество символов, что и на входе. Код сопоставляет одно значение с другим. Слова и фразы могут быть закодированы буквами или цифрами. Коды обычно имеют прямое значение от ввода до клавиши. Коды в первую очередь предназначены для экономии времени. Шифры являются алгоритмическими. Данный ввод должен следовать процессу шифрования, который необходимо решить. Шифры обычно используются для шифрования письменной информации.
Коды работают путем замены в соответствии с большой кодовой книгой , которая связывает случайную строку символов или цифр со словом или фразой. Например, «UQJHSE» может быть кодом «Перейти к следующим координатам». При использовании шифра исходная информация называется открытым текстом , а зашифрованная форма — зашифрованным текстом . Зашифрованное текстовое сообщение содержит всю информацию открытого текстового сообщения, но оно не имеет формата, читаемого человеком или компьютером без надлежащего механизма для его расшифровки.
Работа шифра обычно зависит от части вспомогательной информации, называемой ключом ( или, на традиционном языке АНБ , криптопеременной ). Процедура шифрования варьируется в зависимости от ключа, что меняет детали работы алгоритма. Прежде чем использовать шифр для шифрования сообщения, необходимо выбрать ключ. Без знания ключа будет чрезвычайно сложно, если не невозможно, расшифровать полученный зашифрованный текст в читаемый открытый текст.
Большинство современных шифров можно разделить на несколько категорий.
Слово «шифр», происходящее от арабского слова «ноль» صفر (сифр), распространилось в Европу как часть арабской системы счисления в средние века. В римской системе счисления отсутствовало понятие нуля , и это ограничивало прогресс в математике. В ходе этого перехода это слово было принято в средневековой латыни как cifra, а затем в среднефранцузском языке как cifre. В конечном итоге это привело к появлению английского слова cipher (шифр правописания меньшинства). Одна из теорий того, как этот термин стал относиться к кодированию, заключается в том, что концепция нуля сбивала с толку европейцев, и поэтому этот термин стал относиться к сообщению или сообщению, которое было нелегко понять. [1]
Термин «шифр» позже также использовался для обозначения любой арабской цифры или для вычислений с ее использованием, поэтому кодирование текста в форме арабских цифр буквально преобразует текст в «шифры».
В повседневном контексте «код» и «шифр» обычно могут использоваться как синонимы; однако техническое использование этих слов относится к разным понятиям. Коды содержат смысл; слова и фразы присваиваются цифрам или символам, создавая более короткое сообщение.
Примером этого является код коммерческого телеграфа , который использовался для сокращения длинных телеграфных сообщений, возникших в результате заключения коммерческих контрактов с использованием обмена телеграммами .
Другим примером являются шифры целых слов, которые позволяют пользователю заменять целое слово символом или символом, во многом аналогично тому, как в письменном японском языке используются символы кандзи (что означает китайские иероглифы на японском языке) в дополнение к родным японским символам, представляющим слоги. Примером использования английского языка с кандзи может быть замена «Быстрая коричневая лиса прыгает через ленивую собаку» на «Быстрая коричневая 狐 прыгает 上 ленивая 犬». Стенографистки иногда используют специальные символы для сокращения целых слов.
Шифры же работают на более низком уровне: уровне отдельных букв, небольших групп букв или, в современных схемах, отдельных битов и блоков битов. Некоторые системы использовали как коды, так и шифры в одной системе, используя супершифрование для повышения безопасности. В некоторых случаях термины коды и шифры используются как синонимы замены и транспозиции соответственно.
Исторически криптография была разделена на дихотомию кодов и шифров, при этом кодирование имело свою терминологию, аналогичную терминологии шифров: « кодирование , кодовый текст , декодирование » и так далее.
Однако коды имеют ряд недостатков, включая восприимчивость к криптоанализу и сложность управления громоздкой кодовой книгой . Из-за этого коды вышли из употребления в современной криптографии, а шифры стали доминирующим методом.
Существует множество различных типов шифрования. Алгоритмы, использовавшиеся ранее в истории криптографии , существенно отличаются от современных методов, и современные шифры можно классифицировать в зависимости от того, как они работают и используют ли они один или два ключа.
Шифр Цезаря — одна из самых ранних известных криптографических систем. Юлий Цезарь использовал шифр, который сдвигал буквы алфавита на три места и переносил оставшиеся буквы вперед, чтобы написать Марку Туллию Цицерону примерно в 50 г. до н.э.[11] [ нужна цитата ]
Исторические шифры, используемые в прошлом, иногда называют классическими шифрами . Они включают в себя простые шифры замены (например, ROT13 ) и шифры транспонирования (например, шифр рельсового ограждения ). Например, «GOOD DOG» можно зашифровать как «PLLX XLP», где «L» заменяет «O», «P» вместо «G» и «X» вместо «D» в сообщении. Транспонирование букв «GOOD DOG» может привести к образованию «DGOGDOO». Эти простые шифры и примеры легко взломать даже без пар «открытый текст-зашифрованный текст». [2] [3]
В 1640-х годах командующий парламентарием Эдвард Монтегю, 2-й граф Манчестерский , разработал шифры для отправки закодированных сообщений своим союзникам во время гражданской войны в Англии . [4]
Простые шифры были заменены полиалфавитными шифрами замены (такими как шифры Виженера ), которые меняли алфавит замены для каждой буквы. Например, «GOOD DOG» можно зашифровать как «PLSX TWF», где «L», «S» и «W» заменяют «O». Даже при небольшом количестве известного или предполагаемого открытого текста простые шифры полиалфавитной замены и шифры перестановки букв, предназначенные для шифрования с помощью ручки и бумаги, легко взломать. [5] Можно создать надежный шифр, написанный ручкой и на бумаге, на основе одноразового блокнота , но у него есть и другие недостатки.
В начале двадцатого века были изобретены электромеханические машины для шифрования и дешифрования с использованием транспозиции, полиалфавитной замены и своего рода «аддитивной» замены. В роторных машинах несколько роторных дисков обеспечивали многоалфавитную замену, а штекерные платы обеспечивали еще одну замену. Ключи легко менялись путем замены роторных дисков и проводов коммутационной панели. Хотя эти методы шифрования были более сложными, чем предыдущие схемы, и требовали машин для шифрования и дешифрования, для взлома этих методов шифрования были изобретены другие машины, такие как британская бомба .
Современные методы шифрования можно разделить по двум критериям: по типу используемого ключа и по типу входных данных.
По типу ключа используемые шифры делятся на:
В алгоритме симметричного ключа (например, DES и AES) отправитель и получатель должны иметь общий ключ, установленный заранее и хранящийся в секрете от всех других сторон; отправитель использует этот ключ для шифрования, а получатель использует тот же ключ для дешифрования. Разработка AES (усовершенствованной системы шифрования) была выгодна, поскольку она была направлена на преодоление недостатков конструкции DES (стандарта шифрования данных). Заявление разработчика AES о том, что обычные средства современных шифровальных криптоаналитических атак неэффективны против AES из-за его структуры.
По типу входных данных шифры можно разделить на два типа:
При чисто математической атаке (т. е. при отсутствии какой-либо другой информации, помогающей взломать шифр) прежде всего имеют значение два фактора:
Поскольку желаемым эффектом является вычислительная сложность, теоретически можно было бы выбрать алгоритм и желаемый уровень сложности и соответствующим образом определить длину ключа.
Пример этого процесса можно найти в разделе «Длина ключа», который использует несколько отчетов, чтобы предположить, что симметричный шифр с 128 битами , асимметричный шифр с 3072-битными ключами и шифр с эллиптической кривой с 256 битами в настоящее время имеют одинаковые трудности.
Клод Шеннон доказал, используя соображения теории информации, что любой теоретически невзламываемый шифр должен иметь ключи, длина которых не меньше длины открытого текста, и которые используются только один раз: одноразовый блокнот . [6]