Cryptography etudes: Atbash and Caesar ciphers

Криптографические этюды: шифр Атбаш и шифр Цезаря

The article leads to the historical excursus to the cryptography, to the biblical Atbash and Caesar ciphers, which were described together with sources on C.
Развитие шифров исторически шло одновременно с развитием письменности. В первую очередь они нужны были правителям, прибегавших к услугам лазутчиков, дипломатам, состоявшим у них на службе, служителям культа, стремившихся ограничить доступ непосвященных к эзотерическим религиозным секретам, а также криминальному миру, стремившемуся уже на заре человечества, соблюдать скрытность и хранить в тайне преступные замыслы. Цель данного цикла статей: во-первых, совершить исторический экскурс в криптографию, во-вторых, дать читателям элементарные навыки в шифровании и терминологии данной отрасли прикладных знаний.
С одной стороны, эти криптоалгоритмы не представляют ничего серьезного, и не подпадая даже под классификацию по стойкости (другими словами стойкость их по 10-ти балльной шкале нулевая), применение их не требует "лицензирования" спецслужб. Эти шифры не вызовут у последних ничего, кроме улыбки. В двенадцать лет я вскрывал подобные шифры за пару часов "на бумажке" методом частотной селекции. Это дань уважения "седой древности", и упражнение для ума. Процитирую "Философские опыты" Монтеня: "Невежество бывает двоякого рода: одно, безграмотное, предшествует науке; другое, чванное, следует за нею".
С другой стороны, до меня дошли сведения, что подобные шифры начали всерьез преподавать в БГУ, и даже проводить их криптоанализ!

Предисловие

Криптоалгоритмы изложенные в статье являются шифрами простой (однозначной) замены. Шифром замены (подстановки) называется криптографическое преобразование, при котором символы исходного текста, заменяются на символы шифротекста по какому-либо закону криптографического преобразования, но позиции символов в шифротексте не изменяются Для примеров, в статье множество, на котором реализованы алгоритмы – это расширенная таблица ASCII (256 символов).
Последнее время стало модным говорить о битности шифров или размере ключа. Здесь (в криптоалгоритмах, описанных в статье), наличие ключа не предусмотрено. Криптостокость алгоритмов оценивается по числу операций, необходимых для вычисления ключа исходя из шифротекста и соответствующего открытого текста, "Верхняя граница оценки" (число возможных ключей), изложенных в статье алгоритмов, равна одному биту (шифры-то однозначной замены).

Шифр Атбаш

Обратимся к "бестселлеру всех времен и народов". Есть место в Библии содержащее пример криптограммы. Книга пророка Иеремии глава 25, стих 26 содержит текст: "И всех царей севера, близких друг к другу и дальних, и все царства земные, которые - на лице земли, а царь Сессаха выпьет после них". Слово "Сессах" не является ни ошибкой, ни искажением библейского текста, хотя такого царя или царства в истории не существовало. Священные тексты древних иудеев шифровались шифром простой замены "атбаш". Алгоритм этого шифра прост: первая буква алфавита заменялась на последнюю, вторая – на предпоследнюю в алфавите и т.д. После дешифрации на языке оригинала (для успешной дешифрации необходимо знать язык сообщения) слова "Сессах", получается "Вавилон".
В завершение заметки исходный текст на С криптоалгоритма атбаш:
char* Atbash(char* toCode)
{
 for (int i = 0; toCode[i] != 0; i++)
  {
   toCode[i] = (256 - toCode[i]);
  }
 return toCode;
}
По смыслу алгоритма функция реализующая шифровку и зашифровку одна и та же.

Шифр Цезаря

Гай Юлий Цезарь, римский император, в то же время, известен как изобретатель (не могу сказать "разработчик") своего шифра, поручавшего Марку Туллию Цицерону и своим близким шифровать послания и использовать 50-буквенный алфавит.
Цитирую Гая Светония: "Существуют и его письма к Цицерону и письма к близким о домашних делах: в них, если нужно было сообщить что-нибудь негласно, он пользовался тайнописью, то есть менял буквы так, чтобы из них не складывалось ни одного слова. Чтобы разобрать и прочитать их, нужно читать всякий раз четвертую букву вместо первой, например, D вместо А и так далее".
Выражаясь современной терминологией, номер каждого символа при шифровании увеличивался на 3: А на D, B на E и т.д. Знаменитая фраза Цезаря VENI VIDI VICI (пришел, увидел, победил), посланная сенату после однодневной войны с Фарнаком, царем Понта, после зашифровки превратилось бы в SBKF SFAF SFZF. Для уточнения стоит отметить, что Гай Светоний ошибался, давая этому методу название тайнописи. Тайнопись - это сокрытие самого факта передачи сообщения, изложенное Светонием называется, в современной терминологии, шифром однозначной замены.
Криптоалгоритм будет реализован на ASCII-таблице. Для корректной реализации шифра еще потребуется нормализация, проводимая для того, чтобы множества совпадали и, естественно, размеры множеств открытого и шифротекста были равны (т.н. гомоморфизм). Для этого делается следующее: если сумма текущего номера и тройки выходит за пределы алфавита (размера множества разрешенных символов), то отсчет букв начинается сначала.
Исходный текст на С криптоалгоритма Цезаря:
// смещение по алфавиту
const int N = 3; 

char* Encipher(char* toCode)
{
 for(int i=0; toCode[i] != 0; i++)
  {
   int tmp;
   tmp = (toCode[i] + N);
   // нормализация
   if (tmp >= 256) tmp -= 256;
   toCode[i] = tmp;
  }
 return toCode;
}

char* Decipher(char* toDecode)
{
 for(int i = 0; toDecode[i] != 0; i++)
  {
   int tmp;
   tmp = (toDecode[i] - N);
   // нормализация
   if (tmp < 0) tmp += 256; 
   toDecode[i] = tmp;
  }
 return toDecode;
}
Black Prince

Publications Top Page Projects