Слайд 2Типы шифрования
Симметричное
Асимметричное
![Типы шифрования Симметричное Асимметричное](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-1.jpg)
Слайд 3Симметричное шифрование
Ключ шифрования равен ключу расшифровки
Самые древние виды шифрования относятся к этому
![Симметричное шифрование Ключ шифрования равен ключу расшифровки Самые древние виды шифрования относятся](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-2.jpg)
типу
Самые известные представители – AES, DES, RC4
Для секретного ключа K
Encrypt(M,K) = C
Decrypt(C,K) = M
Слайд 4Применения симметричного шифрования
Быстрое шифрование данных
Возможность потокового шифрования
![Применения симметричного шифрования Быстрое шифрование данных Возможность потокового шифрования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-3.jpg)
Слайд 5Асимметричное шифрование
Ключ шифрования НЕ равен ключу расшифровки
Изобретен 40 лет назад
Самые известные представители
![Асимметричное шифрование Ключ шифрования НЕ равен ключу расшифровки Изобретен 40 лет назад](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-4.jpg)
– RSA, ECC
Для секретной пары ключей K и K’
Encrypt(M,K) = C
Decrypt(C,K’) = M
K’!=K
Слайд 6Применения асимметричного шифрования
Обмен ключами симметричного шифрования
Проверка подлинности
![Применения асимметричного шифрования Обмен ключами симметричного шифрования Проверка подлинности](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-5.jpg)
Слайд 7Блочные шифры
Шифруют блоками постоянного размера
Все асимметричные шифры относятся к блочным
Популярные симметричные –
![Блочные шифры Шифруют блоками постоянного размера Все асимметричные шифры относятся к блочным](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-6.jpg)
тоже (AES, DES)
Идеальный блочный шифр являет собой шифр подстановки, заменяющий один блок текста на другой, причем взаимосвязь полностью задается ключом, однако восстановить по ней ключ невозможно
Слайд 8Потоковые шифры
Генерируют ключевой поток
Позволяют шифровать буквально по одному биту
Шифрование часто совпадает с
![Потоковые шифры Генерируют ключевой поток Позволяют шифровать буквально по одному биту Шифрование](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-7.jpg)
расшифровкой
Операция шифрования обычно выглядит как
???????? – ключевой поток
⊕ – XOR (побитовое сложение по модулю 2)
MESSAGE – исходное сообщение
_____________
CIPHERTEXT – зашифрованное сообщение
Слайд 9AES, DES и компания
Какая-то аццкая муть, является предметом изучения математиков, можно наблюдать
![AES, DES и компания Какая-то аццкая муть, является предметом изучения математиков, можно наблюдать на NSUCRYPTO, например.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-8.jpg)
на NSUCRYPTO, например.
Слайд 10Режим связывания блоков
Атаки, как правило, вообще можно осуществлять на любой блочный шифр,
![Режим связывания блоков Атаки, как правило, вообще можно осуществлять на любой блочный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-9.jpg)
даже идеальный
И главное, совершенно не нужно разбираться как оно работает
Создан чтобы избежать поблочного анализа
Очевидно, что для каждого блока X для таблицы подстановки S
S(X1) == S(X2) тогда и только тогда когда X1==X2
Это беда
Слайд 11Режим связывания блоков
ECB
CBC
PLAIN
![Режим связывания блоков ECB CBC PLAIN](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-10.jpg)
Слайд 12Режим связывания блоков
В режиме CBC для шифрования:
Шифроблок Ci = E(Pi ⊕ Ci-1),
![Режим связывания блоков В режиме CBC для шифрования: Шифроблок Ci = E(Pi](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-11.jpg)
C0 = IV (случайный вектор инициализации)
Расшифровка Pi = Ci-1 ⊕ D(Ci)
Слайд 13Режим связывания блоков
Напрямую из процедуры расшифровки получаем
Если Pi = Ci-1 ⊕ D(Ci)
![Режим связывания блоков Напрямую из процедуры расшифровки получаем Если Pi = Ci-1](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-12.jpg)
то заменяя Ci-1 мы заменяем Pi
То есть если нам известен некоторый текст скрытый за шифрованием, мы можем создать ЛЮБОЙ текст такой же длины как Pevil = Cevil ⊕ D(Ci), Cevil = Pi ⊕ Ci-1 ⊕ EVILTEXT
Вывод:
Симметричная криптография хреново подходит для проверки подлинности (еще бы)
Слайд 15Как накосячить с модулем RSA
Использовать небольшое N (привет NSUCRYPTO)
Использовать N такое где
![Как накосячить с модулем RSA Использовать небольшое N (привет NSUCRYPTO) Использовать N](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-14.jpg)
|p-q| мало, тогда применяется алгоритм факторизации Ферма
Использовать N где p-1 имеет малые делители (гладкое) – применяется p-1 метод Полларда
Использовать N где p+1 имеет малые делители – метод p+1 Уильямса
Слить информацию о части бит p или q – Coppersmith method или “factoring with a hint” в CrypTool
Слайд 17Как накосячить RSA (и ещё)
Не проверять подлинность N при обмене ключами. Тогда
![Как накосячить RSA (и ещё) Не проверять подлинность N при обмене ключами.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-16.jpg)
можно осуществить атаку “человек посередине” подменив N своим и расшифровывая-зашифровывая данные прозрачно для двух собеседников. Но это в CTF уже экзотика.
Слайд 18Секундочку, но ведь RSA шифрует числа?
Ага, есть такое дело.
Чтобы перевести строку в
![Секундочку, но ведь RSA шифрует числа? Ага, есть такое дело. Чтобы перевести](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-17.jpg)
число достаточно просто взять составляющие ее байты и посчитать их байтами числа.
В языке Python это делается как int(‘stroka’.encode(‘hex’),16)
В обратную сторону hex(num)[2:].replace(‘L’,’’).decode(‘hex’)
Слайд 19Полезные инструменты
Python, без него здесь почти никак
Libnum, позволяет выполнять разные математические операции,
![Полезные инструменты Python, без него здесь почти никак Libnum, позволяет выполнять разные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/366659/slide-18.jpg)
близкие к CTF. Или gmpy/gmpy2 (как более общее решение).
Sagemath, для отчаянных. Обладает огромным списком возможностей, но странноват, большой и тормозит.
Google + site:github.com для поиска готовых скриптов
GIMP – позволяет открывать байты (расширение .data) как картинку, очень полезный инструмент для поверхностного анализа данных (энтропия “на глазок”)
Xortool, позволяет выполнять операцию xor над файлами