Развитие шифров исторически шло одновременно с развитием письменности. В первую очередь они нужны были правителям, прибегавших к услугам лазутчиков, дипломатам, состоявшим у них на службе, служителям культа, стремившихся ограничить доступ непосвященных к эзотерическим религиозным секретам, а также криминальному миру, стремившемуся уже на заре человечества, соблюдать скрытность и хранить в тайне преступные замыслы.
Цель данного цикла статей: во-первых, совершить исторический экскурс в криптографию, во-вторых, дать читателям элементарные навыки в шифровании и терминологии данной отрасли прикладных знаний. |
С одной стороны, эти криптоалгоритмы не представляют ничего серьезного, и не подпадая даже под классификацию по стойкости (другими словами стойкость их по 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 |