Научно-исследовательский сайт Вячеслава Горчилина
2014-07-29
Все заметки/Интернет
Одна из реализаций Hash-Mask алгоритма. Браузерное off-line кодирование

Главные отличия от существующих моделей
Практически любой современный протокол обмена данными строится на передающей стороне, сервере-посреднике и стороне принимающей. Таким образом, каким бы защищённым не был протокол до и после сервера-посредника, проблема утечки данных может быть именно в нём: человеческий фактор, back-doors, атаки хакеров и т.п.

Одно из возможных решений этой проблемы лежит в реализации Hash-Mask алгоритма, а главное требование — кодирование данных на передающей стороне, декодирование — на принимающей. Другими словами, на сервере-посреднике будет храниться «абракадабра» принципиально не позволяющая, например, администратору получить доступ к данным. Также понятно, что для передачи таких данных мы сможем использовать открытые каналы связи.

Браузер + JavaScript
При реализации передающей и приёмной части важна открытость и читаемость криптографических скриптов. С одной стороны скрипт должен быть написан на открытом и общедоступном языке, с другой — должен быть платформеннонезависимым. Идеальное решение — браузер и JavaScript.

В современном JavaScript есть все необходимые решения: AJAX + фреймвоки, которые убирают все «подводные камни» в различиях между различными браузерами и ОС. Уникальность фреймвоков ещё и в том, что они упрощают программирование оставаясь при этом совершенно открытыми кодами.

Реализация передающей части
Пользователь в окошке браузера вводит данные для передачи (ВД), например, текстовое сообщение, и кодовое слово (КС). Вначале скрипт определяет общее число групп (например, по 32 символов в каждой), которое и будет равно числу циклов. Также, скрипт генерирует СКЛ — набор из 32-х случайных шестнадцатиричных чисел. В каждом цикле, номер которого (НГР) берется из счетчика, сшиванием СКЛ + КС + НГР генерируется хеш-маска. Затем, используя полученную хеш-маску производится маскировка данных по алгоритму [1]. Данные предварительно преобразуются в их hex-аналоги. Эти маскированнные данные мы последовательно добавляем в строку (ЗСТР), сразу после СКЛ. Таким образом, первые 32 символов — это СКЛ, а все последующие — маскированные данные. ЗСТР мы передаём с помощью AJAX на сервер по http-протоколу.

Реализация принимающей части
Для раскодирования полученных данных пользователь вводит в окошке браузера кодовое слово (КС). Скрипт отделяет первые 32 символа и считает их СКЛ. Остальные разбивает на группы и циклически их декодирует. В каждом цикле генерируется хеш-маска сшиванием СКЛ + КС + НГР и демаскируется по алгоритму [2]. Полученные на выходе символы преобразуются из hex-аналогов в реальные и последовательно добавляются в строку. Эта строка и будет раскодированными данными, которые будут представлены пользователю.

А что делает сервер?
Его вообще может не быть, а канал между абонентами будет создаваться средствами самой сети. Если сервер всё-же будет, то в его функции может входить хранение или даже просто трансляция ЗСТР. Как вариант, он может генерировать случайный кодовые слова, и отправлять их по запросу приёмной и передающей стороне в sms-сообщении. Отметим, что кодовое слово — это набор символов любой длины.

Также, это может быть полноценный почтовый сервер с некоторыми отличиями. Например, — полное отсутствие СПАМа, т.к. здесь он принципиально невозможен: для связи двух абонентов необходимо только им известное кодовое слово.

Какие фреймвоки использовать?
Для AJAX, например jQuery, а для получения хеш-маски - Javascript MD5.

Безопасная почта реализованная по данной схеме