mirror of
https://github.com/valitydev/camp-creepy-crypto.git
synced 2024-11-06 01:25:19 +00:00
Add lecture on asymmetric encryption schemes
This commit is contained in:
parent
cde50d5d9f
commit
f2aab6b9d4
77
02-01-number-theory.md
Normal file
77
02-01-number-theory.md
Normal file
@ -0,0 +1,77 @@
|
||||
class: animation-fade
|
||||
layout: true
|
||||
|
||||
---
|
||||
|
||||
class: impact
|
||||
|
||||
# Внезапная
|
||||
## теория чисел
|
||||
|
||||
---
|
||||
|
||||
# Модульная арифметика
|
||||
|
||||
* Модуль
|
||||
|
||||
$ 3 \cdot 4 = 5 \pmod 7 $
|
||||
|
||||
--
|
||||
|
||||
* Поле остатков по модулю $ N $
|
||||
|
||||
$ \mathbb{Z}\_N = \\{ 0, 1, 2 .. N-1 \\} $
|
||||
|
||||
--
|
||||
|
||||
* Обратный элемент $ x^{-1} $
|
||||
|
||||
$ x \cdot x^{-1} = 1 \pmod N $
|
||||
|
||||
--
|
||||
$ x^{-1} $ может и не существовать в $ \mathbb{Z}\_N $, в частности если $ gcd(x, N) \neq 1 $
|
||||
|
||||
--
|
||||
|
||||
* Группа обратимых остатков по модулю $ N $
|
||||
|
||||
$ \mathbb{Z}\_{N}^{*} = \\{ \forall x \in \mathbb{Z}\_{N} | x^{-1} \in \mathbb{Z}\_{N} \\} $
|
||||
|
||||
--
|
||||
Например, $ \mathbb{Z}\_{12}^{*} = \\{ 1, 5, 7, 11 \\} $
|
||||
|
||||
---
|
||||
|
||||
# Модульная арифметика
|
||||
|
||||
* Группа обратимых остатков по простому модулю $ p $
|
||||
|
||||
$ \mathbb{Z}\_{p}^{*} = \\{ 1, 2, .. p-1 \\} = \mathbb{Z}\_{p} \backslash \\{ 0 \\} $
|
||||
|
||||
--
|
||||
|
||||
* Генератор группы $ g $
|
||||
|
||||
$ \exists g \in \mathbb{Z}\_{p}^{\*} | \mathbb{Z}\_{p}^{\*} = \\{ 1,g^1,g^2 .. g^{p-2} \\} $
|
||||
|
||||
--
|
||||
Например, для $ \mathbb{Z}\_{7}^{*} $ $ g = 3 $, потому как $ \\{ 1,3,3^2,3^3,3^4,3^5 \\} = \\{ 1,3,2,6,4,5 \\} $
|
||||
|
||||
--
|
||||
Однако, если $ g = 2 $, то $ \\{ 1,2,2^3,2^2,2^4,2^5 \\} = \\{ 1,2,4 \\} $
|
||||
|
||||
--
|
||||
|
||||
* Порядок $ g $
|
||||
|
||||
$ ord_p(g) = |\\{ 1,g^1,g^2 .. g^{p-2} \\}| $
|
||||
|
||||
--
|
||||
Например, $ ord_7(3) = 6 $, $ ord_7(2) = 3 $
|
||||
|
||||
---
|
||||
|
||||
class: impact
|
||||
|
||||
# Это нам
|
||||
## скоро пригодится
|
371
02-02-asymmetric.md
Normal file
371
02-02-asymmetric.md
Normal file
@ -0,0 +1,371 @@
|
||||
class: animation-fade
|
||||
layout: true
|
||||
|
||||
---
|
||||
|
||||
class: impact
|
||||
|
||||
# Крипотная
|
||||
## криптография
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Зачем?
|
||||
|
||||
Предположим, что я хочу собрать у вас ответы к предыдущему практическому заданию, но только так, чтобы:
|
||||
|
||||
--
|
||||
* я мог их прочитать,
|
||||
|
||||
--
|
||||
* никто кроме меня не смог бы, даже если бы перехватил сообщения.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## В чём суть?
|
||||
|
||||
Для этого вместо общего секретного ключа (shared secret) нам бы пригодилась пара ключей:
|
||||
|
||||
* публичный ключ $ pk $, чтобы им _шифровать_ сообщения
|
||||
--
|
||||
, но не расшифровывать!
|
||||
|
||||
--
|
||||
|
||||
* секретный <sub>(приватный)</sub> ключ $ sk $, чтобы _расшифровывать_ им зашифрованные при помощи $ pk $ сообщения.
|
||||
|
||||
<img style="width: 90%;" src="assets/asymm.png" />
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Схема шифрования
|
||||
|
||||
$ (G,E,D) $
|
||||
|
||||
* $ G $ – алгоритм генерации ключей
|
||||
|
||||
$ (pk, sk) \xleftarrow{R} G() $
|
||||
|
||||
* Рандомизированный!
|
||||
* Достаточно выполнить один раз для обмена ключами.
|
||||
|
||||
Я генерирую пару ключей $ (pk,sk) $, $ sk $ оставляю себе, а $ pk $ публикую на общее обозрение.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Схема шифрования
|
||||
|
||||
$ (G,E,D) $
|
||||
|
||||
* $ E $ – алгоритм шифрования с публичным ключом
|
||||
|
||||
$ c \in C \xleftarrow{R} E(pk,m) $
|
||||
|
||||
* Рандомизированный! $ c_1 \leftarrow E(pk,m), c_2 \leftarrow E(pk,m), c_1 \neq c_2 $
|
||||
|
||||
* $ D $ – алгоритм расшифровки с секретным ключом
|
||||
|
||||
$ m \in M \cup \\{ \bot \\} \leftarrow D(sk,c) $
|
||||
|
||||
* Детерминированный! Иначе нет смысла. 🙄
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Как построить?
|
||||
|
||||
--
|
||||
|
||||
Ответ есть – trapdoor one-way functions.
|
||||
--
|
||||
🤔
|
||||
|
||||
--
|
||||
|
||||
$ (G,F,F^{-1}) $
|
||||
|
||||
$ (pk, sk) \xleftarrow{R} G() $
|
||||
|
||||
$ y \leftarrow F(pk,x) $
|
||||
|
||||
$ x \leftarrow F^{-1}(sk,x) $
|
||||
|
||||
--
|
||||
|
||||
* $ F^{-1} $ – _эффективно вычислимая_ функция, только если $ sk $ известен.
|
||||
|
||||
--
|
||||
|
||||
* $ sk $ – тот самый _trapdoor_.
|
||||
|
||||
--
|
||||
|
||||
* _Надёжная_ TDF – вероятность определить $ x $ по $ y $ без $ sk $ _крайне мала_.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## RSA
|
||||
|
||||
--
|
||||
|
||||
$ G_{RSA}(l,e) := $
|
||||
|
||||
1. Сгенерировать случайное простое число $ p $ длиной $ l $ бит, так чтобы $ gcd(e,p-1) = 1 $.
|
||||
|
||||
2. Сгенерировать случайное простое число $ q $ длиной $ l $ бит, так чтобы $ gcd(e,q-1) = 1 $ и $ q \neq p $.
|
||||
|
||||
3. $ n \leftarrow pq $
|
||||
|
||||
4. $ d \leftarrow e^{-1} \pmod{(p-1)(q-1)} = e^{-1} \pmod{\varphi(n)} $
|
||||
|
||||
5. Получаем $ sk = (n,d) $ и $ pk = (n,e) $
|
||||
|
||||
--
|
||||
|
||||
$ F_{RSA}((n,e),x) := x^e \pmod{n} $
|
||||
|
||||
--
|
||||
|
||||
$ F^{-1}_{RSA}((n,d),y) := y^d \pmod{n} $
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## RSA
|
||||
|
||||
Как так?
|
||||
|
||||
--
|
||||
|
||||
$ F^{-1}_{RSA}((n,d),y) $
|
||||
|
||||
$ = y^d \pmod{n} $
|
||||
|
||||
--
|
||||
|
||||
$ = x^{ed} \pmod{n} $
|
||||
|
||||
--
|
||||
|
||||
$ = x^{k\varphi(n)+1} \pmod{n} $
|
||||
|
||||
--
|
||||
|
||||
$ = {(x^{\varphi(n)})}^k \cdot x \pmod{n} $
|
||||
|
||||
--
|
||||
|
||||
$ = x \pmod{n} $
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Надёжность RSA
|
||||
|
||||
--
|
||||
|
||||
* Насколько сложно вычислить $ c^{1/e} \pmod{n} $?
|
||||
|
||||
--
|
||||
|
||||
* Утверждают что настолько же сложно, насколько определить $ p $ и $ q $ такие, что $ n = p \cdot q $.
|
||||
|
||||
Задача _факторизации_.
|
||||
|
||||
Сложность лучшего известного алгоритма (NFS): $ \exp(\tilde{O}(\sqrt\[3\]{l})) $ для простого числа длиной $ l $ бит.
|
||||
|
||||
Сложность напрямую несопоставима:
|
||||
|
||||
| Длина ключа AES | | Длина $ n $ RSA |
|
||||
| --------------- | - | --------------- |
|
||||
| 80 | ~ | 1024 |
|
||||
| 128 | ~ | 3072 |
|
||||
| 256 | ~ | 15360 |
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Конструкции
|
||||
|
||||
* Берём надёжную TDF $ F $, надёжную хэш-функцию $ H $ и надёжную к CCA схему шифрования $ (E_s,D_s) $.
|
||||
|
||||
--
|
||||
|
||||
* Получаем _надёжную к CCA_ схему $ (E, D) $, где
|
||||
|
||||
.col-6[
|
||||
|
||||
$ E(pk,m) := $
|
||||
|
||||
$ \\quad x \xleftarrow{R} X, y \leftarrow F(pk,x), k \leftarrow H(x) $
|
||||
|
||||
$ \\quad c \leftarrow E_s(k,m) $
|
||||
|
||||
$ \\quad (y, c) $
|
||||
|
||||
]
|
||||
|
||||
.col-6[
|
||||
|
||||
$ D(sk,(y,c)) := $
|
||||
|
||||
$ \\quad x \leftarrow F^{-1}(sk,y), k \leftarrow H(x) $
|
||||
|
||||
$ \\quad m \leftarrow D_s(k,c) $
|
||||
|
||||
$ \\quad m $
|
||||
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Конструкции
|
||||
|
||||
### PKCS1 v2
|
||||
|
||||
<img style="width: 75%;" src="assets/pkcs1v2.png" />
|
||||
|
||||
* В качестве $ H, G $ можно использовать SHA256.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Зачем ещё?
|
||||
|
||||
Предположим, что я хочу установить канал для защищённого общения с кем-то из вас.
|
||||
|
||||
Чтобы это сделать, мне нужно иметь общий секретный ключ (_shared secret_), но у меня нет его.
|
||||
|
||||
--
|
||||
|
||||
Я должен суметь обменяться сообщениями так, чтобы:
|
||||
|
||||
* у нас в результате появился общий секретный ключ,
|
||||
* и никто из подслушивающих наше общение не смог бы узнать этот секретный ключ.
|
||||
|
||||
--
|
||||
|
||||
Звучит фантастически, но это возможно. ✨
|
||||
|
||||
--
|
||||
|
||||
Задача для _схемы обмена ключами_ (_key exchange_ или просто _kex_).
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Diffie-Hellman
|
||||
|
||||
Или просто DH.
|
||||
|
||||
Предположим, что $ p $ – большое 2048-битное простое число, а $ q $ – большое 256-битное число, для простоты дискуссии тоже простое, а кроме того такое, что $ (p - 1) \mod q = 0 $.
|
||||
|
||||
Это всё значит, что можно выбрать $ g \in \mathbb{Z}_{p}^{*} $ такой, что $ ord(g) = q $.
|
||||
|
||||
--
|
||||
|
||||
Все значения $ p, q, g $ известны заранее, публичны, открыты, и этот факт не влияет на надёжность схемы.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Diffie-Hellman
|
||||
|
||||
1. Я выбираю случайное <big>большое</big> $ \alpha \in \mathbb{Z}\_{q} $, вычисляю $ u \leftarrow g^{\alpha} \pmod{p} $, которое и отправляю _партнёру по общению_.
|
||||
|
||||
2. _Партнёр_ выбирает случайное <big>большое</big> $ \beta \in \mathbb{Z}\_{q} $, вычисляет $ v \leftarrow g^{\beta} \pmod{p} $ и отправляет его мне.
|
||||
|
||||
3. Получив $ v $, я вычисляю $ w \leftarrow v^{\alpha} \pmod{p} = g^{\beta\alpha} \pmod{p} $.
|
||||
|
||||
4. Получив $ u $, _партнёр_ вычисляет $ w \leftarrow u^{\beta} \pmod{p} = g^{\alpha\beta} \pmod{p} $.
|
||||
|
||||
У нас с _партнёром_ на руках одно и то же значение $ w = g^{\alpha\beta} \pmod{p} $!
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Надёжность
|
||||
|
||||
У подслушивающих нас лиц на руках остались только $ u = g^{\alpha} \pmod{p} $ и $ v = g^{\beta} \pmod{p} $.
|
||||
|
||||
* Могут ли они вычислить $ g^{\alpha} \pmod{p} $?
|
||||
|
||||
--
|
||||
|
||||
* Считается, что это столь же сложно, сколь сложна задача _факторизации_ сходной размерности.
|
||||
|
||||
- Сложность лучшего известного алгоритма равна $ \exp(\tilde{O}(\sqrt\[3\]{l})) $ для простого числа $ p $ длиной $ l $ бит.
|
||||
|
||||
--
|
||||
|
||||
* К сожалению, схема не гарантирует _аутентичности_
|
||||
--
|
||||
, значит злоумышленник может встать посередине (_man in the middle_), перехватывать и можифицировать сообщения.
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
## Конструкции
|
||||
|
||||
Можно ли построить схему шифрования с публичным ключом?
|
||||
--
|
||||
Можно.
|
||||
|
||||
### ElGamal
|
||||
|
||||
$ G(p,q) := $
|
||||
|
||||
$ \\quad g \xleftarrow{R} G, \alpha \xleftarrow{R} \mathbb{Z}\_{q}, h \leftarrow g^{\alpha} \pmod{p} $
|
||||
|
||||
$ \\quad sk = \alpha $, $ pk = (g,h) $
|
||||
|
||||
---
|
||||
|
||||
# Асимметрия
|
||||
|
||||
### ElGamal
|
||||
|
||||
$ E((g,h),m) := $
|
||||
|
||||
$ \\quad \beta \xleftarrow{R} \mathbb{Z}\_{q}, u \leftarrow g^{\beta} \pmod{p}, v \leftarrow h^{\beta} \pmod{p} $
|
||||
|
||||
$ \\quad k \leftarrow H(u,v) $
|
||||
|
||||
$ \\quad c \leftarrow E_s(k,m) $
|
||||
|
||||
$ \\quad (u,c) $
|
||||
|
||||
$ D(\alpha,(u,c)) := $
|
||||
|
||||
$ \\quad v \leftarrow u^{\alpha} \pmod{p} $
|
||||
|
||||
$ \\quad k \leftarrow H(u,v) $
|
||||
|
||||
$ \\quad m \leftarrow D_s(k,c) $
|
||||
|
||||
---
|
||||
|
||||
class: impact
|
||||
|
||||
# Всё
|
BIN
assets/asymm.png
Normal file
BIN
assets/asymm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
BIN
assets/pkcs1v2.png
Normal file
BIN
assets/pkcs1v2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
28
outline.md
28
outline.md
@ -91,6 +91,9 @@
|
||||
|
||||
### Практика
|
||||
|
||||
> ≈ Много минут
|
||||
|
||||
1. Восстановление части сообщения у чучела SSHv2 сервера, уязвимого засчёт non-atomic decryption.
|
||||
|
||||
|
||||
## Лекция 4
|
||||
@ -99,6 +102,31 @@
|
||||
|
||||
О чём: сложность проблем, обмен ключами, асимметричное шифрование
|
||||
|
||||
* number theory
|
||||
- арифметика остатков
|
||||
- обратный элемент
|
||||
- генераторы и циклические группы
|
||||
- порядок группы
|
||||
* асимметрия
|
||||
- зачем?
|
||||
- пара ключей
|
||||
- любой может сформировать ct
|
||||
* схема асимметричного шифрования
|
||||
- trapdoor one-way functions
|
||||
- rsa
|
||||
- сложность factors(n)
|
||||
- rsa + hash + cca cipher
|
||||
* задача обмена ключами
|
||||
- trusted party – неудобно
|
||||
- наивный diffie-hellman
|
||||
- сложность dlog_g
|
||||
- надёжность схемы
|
||||
- нет authenticity
|
||||
- elgamal
|
||||
* кратко цифровых подписях
|
||||
- rsa
|
||||
- pki
|
||||
|
||||
### Теория
|
||||
|
||||
### Практика
|
||||
|
Loading…
Reference in New Issue
Block a user