Трунов
Д.Н.
Компьютерная программа PasswordKeeper для
безопасного хранения паролей и заметок к ним
Введение
По оценкам специалистов, средний
пользователь имеет около 26 защищаемых паролем аккаунтов [1]. Заучить на память
такое количество паролей практически невозможно, поэтому многие пользователи прибегают
к различным ухищрениям, используя один и тот же пароль на нескольких сайтах или
используя слишком лёгкие комбинации. Эксперты, анализируя выложенные в сети данные
с сайтов, взломанных хакерами, замечают, что около 20% пользователей выбирают
очень простые и схожие пароли, например «123456» или «Password» [2]. Все подобные
ухищрения не являются безопасными по тем или иным причинам.
Наилучшим способом хранения паролей по
совокупности надёжности и удобства является использование специальных программ
– менеджеров паролей. Однако, наряду со своими преимуществами, у каждого
менеджера паролей есть и свои недостатки, в том числе отсутствие бесплатной
версии (например, 1Password)
или её ограничения. Так, в бесплатной версии Kaspersky Password Manager можно сохранять до 15
паролей, а менеджер паролей от компании Avast устанавливается
на ПК только вместе с антивирусом Avast.
Самый известный из полностью бесплатных
менеджеров KeePass
Password
Safe
обладает устаревшим дизайном и потенциальными уязвимостями в применении
подключаемых плагинов, написанных независимыми авторами [3]. Потенциально
уязвимым является и LastPass,
который предоставляет возобновление доступа к паролям даже без знания
мастер-пароля. И хотя для этого принимаются меры безопасности, нет полной
уверенности в отсутствии способов обойти эти меры злоумышленниками.
Общая
характеристика программы PasswordKeeper
Программа PasswordKeeper представляет собой
альтернативное решение для хранения личных паролей пользователя, простое и
безопасное. Программа не требует установки, может легко переноситься и
запускается на любом компьютере с установленной платформой .NET Framework или
Mono
[4]. Как и в случае с другими менеджерами, для защиты сохраняемых паролей
применяется мастер-пароль, единственный требующий запоминания.
В программе реализован только самый
необходимый функционал: возможность добавлять, просматривать, редактировать и
удалять пароли, перемещать их и производить по ним поиск. Есть возможность
заменять мастер-пароль, а также создавать и работать с резервными копиями
хранилища паролей. Также имеются несколько дополнительных инструментов, таких как
генератор случайных паролей и виртуальная клавиатура.
Программа написана на языке
программирования C#
(среда разработки Microsoft
Visual
C#
2008), предназначена для работы в GUI-среде (graphics user interface –
графический интерфейс пользователя) и для взаимодействия с пользователем предлагает
главное (рисунок 1) и ряд вспомогательных окон. Для простоты реализации в
интерфейсе программы применяются только стандартные элементы управления языка C# и библиотеки System.Windows.Forms [5].
Концепция
хранения паролей
Для хранения паролей PasswordKeeper использует специальный
файл-хранилище, который располагается в одном каталоге вместе программой. При
каждом запуске программа открывает этот файл автоматически (или создаёт, если
его нет). Пароли добавляются и хранятся в этом файле в виде записей (рисунок
2), включающих в себя заголовок (название) записи, непосредственно пароль и
заметку к нему. Заметка предназначена для дополнительных сведений и не является
обязательной.
Рисунок 1 – Главное окно с открытым опытным
хранилищем
Рисунок 2 – Пример открытой парольной записи
Для упрощения структуры хранилища пароль
с заметкой объединяются в единое поле при сохранении, а при открытии записи они
снова разделяются. Заголовок и пароль могут иметь допустимую длину от 1 до 255
символов каждый, а объединённый пароль с заметкой может содержать до 4095
символов. Поскольку в программе применяется кодировка текста Unicode, то символом считается
его двухбайтный код. Если какой-то символ занимает 4 байта, они считаются как
два символа.
При добавлении записи в хранилище она
обязательно шифруется по алгоритму ESCK-5 [6]. Для этого на основе мастер-пароля создаются
два ключа шифрования: лёгкий и тяжёлый. Основное их различие заключается в
применяемых циклах шифрования. Лёгким ключом с небольшим количеством циклов
шифруются заголовки записей, чтобы их быстрее расшифровывать при открытии
хранилища и построении списка. Тяжёлым ключом с большим количеством циклов
шифруются пароли (с заметками), которые будут расшифровываться только в момент
открытия записи.
Ключи вычисляются таким образом, чтобы
даже вскрытие лёгкого ключа не позволило злоумышленникам узнать мастер-пароль
и/или получить тяжёлый ключ. Схема вычисления выглядит следующим образом:
1. На основе мастер-пароля генерируется
тяжёлый ключ с циклами шифрования, заданными пользователем.
2. По заранее установленному шаблону
генерируется лёгкий ключ с установкой режима, при котором ключ меняется при
участии блока шифруемых данных (блок данных добавляется к ключу по специальному
алгоритму). Временно применяется большое количество циклов шифрования.
3. Создаётся временный массив,
заполняемый по установленному шаблону, и шифруется тяжёлым ключом.
4. Тот же массив шифруется лёгким
ключом, причём сам ключ меняется при участии содержимого массива.
5. В лёгком ключе устанавливается
простой режим шифрования (когда ключ больше не меняется при участии шифруемых
данных) и устанавливается небольшое количество циклов шифрования. Ключи готовы.
Для контроля отсутствия искажений
созданных ключей во время работы программы в начале работы ими зашифровываются
две контрольные строки: одна лёгким ключом, вторая – тяжёлым. При добавлении
или изменении записи, когда она уже зашифрована и готова к сохранению,
выполняется расшифровка контрольных строк. При обнаружении ошибки сохранение отменяется
и пользователю выдаётся предупреждающее сообщение.
Создание
и открытие хранилища
При каждом запуске программа пытается
открыть существующее хранилище паролей и, если его нет, инициирует создание
нового. В этом случае пользователю необходимо в специальном окне (рисунок 3)
указать имя профиля для создаваемого хранилища, ввести мастер-пароль и
количество циклов шифрования (применяются для создания тяжёлого ключа). Циклы
шифрования указаны по умолчанию, поэтому их можно не менять.
Рисунок 3 – Окно установки пароля и параметров
нового профиля
Имя профиля необходимо, чтобы различать
создаваемые хранилища. Для каждого экземпляра программы может быть создан
единственный файл-хранилище. Но, поскольку экземпляров программы может быть
несколько (в разных каталогах), то столько же может быть и файлов-хранилищ.
Чтобы в них не путаться, их можно различать по имени профиля.
Для корректной работы при создании
хранилища в него изначально записывается некоторая техническая информация:
идентификатор программы, количество циклов шифрования, имя профиля и
зашифрованное имя профиля. Шифрование имени профиля необходимо для проверки
мастер-пароля при открытии хранилища и выполняется лёгким ключом.
Хотя лёгкий ключ шифрует быстрее
тяжёлого (обычно), на его создание нужно больше времени, что должно затруднить
возможность взлома мастер пароля методом «грубой силы» (полным перебором
возможных вариантов) [7], поскольку для каждого варианта придётся вычислять и
тяжёлый, и лёгкий ключи, а это затратно по времени.
При открытии существующего хранилища
программа требует только ввести мастер-пароль, а имя профиля и количество
циклов шифрования считывает из файла. На основе введённого мастер-пароля
создаются тяжёлый и лёгкий ключи, расшифровывается имя профиля. Если расшифровка
выполнилась успешно, хранилище загружается в память программы, расшифровываются
названия записей и выводятся в список в главном окне. Программа готова к
работе.
Контроль
PIN-кода
Если шифрование призвано защитить
сохранённые пароли от взлома, то PIN-код
защищает пароли в открытой программе на оставленном без присмотра компьютере.
При каждом вводе мастер-пароля программа требует установить 4-значный PIN-код сессии (рисунок 4 слева),
который будет действовать до закрытия программы или выполнения сброса (если PIN-код не установить, хранилище не
будет загружено). Далее при каждой ключевой операции с паролями (открытие,
изменение или удаление), понадобится опять ввести тот же PIN-код (рисунок 4 справа). Если код
будет введён неверно, операция не выполнится.
Рисунок 4 – Окна установки (слева)
и проверки (справа) PIN-кода
сессии
После трёх неверных попыток ввода PIN-кода хранилище закрывается, а
ключи шифрования удаляются. Возобновить доступ к хранилищу можно после его
повторного открытия (меню «Файл-Переподключиться»), ввода мастер-пароля и
установки нового PIN-кода
сессии.
При частом обращении к паролям проверку PIN-кода можно временно отключить. Для
этого при очередной его проверке нужно установить флажок «Не спрашивать
ближайшие 10 минут». Тогда на протяжении этого времени PIN-код не будет запрашиваться, но по
истечении 10 минут проверка возобновится.
Работа
с резервными копиями хранилища
Перед каждым изменением хранилища (например,
при добавлении или удалении записи) программа автоматически создаёт копию
хранилища в виде bak-файла.
В случае ошибки или необходимости отменить последнее изменение, хранилище можно
восстановить из этого файла в окне работы с резервными файлами (рисунок 5).
Поскольку каждый новый bak-файл
заменяет собой предыдущий такой файл (если он есть), возможность отмены
доступна только на одно изменение назад.
Рисунок 5 – Окно работы с резервными файлами
В том же окне предусматривается
возможность создавать и управлять произвольными резервными файлами. Такие файлы
создаются только по запросу пользователя, размещаются в специальном подкаталоге
Reserve
основного
каталога с программой и не заменяют друг друга, поскольку обладают уникальными
именами. Хранилище можно восстановить из любого доступного в списке резервного
файла. Если таких файлов слишком много, избыточные или устаревшие можно удалить
прямо из окна программы, выбрав соответствующий пункт контекстного меню списка
файлов.
Замена
и восстановление мастер-пароля
Замена мастер-пароля хранилища
производится в соответствующем окне (рисунок 6), в котором нужно ввести текущий
и новый мастер-пароль. При необходимости можно также поменять имя профиля и/или
количество циклов шифрования. Если текущий мастер-пароль введён правильно,
программа расшифрует все записи прежними ключами, вычислит новые ключи на
основе нового мастер-пароля, зашифрует обратно все записи и сохранит в
хранилище.
Рисунок 6 – Окно замены мастер-пароля
Исходя из соображений безопасности,
программа нигде не сохраняет мастер-пароль в открытом виде, а применение
шифрования с большим количеством циклов делают практически невозможным вскрытие
мастер-пароля или открытие хранилища без знания его. Но это же значит, что если
пользователь забудет свой мастер-пароль, то он никак не сможет открыть своё хранилище.
Возможно, пользователь захочет где-то
сохранить свой мастер-пароль. Чтобы не сохранять его в открытом виде, программа
предлагает сгенерировать код восстановления. Для этого нужно в специальном окне
(рисунок 7) ввести пароль восстановления и свой мастер-пароль. Фактически,
программа тщательно зашифровывает мастер-пароль ключом, созданным на основе
пароля восстановления. Для восстановления мастер-пароля в том же окне нужно
ввести пароль и код восстановления. Рекомендуется хранить пароль и код
восстановления в надёжном месте отдельно друг от друга.
Рисунок 7 – Окно восстановления пароля
Вспомогательные
инструменты
Одним из вспомогательных инструментов
является встроенная виртуальная клавиатура, которая представляет собой базовую
защиту от шпионских программ и может быть использована во всех случаях ввода
пароля или мастер-пароля (по нажатию кнопки «Клавиатура» возле соответствующего
поля). Для ввода предлагаются только цифры, латиница нижнего и верхнего регистров
и некоторые специальные знаки.
Другим вспомогательным инструментом
является генератор паролей (рисунок 8), предназначенный для создания случайных
и надёжных паролей. Генератор может запускаться как из главного меню, так и из
окон добавления или редактирования записи. Во втором случае сгенерированный
пароль можно «применить» – вставить прямо в поле ввода в соответствующем окне.
Генерация происходит с участием алгоритма DeepRand [8], случайные данные
для которого накапливаются в процессе работы программы.
Рисунок 8 – Встроенный генератор паролей
Заключение
Как и в других менеджерах паролей, в PasswordKeeper работает принцип:
вместо запоминания многих паролей достаточно запомнить всего один, а остальные
сохранить в программе. Тщательное шифрование сохраняемых данных защищают их от
взлома, а контроль PIN-кода
защищает работающую программу от любопытных родственников (дома) или коллег (на
работе) на оставленном без присмотра компьютере.
Возможность создания резервных копий хранилища
паролей и восстановления из них позволяет снизить риски потери данных, а
возможность генерации кода восстановления – не забыть мастер пароль. Встроенный
генератор паролей позволяет создавать случайные и надёжные пароли, а
виртуальная клавиатура обеспечивает более безопасный их ввод в программе.
Среди дополнительных преимуществ
программы можно выделить её портативность и возможность запуска (без установки)
на многих современных компьютерах с установленной платформой .NET Framework или Mono. Полезной также является возможность
работы с несколькими профилями на одном компьютере.
Источники
информации
1. Alex Hernandez. [Infographic] Password protection: Why it’s easy for hackers to hack [Электронный ресурс] – URL: https://techaeris.com/2018/05/25/password-protection-easy-hackers-hack
2. Геннадий Печёнкин. Самые популярные и
самые опасные пароли в интернете. – «Московский комсомолец» (mk.ru) [Электронный ресурс] – URL: https://www.mk.ru/science/article/2010/01/26/418065-samyie-populyarnyie-i-samyie-opasnyie-paroli-v-internete.html
3.Википедия. KeePass. [Электронный ресурс] – URL: https://ru.wikipedia.org/wiki/KeePass
4 Википедия. Mono. [Электронный ресурс] – URL: https://ru.wikipedia.org/wiki/Mono
5. Шилдт, Герберт. Полный справочник по C#.: Пер. с англ. – М.: Издательский
дом «Вильямс», 2004. – 752 с.: ил.
6. Трунов Д.Н. Алгоритм шифрования ESCK-5: описание, принцип работы, исходные тексты
[Электронный ресурс] – URL: http://d-raft5.blogspot.com/2018/04/esck-5.html
7. Википедия. Полный перебор. [Электронный ресурс] – URL: https://ru.wikipedia.org/wiki/Полный_перебор
8. Трунов Д.Н. Генератор случайных чисел
с механизмом глубокого накопления случайных данных DeepRand [Электронный ресурс] – URL: http://d-raft5.blogspot.com/2018/04/deeprand.html







