Шифр ВИК - VIC cipher

Блок-схема VIC Cipher

Шифра VIC был карандаш и бумага шифр используется советский шпион Реиным Хейхан , под кодовым названием «ВИКТОР».

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

Когда он был впервые обнаружен, возможно, это был самый сложный шифр с ручным управлением, который когда-либо видели. Первоначальный анализ, проведенный Американским агентством национальной безопасности (АНБ) в 1953 году, не привел к окончательному выводу о том, что это был ручной шифр, но его размещение в выдолбленной монете достоинством 5 центов предполагало, что его можно расшифровать с помощью карандаша и бумаги. Шифр VIC оставался неповрежденным до тех пор, пока не стала доступна дополнительная информация о его структуре.

Хотя сообщения, безусловно, не такие сложные и безопасные, как современные компьютерные поточные шифры или блочные шифры , на практике сообщения, защищенные им, сопротивлялись всем попыткам криптоанализа , по крайней мере, со стороны АНБ с момента их открытия в 1953 году до бегства Хейханена в 1957 году.

Революционный скачок

Шифр VIC можно рассматривать как вершину эволюции семейства шифров нигилизма .

Шифр VIC имеет несколько важных интегрированных компонентов, в том числе сложение цепочки по модулю 10 , генератор Фибоначчи с задержкой (рекурсивная формула, используемая для генерации последовательности псевдослучайных цифр ), шахматную доску с двух сторон и нарушенную двойную транспозицию .

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

История

Во время Второй мировой войны несколько советских шпионских сетей связались с Московским центром с помощью двух шифров, которые, по сути, представляют собой эволюционные усовершенствования базового нигилистического шифра. Очень сильная версия была использована Максом Клаузеном в сети Рихарда Зорге в Японии и Александром Футом в шпионской сети Люси в Швейцарии . Несколько более слабая версия использовалась сетью Rote Kapelle .

В обеих версиях открытый текст сначала был преобразован в цифры с помощью шахматной доски, а не квадрата Полибия . Это имеет то преимущество, что немного сжимает открытый текст, тем самым увеличивая его уникальность, а также позволяет радистам быстрее завершать свои передачи и быстрее отключаться. Своевременное отключение снижает риск обнаружения оператора радиопеленгаторами противника . Увеличение расстояния уникальности увеличивает защиту от статистических атак.

Клаузен и Фут написали свой открытый текст на английском языке и запомнили 8 наиболее часто встречающихся букв английского языка (чтобы заполнить верхний ряд шахматной доски) через мнемоническую фразу «грех ошибаться» (отбрасывая второе «r»). Стандартная английская шахматная доска имеет 28 слотов для символов, и в этом шифре два дополнительных символа стали «точкой» и «сдвигом чисел». Числа отправлялись путем сдвига чисел, за которым следовали фактические цифры открытого текста в повторяющихся парах, за которыми следовало другое изменение. Затем, как и в базовом Nihilist, была добавлена ​​цифровая добавка, которая получила название «закрытие». Однако каждый раз использовалась другая добавка, поэтому, наконец, пришлось вставить скрытую «индикаторную группу», чтобы указать, какая добавка была использована.

В отличие от базового Nihilist, добавка была добавлена ​​путем сложения без переноса (добавление цифр по модулю 10), таким образом получая более однородный результат, который не пропускает столько информации. Что еще более важно, добавка создавалась не с помощью ключевого слова, а путем случайного выбора строк из альманахов промышленной статистики. Такие книги считались достаточно скучными, чтобы не вызывать подозрений, если агент был обыскан (особенно потому, что агенты прикрывались рассказами о бизнесменах), и имели такую ​​высокую плотность энтропии, чтобы обеспечивать очень надежную добавку. Конечно, цифры из такой книги на самом деле распределены неравномерно (существует избыток «0» и «1» (см . Закон Бенфорда ), и последовательные числа, вероятно, будут в чем-то похожи), но тем не менее они имеют гораздо более высокую энтропию. плотность, чем парольные фразы и тому подобное; во всяком случае, на практике кажется, что они никогда не подвергались успешному криптоанализу.

Более слабая версия генерировала добавку из текста романа или подобной книги (по крайней мере, один член Rote Kapelle фактически использовал The Good Soldier Schweik ). Этот текст был преобразован в цифровую добавку с использованием техники, похожей на шахматную доску.

Окончательным развитием в этом направлении стал шифр VIC, который в 1950-х годах использовал Рейно Хайханен . К этому времени большинство советских агентов вместо этого использовали одноразовые планшеты . Однако, несмотря на теоретическое совершенство одноразовых планшетов, на практике они были сломаны , а ВИК - нет. Однако одноразовый шифр мог быть взломан только при повторном использовании зашифрованных страниц из-за логистических проблем и, следовательно, больше не был действительно одноразовым.

Обзор механики

Секретный ключ для шифрования следующий:

  • Короткая фраза (например, первая строка песни)
  • Дата (в формате 6 цифр)
  • Личный номер (уникальный для агента, 1 или 2 - значный номер)

Шифрованию также способствовало то, что злоумышленник не знал 5- значную группу ключей, которая была уникальной для каждого сообщения. Группа ключей не была строго «секретной» (поскольку она была встроена в зашифрованный текст в незашифрованном виде), но она находилась в месте в зашифрованном тексте, которое не было известно злоумышленнику.

В целом шифр работал следующим образом:

  1. Используйте секреты выше (фраза, дата, группа ключей и личный номер), чтобы создать 50-значный блок псевдослучайных чисел.
  2. Используйте этот блок для создания ключей сообщений для:
    1. ТРАНСЗОНАЛЬНЫЙ Checkerboard
    2. Две столбчатые транспозиции
  3. Зашифруйте текстовое сообщение с помощью комбинированной шахматной доски
  4. Примените две транспозиции к результирующему (промежуточному) зашифрованному тексту через два столбца.
    1. Стандартное столбцовое транспонирование
    2. Диагональное столбцовое транспонирование
  5. Вставка ключевой группы в зашифрованный текст - в соответствии с личным номером

Детализированная механика

Примечание: этот раздел отслеживает расчеты, ссылаясь на [Line-X] или аналогичный. Это должно соответствовать обозначениям, указанным в описании архива ЦРУ.

Псевдослучайное блочное происхождение

  • [Line-A] : создание случайной группы ключей из 5 цифр.
  • [Line-B] : укажите первые 5 цифр секретной даты.
  • [Строка-C] : вычтите [Строка-B] из [Строка-A] с помощью модульной арифметики (цифра за цифрой, не «заимствуя» десятки из соседнего столбца).
  • [Line-D] : запишите первые 20 букв секретной фразы.
  • [Line-E.1 & 2] : Последовательность (см. Ниже) первых и вторых десяти символов отдельно (чтобы получить [Line-E.1] и [Line-E.2] соответственно)
  • [Строка-F.1] : запишите 5 цифр из [Строка-C], затем примените сложение цепочки (см. Ниже), чтобы создать еще пять цифр.
  • [Строка-F.2] : последовательность цифр «1234567890» записывается (под [Строка-E.2]) в качестве помощника для кодирования при создании [Строка-H]
  • [Строка-G] : Добавление [Строка-E.1] к [Строка-F.1] - это цифра за цифрой по модулю 10 арифметических действий, то есть без «переноса» десятков в следующий столбец.
  • [Line-H] : кодирование (см. Ниже) цифр в [Line-G] в [Line-E.2] в качестве ключа.
  • [Строка-I]: [Строка-I] не используется, предположительно, чтобы избежать путаницы (поскольку «Я» может быть неправильно истолковано как «1» или «J»)
  • [Line-J] : последовательность [Line-H]
  • [Строки-K, L, M, N, P]: это пять 10-значных строк, созданных последовательным сложением [Line-H]. Две последние не равные цифры добавляются к личному номеру агента, чтобы определить длину ключа для двух транспозиций. (Строки K-to-P фактически являются управляемым ключом псевдослучайным блоком, используемым для следующего этапа шифрования)
  • [Line-O]: [Line-O] не используется, предположительно, чтобы избежать путаницы (поскольку «O» может быть неверно истолковано как ноль или «Q»)

Получение ключа сообщения

  • [Line-Q] : первые цифры «a», извлеченные из [Lines-K, L, M, N, P] при транспонировании через [Line-J]. (Где «a» - первое значение, полученное в результате добавления последних не равных цифр в [Line-P] к личному номеру). Они используются для ключевой транспозиции столбца.
  • [Line-R] : следующие цифры 'b', извлеченные (после извлечения цифр 'a') из [Lines-K, L, M, N, P] при транспонировании через [Line-J]. (Где «b» - второе значение, полученное в результате добавления последних не равных цифр в [Line-P] к личному номеру). Они используются для переключения диагонального транспонирования.
  • [Line-S] : последовательность [Line-P], используется как ключ к шахматной доске.

Пример генерации ключа

Personal Number: 6
Date: 13 Sept 1959                          // Moon Landing - 13 Sept 1959 ('139195' - truncated to 6 digits) 
Phrase: 'Twas the night before Christmas'   // from 'A visit from St. Nicholas' - poem
Keygroup: 72401                             // randomly generated

[Line-A]: 72401                             // Keygroup
[Line-B]: 13919                             // Date - truncated to 5 digits     
[Line-C]: 69592                             // subtract [Line-B] from [Line-A]
[Line-D]: TWASTHENIG HTBEFORECH             // Phrase - truncated to 20 characters
[Line-E]: 8017942653 6013589427             // via Sequencing
[Line-F]: 6959254417 1234567890             // from [Line-C] and chain addition, then '1234567890'
[Line-G]: 4966196060                        // add [Line-E.1] to [Line-F.1]
[Line-H]: 3288628787                        // encode [Line-G] with [Line-E.2], [Line-F.2] helps 
[Line-J]: 3178429506                        // The Sequencing of [Line-H]
[Line-K]: 5064805552                        // BLOCK: Chain addition of [Line-H] for 50 digits
[Line-L]: 5602850077
[Line-M]: 1620350748
[Line-N]: 7823857125
[Line-P]: 5051328370

Last two non-equal digits are '7' and '0', added to Personal Number (6) means that the permutation keys are 13 and 6 digits long.
 
[Line-Q]: 0668005552551     // first 13 digits from block
[Line-R]: 758838            // next 6 digits from block
[Line-S]: 5961328470        // Sequencing of [Line-P]

Шифрование сообщений

Шахматная доска

После того, как ключ был сгенерирован, первым этапом фактического шифрования сообщения является преобразование его в серию цифр, это делается с помощью шахматной доски Straddling . Ключ (строка заголовка) для шахматной доски основан на [Line-S]. Затем во втором ряду использовалась заранее согласованная серия общих букв. В приведенном ниже примере используется английская мнемоника «AT ONE SIR», однако кириллица, используемая Хайханеном, была «snegopad», русское слово для обозначения снегопада.

Остальные ячейки заполняются, а остальные буквы алфавита / символы заполняются по порядку.

  5 9 6 1 3 2 8 4 7 0
  А Т О N E S я р
6 B C D F грамм ЧАС J K L M
8 п Q U V W Икс Y Z . /

Ниже приведен пример кодировки:

MESSAGE: 'Attack at dawn. By dawn I mean 0500. Not 0915 like you did last time.'
 
59956 96459 66583 38765 88665 83376 02538 00005 
55000 00080 87319 80000 99911 15558 06776 42881
86667 66675 49976 0287-

Транспозиции: столбчатое транспонирование

Сообщение транспонируется с помощью стандартного столбчатого транспонирования с ключом [Line-Q] выше. (Примечание: если на данном этапе длина закодированного сообщения не кратна 5, добавляется дополнительная цифра)

Затем сообщение транспонируется с помощью диагонального транспонирования, обозначенного клавишей [Line-R] выше.

Вставка группы ключей

(Незашифрованная) группа ключей вставляется в группы «P» зашифрованного текста с конца; где «P» - неиспользованная шестая цифра даты.

Модульное сложение / вычитание

Модульное сложение или вычитание, также известное как «ложное сложение / вычитание», в этом контексте (и многие ручные и бумажные шифры) - это сложение и вычитание по цифрам без «переноса» или «заимствования». Например:

  • 1234 + 6789 = 7913
  • 1234–6789 = 5555
Последовательность действий

Последовательность в этом контексте упорядочивает элементы ввода от 1 до 10 (где «0» представляет 10). Это происходит либо с буквами (при этом используется алфавитный порядок), либо с числами (где используется числовое значение). В случае равных значений сначала устанавливается самое левое значение. Например:

  • БУКВЫ: Слово «Осьминог» упорядочено как «2163475» - (т.е. C = 1, первое «O» = 2, второе «O» = 3, ...)
  • НОМЕРА: номер «90210» упорядочен как «34215» - (в порядке номеров. Ноль оценивается как «10» с точки зрения порядка).
Сложение цепочки

Сложение по цепочке сродни регистру сдвига с линейной обратной связью , в котором поток чисел генерируется как выход (и возвращается как вход) для начального числа. В цепочке VIC Cipher добавление работает следующим образом: (1) берется исходный (начальный) номер, (2) ложно добавляются первые две цифры, (3) этот новый номер помещается в конец цепочки. Это продолжается, однако добавляемые цифры увеличиваются на единицу. Например, если начальное число было «90210», первые 5 итераций показаны ниже:

90210           // Initial seed value
90210 9         // 9 = 9+0 (first two digits)
90210 92        // 2 = 0+2 (next two...)
90210 923       // 3 = 2+1
90210 9231      // 1 = 1+0
90210 92319     // 9 = 0+9; note how the first '9' generated is being fed back in
Кодировка цифр

На этапе кодирования каждая цифра в номере (то есть [Строка-G] в шифре) заменяется одной из ключевой последовательности (то есть [Строка-E.2]), которая представляет ее позицию в порядке 1-10. Должно быть видно, что, записывая ряд «1234567890» (показанный как [Line-F.2]) под [Line.E.2], каждое значение от 0 до 9 имеет другое над ним. Просто замените каждую цифру в номере, который нужно закодировать, на цифру над ним в последовательности клавиш.

Ключ (Строка E.2) 6 0 1 3 5 8 9 4 2 7
Помощник (Строка F.2) 1 2 3 4 5 6 7 8 9 0

Например, число «90210» будет иметь следующую кодировку; .

Таким образом, результат будет: «27067».

Расшифровка

Расшифровать VIC Cipher можно следующим образом:

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

Криптоанализ

Этот шифр является одним из самых надежных шифров, фактически используемых в реальном мире, и не был взломан (с точки зрения определения лежащего в основе алгоритма) АНБ в то время. Однако с появлением современных вычислений и публичным раскрытием алгоритма это уже не будет считаться надежным шифром. Можно заметить, что большая часть энтропии секретного ключа сходится к 10-значному числу [Line-H]. Это 10-значное число составляет приблизительно 34 бита энтропии, в сочетании с последней цифрой даты (необходимой для определения местоположения KeyGroup) даст около 38 бит энтропии с точки зрения силы ключа сообщения. 38 бит на современных компьютерах подвергаются атаке методом перебора менее чем за день.

Смотрите также

использованная литература

внешние ссылки