Открытый текст, ключ и шифр
Прежде чем шифровать, договоримся о словах: что такое открытый текст, шифр-текст, ключ и алгоритм.
Словарь криптографа
В криптографии есть несколько базовых терминов, которые встретятся в каждом уроке. Запомним их сразу:
| Открытый текст | Исходное читаемое сообщение (англ. plaintext). |
| Шифр-текст | Зашифрованное, нечитаемое сообщение (англ. ciphertext). |
| Шифрование | Превращение открытого текста в шифр-текст. |
| Дешифрование | Обратное превращение — из шифр-текста в открытый. |
| Ключ | Секретный параметр, без которого расшифровать нельзя. |
| Алгоритм (шифр) | Правило, по которому происходит шифрование. |
Алгоритм и ключ — это разные вещи
Новички часто путают алгоритм и ключ. Разница важная: алгоритм — это общее правило (например, «сдвинуть буквы»), а ключ — конкретное число, которое задаёт детали (например, «сдвинуть на 3»). Один и тот же алгоритм с разными ключами даёт разные шифр-тексты.
Принцип Керкгоффса
Стойкость шифра должна зависеть только от секретности ключа, а не от секретности алгоритма.
Этот принцип сформулировал ещё в XIX веке голландец Огюст Керкгоффс. Звучит парадоксально: разве не безопаснее держать алгоритм в тайне? Оказывается, нет. Алгоритмы рано или поздно становятся известны, а вот ключ можно легко заменить. Поэтому современные алгоритмы (AES, RSA) открыты и опубликованы — их изучают тысячи учёных, и именно поэтому им доверяют.
Посмотрим на ключ в действии
Один алгоритм, два разных ключа — два разных результата. Сдвинем буквы слова на разное число позиций:
def shift(text, key):
result = ""
for ch in text:
result += chr(ord(ch) + key)
return result
plaintext = "secret"
print("Ключ 1:", shift(plaintext, 1))
print("Ключ 5:", shift(plaintext, 5))
print("Ключ 10:", shift(plaintext, 10))Вывод:
Ключ 1: tfdsfu Ключ 5: xjhwjy Ключ 10: }migk~
Алгоритм один и тот же — «прибавь ключ к коду буквы». Но каждый ключ даёт свой шифр-текст. Чтобы расшифровать, нужно знать именно тот ключ, которым шифровали.
Кто есть кто
В задачах по криптографии часто встречаются имена-персонажи. По традиции отправителя зовут Алиса, получателя — Боб, а злоумышленника, который пытается подслушать, — Ева (от англ. eavesdropper — подслушивающий). Мы тоже будем ими пользоваться.