Скитала

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Скитала

В криптографии скитала (или сцитала от греческого σκυτάλη, жезл), известный также как шифр Древней Спарты, представляет собой прибор, используемый для осуществления перестановочного шифрования, состоит из цилиндра и узкой полоски пергамента, обматывавшейся вокруг него по спирали, на которой писалось сообщение. Античные греки и спартанцы в частности, использовали этот шифр для связи во время военных кампаний.

Шифрование[править | править вики-текст]

Шифруемый текст писался на пергаментной ленте по длине палочки, после того как длина палочки оказывалась исчерпанной, она поворачивалась и текст писался далее, пока либо не заканчивался текст, либо не исписывалась вся пергаментная лента. В последнем случае использовался очередной кусок пергаментной ленты. Дешифровка выполнялась с использованием палочки такого же диаметра.

Таким образом, длина блока n определялась длиной и диаметром палочки, а само шифрование заключалось в перестановке символов исходного текста в соответствии с длиной окружности палочки. Например, используя палочку, по длине окружности которой помещается 4 символа, а длина палочки позволяет записать 6 символов, исходный текст: «это шифр древней спарты» превратится в шифрограмму: «эфвптрнаодершрйтиесы».

Схематически это можно изобразить так:

_________________________________________
    |  |   |   |   |   |   |
    |  | Э | Т | О | Ш | И |  
    |__| Ф | Р | Д | Р | Е |__ 
       | В | Н | Е | Й | С |  |
       | П | А | Р | Т | Ы |  |
       |   |   |   |   |   |  |
_________________________________________

Таким образом, после разматывания ленты, шифротекст будет следующим «ЭФВПТРНАОДЕРШРЙТИЕСЫ». Как видно из примера получается таблица, у которой ксть два параметра: n -- количество столбцов, m --количество строчек. Поскольку при регелярном обмене данными, сообщения часто имеют разную длину, то оба этих параметра за неизменяющийся ключ взять неудобно. Поэтому обычно в качестве известного каждой стороне ключа выбирается один из них(часто это m), а воторой вычисляется на основе известного и длины сообщения:

n = [(k-1)/m]+1, где [x] - целая часть

Алгоритм шифрования[править | править вики-текст]

Теперь в данных обозначениях алгоритм шифрования выглядит так:

   1. Первые n символов выписываются в первую строку слева направо(в примере выше: ЭТОШИ).
   2. Следующие n символов выписываем во вторую строчку пока ее не заполним и т.д.
   3. Если все символы выписаны, а остались незаполненные ячейки, заполняем их пробелами или любыми другими
   символами по договоренности(например для сообщения "НАС АТАКУЮТ" мы получаем таблицу(см. ниже), где n = 4,m = 3 
   и звездочка стоит на месте недостающего символа).
   4. Если выписаны не все символы, а таблица заполнена, значит, при выборе размеров допущена ошибка.
   5. Теперь разворачиваем текст по столбцам(НАУАТЮСАТ_К* -- в примере ниже).
_________________________________________
    |  |   |   |   |   |
    |__| Н | А | С |__ |__  
       | А | Т | А | К |  |
       | У | Ю | Т | * |  |
 _________________________________________

Дешифровка[править | править вики-текст]

Для расшифровки адресат использовал палочку такого же диаметра, на которую он наматывал пергамент, чтобы прочитать сообщение. Преимущество шифра скитала состоит в простоте и отсутствии ошибок — очень важное качество на поле боя. Однако такой шифр может быть легко взломан. Например, метод взлома скиталы был предложен Эдгаром Алланом По в своей работе "A Few Words on Secret Writing"[1]. Метод состоит в том, что не зная точного диаметра палочки, можно использовать конус, имеющий переменный диаметр и перемещать пергамент с сообщением по его длине до тех пор, пока текст не начнёт читаться — таким образом дешифруется диаметр скиталы.

Предыдущий метод несколько сложен в реализации и с ним не справится неподготовленный человек. Но есть еще один способ дешифровать такое сообщение. Для этого нужен циркуль либо если его нет под рукой, то подойдет палочка поломанная посередине(или любой другой аналог). Затем мы ставим один расствор на первую букву, другой на 5 или 6. Далее делая циркулкм окружности мы выбираем слудующую букву и пытаемся прочитать текст. Если буквы не скаладываются в понятные слова, то делаем раствор больше или меньше.[2]

Алгоритм дешифровки[править | править вики-текст]

Скажем у нас есть зашифрованный текст:

РНОАЫЙКЕСЕ_КТВА

Применялся шифр скитала с количеством строк 3, столбцов 5(т.е m = 3,n = 5). Мы знаем, что при шифровании считывание весь по столбцам, а в каждой столбце было по 3 символа.

   1. Разобьем наш зашифрованный текст по m букв, учитывая пробелы(РНО АЫЙ КЕС Е_К ТВА).
   2. Сначала восстановим первый столбец, для этого первую группу букв запишем в первый столбец сверху вниз.
_________________________________________
    |  | Р | * | * | * | * |
    |__| Н | * | * | * | * |__ 
       | О | * | * | * | * |  |
_________________________________________
   3.По следующим m символам восстановим второй столбец.
_________________________________________
    |  | Р | А | * | * | * |
    |__| Н | Ы | * | * | * |__ 
       | О | Й | * | * | * |  |
_________________________________________
   4. После восстановления всех столбцов, можно будет прочитать текст -- РАКЕТНЫЕ ВОЙСКА.
_________________________________________
    |  | Р | А | К | Е | Т |
    |__| Н | Ы | Е | _ | В |__ 
       | О | Й | С | К | А |  |
_________________________________________

История[править | править вики-текст]

Считается, что скитала - это устройство, которое было изобретено спартанцами в 3 веке до н. э. для шифрования сообщений. Но если детальнее проанализировать более ранние исторические документы, то окажется, что слово «скитала» долгое время имело противоположное значение и даже возможно другое происхождение.

Архилох — древнегреческий сатирический поэт

Согласно Томасу Келли самое первое известное упоминание этого слова в письменном источнике датируется 650 гг до н. э. и принадлежит греческому поэту Архилоху. Сохранилось всего несколько строк, из которых можно сделать вывод, что слово «скитала» употребляется либо в значении письменного сообщения, обмотанного вокруг палки для удобства транспортировки, либо вообще не имеет отношения к рукописному посланию[3].

«Я хочу рассказать вам сказку, ваше благородие, но это будет грустное повествование.» (в данном случае слово «повествование» можно заменить на слово «сообщение» или «история», которые были написаны на скитале)

Следующее упоминание встречается 175 лет спустя у греческого автора[4]. Здесь скитала используется для передачи поэмы одним человеком другому, для которого она была написана. Скорее всего текст был незашифрованным, потому как на то нет видимых причин. Значит мы снова встречаем использование этого устройства не в криптографических целях.

«…скитала — надежный способ передать мысли светловолосых муз…» (имеется ввиду, что эта поэма была написана под влиянием музы автора, которая и вдохновляла его на создание этого произведения)

Далее идут упоминания датированные концом 5 — началом 4 вв. до н. э. Этот термин упоминается в пьесах, написанных поэтами Аристофаном («Птицы», поставленная в 414 г. д.н.э; и «Лисистрата», в 411 г. д.н.э) и Никофоном («Рождение Афродиты»). Тогда Афины и Спарта врождовали между собой в Полопонесской войне(431—404 гг. д.н. э.) и зашифрованные сообщения были как нельзя кстати. Но нет ни одного варианта использования скиталы для этих целей. Например в пьесе "Птицы" автор сетует на то, что афиняне стали подрожать спаратанцам в использовании скитал. Но если бы это устройство использовали для зашифровки сообщений, спартанцы вряд ли стали бы показывать его своим врагам. В случае второго автора остался лишь маленький фрагмент его пьесы, по которому трудно определить точное значение этого термина, но можно с точностью сказать, что оно не имеет никакого отношения к зашифрованному тексту[5].

Фукидид -- крупнейший древнегреческий историк, автор «Истории Пелопоннесской войны»
Ксенофонт -- древнегреческийписатель и историк

Двое современиков Аристофена и Никофона греческие историки Ксенофон и Фукидит описали период времени, который охватывает 70 лет с Пелопоннесской войны до 362 г. до н. э. Это был период, когда Спарта принимала участие во всех делах и конфликтах от Сицилиии до Малой Азии. Однозначно в этот преиод как никогда раньше требовалось средство сообщения между командирами, находящимися за пределами государства, и их домом. Оба историка приводят многичесленные примеры такого общения и не раз упоминают слово «скитала» применительно к ним, но нет ни одного упоминания об использовании этого устройства в криптографических целях. В «Истории Пелопоннесской войны» Фукудита можно найти 10 отсылок к такому роду коммуникации. В четырех случаях приказы передавались по средствам писем[6], а еще в пяти в устной форме. В десятом примере нам говорится, что скитала была отправлена из Спарты к члену совета Павзанию, который находился заграницей по неофициальному частному делу. Известно также, что Повзаний ответил на это послание. Из этого можно заключить, что у него либо была возможность(ключ), чтобы прочитать скиталу, либо сообщение было не зашифрованным. Но так как из прямых упоминаний Ксенофона не вызывает сомнений, что миссия Повзания ни как не была связана с государственными делами, то нет никакой причины утверждать, что у него была вторая половина деревянного цилиндра, необходимая для расшифровки сообщения. Т.о. мы приходим к выводу, что нельзя считать, что скитала использовалась в криптографических целях, даже если это нарушает гармонию с определением этого устройства, данного полвека позже. Тем не менее, можно заключить, что для самого Фукидида «скитала» означала просто открытый текст без какого-либо кодирования.

В «Истории Греции» Ксенофона упоминается 18 коммуникаций между командирами вне города и правителями Спараты. В 11 случаях невозможно определить как были переданы сообщения, еще в 6 явсно указано, приказы доставлялись устно. В 18 примере говорится, что сообщение было написано и содержало следующие строки:

«Корабли ушли. Миндарус мертв; люди голодают; мы не знаем, что делать»

Также известно, что это сообщение никогда не достигло Спарты, его перехватили Афиняне и смогли прочитать. Нет прямого указания, как было передано сообщение — было ли оно открытым текстом или зашифрованным, но легко взломанным из-за ненадежности скиталы.

Впревые Ксенофон использует термин «скитала» в отношении событий 397 г. до н. э. В этом году спартанские чиновники узнали, что некто Цинадон решил устроить переворот и захватить власть. В свою очередь они решили схватить его и раскрыть имена его поддельников, как можно более не привлекая внимания. Для этого они решили послать его в Авлон, под предлогом привезти оттуда людей, чьи имена написаны на скитале, переданной ему. Единственное чего не знал Цинадон, так это то, что его сопровождающие были проинструктированы схватить его как только они окажутся за городом(внутри города это было тяжело сделать, потому что он имел много союзников и не обошлось бы без кровопролития). Скорее всего текст в скитале был не зашифрован, да и вряд ли это была настоящая скитала, используемая правительством, потому что чиновники не доверили бы ее человеку, которого они подозревали в заговоре. В еще двух случаях, Ксенофон использует этот термин в значении «сообщение».

В 383 г до н. э. отношения между Спартой и Фивами сильно ухудшились и последнии отправили в Спарту посла, чтобы сгладить разногласия:

«a brief message[skytale] from you will suffice to secure from that quarter[фивоняне] all the support you may disare…». [7]

Как видно из сообщения Фивы предлагают любую посильную поддержку спартанцем. Хочется отметить, что сообщение было переданно устно, а значит посол скорее всего держал в голове открытый текст. И обратно, спартанцы не зашифровывали ответ, потому что фивоняне не смогли бы его расшифровать.

Через несколь лет Спарта послала армию на северную Грецию под командованием Телевтия. В то же время Спарта рассылала предложения присоединиться к этой армии всем союзным государствам[8]:

«transmitted official dispatches[skytales] to the various allied states directing them to follow Teleutiuas in accordance with resolution og the allies.»

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

К моменту смерти Ксенофона в 355 г. до н. э. Спарта достигла своего зенита и больше никогда не играла сколько-нибудь важной роли в делах Греции. В 350-х гг. До н. э. стратег Эней написал трактат «О перенесении осад», где 12 % текста посвящены обсуждению стеганографии и криптографии. Этот труд называют первой инструкцией по зашифровыванию сообщений. Но в нем нет никаких упоминаний о скитале, что говорит нам, что автор не причисляет это устройство к тем, которые использовались спратанцами для шифрования сообщений.

Этот термин также появляется и у другого историка написавшего мировую историю, которая охватывает события происходящие не только в Спарте. Этого историка звали Эфор(примерно 400—330 гг. До н. э.), но его труды не сохранились до наших дней. Зато сохранились работы Диодора Сицилийского(писал 60 — 30 гг до н. э.), который ссылался на первого. Диодор испльзует один раз слово «скитала», второй раз «skytalide»(маленькая скитала). Во второй из трех войн, которую Спарта вела со своими соседями-мессинцами, спартанцы брали с собой в бой свои имена, которые они писали на скиталах и закрепляли на рукавах. Это было сделано для того, что бы можно было легко опознать тело после смерти. Конечно, существует немало сомнений, в том, что это имело место, но так или иначе шифровать свои имена не было смысла[9].

Аристотель -- древнегреческий философ
Теофраст -- древнегреческий философ, естествоиспытатель, теоретик музыки

В 405 г.до н. э. спартанцы выйграли битву у афинян у Эгоспотамы, чем перевернули ход Пелопоннесской войны. После победы, спартанский командир Лизандр отправил в Спарту как трофей 1500 слитков серебра в небольших мешках. За погрузку и транспортировку отвечал некий Гиллипус, который во время путешествия подворовал по несколько слитков из каждого мешка. Он не знал, что подозрительный командир положил в каждый мешок скиталу, на которой указывалось сколько слитков в данном мешке. Конечно, по приезде его в пункт назначения кража сразу была обнаружена. Но встает вопрос, использовалась ли скитала как шифр? Думаю, что ответ нет. Всего было 853 мешка, а это значит, что должно было быть 853 скиталы, чтобы зашифровать и расшифровать сообщение. К тому же говорится, что вор не знал о существовании этих скитал вообще, поэтому скорее всего это очередное указание на непричастность скиталы к криптографии.

Алесандр Македонский -- полководец, создатель мировой державы

Есть мнение, что Аристотель первым придумал способ расшифровать сообщение, закадированное с помощью сикталы. Но если проанализировать источники, то оказывается, что существуют только косвенные указания на использование этого термина в трудах знаменитого философа. Несмотря на то, что большинство его работ утеряно, византийский ученый Фотий (примерно 810—893 гг.) говорит, что Аристотель упоминал скиталу в «Политии Итаки». Он пишет, что скитала использовалась растовщиками в древней Спарте. Ростовщик держал одну скиталу с условиями контракта у себя, а вторая оставалась у человека, который заключил с ним этот договор. Удобность такого хранения остается под вопросом(можно предположить, что по размеру палочки устанавливалась принадлежность двух половинок договора), но точно этот текст был не зашифрован. Также мы находим следы скиталы и в трудах самого известного ученика Аристотеля Теофраста. Он говорит, что это устройство использовалось в судебных процессах, чтобы избежать несправедливого отношения к подсудимым. Это упоминание было настолько мимолетным, что довольно трудно восстановить картину, но из нее понятно, что записи людей хранились как открытый текст[10].

Александрийская библиотека в представлении художника XIX века

Во время жизни Теофраста мир сильно изменился. Александр Македонский расширил владения и влияние Греции от Египта до Афганистана. В те времена Аполлоний Родосский (середина 3го века до н. э.) был директором извесной библиотеке Александрии и стал первым античным писателем, который полагал, что скитала использовалась в древней Спарте в качестве криптографического устройства. Достоверно не известно на основе чего он сделал такой вывод, но это определение получило всеобщее признание.

Немного позже был написан еще один трактат «О пресловутой палке для посланий» грамматика Аристофана Византийского (примерно 257—180 гг. До н. э.), который является одним из самым ученых людей того времени и на тот момент директором Александрийской библиотеки[11]. Рукопись не сохранилась, но было бы странно, что он решил написать про то, что уже изложил его предшественик. Некоторые ученые предполагают, что скорее всего это был труд, в котором Аристофан выражал свое несогласие с мнением Аполлония. Но не в зависисмости от его мнения, эта точка зрения не получила широкого распространения и дальннейшие упоминания уже подразумевают под собой именно шифрующее устройство.

Описание её работы приводится у Плутарха (50-120 до н. э.):

А скитала вот что такое. Отправляя к месту службы начальника флота или сухопутного войска, эфоры берут две круглые палки совершенно одинаковой длины и толщины. Одну они оставляют себе, другую передают отъезжающему. Эти палки и называют скиталами. Когда эфорам нужно сообщить какую-нибудь важную тайну, они вырезают длинную и узкую, вроде ремня, полосу папируса, наматывают её на свою скиталу, не оставляя на ней ни одного промежутка, так чтобы вся поверхность палки была охвачена этой полосой. Затем, оставляя папирус на скитале в том виде, как он есть, они пишут на нем то, что нужно, а написав, снимают полосу и без палки отправляют ее военачальнику. Так как буквы на ней стоят без всякой связи, но разбросаны в беспорядке, прочитать написанное он может, только взяв свою скиталу и намотав на нее вырезанную полосу, располагая ее извивы в прежнем порядке, чтобы, водя глазами вокруг палки и переходя от предыдущего к последующему, иметь перед собой связное сообщение. Полоса папируса называется, как и деревянная палка, «скиталой», подобно тому как измеряемый предмет называется по мере.
— Плутарх, Сравнительные жизнеописания (Лисандр), пер. М. Е. Сергеенко.

Реализация[править | править вики-текст]

%% Алгоритм шифрования на языке С++
%% В данном случае мы исключаем пробелы, так сложнее восстановить текст(как в первом примере)
using System;
using System.Collections.Generic;
using System.Text;
 
namespace skitala
{
    class Program
    {
        static void Main(string[] args)
        {
            //This is our message
            string skiText = "это шифр древней спарты";
            int stolbci = 0, count = 0;
            //Create massive of strings from words without spaces
            string[] mass = skiText.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            skiText = null;
            //Transform words into massive of letters
            foreach (string r in mass)
                skiText += r;
            char[] rezArray = new char[skiText.Length];
            //Determine how many columns
            for (int i = 1; i < skiText.Length; i++)
            {
                if (skiText.Length / i == 4)//4 [key] - how letters in one column(it is our desire)
                {
                    stolbci = i;
                    break;
                }
            }
            for (int i = 0; i < stolbci; i++)
            {
                int plus = i;
 
                {
                    //Create new result array
                    //Chose through interval == stolbci  
                    for (int j = 0; j < 4; j++)
                    {
                        rezArray[count] += skiText[plus];
                        plus += stolbci;
                        count++;
                    }
                }
            }
            //Print this array
            for (int i = 0; i < rezArray.Length; i++)
                Console.Write(rezArray[i]);
            Console.WriteLine();
        }
    }
}
%% Алгоритм шифрования на языке Python
%% В этом примере мы оставляем пробелы(другой подход)
skiText = "this is cipher of ancient Sparta"
k = len(skiText)#length of the message
m = 8 #How many lines(it is key)
n = ((k-1)// m) + 1 #How much colums
list = []
sublist = []
for j in range(n):
	for i in range (m):
		sublist += skiText[n * i + j]
	list += sublist
	sublist = []
print (list)
%% Алгоритм дешифрования на языке Python
%% В этом примере мы оставляем пробелы(другой подход)
skiText = "T_cefctahihr_i_risi_aeSts_ponnpa"
k = len(skiText)#length of the message
m = 8 #How many lines(it is key)
n = ((k-1)// m) + 1 #How much colums
list = []
sublist = []
for i in range (m):
	for j in range(n):
		sublist += skiText[m * j + i]	
	list += sublist
	sublist = []
print (list)
%% Алгоритм шифрования на языке Си
%% Наверно самый простой способ реализации, через двумерные массивы.
#include <stdio.h>
#include <string.h>
 
#define m 8//Key
 
int main()
{
const char* skyText = "This is chiper of ancient Sparta";
int k,n,i,column,line;
k = strlen(skyText);
n = (k - 1)/ m + 1;
char skyTale[m][n];
column = 0;
line = 0;
//Full massive
for(i = 0; i < k; i++)
{
    if (column == n)
    {
        column = 0;
        line++;
    }
    skyTale[line][column] = skyText[i];
    column++;
}
for(column = 0; column < n; column++)
{
    for(line = 0; line < m;line++)
    {
        printf("%c", skyTale[line][column]);
    }
}
printf("\n");
return 0;
}
%% Алгоритм дешифрования на языке Си
%% Наверно самый простой способ реализации, через двумерные массивы.
#include <stdio.h>
#include <string.h>
 
#define m 8
 
int main()
{
const char* skyText = "T_cefctahihr_i_risi_aeSts_ponnpa";
int k,n,i,column,line;
k = strlen(skyText);
n = (k - 1)/ m + 1;
char skyTale[m][n];
column = 0;
line = 0;
for(i = 0; i < k; i++)
{
    if (line == m)
    {
        line = 0;
        column++;
    }
    skyTale[line][column] = skyText[i];
    line++;
}
for(line = 0; line < m;line++)
{
    for(column = 0; column < n; column++)
    {
        printf("%c", skyTale[line][column]);
    }
}
printf("\n");
return 0;
}

Аналоги шифра "скитала"[править | править вики-текст]

Во многом похож на шифр скитала метод простых шифрующих таблиц. По сути это применение нашего шифра несколько раз к одному сообщению, предварительно разбив его на блоки. Так же отличие заключается еще и в том, что ключем в данном случае будет выступать пара размеров, а не один как в нашем случае. Конечно эта модификация надежнее, потому что злоумышленику будут неизвестны уже три параметра: размеры таблица и количество блоков , на которые был поделен текст. Также из перестановочных шифров похожи еще метод маршрутных перестановок и метод магических квадратов.[12]

Современное использование[править | править вики-текст]

Американская ассоциация криптограммы выбрала скиталу как свой символ.

Ссылки[править | править вики-текст]

  • Thomas Kelly, The myth of the skytale, Cryptologia, July 1998, pp. 244—260.
  • Secret Language in Graeco-Roman antiquity. Thesis by Brigitte Collard that includes quotations of many ancient references to the scytale. (In French)
    • Edgar Allan Po A Few Words on Secret Writing. — С. first two paragrafe.
    • Telecar. Система шифрования "Скитала" - миф и профанация. (15 ьфя 2013).
    • The translation is that of John M. Edmonds Greek Elegy and Iambus 2 / William Heinemann Ltd and Cambridge, Mass.. — London: Harvard University Press, 1961. — С. 145.
    • The translation is that of John E. Sandays Pindar / William Heinemann Ltd and Cambridge, Mass. — London: Harvard University Press, 1961. — С. 64-65.
    • Thomas Kelly The myth of the skytale. — July 1998. — С. pp. 244—260.
    • Xenophon Hellenica. — Harvard University Press. — London, 1968.
    • Thomas Kelly The myth of the skytale. — July 1998. — С. pp. 244—260.
    • Thomas Kelly The myth of the skytale. — July 1998. — С. pp. 244—260.
    • Diodorus Siculus, translated by C.H. Oldfather The Historian Ephorus. — London: Cambridge University Press, 1935. — С. pp. 118,133,145.
    • The translationb is that of J.J.Keaney Theophrastus on Greek Judical Procedure / American Philological Association. — 1974. — С. pp. 179-194.
    • Thomas Kelly The myth of the skytale. — July 1998. — С. pp. 254.
    • Исканцев Н.В. Шифр Скитала (2012).