Журнал удивительных идей


Совместный проект учителей и учеников 192 школы






 





В целых числах

Сможете ли вы устно за одну минуту найти три целых положительных числа x, y и z таких, что

28x+30y+31z=365

?

Для взлома нет приема

Хотя с предыдущего номера, в котором обещалось рассказать о том, как можно закодировать страницу в HTML (+JavaScript), так чтобы расшифровка была в принципе невозможной без знания пароля, прошло почти 5 лет и очень многое в Web-технологиях изменилось, мы решили выполнить обещание и включить эту статью в данный номер.

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

Проблема состоит в том, что технология HTML+JavaScript допускает чтение исходного текста. Поэтому нельзя пользоваться для шифрования классической технологией - запросить пароль и сравнить с эталонным, как это сделано на электронной обложке номера, - потому что тогда придется хранить эталонный пароль в тексте зашифрованной страницы, а значит, теоретически (и практически!), можно его оттуда достать и использовать для расшифровки секретного URL.

Единственный способ избежать взлома исследованием исходного кода - не хранить пароль вообще. С чем же тогда сравнивать?

Сделаем так: получим от автора страницы пароль и защифруем адрес секретной страницы при помощи этого пароля. Дальше будем получать от пользователя пароль и расшифровывать на его основании. Если пароль совпадает с авторским - текст будет нормально расшифрован и мы прочитаем авторский текст. Если же нет - получим белиберду.

Например, будем шифровать простейшим прибавлением кодов символов пароля к кодам символов адреса.
Предположим, нам надо зашифровать адрес "http://secretno.ru" при помощи пароля "pass".

Адрес для шифрования h t t p : / / s е с ...
Пароль, если нужно повторяем несколько раз p a s s p a s s p a ...
Результат 216 213 231 227 170 144 162 230 213 196 ...

Эту работу может выполнить такой скрипт

Введите URL для шифрования:
Введите пароль:

Результат шифрования:

Результат-шифр вставляется в скрипт, который очень похож на скрипт расшифровки:



И на выкладываемой странице публикуется только полученный скрипт, а пароль не публикуется вовсе.

Посмотрите, какой результат выдает скрипт расшифровки, если ввести другой пароль

Конечно, очень короткий пароль, особенно состоящий из одного символа, плохо подходит для такого шифрования, но ведь можно использовать не сам пароль, а, скажем, его хэш MD5. У него немаленькая длина, не зависящая от количества символов в пароле.

Естественно, в показанном методе есть большой недостаток. Пароль один на всех и секретный адрес тоже один на всех. Так что один человек, может без проблем растиражировать этот пароль или секретный адрес (опубликовав, например, его у себя в блоге), и тогда наш секрет перестанет быть секретом. Но эта общая проблема использования текстовых паролей. Получив (подглядев, например) пароль, можно сделать практически всегда практически все что угодно. Но если наш мир четко, хорошо делится на своих и чужих - этим методом вполне можно пользоваться.

Ильин В.В.

М
а
т
е
м
а
т
и
к
а
Ф
и
з
и
к
а
Х
и
м
и
я
Б
и
о
л
о
г
и
я
И
н
ф
о
р
м
а
т
и
к
а