10 популярных кодов и шифров

Введение в RC6.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

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

А B C D E F грамм ЧАС я J K L M N О п Q р S Т U V W Икс Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 год 22 23 24 25

Шифрование

В этом примере шифрования открытый текст, который должен быть зашифрован, представляет собой «AFFINE CIPHER» с использованием упомянутой выше таблицы для числовых значений каждой буквы, принимая a равным 5, b равным 8 и m равным 26, поскольку в используемый алфавит. Только значение a имеет ограничение, поскольку оно должно быть взаимно простым с 26. Возможные значения, которыми может быть a : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Значение b может быть произвольным, пока a не равно 1, поскольку это сдвиг шифра. Таким образом, функция шифрования для этого примера будет y = E ( x ) = (5 x + 8) mod 26 . Первый шаг в шифровании сообщения — записать числовые значения каждой буквы.

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17

Теперь возьмите каждое значение x и решите первую часть уравнения (5 x + 8) . Найдя значение (5 x + 8) для каждого символа, возьмите остаток при делении результата (5 x + 8) на 26. В следующей таблице показаны первые четыре шага процесса шифрования.

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17
(5 х + 8) 8 33 33 48 73 28 год 18 48 83 43 год 28 год 93
(5 х + 8) мод 26 8 7 7 22 21 год 2 18 22 5 17 2 15

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

простой текст А F F я N E C я п ЧАС E р
Икс 5 5 8 13 4 2 8 15 7 4 17
(5 х + 8) 8 33 33 48 73 28 год 18 48 83 43 год 28 год 93
(5 х + 8) мод 26 8 7 7 22 21 год 2 18 22 5 17 2 15
зашифрованный текст я ЧАС ЧАС W V C S W F р C п

Расшифровка

В этом примере расшифровки зашифрованный текст, который будет расшифрован, является зашифрованным текстом из примера шифрования. Соответствующая функция дешифрования: D ( y ) = 21 ( y — 8) mod 26 , где a −1 вычислено как 21, а b равно 8. Для начала напишите числовые эквиваленты каждой буквы в зашифрованном тексте, как показано в таблице ниже.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15

Теперь следующим шагом является вычисление 21 ( y — 8) , а затем получение остатка от деления этого результата на 26. В следующей таблице показаны результаты обоих вычислений.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15
21 ( г — 8) −21 −21 294 273 −126 210 294 −63 189 −126 147
21 ( у — 8) мод 26 5 5 8 13 4 2 8 15 7 4 17

Последним шагом в расшифровке зашифрованного текста является использование таблицы для преобразования числовых значений обратно в буквы. Открытый текст в этой дешифровке — AFFINECIPHER. Ниже приведена таблица с завершенным последним этапом.

зашифрованный текст я ЧАС ЧАС W V C S W F р C п
у 8 7 7 22 21 год 2 18 22 5 17 2 15
21 ( г — 8) −21 −21 294 273 −126 210 294 −63 189 −126 147
21 ( у — 8) мод 26 5 5 8 13 4 2 8 15 7 4 17
простой текст А F F я N E C я п ЧАС E р

Закодирован весь алфавит

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

письмо в открытом тексте А B C D E F грамм ЧАС я J K L M N О п Q р S Т U V W Икс Y Z
число в открытом тексте 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 год 22 23 24 25
(5 х + 8) мод 26 8 13 18 23 2 7 12 17 22 1 6 11 16 21 год 5 10 15 20 25 4 9 14 19 24 3
письмо с зашифрованным текстом я N S Икс C ЧАС M р W B грамм L Q V А F K п U Z E J О Т Y D

Примеры программирования

Следующий код Python можно использовать для шифрования текста аффинным шифром:

# Prints a transposition table for an affine cipher.
# a must be coprime to m=26.
def affine(a int, b int) -> None
    for i in range(26):
        print(chr(i+ord('A')) + ": " + chr(((a*i+b)%26)+ord('A')))

# An example call
affine(5, 8)

Стандартные шифры

ROT1

Этот шифр известен многим детям. Ключ прост: каждая буква заменяется на следующую за ней в алфавите. Так, А заменяется на Б, Б — на В, и т. д. Фраза «Уйрйшоьк Рспдсбннйту» — это «Типичный Программист».

Попробуйте расшифровать сообщение:

Шифр транспонирования

В транспозиционном шифре буквы переставляются по заранее определённому правилу. Например, если каждое слово пишется задом наперед, то из hello world получается dlrow olleh. Другой пример — менять местами каждые две буквы. Таким образом, предыдущее сообщение станет eh ll wo ro dl.

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

Из этого способа мы получим шифр holewdlo lr. А вот столбчатая транспозиция, реализованная программно:

Азбука Морзе

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

Сможете расшифровать сообщение, используя картинку?

Шифр Цезаря

Это не один шифр, а целых 26, использующих один принцип. Так, ROT1 — лишь один из вариантов шифра Цезаря. Получателю нужно просто сообщить, какой шаг использовался при шифровании: если ROT2, тогда А заменяется на В, Б на Г и т. д.

А здесь использован шифр Цезаря с шагом 5:

Моноалфавитная замена

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

Например, наиболее часто встречающаяся буква в английском алфавите — «E». Таким образом, в тексте, зашифрованном моноалфавитным шрифтом, наиболее часто встречающейся буквой будет буква, соответствующая «E». Вторая наиболее часто встречающаяся буква — это «T», а третья — «А».

Однако этот принцип работает только для длинных сообщений. Короткие просто не содержат в себе достаточно слов.

Шифр Виженера

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

В нашем случае первая буква послания будет зашифрована согласно шифровальному алфавиту для первой буквы кодового слова «С», вторая буква — для «H», etc. Если послание длиннее кодового слова, то для (k*n+1)-ой буквы, где n — длина кодового слова, вновь будет использован алфавит для первой буквы кодового слова.

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

Попробуйте расшифровать эту фразу самостоятельно:

Подсказка длина кодового слова — 4.

Шифр Энигмы

Энигма — это машина, которая использовалась нацистами во времена Второй Мировой для шифрования сообщений.

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

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

ASCII

Таблица была разработана в Соединенных Штатах Америки в одна тысяча девятьсот шестьдесят третьем году. Изначально предназначалась для использования в телетайпах. Эти устройства представляли собой печатные машинки, с помощью которых передавались сообщения по электрическому каналу. Физическая модель канала была простейшей – если по нему шел ток, то это трактовали как 1, если тока не было, то 0.

Такой системой пользовались высокопоставленные политические деятели. Например, так передавались слова между руководствами двух сверхдержав – США и СССР. Изначально в этой кодировке использовалось 7 бит информации (можно было переводить 128 символов), однако потом их значение увеличили до 256 (8 бит – 1 байт). Небольшая табличка значений двоичных величин, которые помогут с переводом в АСКИ, представлена ниже.

Цифровая подпись

ГОСТ 34.10-2018 описывает алгоритмы формирования и проверки электронной цифровой подписи с помощью операций в группе точек эллиптической кривой и функции хеширования. Длины секретного ключа 256 бит и 512 бит.

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

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

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

Суммой точек , эллиптической кривой называется точка , координаты которой определяются, как , , где .

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

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

Алгоритмы формирования и проверки электронной цифровой подписи.

Подпись создается по следующему алгоритму.

входные данные: сообщение и закрытый ключ подписи .

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

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

— на основе случайно сгенерированного целого числа , это число называют секретным ключом. Затем вычисляется точка на эллиптической кривой . Точка имеет координаты .

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

выходные данные: цифровая подпись которую добавляют к сообщению.

Теперь перейдем к алгоритму проверки подписи.

входные данные: сообщение c цифровой подписью и ключ проверки подписи

— полученная цифровая подпись проходит первичную проверку, если проверка не пройдена, то есть не выполнены неравенства , то подпись неверна.

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

— определяется число , где целое число, которое соответсвует двоичному представлению хеш-кода . Причем если , то принимается за 1. Затем определяется .

— вычисляется точка эллиптической кривой , из которой получается .

— если , то подпись верна

выходные данные: подпись вена/неверна

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Внедрение шифрования

Давайте создадим функцию caesar_cipher(), которая принимает строку для шифрования/дешифрования, “набор символов”, показывающий, какие символы в строке должны быть зашифрованы (по умолчанию это будет строчный регистр),

ключ, а также булево значение, показывающее, была ли произведена расшифровка (шифрование) или нет.

Это очень мощная функция!

Вся операция смены была сведена к операции нарезки.

Кроме того, мы используем атрибут string.ascii_lowercase – это строка символов от “a” до “z”.

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

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

Давайте проверим, работает ли это на предыдущем примере.

Мы зашифруем только заглавные буквы текста и передадим то же самое параметру “characters”.

Зашифруем текст: “HELLO WORLD! Welcome to the world of Cryptography!”.

Посмотрите, как часть “KHOOR ZRUOG” соответствует шифрованию “HELLO WORLD” с ключом 3 в нашем первом примере.

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

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

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

Обратите внимание, как мы установили параметр “decrypt” нашей функции в True. Поскольку мы восстановили наш оригинальный текст, это признак того, что наш алгоритм шифрования-дешифрования с использованием таблицы поиска работает отлично!

Поскольку мы восстановили наш оригинальный текст, это признак того, что наш алгоритм шифрования-дешифрования с использованием таблицы поиска работает отлично!

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

Здесь мы включаем все символы, которые мы обсуждали до сих пор (включая символ пробела), в набор символов для кодирования.

В результате все (даже пробелы) в нашем обычном тексте было заменено другим символом!

Единственное отличие заключается в том, что обертывание происходит не по отдельности для строчных и прописных символов, а в целом для набора символов.

Это означает, что “Y” со смещением 3 не станет “B”, а будет закодирован как “1”.

Путь от RC5 к RC6

Возьмем от RC5 все самое лучшее:

  • Простоту

  • Безопасность

  • Хорошую эффективность

Рассмотрим основные шаги, которые привели Рональда Ривеста к конечному варианту RC6.

Начнем с базового полу-раундового(переменные обновляются поочередно) алгоритма RC5:

Запустим параллельно две копии RC5. Первую на регистрах A и B, а другую на C и D:

Вместо того, чтобы менять местами A на B и C на D, поменяем регистры (A, B, C, D) = (B, C, D, A). В этом случае вычисления на блоке AB перемешиваются с вычислениями на блоке CD:

Далее еще раз смешаем AB и CD переставив циклические сдвиги:

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

Частный случай такого преобразования функция , за которой следует сдвиг влево на пять битовых позиций:

И на десерт сделаем так, чтобы операции, используемые на начальном шаге первого раунда и заключительном шаге последнего раунда отличались от преобразований всех остальных раундов(такая операция, называются pre- и post-whitening):

Теперь после того, как мы тут все замиксовали, посмотрим еще раз на то, что имеем:

Частотный анализ

Простые шифры

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

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

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

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

Шифр Виженера

Один из наиболее известных примеров полиалфавитных шифров — шифр Виженера. Он довольно прост в понимании и построении, однако после его создания еще 300 лет не находилось способа взлома этого шифра.

Пусть исходный текст это: МИНДАЛЬВАНГОГ

  1. Составляется таблица шифров Цезаря по числу букв в используемом алфавите. Так, в русском алфавите 33 буквы. Значит, таблица Виженера (квадрат Виженера) будет размером 33х33, каждая i-ая строчка в ней будет представлять собой алфавит, смещенный на i символов.

  2. Выбирается ключевое слово. Например, МАСЛО. Символы в ключевом слове повторяются, пока длина не достигнет длины шифруемого текста: МАСЛОМАСЛОМАС.

  3. Символы зашифрованного текста определяются по квадрату Виженера: столбец соответствует символу в исходном тексте, а строка — символу в ключе. Зашифрованное сообщение: ЩЙЯРПШЭФМЬРПХ.

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

Взлом этого шифра разбивается на два этапа:

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

  2. Взлом нескольких шифров Цезаря, которые уже легко взламываются.

Поиск длины ключа — самая нетривиальная здесь часть. Введем индекс совпадений сообщения m:

где n — количество символов в алфавите и

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

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

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

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

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

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

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

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

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

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

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

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

Этимология

Римская система счисления была очень громоздкой, отчасти потому , что не было никакого понятия нуля. Арабская цифра система распространилась от арабского мира в Европу в средние века . В этот переходный период арабское слово, обозначающее ноль صفر ( sifr ), было принято в средневековой латыни как cifra , а затем в среднефранцузский язык как cifre . В конечном итоге это привело к английскому слову шифра (меньшинство написание шифровальщика ). Одна из теорий о том, как этот термин стал обозначать кодирование, заключается в том, что концепция нуля сбивала с толку европейцев, и поэтому этот термин стал обозначать сообщение или коммуникацию, которую нелегко понять.

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

Транспозиционные или перестановочные шифры

Данные виды шифра простой перестановки более серьезны и активно применялись не так давно. В Гражданскую войну в США и в Первую мировую его использовали для передачи сообщений. Его алгоритм заключается в перестановке букв местами — записать сообщение в обратном порядке или попарно переставить буквы. Например, зашифруем фразу «азбука Морзе — тоже шифр» -> «акубза езроМ — ежот рфиш».

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

Коды

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

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

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

Статистические атаки насыщения

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

PRESENT

PRESENT — блочный шифр на основе SP-сети с размером блока 64 бита, длиной ключа 80 или 128 бит и количеством раундов 32. Каждый раунд состоит в операции XOR с текущим ключом, далее происходит рассеивание — пропускание через S-блоки, а затем полученные блоки перемешиваются.

Предложенная атака основывается на уязвимости шифра на этапе перемешивания. Как показано на изображении, из входных битов 5, 6, 9 и 10 s-блоков половина соединений идет в те же самые блоки. И это только один пример подобной слабости. Значит, фиксируя 16 битов на входе 5, 6, 9 и 10 s-блоков, можно определить 8 входных битов для этих блоков на следующем раунде.

Предполагая ключ на данном шаге, криптоаналитик может по выбранном распределению выбранных 8 битов на входе определить распределение тех же 8 битов на выходе. Проделав эту процедуру для каждого ключа, можно понять все возможные распределения выбранных 8 выходных битов 5, 6, 9 и 10 s-блоков на каждом слое, применяя алгоритм итеративно.

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

Шифрование методом публичного ключа

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

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

Рассмотрим простой пример. Пусть публичным ключом будет 905. Его делителями являются числа 1, 5, 181 и 905. Тогда секретным ключом будет, например, число 5*181. Вы скажете слишком просто? А что если в роли публичного числа будет число с 60 знаками? Математически сложно вычислить делители большого числа.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector