10 популярных кодов и шифров
Содержание:
Введение в RC6.
Алгоритм RC6 (Rivest’s Cipher 6) — симметричный блочный шифр, использующий в качестве своей основы сеть Фестеля, разработанный Рональдом Ривестом в 1998 году.
Для начала разберемся с терминологией:
Что значит симметричный?
Есть два типа людей шифров:
-
Симметричные (то, что нам нужно)
-
Ассиметричные (как-нибудь в другой раз, бро)
В симметричном шифровании, для того чтобы зашифровать и расшифровать данные используется один и тот же ключ. Он должен хранится в секрете. Т.е. ни отправитель, ни получатель не должны никому его показывать. Иначе, ваши данные могут перехватить/изменить или еще чего похуже.
В ассиметричном шифровании используется два ключа: открытый и закрытый. Из названий ясно, что открытый ключ может свободно передаваться по каналам связи, а вот закрытый ключ нужно хранить в тайне.
Что значит блочный?
Блочное шифрование это один из видов симметричного шифрования. Называется он так, потому что работает с блоками: группами бит, фиксированной длины.
Чтобы стало яснее, рассмотрим один из методов построения блочных шифров: сеть Фестеля.
Какая, какая сеть?
Фестеля. Это конструкция из ячеек. На вход каждой ячейки поступают данные и ключ. А на выходе каждой из них изменённые данные и изменённый ключ.
Чтобы зашифровать информацию ее разбивают на блоки фиксированной длины. Как правило, длина входного блока является степенью двойки.
Алгоритм шифрования:
-
Каждый из блоков делится на два подблока одинакового размера — левый и правый.
-
Правый подблок скармливается функции .
-
После чего умножается по модулю 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 лет не находилось способа взлома этого шифра.
Пусть исходный текст это: МИНДАЛЬВАНГОГ
-
Составляется таблица шифров Цезаря по числу букв в используемом алфавите. Так, в русском алфавите 33 буквы. Значит, таблица Виженера (квадрат Виженера) будет размером 33х33, каждая i-ая строчка в ней будет представлять собой алфавит, смещенный на i символов.
-
Выбирается ключевое слово. Например, МАСЛО. Символы в ключевом слове повторяются, пока длина не достигнет длины шифруемого текста: МАСЛОМАСЛОМАС.
-
Символы зашифрованного текста определяются по квадрату Виженера: столбец соответствует символу в исходном тексте, а строка — символу в ключе. Зашифрованное сообщение: ЩЙЯРПШЭФМЬРПХ.
Этот шифр действительно труднее взломать, однако выделяющиеся особенности у него все же есть. На выходе все же не получается добиться равномерного распределения символов (чего хотелось бы в идеале), а значит потенциальный злоумышленник может найти взаимосвязь между зашифрованным сообщением и ключом. Главная проблема в шифре Виженера — это повторение ключа.
Взлом этого шифра разбивается на два этапа:
-
Поиск длины ключа. Постепенно берутся различные образцы из текста: сначала сам текст, потом текст из каждой второй буквы, потом из каждой третьей и так далее. В некоторый момент можно будет отвергнуть гипотезу о равномерном распределении букв в таком тексте — тогда длина ключа считается найденной.
-
Взлом нескольких шифров Цезаря, которые уже легко взламываются.
Поиск длины ключа — самая нетривиальная здесь часть. Введем индекс совпадений сообщения 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 знаками? Математически сложно вычислить делители большого числа.
В качестве более живого примера представьте, что вы снимаете деньги в банкомате. При считывании карточки личные данные зашифровываются определенным открытым ключом, а на стороне банка происходит расшифровка информации секретным ключом. И этот открытый ключ можно менять для каждой операции. А способов быстро найти делители ключа при его перехвате — нет.