Одна из основных истин криптографии заключается в том, что не следует ничего изобретать в этой области, если вы не профессионал.
Отчасти это правда, ведь все лучшее уже давно изобретено, выстрадано и десятилетиями используется в сфере информационных технологий.
Другая сторона истины состоит в том, что развитие определенной области знаний происходит только при постоянном притоке в нее свежих идей и оригинальных решений.
По понятным причинам мы не будем целиться в гигантов промышленной криптографии вроде AES, а окунемся, так сказать, в собственные криптографические исследования с блэкджеком и радостью.
Частично потому, что это интересно, частично потому, что моделируя что-то своё и сравнивая с признанными стандартами, ты ясно видишь контраст, эффективные решения и откровенные упущения, и понимаешь, к чему можно стремиться для повышения эффективности.
Но воды уже достаточно.
Допустим, наше веб-приложение написано на PHP, требует обратимого шифрования, и мы считаем, что можем написать собственную систему шифрования.
Итак, давайте напишем нашу собственную систему обратимого шифрования с закрытым и открытым ключами, которая будет обладать следующими особенностями более или менее безопасного криптографического алгоритма:
- Наличие шумовых символов в итоговом шифре.
- Информация в каждом канале отправителя-назначения будет зашифрована с использованием закрытого ключа, а функция сопоставления будет уникальной для каждого ключа.
- Каждое сообщение получит дайджест-код — уникальный код, который является функцией закрытого ключа и исходного сообщения.
Это необходимо для достижения уникальной функции сопоставления «исходный символ».
<=> закодированный символ» не только для канала «Отправитель-Назначение», но и для каждого отдельного сообщения.
Таким образом, даже если представить, что соответствие закодированных и исходных символов для конкретного сообщения стало известно благодаря использованию криптографического анализа, например частотного анализа, это не дает никаких предпочтений при изучении другого сообщения.
- Для усложнения частотного анализа каждый исходный символ сообщения закодируем двумя шифросимволами.
Собственно, вы можете увидеть конечный результат Здесь Класс Симкодер Класс SymCoder включает методы шифрования и дешифрования.
Шифрование осуществляется методом code(), который принимает на вход исходное сообщение.
Здесь сообщение из сгенерированной таблицы соответствия в tab_coded создает зашифрованное сообщение, разбавленное по краям и внутри шумовыми символами.
Кстати, символы шума уникальны для каждого канала отправителя-получателя, поскольку генерируются с использованием ключа канала, но не уникальны для сообщений.
Символы, используемые для шифрования в code_symbols, представляют собой знаки препинания и символы, такие как %, @ и т. д. На каждый закодированный символ приходится два символа из code_symbols, по понятным причинам, их в несколько раз меньше, чем закодированных символов.
Таблица соответствия create_tab_coded строится с помощью трансляции хеша ключа сообщения в массив с количеством элементов, равным количеству элементов в массиве символов кода.
Начальная позиция прохождения двухсимвольных кодов также всегда разная и связана с клавишей канала.
Это дает возможность быть уверенным, что алгоритм обхода кодированных символов и сопоставления с ними кодовых символов всегда (или гарантированно часто) будет разным.
Например, сообщение «привет, мир» в закодированном виде выглядит так: Digest-a00bf11d-&?==&!&?.
@.
@=!=-.
?&1.#&?=:.
:.
1%!&-%@&@%~&1^#=?%%.
!%+.
?.
~=?.
&?%&&:%~.
#%@&1&1&#.
#=?.
#.
?.
!&#&1==&=.
-=!
А вот то же сообщение, закодированное еще раз: Digest-a00bf11d-=:.
?=:&!.
?.
1&-&#=:=?.
?.
=.
?.
!&=%!=-%@=!%~.
=^#.
1%%.
!%+=:.
~.
@.
==%&&1%~.
1%@=?.
@.
!&=.
!&@=:&1.==:=!.
1&#&:
Видно, что дайджест одного и того же сообщения один и тот же, но шифр становится другим — символы шума добавляются в произвольном совпадении и в произвольном порядке для каждого нового шифрования.
Сообщения имеют избыточность, которая уменьшается по мере увеличения объема сообщения, достигая до 10% шума (для самых коротких сообщений шум достигает 90% и более), минимальная длина зашифрованного сообщения — 116 символов.
Одним из недостатков этого метода шифрования является то, что закодированные сообщения удваиваются как минимум.
Декодирование заключается в обратном переводе формы «символ кода» — исходного символа с вырезанным из сообщения шумом.
Что может быть ключевым? По сути, это любая строка, уникальная для каждой пары получатель-получатель.
Например, если вы создаете мессенджер с шифрованием сообщений, то самой простой версией закрытого ключа может быть md5($user_id_1.$salt.$user_id_2), тогда ключ будет уникальным для каждого канала сообщений.
Теги: #it-инфраструктура #php #криптография #обратимое шифрование
-
Продолжение Истории С Uefi Secure Boot
19 Oct, 24 -
Шпаргалка По Spring Boot Webclient
19 Oct, 24 -
#Красноярскметро
19 Oct, 24 -
Базовые Станции Через Дисконнект
19 Oct, 24 -
Школа Жизни
19 Oct, 24