## Основы криптографии
::: success
- Основные понятия
- Базовые принципы работы криптоалгоритмов
- Симметричное/асимметричное шифрование
- Хэширование
- Принципы безопасной передачи данных
- Пример атак
:::
### Базовые принципы работы криптоалгоритмов
Любая часть современной криптографии это набор специальных разделов математического аппарата и математических задач, которые, вероятно, не имеют оптимального решения.
Все алгоритмы безопасны до того момента пока не найдется математический инструмент способный их обойти.
До сих пор стойкость/надежность алгоритмов шифрования оценивают на основе математический доказательств. Есть теоритичекая выжимка:
Абсолютной стойкостью для алгоритма шифрования являются условия:
- ключ генерируется для каждого сообщения (каждый ключ используется только один раз)
- ключ статистически надёжен (то есть вероятности появления каждого из возможных символов равны, символы в ключевой последовательности независимы и случайны)
- длина ключа равна или больше длины сообщения
исходный (открытый) текст обладает некоторой избыточностью (что является критерием оценки правильности расшифровки)
Проще всего рассматривать шифры с точки зрения графического представления:
Алгоритм DES:

Алгоритм AES:

Алгоритм ГОСТ 28147-89:

Алгоритм RSA:

### Симметричное/асимметричное шифрование
Основное отличие количество ключей и их использование.
- Симметричная криптография = 1 ключ для шифрования и расшифровки
- Ассиметричная криптография 2 ключа, 1 для шифрования, 1 для расшифрования
### Хэширование
Процесс одностороннего преобразования данных. Входные данные могут быть любой длинны, выходные данные всегда фиксированного размера.
Примеры алгоритмов:
- Argon2, scrypt, bcrypt or PBKDF2
- md5, sha1
- ...
Примеры хэшей:
md5 - f806fc5a2a0d5ba2471600758452799c
sha1 - f1cf651ce1a2191a760c0b2f161234f7958e26e4
pbkdf2 - sha256:4096:bEJJem5JcTI=:mvW7jv+5py4wiLhB7AnGUN3xJmKw6Z1c
### Принципы безопасной передачи данных
- Использование только криптостойких алгоритмов для передачи данных
- Обмен ключами только по доверенному каналу или с использованием алгоритмов обмена ключами
- Запрет на использование алгоритмов для обратной совместимости
Пример настройки соединения TLS:

### Примеры атак
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