diff --git a/01-02-integrity.md b/01-02-integrity.md
new file mode 100644
index 0000000..73ba6c2
--- /dev/null
+++ b/01-02-integrity.md
@@ -0,0 +1,211 @@
+class: animation-fade
+layout: true
+
+---
+
+class: impact
+
+# Криптография
+## без криптокупюр
+
+---
+
+# MAC
+
+Сокращённо **M**essage **A**uthentication **C**ode.
+
+--
+
+## Задачи
+--
+
+* контроль _целостности_ сообщений,
+
+--
+
+* верификация _аутентичности_ сообщений.
+
+--
+
+## Алгоритм
+
+Состоящий из $ (S, V) $, где
+
+$ t \leftarrow S(k, m) $
+
+$ v \leftarrow V(k, m, t), v \in \\{valid, invalid\\} $
+
+### Нужен ключ, иначе гарантировать _аутентичность_ невозможно!
+
+---
+
+# MAC
+
+## Надёжность
+
+--
+
+* Надёжен до тех пор, пока злоумышленник не может в _Existential Forgery_.
+
+--
+
+ - сложно получить $ (m_i, t^\prime) $, где $ t^\prime \neq t_i $
+--
+ - сложно получить $ (m^\prime, t^\prime) \notin \\{ (m_1, t_1) .. (m_n, t_n) \\} $
+
+--
+
+### Игра со злоумышленником
+
+* Судья выбирает секретный ключ $ k $.
+* Злоумышленник формирует $ q $ сообщений и отправляет судье.
+* Судья возвращает $ S(k,m_1) .. S(k,m_q) $ злоумышленнику.
+* Злоумышленник предоставляет судье $ (m,t) \notin \\{ (m_1, t_1) .. (m_q, t_q) \\} $
+
+Вероятность того, что $ V(k,m,t) = valid $ должна быть _крайне мала_!
+
+---
+
+# MAC
+
+## Конструкции
+
+* Можно ли использовать $ AES(k, \cdot) $ в качестве MAC?
+--
+Можно.
+
+--
+
+* Проблема в том, что длина блока ограничена.
+--
+Here comes _CBC-MAC_.
+
+---
+
+# MAC
+
+## CBC-MAC
+
+.col-8[
+
+]
+
+В качестве $ F $ можно использовать AES:
+
+$ AES(k_1, \\\\ \\quad AES(k, m[n] \oplus \\\\ \\qquad AES(k, m[n-1] \oplus \\\\ \\qquad \\quad ... \\\\ \\qquad \\qquad AES(k, m[0])))) $
+
+---
+
+# MAC
+
+## CBC-MAC
+
+Что если длина сообщения не кратна размеру блока? 🙄
+--
+Конечно же добавить _padding_.
+
+--
+
+
+
+--
+
+Почему бы просто не добавить кучу нулей?
+
+
+
+--
+🙅
+
+---
+
+# MAC
+
+## Хэширование
+
+Хэш-функция $ H(m) = t $, где $ m \in M, t \in T $.
+
+--
+
+* Детерминированная функция
+
+--
+
+* $ |M| \gg |T| $
+
+--
+
+* _Крайне сложно_ восстановить $ m $, имея на руках $ t $
+
+--
+
+* Незначительное изменение в $ m $ должно приводить к значительным изменениям в $ t $
+
+--
+
+* Устойчивость к коллизиям (Collision Resistance)
+
+ - Коллизия – это пара $ m_0,m_1 \in M $, для которых $ H(m_0) = H(m_1) $
+
+--
+ - Вероятность злоумышленнику найти коллизию должна быть _крайне мала_!
+
+---
+
+# MAC
+
+## SHA-256
+
+* Размер хэша 256 бит, $ |T| = 2^{256} $.
+
+
+
+--
+
+* Функция компрессии $ h(H,m) = H^\prime, m \in \\{0,1\\}^{512} $
+
+--
+
+* В частности $ h(H,m) = E(m,H) \oplus H $, где $ E $ – схема блочного шифрования SHACAL-2.
+
+--
+
+* Padding вида $ 1000..0 \\| length(m) $.
+
+---
+
+# MAC
+
+## Конструкции
+
+--
+
+* Хэш-функция не даёт нам контроля _аутентичности_.
+
+--
+
+* Что нужно сделать, чтобы это обеспечить?
+--
+Here comes _HMAC_ (Hash-based MAC).
+
+---
+
+# MAC
+
+## HMAC
+
+Взяв в руки SHA-256 как _устойчивую к коллизиям_ хэш-функцию мы можем построить _устойчивую к подделке (forgery)_ схему MAC.
+
+--
+
+* $ S(k,m) := H(k \oplus opad \\| H(k \oplus ipad \\| m)) $
+
+* $ V(k,m,t) := S(k,m) = t $
+
+--
+
+Чтобы внешний и внутренний ключи имели _меньше_ совпадающих бит:
+
+* $ ipad := 0x363636..36 $
+
+* $ opad := 0x5c5c5c..5c $