🔐 Побитовые операции: Ключевой инструмент в криптографии

💡 Побитовые операции — как кухонные ножи для криптографа: простые, но незаменимые. Они позволяют "нарезать" данные на биты и создавать сложные преобразования.

🧩 Основные побитовые операции

ОперацияОбозначениеПример (бинарный)Результат
AND&1010 & 11001000
OR|1010 | 11001110
XOR^1010 ^ 11000110
NOT~~1010 (4 бита)0101
Сдвиг влево<<1010 << 2101000

🔐 Применение в шифровании

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)

🛡️ Почему побитовые операции эффективны?

🔍 Реальный пример: XOR в CBC-режиме

В AES-CBC каждый блок открытого текста XOR-ится с предыдущим зашифрованным блоком перед шифрованием. Это обеспечивает зависимость блоков друг от друга.

⚠️ Опасные ошибки

# Слабый ключ в DES (все нули/единицы)
key = 0x0000000000000000  # Уязвим!
cipher = DES.new(key, DES.MODE_ECB)

Проблемы:
• Повторное использование ключей XOR
• Предсказуемые сдвиги
• Отсутствие перемешивания (diffusion)

🚀 Современные применения

# Пример: Проверка чётности бита
def is_even(num):
     return (num & 1) == 0
# Быстрее, чем num % 2

📝 Задания на закрепление

📚 Ресурсы для изучения