Криптография
privatepers0n
В данной статье мы разберем работу криптографических систем, а так же узнаем основы алгоритмов шифрования.
Основы криптографии.
В криптографии насчитывают множество алгоритмов шифрования, как правило выделяют три основных вида:
- Симметричное
- Ассиметричное
- Хэширования
Криптостойкость шифра - некая надежность, возможность шифра противостоять дешифрованию(криптоанализу).
Основные способы дешифрования:
- Простой перебор(брутфорс)
- Расшифровка на основе полученных данных
Криптография. Надежность шифра.
Взаимная информация - числовое значение представляющее количество криптотекста, которое нужно перехватить, чтобы расшифровать то или иное сообщение.
Взаимная информация считается как разница между обычной и условной информационной неопределенностью(дискретка), энтропией.
Взаимная информация всегда >=0
Чем ближе значение взаимной информации к нулю, тем более стойкая система(используемый алгоритм)
Симметричное шифрование.
Симметричное шифрование - это способ шифрования при котором используется одинаковый ключ как для шифрования, так и для дешифрования.
Соответственно тот, кто владеет ключом, сможет расшифровать данные.
Симметричное шифрование делится на два вида:
- Использующее блочные шифры
- Использующее поточные шифры
Блочный шифр.
При блочном шифре, информация шифруется блоками фиксированного размера(как правило исчисляется битами данных, степенями двойки- 256, 512, 1024 итд). К каждому блоку ключ применяется в несколько заходов подстановки и перемешивания. После всех этих действий получается так, что несоответствие бит между блоками начальных и зашифрованных данных увеличиваются. Так работают большинство актуальных алгоритмов шифрования.
Для перемешивания и подстановки используются такие методы шифрования, как "сеть Фейстеля" и "SP-сеть"
Сеть Фейстеля.
Сеть фейстеля это метод блочного шифрования, разработанный IBM в 1971 году.
Суть работы сети Фейстеля:
- Блок разбивается на две равные части(L и R, левую и правую)
- Левый подблок шифруется некоторой функцией f с использованием ключа K(x = f(L, K)), в качестве функции мы берем любое шифрующее преобразование данных.
- Полученный подблок складывается по модулю 2(остаток от деления на два получившейся суммы) с правым подблоком R
- Подблоки меняются местами и склеиваются
Сама сеть может состоять из нескольких подобных ячеек. Для каждого прохода используется заранее определенный раундовый ключ, который высчитывается из изначального ключа шифрования K.
Как минимум два прохода Фейстеля зашифруют обе ячейки данных. Однако обычно используют три прохода.
Расшифровка осуществляется подобным образом:
- Зашифрованный текст разбивается на два подблока
- Левый подблок вступает в функцию
- Складывается по модулю два с правым подблоком
- Подблоки обратно меняются местами
Единственное отличие в том, что раундовые ключи подаются в обратном порядке.
SP-Сеть.
SP-Сеть это метод шифрования, при котором так же используется построение блочных шифров, перестановки, использование блочных ключей.
Основные шифры построенные по этому принципу:
- AES
- 3-Way
- Kalyna
- Кузнечик
- PRESENT
- SAFER
- SHARK
- Square
Шифр на основе данного метода получает на вход блок и ключ и совершает несколько раундов чередующихся подстановок и перестановок.
Используются маленькие S-блоки в перемешку с большими P-блоками.
S-блоки меняют маленькие блоки входных бит на другой блок выходных данных по некому алгоритму(важно, что алгоритм должен менять так, что изменение одного бита приведет к последующему изменению всех остальных бит)
Такая зависимость всех выходных битов от каждого входного бита называется лавинный эффект
P-блоки занимается перестановкой всех бит, этот блок получает на вход данные с блока S. Этот блок меняет данные либо по блочному ключу полученному в ходе деления начального ключа шифрования, либо в ходе какого-то преобразования над ключом шифрования.
Поточный шифр.
Принцип работы схож с работой блочного шифра. Отличие в том, что на шифруемый текст предварительно накладывается последовательность случайных чисел, а информация шифруется не блоками, а побитово.
Процесс наложения случайной последовательности чисел и побитовое шифрование называется гаммированием.
Примеры распространенных симметричных шифров:
- DES- сейчас почти не используется.
- 3DES - применяет алгоритм DES три раза.
- AES - стандарт шифрования для Соединенных Штатов, использует 128/196/256-битные ключи шифрования в связке с алгоритмом Rijndael, используется в таких протоколах как: WPA2, SSL/TLS итд.
- RC4 - пример шифра потоковой передачи, используется в таких протоколах как: VoIP, WEP
- Blowfish - шифр, использующий переменную длину ключа.
- Twofish - Blowfish на максималках, различие в том, что Twofish использует 128/256-битные ключи, используется в таких протоколах как: Cryptcat, OpenPGP
- Кузнечик - стандарт в РФ, неустойчив к реверсу.
Плюсы Симметричного шифрования:
- Скорость и простота реализации, позволяет обрабатывать большие объемы данных
Минусы Симметричного шифрования:
- Обмен ключами, одинаковый ключ у обоих участников зашифрованного канала вынуждает как-то передавать этот ключ другому участнику, что делает симметричное шифрование уязвимым к перехвату ключа.
- Отсутствие аутентификации
Ассиметричное шифрование.
В системах с ассиметричным шифрованием используются два ключа. Один для шифрования(открытый), другой - для дешифрования(закрытый).
Открытый ключ можно передавать как угодно, потому что без закрытого ключа дешифрования он не имеет никакой ценности. Закрытый ключ при этом никому не передается, а используется только для дешифрования данных.
Распространенные ассиметричные алгоритмы шифрования:
- RSA - наиболее распространенная криптосистема. Использует факторизацию больших простых чисел.
- Алгоритм Диффи-Хеллмана - протокол, который позволяет двум участникам канала обмениваться секретными ключами
- Схема Эль-Гамаля - криптосистема, которая долгое время была стандартом в США и РФ. Использует дискретное логарифмирование.
- DSA - алгоритм для создания ЭЦП, который использует открытый ключ. Только один человек может создать подпись сообщения, но каждый можнт проверить ее на корректность. Стандарт электронных подписей в США.
Плюсы Ассиметричного шифрования:
- Для передачи данных можно использовать открытый канал связи.
Минусы Ассиметричного шифрования:
- Метод работает только в одну сторону
- В несколько раз медленнее симметричного шифрования
- Нужна намного большая вычислительная мощь
На практике обычно используют гибридные системы шифрование.
При гибридном шифровании массив данных шифруется симметричным алгоритмом, в то время как сеансовый ключ шифруется ассиметричным алгоритмом и передается по открытому каналу без боязни быть перехваченным.
В таком случае зашифрованный ключ можно передавать по открытому каналу и это не мешает быстродействию.
Хэширование.
Хэш-функция/Функция свертки
Односторонне шифрование при котором, после обработки алгоритмом, данные превращаются в битовую строку фиксированной длины(неважно какая длины была у входных данных)
Суть в том, что хэш нельзя расшифровать. Поместив на серверную сторону точно такой же хэш данных, сервер просто может сверяться с отправленными клиентом хэшированными данными, для например аутентификации.
Основная проблема хэширования.
Основная проблема хэш-функций это коллизия. Проблема в том, что хэши не всегда уникальны, иногда два разных блока входных данных образуют один и тот же хэш.
Это делает хэш-функции уязвимыми к искусственному созданию хэшей, построению коллизий.
Примеры алгоритмов хэширования:
- SHA1
- SHA2
- SHA3
- MD4
- MD5
- И очень много других..