🔐 Побитовые операции: Ключевой инструмент в криптографии
💡 Побитовые операции — как кухонные ножи для криптографа: простые, но незаменимые. Они позволяют "нарезать" данные на биты и создавать сложные преобразования.
🧩 Основные побитовые операции
🔐 Применение в шифровании
1. XOR — основа многих алгоритмов
// Шифр Вернама (XOR-шифрование)
plaintext = "SECRET"
key = "RANDOMKEY"
ciphertext = bytes([p ^ k for p, k in zip(plaintext.encode(), key.encode())])
Свойства XOR:
• A ^ A = 0
• A ^ 0 = A
• (A ^ B) ^ B = A
2. AES: Комбинация операций
В раундах AES используются:
• XOR для добавления раундового ключа
• Сдвиги строк в SubBytes
• AND для MixColumns
3. Генерация псевдослучайных чисел (PRNG)
// Генератор псевдослучайных чисел
def lcg(seed):
     a = 1140671485
     c = 128201163
     m = 2**24
     return (a * seed + c) & (m - 1)
🛡️ Почему побитовые операции эффективны?
- ⚡ Выполняются за 1 такт процессора
- 🔀 Создают лавинный эффект (малые изменения → большие различия)
- 🧩 Позволяют компактную аппаратную реализацию
🔍 Реальный пример: XOR в CBC-режиме
В AES-CBC каждый блок открытого текста XOR-ится с предыдущим зашифрованным блоком перед шифрованием. Это обеспечивает зависимость блоков друг от друга.
⚠️ Опасные ошибки
# Слабый ключ в DES (все нули/единицы) key = 0x0000000000000000 # Уязвим! cipher = DES.new(key, DES.MODE_ECB)
Проблемы:
• Повторное использование ключей XOR
• Предсказуемые сдвиги
• Отсутствие перемешивания (diffusion)
🚀 Современные применения
- Постквантовая криптография (алгоритмы на решетках)
- Хеш-функции (SHA-3 Keccak использует побитовые операции)
- Блокчейн (биткоин-майнинг через битовые маски)
# Пример:
Проверка чётности бита
def is_even(num):
     return (num & 1) == 0
# Быстрее, чем num % 2
📝 Задания на закрепление
- Задание на XOR
Также XOR часто встречается в заданиях на реверс кода, так что сначала стоит ознакомиться со статьей по данной теме
📚 Ресурсы для изучения
- Книга: "Hacker's Delight" Генри Уоррена
- Статья: "Bitwise Operations in Cryptography" (OWASP)
- Практика: Cryptopals Challenge Set 1