*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

воскресенье, 17 января 2010 г.

KeePass, TrueCrypt или как обезопасить свои конфиденциальные данные

В вопросе конфиденциального хранения данные на компьютере не бывает полумер. Идея типа «никто не догадается» тут не работает. Решение должно быть абсолютным и опирающимся на достижения современной криптографии, и единственным способом раскрытия секретных данных должен быть только подбор пароля квантовыми компьютерами будущего в будущем или методом «паяльника в ж…». То есть никаких банальностей типа тут мои файлы никто не найдет, пароль по умолчанию, пустой пароль, один пароль на все случаи жизни или надеяться типа «никто не знает мой метод шифрования». Очевидно, что все основные современные алгоритмы шифрования открыты, и вопрос стоит только в правильном (= безопасном) хранении ключей.

Меня всегда интересовал вопрос — если администратор замечательного сервиса всех времен и народов «Мейл.ру» сможет узнать пароль ящика пользователя (не удивлюсь, если они хранят пароли в чистом виде) – какова вероятность, что у пользователя с аналогичным именем, скажем, на почте Яндекса, будет точно такой же пароль — более 90% или нет? (А сколько у вас «кросс»-паролей? 2, 3 или больше?)

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

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

Интересно, современные почтовые системы типа Gmail или Яндекс используют подобные устройства?

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

Пример из личного опыта. Пару лет назад у меня «увели» почтовый ящик на «Мейл.ру» (с тех пор у меня устойчивый рвотный рефлекс при упоминании этого сервиса). Я не «восторженная блондинко»™ с паролем «1234» на все и имею здравый смысл. Пароль там был «сильный», и единственный способ его потери – это сдача «налево» кем-то из «администрации». Цель? Не могу даже представить, для чего можно это сделать (продать однофамильцу красивый адрес? бред). Но месячная переписка с суппортом и менеджментом сервиса не привели к успеху – ни то, что я мог показать им всю почтовую базу за пять лет и переписку с новым «владельцем» ящика, который предлагал мне его продать назад – ни к чему не привели. Ящик мне не вернули. Благо использовался он только для пересылки, и писем в онлайне не было. Но я потратил недели, чтобы вспомнить все места, где я регистрировался по тому ящику, и экстренно заменить украденный адрес и пароль (пока это не сделал новый владелец через восстановление пароля на e-mail). Не думаю, что это была целенаправленная атака на меня именно, но масштаба проблемы это не уменьшило ни на йоту. Забавно, были сервисы, например, «Аромат.ру», в котором имя аккаунта был сам e-mail, поэтому единственный выход был — это удалить аккаунт на Аромате. А были сервисы, где просто нет функции удаления аккаунта (зачем кто-то будет удалять потенциальный товар, который можно продать спаммерам?). В общем, я кое-как все подчистил, но было очень, очень противно. Очень схожее ощущение, когда тебя ограбили. Так что до сих пор от души желаю «Мейл.ру» скорого разорения.

После истории украденным ящиком, я переосмыслил методу создания, хранения и использования паролей.

Главный принцип — никогда не использовать повторяющихся паролей.

Легко сказать — сложно сделать. Вряд ли кому-то комфортно помнить более 5-6 паролей. Придумывать же систему генерации паролей в уме — тоже не выход. Современный средний человек пока в уме едва ли посчитает крипто- или хеш- функцию (а только им можно доверять), а иначе мы приходим к подходу «авось никто на догадается», который может больно ударить в спину.

Единственный выход — электронный хранитель паролей.

Подобных программ великое множество. У меня были основные критерии:

  • open-source
  • максимальная простота и кондовость использования (в идеале должен быть один exe-шник и portable-режим)
  • наличие клонов под разные платформы (Windows, Linux, сотовые телефоны, iPhone, а теперь уже и Android.

Почему open-source? Факт наличия открытых исходников дает более менее уверенность, что в программе нет «закладок», отсылающих ваши пароли по интернету, «системных» паролей по умолчанию (так как спецслужбы этого могут требовать), и вообще – популярный open-source – это значит, что код отсмотрен сотней другой внимательных глаз.

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

Мой выбор пал на KeePass. Все три критерия великолепно выполнялись, а список платформ, под которые есть реализации, впечатляет.

Почему удобно иметь версии под разные платформы? А чтобы один и тот же секретный файл можно было бы открыть и в Windows, и в Linux или прямо на iPhone или Андроиде, если ты в пути.

Что конкретно делает эта программа, и почему это правильно?

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

Внутри зашифрованного файла можно создавать записи. Каждая запись имеет имя и набор полей — имя, e-mail, url, пароль и поле для произвольных текстовых данных. Записи можно организовывать в группы с помощью простой древовидной структуры. Также есть контекстный поиск по записям.

Поле пароля — особое. По умолчанию оно отображается звездочками. Это удобно, если открытые окно программы случайно увидит кто-то посторонний. KeePass может по команде поместить пароль в буфер обмена на 10 секунд, чтобы вы успели переключиться в окно браузера сделать вставку пароля в форму. По истечении этого времени пароль будет стерт из буфера обмена. Таким образом, паролем можно воспользоваться, даже не видя его.

А теперь ключевая функция программы — генерация паролей. Допустим, вы регистрируетесь на каком-то сайте. Придумали логин, ввели e-mail, и надо вводить пароль. Вы нажимаете в KeePassе кнопку «Сгенерировать пароль» (его длину и алфавит используемых символов можно менять), и получаете новый случайный пароль у себя в окне KeePass’а (напомню, по умолчанию он отображается звездочками). Затем через буфер обмена вы переносите новый пароль в форму регистрации. При такой схеме, вы можете даже сами и не знать, какой там пароль.

Я зарегистрирован на десятках разных форумах, и я не только не помню свой пароль от них, я его даже и не знаю. Если надо, я его перетаскиваю из окна KeePass не глядя.

Конечно, есть ключевые пароли: от вашего основного ящика, мессенджера и т.д., которыми пользуешься часто, и их удобно держать в голове. Но их должно быть два-три. Они также должны абсолютно разными и «сильными», но запоминаемыми. Остальной же регистрационный мусор стоит хранить не в голове, а в программе (например, в KeePass), тем самым не подвергая основные пароли опасности.

Файл с паролями и саму программу для их чтения можно носить на флешке, чтобы на любом компьютере можно было заглянуть в свои пароли, если что. Однозначно, основной пароль на зашифрованное хранилище должен быть «сильным». Тогда можно не бояться, у вас его украдут вместе с флешкой.

Если у вас есть портативное устройство (например, телефон с J2ME, Windows Mobile, iPhone или Android), то доступ к паролям можно получить прямо на ходу, если периодически сбрасывать на устройство последнюю версию зашифрованного файла.

У Андроида есть отличная вещь: разработчик приложения декларирует в манифесте какие ресурсы нужны его приложению (сеть, записная книга, флеш-карта, GPS и т.д.). Все остальные ресурсы приложению будут заблокированы. Этот манифест показывается тебе при установке приложения, и сразу видно, чем ты рискуешь. Было бы странно, если бы при установке KeePass на Google Nexus One мне бы сказали, что приложение будет ходить в интернет. Но KeePass запросил только доступ к флеш-карте для хранения файла с паролями.

KeePass хорош для хранение небольшого объема данных. А если счет идет уже на мегабайты или гигабайты, нужен другой подход.

Кроме KeePass я активно последние несколько лет использую TrueCrypt для создания зашифрованных дисковых томов. Удобно, например, на рабочем компьютере создать место, куда стопроцентно никто, кроме вас не заглянет. Кроме того, такие шифрованные «диски» удобно переносить с места на место и бэкапить. TrueCrypt, конечно, open-source, не требует предварительной установки в систему (можно просто носить на флешке) и существует под Windows и Linux (можно лазить за защищенный контейнер из любой из этих систем).

Не стоит пренебрегать защитой собственных конфиденциальных, которые приходится хранить в электронном виде (работать без паролей или со слабыми паролями, надеяться на принцип «никто не угадает», например, какая у меня тут маска подсети и использовать WEP, взламываемый за минуты, вместо WPA, не блокировать консоль компьютера, когда отходишь и т.д.). Все хорошо до первой засады, цена которой может быть очень высокой.

19 комментариев:

  1. Тема очень важная, если конечно не блондинко 1234. Keepass пользуюсь давно. Лучшая по виндузами. Под linux тоже имеется, только отстают версии. На True Crypt стал заглядываться недавно. Хочу себе прикрутить True Crypt + E-Token. Mail.ru - российская помойка.

    ОтветитьУдалить
  2. Спасибо, познавательный блог.

    ОтветитьУдалить
  3. смею предположить (ни в коем случае не в защиту меил.ру), что скорее всего всё-таки пароль слит не администраторами самого сервиса, а "подсмотрен" какими-нибудь простейшими снифферами сетевого траффика. Там ведь авторизация по-моему до сих пор по http, никакого https. А значит всё передаётся банально в текстовом и открытом виде. Как и в аське, кстати.

    Поправьте меня, если я не прав.

    ОтветитьУдалить
  4. Пользуюсь KeePass 3 года, под Windows, под Mac OS и Windows Mobile - очень удобно. TrueCrypt только под Windows - держу зашифрованным один жесткий диск, на всякий случай.

    ОтветитьУдалить
  5. В простом случае хранится свертка.

    И что перебор хешей проблема большая ?

    Масса программ которая быстро их перебирает используя CUDA я не говорю про онлайн сервисы.

    ОтветитьУдалить
  6. >Я не «восторженная блондинко»™ с паролем «1234» на все и имею здравый смысл

    Ну парниша сурьезный :) На "все" имеет "здравый смысл" пока этот смысл не поимеет тебя :)


    Пароль там был «сильный», и единственный способ его потери – это сдача «налево» кем-то из «администрации»

    Такое громкое заявление :) Троян на вашем компе "слил" данные почты без всякой администрации майл сру на которую вы так окрысились ...

    ОтветитьУдалить
  7. юзаю keepass чуть больше года. для удобства чтения на разных компах - сливаю файл-хранилище на dropbox.

    ОтветитьУдалить
  8. denfed: Мой пароль, например, 20 символов. По словарю - врядли. Вопрос: за сколько конкретно времени вы сможете найти его перебором? а подобрать его хэш SHA-512? Я удовлетворюсь хотя бы оценкой порядка этого времени.

    ОтветитьУдалить
  9. open-source - не панацея. Даже в нём могут быть закладки. Закладки в математике: в реализации криптоалгоритмов. Грубо говоря, могут такой криптоалгоритм написать, что он будет удовлетворять заявленным стадартам, но благодаря, например, условиям инициализации, этот алгоритм будет генерировать на порядок меньше ключей. А это означает, что для их перебора необходимо меньше вариантов...

    ОтветитьУдалить
  10. Ну, может и правда, троян? Хотя, я к mail.ru особой лояльности не испытываю, и работу их ТП в данном случае не одобряю (я вообще ее не одобряю, у знакомых было несколько случаев «общения»).

    ОтветитьУдалить
  11. А какой версией KeePass вы пользуетесь? Сам юзаю ее больше года, но только сейчас заметил что там две ветки. Причем как написано на сайте 2.хх не базируется на 1.хх.

    ОтветитьУдалить
  12. Гуд, хороший текст, правильное направление.
    На некоторых версиях Linux есть (были) проблемы с установкой TrueCrypt. Как это побороть я писал в блоге ejewika dot blogspot dot com.
    Удачи!

    ОтветитьУдалить
  13. Pandora: Можно хотя бы один пример такой open-source программы? Если это стандартный AES, RSA или SHA1 - как его можно реализовать с "закладкой" в open-source'e?

    Tool: Я пока на 1.17, ибо у 2.* другой формат базы, который пока не поддерживается клоном на Андроиде.

    ОтветитьУдалить
  14. Took: их вообще три версии, под десктопы, 1.xx, 2.xx(на .NET написана, под Linux с помощью mono запускается), и keepassx, написанная на Qt, совместима с базами 1.xx, есть под Linux и Windows.

    ОтветитьУдалить
  15. Использую много лет KeePassX - отличная штука, но:
    1. нет синхронизации между хранилищами.
    2. версии для Symbian (знаю только две) написаны на яве - обе тормозные и глюкавые.

    ОтветитьУдалить
  16. Хороший пост, только немного долго рассказывали.
    У меня такая проблема: перестал запускаться KeePass. Как я подозреваю, проблема с .netFramework. Пробовал переустановить netFramework, все равно не запускается. А версии Classic и Pro использую разные базы паролей (разрешения не поддерживаются). Может что подскажете?

    ОтветитьУдалить
  17. Я использую KeePass 1.*, который не использует .net.

    ОтветитьУдалить
  18. Что касается мэйлру - поддерживаю, отстойный сервис. Столкнулся, когда купил у них платные опции в их магазине (mail.ru shop) и не получил. Ответы от их ТП приходили через неделю, а потом вообще прекратили отвечать.
    Что касается keepass и синхронизации - можно использовать для хранения базы сетевое хранилище (dropbox, idisk, mesh и т.п.)

    ОтветитьУдалить
  19. "Что касается keepass и синхронизации - можно использовать для хранения базы сетевое хранилище (dropbox, idisk, mesh и т.п.)"

    Как вы себе это представляете? Я на мобильном телефоне внесу запись ААА, на лэптопе внесу запись БББ. Как мне вышеперечисленные сервисы помогут синхронизировать записи?

    ОтветитьУдалить