Научно-исследовательский сайт Вячеслава Горчилина
Все заметки/Интернет
Ещё одна реализация Hash-Mask алгоритма для защиты передаваемых на сервер данных
Иногда существует необходимость дополнительного шифрования данных на стороне клиента, для их последующей передачи на сервер. Например, у админа есть панель администрирования некоего сервиса из которой он отправляет команды управления. Иногда бывает недостаточно защитить соединение HTTPS-протоколом, тем более, что есть уже много сведений о дырах в его реализации. Не говоря уж об обычном незащищенном HTTP.

Задача выглядит так: повысить степень защищенности передаваемых на сервер данных, причем сама защита должна осуществляться в браузере клиента. А это означает, что прослушивание каналов связи, атаки на HTTPS-соединение и прочие SQL-инъекции Вам будут нестрашны даже при передаче данных по незащищенным протоколам.

Для подобных задач был разработан симметричный Hash-Mask алгоритм. Его отличительные особенности: простота при высокой криптозащищённости, и возможность реализации защиты средствами JavaScript прямо в браузере клиента. Код получается простым и открытым, что позволяет осуществлять полный пользовательский контроль над шифрованием/дешифрованием данных. Сам процесс шифрования происходит в off-line режиме, что дополнительно увеличивает защиту.

Реализуется этот механизм очень просто: на клиентской части — путем подключения трёх дополнительных скриптов, а на серверной — дополнительнго модуля (разработан пока для Perl). Фактически, все эти модули и скрипты являются надстройками над уже работающей схемой.

Ниже приводится пример реальной работы защиты

После заполнения полей и нажатия на кнопку «Отправить» происходит следующее: скрипт предлагает ввести кодовое слово и запоминает его (при следующих запросах его вводить не нужно); извлекает данные из всех полей формы и кодирует их; сами поля — обнуляет; создаёт новое поле с именем «Q» и со значением равным кодированной строке; передает на сервер это это поле.

На сервере, декодирующий модуль расшифровывает данные поля «Q» и добавляет их в стандартные поля модуля CGI, с которыми уже можно работать, как обычно. Подлючается этот модуль так:

#!/usr/local/bin/perl
use Secure;

Данные берём из переменной $Q. Например, так мы получаем значения поля «name»: $Q->param("name"). Саму переменную $Q создавать не нужно: её создаёт модуль.

Попробуйте заполнить поля, затем будет предложено ввести кодовое слово — введите Masha и получите данные на обработанной сервером странице. Обратите внимание на строку запроса передаваемую на сервер.


Пример

Первый параметр:

Второй параметр: