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.

Безпечна пошта реалізована за даною схемою

Горчилин В'ячеслав, 2014 р.
* Передрук статті або реалізація алгоритму можливі за умови встановлення посилання на сайт і дотриманням авторських прав

« Назад
2009-2018 © Vyacheslav Gorchilin