# Занятие 3. Симметричное шифрование.
###### tags: `Cryptography and Steganography`

#### Дополнительные материалы
- [WIKI: Описание нескольких режимов шифрования с использованием блочных шифров](https://ru.wikipedia.org/wiki/Режим_шифрования#Основные_режимы)
- [Касперский: Симметричное шифрование](https://encyclopedia.kaspersky.ru/glossary/symmetric-encryption/)
- [КОД: Симметричное шифрование](https://thecode.media/symmetric/)
## Классификация симметричного шифрования
- Блочное
- Поточное

## Блочные шифры
Блочный шифр — разновидность симметричного шифра, оперирующего группами бит фиксированной длины — блоками, характерный размер которых меняется в пределах 64‒256 бит.
Шифры: DES, AES, «Магма», «Кузнечик»

## Поточные шифры
Поточный шифр — это симметричный шифр, в котором каждый символ открытого текста преобразуется в символ шифрованного текста в зависимости не только от используемого ключа, но и от его расположения в потоке открытого текста. Поточный шифр реализует другой подход к симметричному шифрованию, нежели блочные шифры и из любого блочного шифра можно реализовать поточный(Режим Гаммирования).
Шифр: RC6

## Режимы работы блочных шифров
- ECB
- CBC
- CFB
- OFB
- CTR

## Electronic Codebook mode encryption
или Электронная кодовая книга

## Cipher Block Chaining mode encryption
или Сцепление шифрованных блоков

## Cipher Feedback mode encryption
или Режим кодирования обратной связи

## Output Feedback mode encryption
или Режим внешней обратной связи

## Counter mode encryption
или Счетчик

## Два варианта организации блочных шифров:
1. Сети Фейстеля
2. SP-сети

## Сети Фейстеля

## AES
- Размер блока: 128 бит
- Размер ключа: 128/192/256 бит
- Число раундов: 10/12/14

## Схема работы AES
```c=
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
Begin
byte state[4,Nb] state = in
AddRoundKey(state, w[0, Nb-1])
for round = 1 step 1 to Nr-1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
End for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
```

## SubBytes

## ShiftRows

## MixColumns

## AddRoundKey

## Итоги
1. Рассмотрели из чего состоит симметричное шифрование
1. Рассмотрели классификацию симметричных шифров
1. Рассмотрели основные режимы работы блочных шифров
1. Рассмотрели варианты реализации симметричных шифров
1. Рассмотрели алгоритм реализации шифра AES-128
