- PVSM.RU - https://www.pvsm.ru -
Данный шифр является небольшим усовершенствованием шифра ElsieFour, который разработал Алан Камински (Alan Kaminsky) [1]. В этом варианте используются 7x7 символов вместо оригинальных 6x6, которых едва-едва хватает даже на латинский алфавит. Дополнительно описан простой алгоритм получения ключа по паролю, как более привычный вариант. Стойкость и безопасность такие же как у ElsieFour.
В репозитории [1] есть 3D–модель фишек в форматах SCAD и STL.
Если распечатать модель со сменой цвета слоёв, то символы будут видны более отчётливо. Спасибо Мартину Пташеку (Martin Ptasek) за изображение.
Если вы доверяете своему компьютеру, то можно воспользоваться простой реализацией на питоне ls47.py
. Также Бернард Эсслингер (Bernhard Esslinger) из проекта CrypTool предоставил более удобный вариант lc4.py
, который реализует несколько вариантов дополнения и оригинальный шифр ElsieFour.
По сравнению с оригинальным вариантом, добавлены символы пунктуации, кавычки, символы для записи арифметических выражений. Для варианта с кириллицей пришлось ограничиться только символами пунктуации. Символы на фишках упорядочены вот так (показаны рядом варианты с латиницей и кириллицей):
_ a b c d e f _ а б в г д е
g h i j k l m ё ж з и й к л
n o p q r s t м н о п р с т
u v w x y z . у ф х ц ч ш щ
0 1 2 3 4 5 6 ъ ы ь э ю я 1
7 8 9 , - + * 2 3 4 5 6 7 8
/ : ? ! ' ( ) 9 0 . , ; ? !
Как видно, на фишках полезно иметь дополнительную информацию, для облегчения операций:
Для выполнения операций по зашифровке/расшифровке необходима метка, например, камешек, гайка или что-то подобное, что устойчиво помещается на фишке.
Подробнее процессы описаны в [1]. Здесь дадим сжатое изложение процессов.
P
.M
.C := P + M mod (7,7)
. Запишите зашифрованный символ, расположенный на позиции C
.M := M + C' mod (7,7)
, где C'
— это цифры на фишке с зашифрованным символом.Шаги 1,2. Начальное положение, он же ключ. Метка стоит на фишке с символом 'д'. Символ, который будем шифровать на данном этапе помечен зелёным овалом, символ–результат шифрования помечен красным овалом.
Шаги 3,4. Шифруем символ '.'. Фишка с меткой выглядит так:
Шаг 5. Отсчитываем от символа '.' пять шагов вправо, ноль шагов вниз и получаем искомый символ '1'. Он и будет результатом шифрования на текущем этапе.
Шаг 6. Циклически сдвигаем вправо ряд фишек, содержащих шифруемый символ '.'.
Шаг 7. Сдвигаем вниз столбец фишек, содержащих зашифрованный символ '1'
Шаг 8. Обновим позицию метки.
Посмотрим на фишку с зашифрованным символом:
Отсчитываем от символа 'Д' шесть шагов вправо, четыре шага вниз и получаем новое положение метки.
Расшифровка выполняется практически теми же шагами, за исключением того, что на шаге 5 необходимо определить позицию P
по известным позициям M
и C
. P
определяется вычитанием P := C - M mod (7,7)
. Остальные шаги идентичны.
Хорошо перемешайте фишки в мешочке и достаньте их по одной. Ключом является перестановка этих 49 элементов.
Помнить случайную перестановку из 49 элементов не очень удобно, особенно, когда среди этих элементов служебные символы. Вместо этого можно порождать ключи из произвольной строки достаточной длины.
Под "достаточной длиной" подразумевается "с достаточным уровнем энтропии". Полные ключи хранят около 208 бит энтропии. Чтобы достичь похожих показателей, ваш пароль должен состоять (для варианта из латиницы):
Чтобы получить "стандартные" 128 бит энтропии, числа уменьшаются примерно до 39, 28 и 25 соответственно.
Полученную расстановку можно сохранить, чтобы не заниматься генерацией ключа каждый раз, когда выполняется операция шифрования/расшифрования.
Алгоритм порождения ключа следующий:
I := 0
.Px, Py
I
–ю строку на Px
позиций вправоI
–й столбец на Py
позиций внизI := I + 1 mod 7
, повторить с пункта 2 и следующим символом пароляЧтобы получить различные шифротексты даже для одинакового исходного текста, к нему надо добавить случайное одноразовый код заранее условленной длины. Например, N
случайно выбранных из мешочка фишек, рекомендуемое значение N
— как минимум 10.
Также стоит дополнять исходное сообщение случайным числом символов, чтобы предотвратить идентификацию между 'да, пожалуйста' и 'нет', что легко сделать, даже не зная ключ и видя ч2390смю238ы_т
и ч9ч
.
Поскольку шифротекст может быть изменён во время передачи или может быть допущена ошибка во время обработки человеком, то рекомендуется добавлять подпись в конце сообщения. Достаточно даже просто __ВашеДосточтимоеИмяЗдесь
. Если подпись не соответствует ожиданиям, что легко может произойти в случае ошибки при обработке, то либо попробуйте заново (вдруг ошибка при расшифровке?), либо попросите отправителя переслать сообщение.
Это возможно потому, что выход шифра зависит от сообщения: при ошибочном значении где-нибудь в середине, из-за лавинного эффекта сообщение теряет смысл после нескольких символов.
[1] Kaminsky, Alan. "ElsieFour: A Low-Tech Authenticated Encryption Algorithm For Human-to-Human Communication." IACR Cryptology ePrint Archive 2017 (2017): 339.
Автор: Xitsa
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/kriptografiya/276582
Ссылки в тексте:
[1] репозитории: https://github.com/exaexa/ls47
[2] Источник: https://habrahabr.ru/post/352448/?utm_campaign=352448
Нажмите здесь для печати.