Вы находитесь на странице: 1из 21

1 Лекция

Неосозноваемая некомпетентность

Зашировать Сжать – не сожмется


Сжать зашифровать – повторы

Юзайте broing crypto, а не пишите велосипеды

Тайнопись – манускрипт войнича

Цезарь – сдвигаем алфави (перебрать) xor?


Подстановочный шифр – каждой букве другую букву (Частотный анализ. е – чаще
всего в англе. Плохо для короткого текста)
Генетический алгоритм взломает

Вижинер
HELLOWORLD
KEYKEYKEYK
Сдвигаем по ключу. Варианты ключа – количество_букв!. 26! для англ

Случайный ключ => считаем частоту букв, если похоже то делаем сумму квадратов
отклонений

Длинна ключа поможет

Алфавит из N символов. Буквы используются равномерно. Берем две рандомные –


вероятность совпадения 1/N.
Если не равномерно, то вероятность совпадения больше 1/N.

У виженера тоже больше 1/N.

Сопоставляем зашифрованную строку с сдвинутой зашифрованной строкой, если


вероятность возрастет, то нашли длину ключа.
Дальше частотным фигачим.

Круче всего, если длинна ключа совпадает с длинной текста. (one time pad)
Задача криптографии – сделать такой шифр, чтоб частоты были примерно
равномерны.
2 Лекция №2
Kerckhoffs`s principle (норм)
A cryptosystem should be secure event if everything about the system, except the key, is
public knowledge.

Security by obscurity (плохо)


System security should not depends on the secrecy of the implementation of its
components.

transposition ciphers
Записываем зигзагом. Длинна зигзага – ключ

OTP(One time pad) – рандомим ключ с помощью сида.

LCG – на основе предыдущего рандомим след. Фигня. Не равномерное распределение


LFSR – xor двух чисел записывается в начало. Фигня. Не рандом, Не равномерное
распределение
Mersenne twister – куча состояний. Фигня. Не рандом, Не равномерное распределение,
можно предсказать следующий бит

Число ПИ. Если узнаем позицию, то сможем все расшифровать. Предыдущие биты
могут быть расшифрованы основываясь на текущем состоянии

RivestCipher4. Берем два бита. Скалдываем и записываем в эту позицию


Присутствуют статистические зависимости между байтами ключа и байтами на выходе

M – произведение двух больших простых чисел. Медленный.

Salsa20 – офигенный шифр


Библиотеки – NaCL, libsodium

Проблема, когда шифруем одинаковые сообщения, то одинаковый результат


получается. Решаем добавляя nonce (number used once). Допустим сперва случайную цифру
берем, потом увеличиваем на однерку (зависит от алгоритма).
Ключ надо генерить реальными генераторами (в джаве в пакете секюр есть такой
походу)
3 Лекция 3
Ключ
 Это не пароль
 Случайно сгенерированый (CSPRNG -Cryptographically secure pseudorandom number
generator )

Nonce:
 Не пароль
 Никогда не повторяется
 Это не тайна, в отличие от ключа
Если мало места под nonce (< 100 битов), то вероятность совпадения быстро растет
Поэтому надо сперва первый сгенерить случайно, а потом инкрементировать.
Если >=100 Битов, то юзаем CSPRNG

(X)Salsa20 – принимает 192 бита nonce

Пример с сообщением с телефоном в конце. Зная номер телефона мы можем найти


соответствующую часть ключа и перезашифровать этот номер телефона на любой
другой.

Модели атаки:
 Атакующему извествен только шифро-текст (known chiphertext attack KCA)
Игра: B передает А два сообщения. А шифрует одно из сообщений и отправляет B.
B должен узнать какое из сообщений зашифровал A. Если вероятность того, что он
отгадал сообщение <= ½, то считается, что алгоритм защещен от KCA. Если > 1/2, то
алгоритм считается indistinguishable (можно отличить или нельзя отличить от
случайных даных)
 Атака с известным открытым текстом (known plaintext attack)
вижинер вообще на изи ломается
 choosen plaintext attack

Например Railfence cipher изи (тот который: ). 01234…


отправляем и ломаем.

Если вижинер, то 000000000 отправляем, делаем ксор с зашифрованным и в итоге


получим KEYKEYKEY

не взломает сальсу.
 choosen ciphertext attack
coming soon

Stream ciphers (Block ciphers)


1 bit не реально зашифровать
2 бита уже полегче, посему шифруем по 128 битов)

DES(Data encryption standart) – взломали уже кучу раз.


3DES – тоже фигня. Просто увеличили.
Blowfish – тоже фигня
AES (Advanced encryption standart) – юзать. Работает с блоками по 128 бит
Если длинны текста не хватает для шифрования в блок, то:
 записывать длинну сообщения в начале, в конце забивать мусором – неплохой
вариант, но оверхед
 padding: в конце писать 1 и кучу нулей в битах типа: наш_текст(1000000).
Если у нас в конце сообщения реально (100000), то мы фигачим еще один блок с
100000
 padding: три не заполненых байтами заполняем тройками. Тоже блок фигачим,
если это реальная инфа
Трабла с одинаковыми данными – они шифруются одинаково. Если зашифровать
фотку, то получится как фильтр в инсте.

ECB mode (Electronic codebook mode encryption) Режим, когда мы берем каждый блок и
шифруем его в шифро-блок. Книга, тк можно составить книгу, где на одной страницы
оригинальный текст, на второй зашифрованный.
CTR mode (counter mode encryption) – делаем из блочного шифра, потоковый. Юзаем
nonce, Инкрементим его.
CBC (cyber block chaining ) – херня. (Взлом ниже) – юзаем initialize vector – размером с
блок. Юзаем его как нонсе для первого блока, дальше юзаем результат из предыдущего
шифра. Трабла с тем, что шифровать/расшифровывать надо с начала.| Еще трабла, что если
поменять значение в конце предыдущего зашифрованого блока, так чтоб в конце
получилась еденица, то поломаем сообщение.

Тут были три тройки в падинге: . Сделали 2 в конце


предыдущего шифра и получили jumps331, убераем падинг и получаем Jumps0x030x03.
Теперь зная, что двойка сработала, и не вылезло фэйла, то мы знаем какое там
значени было изначально и какой падинг у сообщения. Теперь можем увеличить падинг,
записам вместо двойки 7, то получится в результате ксора jumps334 (fail), и так далее(слева от
7 еще две 7 пишем), получится jumps444 (fail). Еще левее пишем такое число, чтоб не было
фэйла, и таким образом узнаем, что (X xor наше_число = 4), где Х – буква оригинального
сообщения.

XSalsa20 с алгоритмом Poly1305 – лучше AES.


AES юзать в режиме GCM/AES (Galois/Counter Mode)
GCM combines Galois field multiplication with the counter mode of operation for block ciphers.

Трабла в том что если кто-то меняет зашифрованный текст, то все летит коту под хвост.
Надо убедится в том, что шифр-текст не был изменен
Криптографическую Хэш-функцию юзаем.
Правила:
 h(a) == h(b) if a == b
 if a != b, то h(a) скорее всего != h(b)
 preimage resistance (из хэша нельзя получить оригинальные значения)
 криптографическая хэш-функция не должна нам позволять находить другие
значения с таким же хэшем.
 collision resseistance. Вероятность того что два хэша, двух разных сообщений
совпадут должна стремится к нулю.

Message auntification code (coming soon)


4 Лекция4
Юзаем:
XSalsa20-Poly1305
AES-Poly1305
AES-GCM

Говно:

Costs:
 cost of info
 cost to hack
Cost to hack should be greater the cost of info

User hacking – взлом конкретного человека, цена обычна превышает


Site hacking – инфа о всех
Что-попало-hacking

MD5 – очень плохо


SHA1, SHA2 (файлы совпадают ли), SHA3 – тоже плохо

Алгоритмы взлома хэшэй:


 Bruteforce – рандомить до совпадения
 Rainbow tables
Делаем таблицу:
значение – кучу раз захэшированое это значение.
значение – кучу раз захэшированое это значение.
и тд..

Теперь для взлома хэша надо взять от него хэш и искать совпадения с таблицей,
если не нашли, берем хэш от хэша и опять ищем и тд.

Это если предположить что у пользователя пароль в виде хэша.


Если нет, то делаем reduce function в таблице, которая передает дальше не хэш
предыдущего, а допустим первые 8 символом предыдущего хэша.
И у нас будет таблица вида:
значени из 8 символов – значение из 8 символов
 dictionary
Храним таблицу частых паролей.
Сравниваем хэши
 Pattern/Templates
Обычно люди заменяют так:
o => 0
i => 1
f => 4

Соединяем слова
Еще пароль типа (текст)(дата_рождения)

Так можно взломать 96% паролей.


 hybrid

Как решить:
 увеличить время работы хэш функции – но нафиг так делать
 KDF (Key Derivation Function) – из пароля получаем ключ для шифрования
например Argon2 (идеально), PBKDF2(не ахти, быстро перебирается), Scrypt, BCrypt
(юзать, если нет возможности юзать scrypt)
Argon2 – тут указывается количество памяти, которое надо юзать при хэшировании,
посему перебрать на видюхе уже не получится. (Он заполняет память кучей
данных, которые основываются друг на друге, а потом схлопывает все в небольшой
хэш)

Шото-там-Sodium проверка нормальный ли алгоритм шифрования


5 Лекция 5
what makes secute cipher:
 Единственный способ гарантировать, что там есть какие-то зависимости – это
чтобы шифро-текст был псевдо-изучаем.
 Без ключа нет возможности получить оригинальные данные

what makes Secure hash:


 Из хэша нельзя получить данные
 Результат похож на шум

SRNG:
 Числа не должны зависить от предыдущих
 Из текущего состояния нельзя получить следующее
 Результат похож на шум

DOS attack on KDF (4.7 GB в поле пароля)


SHA512 берем от 4.7ГБ а потом Аргон2

Решение той траблы с подделкой сообщений (integrity):


Хэш сообщения не решает траблу( тк его тоже можно подделать), но добавляет
confident
authenticity – точно знаем, что это сообщение было отправлено клиентом, а не кем-то
левым
1. Шифруем сообщение одним ключем
2. А потом хэшируем вторым ключем (результат это Message Authentication Code
либо Дайджест сообщения)
3. Склеиваем эти две штуки и отправляем

Hash length extension attack


Применима к алгоритмам хэширования, которые итератирвно добавляют
информацию в хэш основываясь на текущем состоянии, а в конце возвращают это
состояние. Соответственно не составляет труда добавить в конец еще инфы.
Атакер может найти hash(key+m1+attackerMessage2), используя hash(key+m1) и длинну
сообщения m1 (Гоша не упомянул длинну). То есть можно подкоректировать
сообщение.
Решается HMAC (HMAC-md5/HMAC-sha1 - Keyed hash - нормуль). CBC mac – не юзайте.
Эта штука берет еще один хэш. Типа такого: hash( okeypad ∥ hash( ikeypad ∥ msg ) ).

Poly1305-AES (тут реализовано MAC)


Разбиваем на блоки по 16 байт. Дописываем единичку.
Строим полимиал используя Poly1305
Получаем числo C. По модулю 2^130-5 – это простое число. И прибавляем AES(nonce). А
потом все по модулю 2^128
Poly1305-Salsa20
AES-Poly1305 – имеется ввиду, что для шифрования используется AES, а для MAC
используется Poly1305, который скорее всего тоже использует AES.

Варианты как соединить MAC и зашифрованный текст:


 Зашифровать, потом МАС и склеить (Encrypt-then-MAC)
 МАС от plaintext и склеить с зашифрованым – херня, тк сперва надо будет
расшифровать, а потом уже чекать МАС
 MAC от plaintext, потом склеить с plaintext, а потом все это зашифровать – тоже
херня, по той же причине
Главное что сперва сравнивается МАС, а потом уже дэшифрация.

AEAD (authenticated Encryption with Associated Data) – то что было выше:


integrity
confident
authenticity
 Encrypt-then-MAC
 AES-GCM, AES-CCM – они сразу добавляют MAC
 EAX
 AES-Poly1305, XSalsa20-Poly1305

2FA
Отправляем код сгенереный CSPRNG

Штука с рандомом:
Если гегенрим число, и нам надо до 100, то не надо делать модуль(тк тогда
вероятности сбиваются), лучше вайлом.

Храним в БД хэш (KeyedHash).

HOTP(HMAC-based One-time Password) and TOTP (Time-based One-time Password)


Считаем MAC от времени (время%30сек), с ключем.
Плохо, если нет сети или симку потерял.

Password storage:
Можно юзать:
 argon2
 SHA3 then Argon2. (SHA3 может считать сам клиент)
 probably use SHA3- then-Argon2-then-AES-Poly1305
 or user HMAC(pass+salt, key)
 Не ограничивать длинну пароля
 Не ограничивать символы
 Ограничить частые пароли
 Add version field to database – так можно менять способ шифрования
 Add isCompromised field to database (взломанные юзеры помечаются)

Можно добавлять фейковых юзеров с супер простыми паролями, таким


образом узнаем, что взломали.

Если взломан:
 Enable forced 2FA – при повторном входе.
 Disable changing of secret question/2FA settings
 Rotate keys – менять ключи
 Попросить юзера поменять пароль при следующем входе

Как передать ключ чтоб не перехватили:


coming soon
6 Лекция 6
Теория групп
{множество и действие}
1. Замкнутость, какое бы действие мы не делали с любыми элементами из множества,
у нас в результате получается элемент из множества
2. Оператор «е», применив который на елемент, получим тот же елемент (поворот на
0 градусов)
3. а*а^-1 = eлементарный
4. a*(b*c) = (a*b)*c

Самый простой:
{0, +}
{[0, 1], xor} это не точно)
поворот равностороннего треугольника

{[0, 1, 2], +(mod 3)}

Тоже самое с матрицами, которые задают повороты.

{Z, +}

Елептические кривые:
y^2 = x^3 + ax +b

Повороты 24-угольника:
0-12

Z3: {[1,2], *(mod3)}

1 – нейтральный елемент в множестве [0-11] (циферблат), с помощью которого можно


сгененрировать каждый елемент этой группы, (генерирующий елемент – «g»)

Z5: {[2, 4, 3, 1], *(mod5)}, тут двойка генерирующий елемент.

g с самим собой (g*g) = g^2

Z7: 3 – генерирующий

Z10: 3 - генерирующий
Z6: [5, 1]

Как посчитать размер группы:


Для простых чисел – это число - 1, тип для Z5: |Z5| = 5 -1 = 4

Рисуем числа которые отсутвтуют в множестве

Взаємно прості числа — натуральні або цілі числа, які не мають спільних дільників
більших за 1
Все числа для множества Z10 являются взаимно простыми

n = pq
n – (q – 1) – (p - 1) |
pq – (q – 1) – (p - 1) | это не точно)
(p – 1) * (q – 1) – колчиество чисел, которые взаимно простые с n и меньше чем n
Это функция ейлера обозночается как фи: |Zn| = fi(n)

Любой елемент группы = g^x


x = log g (element);

g^|Zn| = 1  g^fi(n) = 1
g^(|Zn| + 1) = g

Как передать ключи


Алгоритм создания общего ключа

Выбрать группу и генерирующий елемент – знают оба

(1) Выбирает число “a” из группы


g^a передаем (2)

(2) Берет число “b”


g^b передаем (1)

(1) считает (g^b)^a

(2) считает (g^a)^b

получаем одинаковые числа

Это алгоритм DH (Diffie–Hellman)

Еще есть ECDH – более защищенный

Получаем ключи из числа (g^a)^b с помощью KDF

Трабла – могут подменить данные:


(1) отправляет g^a (2)`му
(hacker) перехватывает g^a, отправляет g^a1 (a1 - сам сгенерил) (2)`му
(2) отправляет g^b (1)`му

(hacker) перехватывает g^b, отправляет g^b1 (b1 - сам сгенерил) (1)`му

Таким образом у хакера есть (g^b)^a1 и (g^a)^b1 и можем менять сообщения как хотим
Решаем RSA

Алгоритм RSA
Алгоритм, чтоб зашифровать надо один ключ(private), а расшифровать другой
ключ(public).

(1) дополнительно отправляет RSA(hash(g^a))


(2) сравнивает хэши

Таким образом нельзя подменить g^a

Это все называется цифровая подпись

Как сделать такую функцию:


E(p, K1) = c
D(c, K2) = p

F(p, K1, K2) = p

p^(fi(n) +1) = p

Надо подобрать K1, K2: (k* fi(n) +1 ) (mod n) = K1 * K2

p^(K1 mod(n)) = c
c^(K2 mod(n)) = p

тк p^(K1*K2) = p (mod n)

n = pq
fi(n) = (p-1)(q-1)
Зная число n, но не зная p, q: очень сложно найти fi(n). Там експоненциальное время

(k* fi(n) +1 ) (mod n) = K1 * K2

> a mod s = 1 <=> a = k*s + 1


1 mod s = a mod s
1 mod s = (k*s + 1) mod s
k* fi(n) +1 = 1 (mod fi(n))

K1 * K2 = 1 (mod fi(n)) (mod n)

K1*K2 mod fi(n) mod n = 1


Теперь берем K1 = какому-то числу, у которого мало битов единиц (coming soon),
например 3. – это будет публичным ключем, который мы раздаем
Еще раздаем n, с помощью которого мы все генерировали
7 Лекция 7
RSA
3 11
6537 100000…1
Малое количество едениц – считается быстрее

Большие данные не шифруют с помощью RSA.

Один и тот же текст – получается один и тот же шифро-текст


Соли не хватает.

malleability
Можем подбросить случайное число и RSA расшифрует.

Еще трабла:
Стоит сервак, который расшифровывает RSA, и не возвращает определенные
расшифровки.
Это можно обойти домножив на cipher_number*r^public_key,
тогда сервак вернет plain_number*r mod n. Делим на r и получаем расшифровку
Решаем MAC

Еще трабла:
pq = n.
Если p приблезительно равно q, тогда есть простой алгоритм, который найдет p и q.

Еще трабла:
Две разные пары сделали,
p*q=n
p * q’ = n’
У них общие делители, поэтому поиск НайбільшогоСпільногоДільника(GCD) n и n’ изи
найдет.

Два варианта использования:


Приватный у всех, а ты расшифровуешь публичным (алгоритм шифрования)
Публичный у всех, а ты зашифровываешь приватным (алгоритм цифровой подписи)

PSCK 1.5 или PCSK 1.5 не юзать.


Была проблема на серваке, что приходили данные типа:
data 00fffffhash, и свервак не чекал fff

RSA-OAEP – юзать

Тайминг атаки.
Чем юольше едениц в приватном ключе, тем больше времени занимает расшифровка,
так можно померять время и найти приватный ключ.

Why use DH?


Нельзя передавать с помощью RSA ключи, тк можно подменить данные.
Поэтому надо использовать еще один приватный ключ.
Шифруем приватным нашим, сверху шифруем публичным чечика другого, приходит к
чечику, он расшифровывает своим приватным и нашим публичным.

Если узнают приватный ключ, то сможет расшифровать все предыдущие сообщения.


Если юзать DH с RSA, то все чики-пуки – это называется PFS (perfect forward secrecy)

Why don’t use DH?


Вариант DH с такими числами (не с кривыми, елептическими), подвержен атакам
Logjam. тк стандарт придуманый NSA для групп g, G можно взломать. Если группа на 512 бит.

Посему надо юзать ECDH(Elliptic-curve Diffie–Hellman) на 2048 бит.

Еще одна вариация с комендой – передавать не кастомный g^a1, а просто g или


единицу.

vs RSA:
DSA (тоже цифровые подписи, и каждый раз разные), то есть зависит от рандомного
параметра К
ECDSA – это как DSA только работает с елептической кривой, тоже зависит от К
EdDSA – специальная елептическая кривая (кривая Эдварда)
Ed25519 – кривая 25519, она работает быстрее и не придумана интститутом стандартов
США). – годно

Curve25519 ECDH – та же схема ECDH но на кривой. Это можно юзать, если захотите
юзать DH.

Как узнать публичный ключ:


Как удостоверится что это реальный публичный ключ.
Используем сертификаты.
Данные сертификата:
 Имя владельца
 Публичный ключ
 issue date
 end data

Не знаем подлинность.
Для подлинности используется третье лицо, которое подписывает сертификат.

Root certificate – самый главный сертификат, который сам себя подписывает.


Intermediate certificate – промежуточные, типа гугла
End-entity certificate – для конкретного пользовотеля
8 Лекция 8
Записная книжка с записями кто кому сколько дал денег. Подписываем цифровой подписью
ECDSA.

Записи:
Входные транзакции
Выходные транзакции
Цифровая подпись

Трабла, что можно сделать две разные записи и распространить два разных списка.
Чтоб решить где валидный юзаем - Proof of work.

Делим все на блоки.


Каждый блок содержит набор транзакций и хэш предыдущего блока и nonce
Proof of work подобрать так этот nonce чтоб, допустим, в конце было три нуля.
(рандомим brutforce) – это замедляет создание нового блока.

Если сгенерили два одинаковых валидных блока, то часть людей имеет одну версию ветки,
часть – другую версию ветки. Валидной веткой считается та что длиннее.

В каждом блоке есть место, для награды за создание блока.


9 Лекция 9 (14 січня)
Большинство уязвимостей из-за того что мешается код и данные
SQLi

RCE (Remove Code Execution)


gets(buffer):
Запись за пределы памяти
Так можно данные поменять и функции которые хранятся в переменных, а потом
вызываются
В стеке адрес возврата хранится, его можно перезаписать (с помощью ошибки можно
определить какое расстояние в байтах до поля, где написан адрес возврата)

Можно в данные записать код, а потом в адрес возврата написать адрес своих данных.

printf(string):
опасно, тк это параметр формата, и там можно все что угодно будет вытащить
%n – запись по указателю)

Как противостоять:
 Stack protector, stack canary, stack cookie – в стек между переменными и
адресным пространством записывает дополнительные значения и перед возратом
из функции делается проверка этого значения.
 DEP (data execution prevention), NX-flag, non-executable pages
 ASLR - Address space layout randomization – случайные адреса делает, поэтому не
знаем куда записать что-то
10 Лекция 10 (TLS 1/2)
Confidentiality
Integrity
Availability – доступность данных, когда они нам нужны

SSL/TLS
TLS v1.3 – нормуль

SSL (Secure Socket Layers) – думали сделать промежуточным слоем в моделе OSI.
 Клиент говорит – я поддерживаю вот такие алгоритмы шифрования
 Сервер выбирает какой использовать.
 Сервер шлет сертификаты клиенту, чтоб клиент смог подтвердить, что это именно
тот сервак.
 Дальше обмен ECDH
Главная фишка – в выборе алгоритма.

Когда клиент отправляет версию TLS/SSL которую он поддерживает, то ее можно


подменить на более старую. Поэтому, сервак ограничивают минимальную версию. (version
roll back)

TLS_NULL – поддержка без подписей. Эту херню надо вычеркивать. Эту штуку может
указать хакер.

BEAST
CBC уязвимость
Когда используем initialize vector из прошлой сессии.
Если пересылаем так пароль типа «super_password=<password>»
Можем разбить на блоки чтоб отгадывать по одной букве.

Heartbleed
Уязвимость, которая позволяла получить приватные ключи с сервака.
Клиент отправлял серваку сообщение “hello” 5, тип длинна сообщения 5.
Сервер отправлял сообщение в обратку. Ну и приватные ключи в памяти лежат.

Что делать если у сервака украдут приватный ключ?


 CRL (certificate revocation list) – список сертификатов, у которых сперли ключ.
 OCSP (online certificate status protocol) – протокол проверки сертификата
Не работает, тк чечик может межд клиентом и серваками встать и жопа.
Решение: OCSP Stapling. Сервак отправляет сперва запрос в OCSP, получает подпись, а
потом отправляет уже клиенту с этой дополнительной подписью.
Еще есть OCSP-must-staple – в сертификате указано, что он должен использовать
stapling.

HSIS
HPKP (coming coon)

SNI (Server name indication) – видно имя домена сервера


Можно защитить
1. encrypted SNI
2. DoH (DNS over HTTPS) / DoT (DNS over TLS)
3. DNSSEC
11 Лекция 11 (TLS 2/2)
Чечик может подписать своим сертификатом.
Решение: HPKP(http public key pinning) – ну офигенно, но не юзают)
Внутри сертификата указано, что он единственный
Но трабла, что можешь потерять свой приватный ключ, и клиенты не смогут заходить
на сайт.

HSTS (http strict transport security) – способ сказать, что сервер доступен только по
HTTPS.
http: 80;
https: 8080;
TLS: 443

Три всадника незащищенного интернета:


 SNI (Server name indication) – видно имя домена сервера
 DNS requests
 certificates – в сертификате указано имя домена

Можно защитить
1. encrypted SNI (still in draft)
Запрашивает ESNI у DNS, если он его поддерживает – это публичный ключ для
шифрования, получает g^a, формирует g^b, и отправляет на сервак
2. DoH (DNS over HTTPS) / DoT (DNS over TLS)
Clodflare, microsoft, google – предоставляют шифрования DNS
3. DNSSEC

TLS v1.3 все поменял:


 Количество сообщений между клиентом и сервером сократилось
 Сертификаты шифруются и все доп данные, сразу в ответе.
 оставили 5 алгоритмов шифрования (из 370)

VPN
PPTP – старая версия
L2TP
OpenVPN
IKEv2 – протокол обмена ключами, который используется вместе с IPsec
IPsec – поддерживается большинством ОС

Обворачиваем наши запросы. В случае с openVPN наша инфа кладется в TLS поток

IPsec – два режима:


 transport – секьюрно подключится к одному чуваку
 tunnel – тунель между вами и чуваком через промежуточный сервак.

Шифрование IPsec:
 AH – поддерживает только аутификацию, без шифрования
 ESP – шифрования всего пакета, как TLS

L2TP (tunnel protocol) – заворачивает еще и ip