Увлекательная Криптография Или Исследование Обратимого Шифрования В Php

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

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

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

По понятным причинам мы не будем целиться в гигантов промышленной криптографии вроде AES, а окунемся, так сказать, в собственные криптографические исследования с блэкджеком и радостью.

Частично потому, что это интересно, частично потому, что моделируя что-то своё и сравнивая с признанными стандартами, ты ясно видишь контраст, эффективные решения и откровенные упущения, и понимаешь, к чему можно стремиться для повышения эффективности.

Но воды уже достаточно.

Допустим, наше веб-приложение написано на PHP, требует обратимого шифрования, и мы считаем, что можем написать собственную систему шифрования.

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

  1. Наличие шумовых символов в итоговом шифре.

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

  3. Каждое сообщение получит дайджест-код — уникальный код, который является функцией закрытого ключа и исходного сообщения.

    Это необходимо для достижения уникальной функции сопоставления «исходный символ».

    <=> закодированный символ» не только для канала «Отправитель-Назначение», но и для каждого отдельного сообщения.

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

  4. Для усложнения частотного анализа каждый исходный символ сообщения закодируем двумя шифросимволами.

Итак, что случилось.

Собственно, вы можете увидеть конечный результат Здесь Класс Симкодер Класс 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 #криптография #обратимое шифрование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.