ROT13

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Алгоритм ROT13 заменяет каждую букву на парную ей из второй половины латинского алфавита, образовывая два набора по тринадцать символов. Например, HELLO становится URYYB (или, наоборот, URYYB переводится в HELLO повторным действием алгоритма).

ROT13 (англ. rotate; «сдвинуть на 13 позиций», иногда используется написание через дефис — ROT-13) представляет собой шифр подстановки простой заменой, используемый в интернет-форумах, как средство для сокрытия спойлеров, основных мыслей, решений загадок и оскорбительных материалов от случайного взгляда. ROT13 был охарактеризован как «сетевой эквивалент того, как в журналах печатают ответы на вопросы викторин — перевёрнутыми буквами»[1]. ROT13 — это вариация шифра Цезаря, разработанного ещё в Древнем Риме.

ROT13 является обратным алгоритмом, то есть отменить ROT13 можно, применив тот же алгоритм; одни и те же действия могут быть использованы для кодирования и декодирования. Алгоритм не дает никакой реальной криптографической безопасности и никогда не должен использоваться для этого. Он часто приводится в качестве канонического примера слабого метода шифрования. Алгоритм ROT13 породил разнообразные он-лайн игры с буквами и словами; алгоритм часто применяется в новостных форумах.

Описание[править | править вики-текст]

Применение алгоритма ROT13 к части текста требует простой замены каждого буквенного символа на соответствующий ему со сдвигом на 13 позиций в алфавите[2]. A становится N, B становится O, и т. д. до М, которое становится Z, а затем последовательно применяются буквы из начала алфавита: N становится A, O становится B, и так далее до Z, которая становится М. Затронуты лишь те буквы, которые используются в английском алфавите; цифры, символы, пробелы и все остальные символы остаются без изменений. Поскольку в английском алфавите всего 26 букв, а 26 = 2 × 13, то функция ROT13 является обратной для самой себя[2]:

\mbox{ROT}_{13}(\mbox{ROT}_{13}(x))=\mbox{ROT}_{26}(x)=x для любого текста x.

Иными словами, два последовательных использования ROT13 восстанавливают первоначальный текст (в математике это иногда называют инволюцией; в криптографии — взаимные шифры).


Преобразования можно сделать с помощью таблицы поиска, такие как:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

Например, в следующей шутке основная мысль была закрыта шифром ROT13:

How can you tell an extrovert from an
introvert at NSA? Va gur ryringbef,
gur rkgebireg ybbxf ng gur BGURE thl'f fubrf. 

Преобразование текста через шифр ROT13, ответ на шутку:

Ubj pna lbh gryy na rkgebireg sebz na
vagebireg ng AFN? In the elevators,
the extrovert looks at the OTHER guy's shoes.

Повторное применение алгоритма ROT13 восстановит оригинал.

Применение[править | править вики-текст]

ROT13 использовался в новостном форуме net.jokes в начале 1980-х[3]. Он использовался, чтобы скрыть потенциально оскорбительные шутки или ответ на головоломку или спойлер. Сдвиг на тринадцать знаков был выбран по сравнению с другими значениями, такими как три, как в оригинале шифра Цезаря, потому что тринадцать это число, которое обеспечивает как кодирование, так и декодирование, тем самым предоставляя единое удобство для обеих команд[2][4]. ROT13, как правило, поддерживается в качестве встроенной функции в функциях программного обеспечения для чтения лент новостей[4]. Адреса электронной почты также иногда кодируют алгоритмом ROT13, чтобы скрыть их от не самых продвинутых спам-ботов.

ROT13 представляет собой частный случай алгоритма шифрования, известного как шифр Цезаря, приписываемый Юлию Цезарю в I веке до нашей эры[5]. Более специфичный случай использования шифрования — индийским философом Ватсьяяна Малланага, автором секс-руководства Кама Сутра.


ROT13 не предназначен для использования с конфиденциальной информацией; использование постоянного сдвига означает, что шифрование фактически не имеет ключа и для расшифровки требуется не больше знаний, чем тот факт, что может использоваться ROT13. Даже без этих знаний, алгоритм легко дешифруется посредством частотного анализа[2]. Поскольку он полностью несоответствует реальной защите тайны, ROT13 стал жаргонным словом для обозначения какой-либо явно слабой схемы шифрования; критика может утверждать, что «56-битный DES это немного лучше, чем ROT13 в прошлом». Кроме того, часто используется сходство с реальными выражениями, например, «double DES», используют с чувством юмора «double ROT13», «ROT26» или «2ROT13», в том числе в пародийной академической работе «On the 2ROT13 Encryption Algorithm»[6].

Применив алгоритм ROT13 к уже ROT13-зашифрованному тексту, получим первоначальный текст; ROT26 — эквивалент отсутствия шифрования как такового. В дополнение, тройное применение ROT13 или 3ROT13 (используется по шутливой аналогии с 3DES) эквивалентно обычному ROT13.

В декабре 1999 года было установлено, что Netscape Communicator использовал RОТ-13 в рамках небезопасной схемы для хранения паролей электронной почты[7]. В 2001 году русский программист Дмитрий Скляров продемонстрировал, что поставщик eBook, компания New Paradigm Research Group (NPRG), использовала ROT13 для шифрования своих документов; предположительно, что в NPRG ошибочно применили ROT13 в игрушке, для примера предоставляемой Adobe с инструментарием Software Development Kit для eBook для серьёзного шифрования[8] Windows XP использует ROT13 для некоторых ключей своего реестра[9].

Игры с буквами и «сетевая» культура[править | править вики-текст]

abcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLM
ahanun antnag
balkonyx barone
barfones beor
binova ebbsroof
envyrail erre
errsreef flapsync
furshe geltry
gnattang irkvex
clerkpyrex purelycheryl
PNGcat SHAfun
furbysheol terragreen
whatJung URLhey
purpuraChechen shoneFUBAR

ROT13 предоставляет возможность для «игр в слова». Некоторые слова, трансформированные алгоритмом ROT13, производят другое известное слово. Самые длинные примеры из английского языка состоят из семи букв: «abjurer» (отрекающийся от своих убеждений) ↔ «nowhere» (нигде) и «Chechen» (чеченец) ↔ «purpura» (пурпура). Другие примеры слов приведены в таблице[10].

В 1989 году ассоциация International Obfuscated C Code Contest (IOCCC) добавила нотацию Brian Westley. Компьютерная программа Westley может корректно компилировать как простые, так и кодированные алгоритмом ROT13 исходники. Программа действует либо для выполнения кодировки ROT13, либо для обратного кодирования закодированного введённого текста[11].

В группе новостей alt.folklore.urban придумали слово «furrfu», что является закодированным в ROT13 часто используемым словом «sheesh» (тьфу!). «Furrfu» активно использовался в середине 1992 года в ответ на часто публикующиеся повторения городских мифов на сайте alt.folklore.urban, на что многие жаловались, что такие ответы на публикации новичков были чрезмерностью[12].

В веб-комиксах «Darths and Droids»[13] один герой (Jim, играет Квай-Гон Джинн) утверждает, что в ROT13 слово «Jedi» (джедай) кодируется как «monk» (монах). Другой герой (Pete, играет робота R2-D2) немедленно корректирует его, отмечая, что «monk» в ROT13 соответствует «Zbax».

Варианты алгоритма[править | править вики-текст]

ROT47 является производным от алгоритма ROT13, в дополнение к основному набору букв, также использует числа и вспомогательные символы. Вместо использования алфавитной последовательности A–Z, ROT47 использует больший набор символов, известный как кодировка ASCII. В частности, 7-битные символы для печати, за исключением пробела, от десятичного 33-го символа '!' до 126-го символа '~' — 94 символа в общей сложности, принятых в порядке числовых значений их кодов ASCII, способны смещаться на 47 позиций без специальных договорённостей. Например, символ A отображается на p, символ a отображается на 2. Использование большего алфавита производит более тщательную обфускацию, чем у ROT13, например, неочевидно, что Z`\c`d\gbh\eggd — это закодированный телефонный номер +1-415-839-6885. С другой стороны, поскольку ROT47 вводит цифры и символы в смеси без каких-либо различий, является более очевидным, что текст был зашифрован.


Пример:

The Quick Brown Fox Jumps Over The Lazy Dog.

шифруется в

%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8]

Библиотека GNU C, набор стандартных процедур для использования в компьютерных программ, содержит функцию memfrob() [14], которая имеет цели, аналогичные ROT13, хотя она предназначена для использования с произвольными бинарными данными. Эта функция работает оперируя с каждым байтом в сочетании с двоичной схемой 00101010 (число 42) с использованием операции исключающего ИЛИ (XOR). Это работает как простой XOR-шифр. Как и ROT13, memfrob() взаимнообратна, и предоставляет аналогичный, практически отсутствующий, уровень безопасности.

Примеры[править | править вики-текст]

На языке программирования Python алгоритм выглядит следующим образом:

def rot13(text): 
    rot13ed = ''
    for letter in text:
        byte = ord(letter)
        capital = (byte & 32) 
        byte &= ~capital
        if ord('A') <= byte <= ord('Z'):
            byte -= ord('A')
            byte += 13
            byte %= 26
            byte += ord('A')
        byte |= capital
        rot13ed += chr(byte)
    return rot13ed

Оптимизированный вариант:

def rot13(text):
    sub = 'NOPQRSTUVWXYZABCDEFGHIJKLM[\]^_`nopqrstuvwxyzabcdefghijklm'
    res = []
    for letter in text:
        res.append(sub[ord(letter)-65])
    return ''.join(res)

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Horrocks, Bruce UCSM Cabal Circular #207-a. Usenet group uk.comp.sys.mac (Message ID UZ36hgCSoh$+EwqG@nodomain.nodomain.us) (28 June 2003). Проверено 17 сентября 2007.
  2. 1 2 3 4 Schneier Bruce Applied Cryptography. — Second. — John Wiley & Sons, 1996. — P. 11. — ISBN 0-471-11709-9
  3. Early uses of ROT13 found in the Google USENET archive date back to 8 October 1982, posted to the net.jokes newsgroup [1][2]
  4. 1 2 Raymond, Eric S. (ed.) ROT13. The Jargon File, 4.4.7 (29 декабря 2003). Проверено 19 сентября 2007. Архивировано из первоисточника 8 июня 2012.
  5. Kahn David The odebreakers: The Story of Secret Writing. — New York: Macmillan. — ISBN 0-684-83130-9
  6. On the 2ROT13 Encryption Algorithm (PDF). Prüfziffernberechnung in der Praxis (25 сентября 2004). Проверено 20 сентября 2007. Архивировано из первоисточника 8 июня 2012.
  7. Hollebeek, Tim; Viega, John. Bad Cryptography in the Netscape Browser: A Case Study. Reliable Software Technologies. Проверено 20 сентября 2007. Архивировано из первоисточника 8 июня 2012.
  8. Perens, Bruce Dimitry Sklyarov: Enemy or friend?(недоступная ссылка — история). ZDNet News (1 сентября 2001). Проверено 20 сентября 2007. Архивировано из первоисточника 8 февраля 2009.
  9. Ferri, Vic The Count Keys in the Windows Registry. ABC: All 'Bout Computers (4 января 2007). Проверено 20 сентября 2007. Архивировано из первоисточника 8 июня 2012.
  10. De Mulder, Tom ROT13 Words. Furrfu!. Проверено 19 сентября 2007. Архивировано из первоисточника 8 июня 2012.
  11. Westley, Brian westley.c. IOCCC (1989). Проверено 13 августа 2007. Архивировано из первоисточника 8 июня 2012.
  12. Furrfu. Foldoc (25 октября 1995). Проверено 13 августа 2007. Архивировано из первоисточника 8 июня 2012.
  13. irregularwebcomic.net
  14. 5.10 Trivial Encryption. The GNU C Library Reference Manual. Free Software Foundation (3 декабря 2006). Проверено 20 сентября 2007. Архивировано из первоисточника 8 июня 2012.

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