Skip to content

Кэширование, хеширование или о безопасности паролей в Интернете

25.01.2012

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

Работая в корпоративной сети, пользователи, как правило, избавлены от необходимости помнить множество паролей. Благодаря технологии “Single Sign On” – однократной регистрации – пользователи лишь однажды вводят реквизиты своей учетной записи и при этом получают доступ ко всем ресурсам сети в пределах своих разрешений, без необходимости набирать свой пароль вновь и вновь.

К сожалению, такой вариант невозможен при доступе к Интернет-ресурсам – ведь каждый веб-сайт в большинстве своем содержит собственную базу учетных записей пользователей и паролей. Известное решение предлагают программы, кэширующие пароли, т.е. сохраняющие их локально на компьютере, флеш-накопителе или ином устройстве. На текущий момент существует множество приложений такого типа – коммерческих и свободно распространяемых, разработанных для разных операционных систем, в том числе мобильных. Обзор двух платных менеджеров паролей был сделан в недавнем видеокасте Владимира Безмалого. Упрощенно, принцип работы менеджеров паролей состоит в организации защищенного (как правило, зашифрованного) хранилища паролей, доступ которому открывается по единственному мастер-паролю. От пользователя требуется только помнить мастер-пароль. После правильного ввода мастер-пароля у пользователя появляется доступ к сохраненным паролям, возможность их изменять и т.д.

Без сомнений, это лучше, чем записывать пароли на бумажке или запоминать, чтобы забыть. Но как быть, если программы не окажется под рукой? А здесь очень важно, чтобы пароли хранились локально у пользователя, поскольку любое их хранение в сети, даже в зашифрованном виде, не гарантирует безопасность. Далее, чтобы обезопасить себя от любого сбоя и потери ценной информации, пользователь должен выполнять резервное копирование хранилища паролей. Выполнять регулярно и не забывать выполнять. Далеко не все пользователи регулярно выполняют резервное копирование своих компьютеров… Иными словами, много проблем даже для такой простой задачи.

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

Пароль = Hash (мастер-пароль & доменное_имя)

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

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

Хорошо, алгоритм алгоритмом, но где же программа? Признаюсь и теперь весьма сожалею, но сам так и не удосужился воплотить задумку хоть в каком-нибудь коде. На днях, просматривая новые приложения для Windows Phone 7, опубликованные в Marketplace, встретил программу PasswordHash. Автор – профессиональный разработчик из Остина (Техас, США) Грег Стол (Greg Stoll). Если вы не обладаете Windows Phone, то описание приложения можно посмотреть здесь. И хотя описание весьма лаконичное, сомнений не остается, какая именно идея лежит в основе этого приложения. Кроме того, PasswordHash позволяет “на лету” вносить изменения в генерируемые пароли в зависимости от политики безопасности конкретного веб-сайта. Например, можно изменить длину пароля, запретить, либо наоборот потребовать присутствие в пароле специальных символов. Генерируемый пароль отображается в соответствующем поле и копируется в буфер обмена.

image

Также ознакомиться с приложением можно на web-странице проекта PasswordHash:

http://gregstoll.dyndns.org/~gregstoll/passwordhash/

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

Если решение, основанное на вычислении хеш-функций паролей вам понравилось, то вы можете приспособить его под собственные требования, разместив файлы приложения на любом веб-сервере, доступном в корпоративной сети или из Интернета или даже просто открывая файл PasswordHash.htm на локальном компьютере. В “рафинированном” виде приложение представляет собой веб-страницу и два файла сценариев, написанных на JavaScript. Загрузить архив с файлами можно из этой веб-папки.

image

Настройки веб-броузера должны разрешать выполнение сценариев JavaScript.

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

Что лучше – кэширование или хеширование паролей? Этот вопрос приобретает особый смысл, если рассматривать два принципиально разных подхода к безопасности паролей в Интернете. Главное – не игнорировать проблему, а что действительно лучше – решать вам.

Реклама
4 комментария
  1. Хотел бы добавить, что в случае использования менеджеров паролей, о которых я говорил, можно носить с собой локальные хранилища. Т.е. Kaspersky Password manager позволяет носить хранилище на флешке, а SPB Wallet — на мобильнике.

  2. Прочитал. Вчера еще послушал Олега.
    В общем, стойкость метода по отношению к мастер-паролю ниже, чем в случае с менеджером пароля: узнал мастер-пароля = узнал все пароли ко всем ресурсам (все таки менеджер паролей это какая-никакая, а двухфакторная аутентификация, по сути).
    Плюс метод обещает жуткий геморрой при смене мастер-пароля, который все-таки нужно иной раз менять =)
    Единственное достоинство — относительная мобильность.
    Извините за несогласие =)

  3. Да вроде свои, а я тут к вам со своими возражениями 😉

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: