## Основы криптографии ::: success - Основные понятия - Базовые принципы работы криптоалгоритмов - Симметричное/асимметричное шифрование - Хэширование - Принципы безопасной передачи данных - Пример атак ::: ### Базовые принципы работы криптоалгоритмов Любая часть современной криптографии это набор специальных разделов математического аппарата и математических задач, которые, вероятно, не имеют оптимального решения. Все алгоритмы безопасны до того момента пока не найдется математический инструмент способный их обойти. До сих пор стойкость/надежность алгоритмов шифрования оценивают на основе математический доказательств. Есть теоритичекая выжимка: Абсолютной стойкостью для алгоритма шифрования являются условия: - ключ генерируется для каждого сообщения (каждый ключ используется только один раз) - ключ статистически надёжен (то есть вероятности появления каждого из возможных символов равны, символы в ключевой последовательности независимы и случайны) - длина ключа равна или больше длины сообщения исходный (открытый) текст обладает некоторой избыточностью (что является критерием оценки правильности расшифровки) Проще всего рассматривать шифры с точки зрения графического представления: Алгоритм DES: ![](https://hackmd.io/_uploads/H1uCpuNc2.png) Алгоритм AES: ![](https://hackmd.io/_uploads/SyReAO4qn.png) Алгоритм ГОСТ 28147-89: ![](https://hackmd.io/_uploads/H1_BRdE9n.png) Алгоритм RSA: ![](https://hackmd.io/_uploads/ryok1tVq3.png) ### Симметричное/асимметричное шифрование Основное отличие количество ключей и их использование. - Симметричная криптография = 1 ключ для шифрования и расшифровки - Ассиметричная криптография 2 ключа, 1 для шифрования, 1 для расшифрования ### Хэширование Процесс одностороннего преобразования данных. Входные данные могут быть любой длинны, выходные данные всегда фиксированного размера. Примеры алгоритмов: - Argon2, scrypt, bcrypt or PBKDF2 - md5, sha1 - ... Примеры хэшей: md5 - f806fc5a2a0d5ba2471600758452799c sha1 - f1cf651ce1a2191a760c0b2f161234f7958e26e4 pbkdf2 - sha256:4096:bEJJem5JcTI=:mvW7jv+5py4wiLhB7AnGUN3xJmKw6Z1c ### Принципы безопасной передачи данных - Использование только криптостойких алгоритмов для передачи данных - Обмен ключами только по доверенному каналу или с использованием алгоритмов обмена ключами - Запрет на использование алгоритмов для обратной совместимости Пример настройки соединения TLS: ![](https://hackmd.io/_uploads/HkM3nks52.png) ### Примеры атак Padding Oracle - https://github.com/PortSwigger/padding-oracle-hunter Bit Flip Attack - атака, при которой есть возможность влиять на данные, которые будут участвовать при расшифровке сообщения. ### Методы противодействия TLS 1.3 больше не поддерживает CBC режимы алгоритмов: {0x13,0x01} - TLS_AES_256_GCM_SHA384 {0x13,0x02} - TLS_CHACHA20_POLY1305_SHA256 {0x13,0x03} - TLS_AES_128_GCM_SHA256 {0x13,0x04} - TLS_AES_128_CCM_8_SHA256 {0x13,0x05} - TLS_AES_128_CCM_SHA256 Но даже в этом наборе стоит помнить, о правилах использования ключей и параметров алгоритмов. ### Практическая плоскость **Рандомизаторы** - основной механизм, который используется для работы с приложениями и, в частности в веб. Примеры использования ранедомизаторов: - Сессионные токены - Токены для 2FA - Токены для CAPTCHA - ... #### Линейный конгруэнтный PRNG Самый распространенный пример - java.util.Random Случайное число этим генератором создается на основании состояния генератора. Чтобы его можно было привести в это самое состояние, используют так называемый seed. ```seed = (seed * multiplier + addebd) mod(2^precision)``` Любой seed по сути является ограничителем для данного типа генератора. Кстати, для этой версии максимальная длина случайного числа будет почти 48 бит. ::: danger Практика с Burp по определению случайности последовательности. ::: ### Дополнительные материалы - https://hashcat.net/hashcat/ - https://cryptohack.org