morontt (morontt) wrote,
morontt
morontt

Category:
  • Mood:
  • Music:

Энигма

Как-то спросил у меня bagerlock как проще всего придумать шифр, чтобы на нём писать. Конечно, если придумать такой шифр, что человек в уме будет кодировать им свои сообщения, то другой человек почти наверняка этот шифр разгадает, так что нужно использовать что-то более рутинно-вычислительное, чем собственный мозг. С тех пор и засела у меня в голове идея написать программу, эмулирующую работу шифровальной машины Энигма, тем более, что когда-то в древности уже делал подобное на бейсике.


Фото из википедии.

Вкратце про Энигму...

Предшественницей криптографических машин был роторная машина, изобретённая в 1917 году Эдвардом Хеберном, названная впоследствии Энигмой (Enigma — загадка с латыни). Хотя само происхождение этой шифровальной машины тоже загадочно, потому как в некоторых источниках указываются изобретатель голландец Гуго Кох, немец Артур Шербиус или немец Артур Кирх. Но это не столь важно (для меня), предположу, что все придумали её независимо.

Принцип работы можно понять из рисунка.


Имеется набор роторов и рефлектор. На каждом роторе (и рефлекторе) расположены контакты, соединённые случайным образом. Весь это бутерброд складывается вместе, чтобы обеспечить прохождение электрического сигнала сквозь весь пакет колёс. Перед началом работы роторы поворачивались так, чтобы устанавливалось кодовое слово - ключ, а при нажатии клавиш с буквами правый ротор поворачивался на один шаг. После того, как он делал оборот, на один шаг поворачивался следующий ротор и т.д. Рефлектор коммутирует контакты последнего ротора, обеспечивая прохождение сигнала в обратном направлении.

Особенности шифра:
1) Из-за рефлектора процесс шифрования представляет собой инволюцию, т.е. преобразование, обратное самому себе. Если обычным человеческим языком, то это значит, что повторное шифрование сообщения тем же ключом даст исходный текст.
2) Опять же, благодаря рефлектору, буква не может быть зашифрована сама собой, что может пригодиться (и, следовательно, пригождалось) дешифровщикам.
3) Две подряд идущие одинаковые буквы шифруются разными буквами.
4) Смена алфавитов (замены одного символа другим) периодическая, длина периода равна T = PN, где P - число букв алфавита, N - число вращающихся роторов.

В моей поделке шифруются только русские буквы, остальные символы игнорируются. С буквой "ё" пришлось расстаться, так как рефлектор соединяет контакты попарно, а с "ё" тридцать три на два не делится без остатка. Роторов запрограммировал 4 штуки, т.е. период смены алфавитов - около миллиона символов. Понятное дело, что кодовое слово состоит из 4 произвольных букв.

Желающие могут испробовать виртуальную Энигму :) Кодовое слово (ключ) для шифровки/расшифровки - фыва.







Tags: моделирование, физмат
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 58 comments