1. Введение: Три кита обработки данных
Самая частая ошибка новичка — путать кодировку, хеширование и шифрование. Давайте раз и навсегда разберемся с определениями.
Кодирование (Encoding)
Это преобразование данных в удобный формат для хранения или передачи.
Ключ не нужен. Любой может раскодировать обратно, зная алгоритм.
Пример: Base64, ASCII, азбука Морзе.
Хеширование (Hashing)
Преобразование данных любой длины в набор битов фиксированной длины (число).
Необратимо. Из хеша нельзя получить исходные данные (в теории).
Пример: MD5, SHA-256.
Шифрование (Encryption)
Сокрытие информации с помощью ключа.
Обратимо. Если есть ключ, можно вернуть исходный текст.
2. История: Классические шифры
В заданиях категории "Crypto" (особенно простых) часто встречаются старые алгоритмы.
Шифр Цезаря (Caesar Cipher): Один из самых простых методов. Каждая буква заменяется на букву, находящуюся на фиксированное число позиций правее или левее в алфавите.
Шифр Атбаш (Atbash): Шифр подстановки: первая буква алфавита заменяется на последнюю, вторая — на предпоследнюю и так далее (A->Z, B->Y).
Шифр Виженера (Vigenère Cipher): Более сложный шифр. Использует ключевое слово. Каждая буква исходного текста сдвигается на разное количество позиций в зависимости от буквы ключа.
Пример: Текст "здесь ничего интересного", Ключ "цтф" -> Шифротекст "юцщзо...".
Энигма (Enigma): Легендарная роторная машина. При каждом нажатии клавиши роторы сдвигались, меняя электрическую цепь. Это делало подбор ключа невероятно сложным для того времени.
3. Кодировки (Encodings)
В CTF вы постоянно будете видеть данные, которые выглядят как "мусор". Часто это просто другая кодировка.
ASCII и Unicode
Компьютер понимает только цифры. Таблицы кодировок сопоставляют каждому символу число.
В Python полезны функции
ord(symbol)(символ в число) иchr(int)(число в символ).
Bin, Hex и Base64
Binary: Представление в виде 0 и 1.
Hex (Base16): Шестнадцатеричное представление. Удобно для просмотра байтов.
Base64: Самая популярная кодировка в вебе. Использует цифры, буквы (A-Z, a-z) и символы +, /. Часто заканчивается на =.
import base64
base64.b64encode(b'hello') # Кодировать
base64.b64decode(b'aGVsbG8=') # Декодировать
import binascii
binascii.hexlify(b'text') # Текст в hex
4. Хеширование (Hashing)
Хеш — это "цифровой отпечаток" данных. Он детерминирован (один вход = один выход) и работает в одну сторону.
Зачем нужно?
Хранение паролей (сервер хранит не пароль, а его хеш).
Проверка целостности файлов.
Как ломать хеши? Поскольку хеш необратим, мы не "расшифровываем" его, а подбираем (брутфорс). Мы хешируем варианты паролей и сравниваем с украденным хешем.
Радужные таблицы (Rainbow Tables): Предварительно вычисленные базы "хеш -> пароль". Ускоряют взлом.
Инструменты:
John The Ripper (JTR): Легендарный инструмент, поддерживает кучу алгоритмов.
Hashcat: Мощнейший инструмент, использующий видеокарту (GPU) для перебора.
5. Шифрование (Encryption)
Здесь уже есть ключи.
Симметричное шифрование
Один и тот же ключ используется и для шифрования, и для расшифрования.
AES (Advanced Encryption Standard): Современный стандарт. Быстрый и надежный блочный шифр.
DES: Устаревший стандарт, сейчас считается небезопасным.
Асимметричное шифрование
Используется пара ключей: Публичный (раздаем всем) и Приватный (храним в тайне).
Если зашифровать Публичным -> Расшифровать может только Приватный (для секретных сообщений).
Если зашифровать Приватным -> Расшифровать может Публичный (для цифровой подписи).
Популярные алгоритмы:
RSA: Основан на сложности разложения больших чисел на множители.
Diffie-Hellman: Алгоритм безопасного обмена ключами по незащищенному каналу.
6. Принцип Керкгоффса
Золотое правило криптографии:
Система не должна требовать секретности алгоритма. Безопасность должна зависеть только от секретности ключа.
Если кто-то говорит: "Мой шифр надежен, потому что никто не знает, как он работает" — это плохой шифр.
7. Полезные инструменты
CyberChef: "Швейцарский нож" для декодирования всего (Base64, Hex, XOR и т.д.).
OpenSSL: Консольная утилита для генерации ключей и шифрования.
SageMath: Математическая среда для сложных криптографических задач (RSA, ECC).
CryptoTool2: Визуальный инструмент для изучения алгоритмов.