KeePass user guide / KeePass - руководство пользователя: Безопасность

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Безопасность
Детальная информация о безопасности в KeePass.

victor8632 05.10.10 в 09:55

0

Шифрование базы данных
Хэширование и ключ вывода
Генерация случайных чисел
Защита от атак подбором по словарю
Защита памяти процессов
Блокировка рабочего места
Подключаемые модули (плагины)
Самотестирование
Специализированное шпионское ПО
Ссылки

victor8632 05.10.10 в 09:57

0

Шифрование базы данных
KeePass шифрует файл базы данных. KeePass шифрует базу данных полностью, т.е. не только пароли. Имена пользователей, примечания и др. тоже шифруются.

victor8632 05.10.10 в 10:03

0

База данных шифруетя с использованием одного из следующих блочных шифров:

victor8632 05.10.10 в 10:04

0

Размер блока шифра / Размер ключа
Расширенный стандарт шифрования (AES / Rijndael) - 128 бит / 256 бит
Twofish - 128 бит / 256 бит

victor8632 05.10.10 в 10:14

0

Эти алгоритмы хорошо известны, тщательно анализировались и считаются очень безопасными в криптографическом сообществе (см. [1] для комментариев, например, по NIST в AES).

victor8632 15.10.10 в 10:20

0

KeePass 2.x сам не поддерживает Twofish, но дополнительные алгоритмы шифрования могут быть предоставлены при помощи плагина.
Блочные шифры используются и CBC (шифр-блок цепочки) блочном режиме шифрования. В CBC режиме модели открытого ключа не раскрыаются.

victor8632 05.10.10 в 10:26

0

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

victor8632 05.10.10 в 10:32

0

Хэширование и ключ вывода
Чтобы сгенерировать 256-битный ключ для блочных шифров, используется алгоритм безопасности хэша SHA-256. Этот алгоритм сжимает ключ, предоставляемый пользователем (включая пароль и/или ключевой файл), до ключа фиксированной длины в 256 битов. Эта трансформация является однонаправленной, т.е. невозможно инвертировать хэш функцию или найти второе сообщение, которое сжималось бы к тому же хэшу.

victor8632 05.10.10 в 11:01

0

Недавно обнаруженная атака на SHA-1 [2] не повлияла на мнение о безопасности SHA-256. SHA-256 по-прежнему считается очень безопасным [3].

victor8632 06.10.10 в 13:42

0

Создание ключа:
Если для шифрования используется только пароль (т.е. ключевой файл не используется), то пароль плюс 128-битное случайное значение хэшируется при помощи SHA-256 до получения окончательного ключа (но имейте в виду, что имеет место некоторая предварительная обработка: см. Защита от атак на каталоги). Использование случайного значения предотвращает атаки, базирующиеся на предварительно вычисленных хэшах.

victor8632 06.10.10 в 13:53

0

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

victor8632 06.10.10 в 14:04

0

Генерация случайных чисел
KeePass нуждается в генерации случайных последовательностей байтов (для IV, для создания мастер-ключа и т.п.). Для этого используются различные псевдослучайные источники: текущее количество тиков, счетчик производительности, системные дата/время, позиция курсора мыши, состояние памяти (количество свободной виртуальной памяти, и т.п.), активные окна, владелец буфера обмена, различные процессы и ID потоков, различные оконные указатели (активное окно, рабочий стол, ...), стек оконных сообщений, состояние буфера процессов, информация запуска процессов и различные информационные структуры системы. Дополнительно KeePass использует случайные байты, представляемые системой через текущие CSP RNG.

victor8632 06.10.10 в 14:20

0

Эти псевдослучайные данные накапливаются в пуле случайных значений. Для генерации 16 случайных байт пул хэшируется (SHA-256) с использованием указателя. Указатель увеличивается после генерации 16 байт. Таким образом, может быть эффективно получено столько случайных байтов, сколько это необходимо.

victor8632 07.10.10 в 12:18

0

Защита от атак подбором по словарю
Keepass поддерживает защиту от угадывания и атак подбора по словарю.

victor8632 07.10.10 в 12:23

0

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

victor8632 07.10.10 в 12:54

0

Для создания окончательного 256-битного ключа, который используется для блочного шифрования, KeePass сначала хэширует пароль пользователя, используя SHA-256, шифрует результат N раз, используя алгоритм расширенного стандарта шифрования (AES) (это так называемые циклы текущего преобразования ключа) и потом результат хэшируется еще раз с использованием SHA-256. Для AES используется 256-битный случайный ключ, который сохраняется в файле базы данных. Так как AES преобразования не являются предварительно вычисленными (ключ - случайный), злоумышленник тоже вынужден будет повторить все циклы шифрования, иначе он не может проверить и посмотреть, является ли текущий ключ правильным.

victor8632 08.10.10 в 06:23

0

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

victor8632 08.10.10 в 06:33

0

По умолчанию KeePass устанавливает N равным 6000 циклам шифрования (имеется в виду полное шифрование; N не имеет ничего общего с внутренними циклами шифрования AES). Такое количество было выбрано для поддержания совместимости с портативными устройствами (процессоры PocketPC значительно медленнее обычных, поэтому для получения ключа требуется больше времени).

victor8632 08.10.10 в 06:40

0

Если вы работаете только на обычном ПК, настоятельно рекомендуется увеличить количество циклов преобразования ключа. Вы можете изменить это количество в диалоге параметров базы данных паролей. Справа от поля ввода количества циклов есть кнопка. При нажатии на нее KeePass вычисляет количество циклов, которое приведет к задержке в одну секунду. Подождать 1 секунду открытия базы данных - не проблема, однако, это конечно же большая неприятность для злоумышленника. Однако количество циклов может выставлено любым по вашему выбору, кнопка просто позволяет дать вам приблизительное представление о том, сколько циклов в секунду может быть выполнено на вашем компьютере.

victor8632 08.10.10 в 06:51

0

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

victor8632 08.10.10 в 06:59

0

KeePass испоьзует многопоточную обработку для вычисления преобразований (мастер ключ делят на две части по 128 бит, что является размером блока AES). На двух/многоядерных процессорах вычисленя могур проведены в два раза скорее, чем на процессоре с одним ядром.

victor8632 08.10.10 в 07:04

0

На Windows Vista и выше KeePass может использовать Windows' CNG/BCrypt API для преобразований ключа, что увеличивает скорость вычислений на 50% по сравнению с использованием встроенного программного кода KeePass.

victor8632 08.10.10 в 07:07

0

KeePassX:
В отличие от KeePass адаптированный для Linux проект 'KeePassX' только частично поддерживает защиту от атак подбора.

victor8632 13.10.10 в 12:55

0

Защита памяти процессов
Пока KeePass запущен, конфиденциальные данные (такие как хэш мастер ключа и введенные пароли) хранятся в памяти процесса.

victor8632 13.10.10 в 12:58

0

Это означает, что даже если вы сделаете дамп памяти процесса KeePass на диск, вы не сможете получить пароли.

victor8632 13.10.10 в 13:02

0

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

victor8632 13.10.10 в 13:07

0

Кроме того, KeePass затирает все критические по соображениям безопасности участки памяти, когда они становятся не нужны, т.е. перезаписывает эти участки памяти перед освобождением (это касается всех критичных по безопасности участков памяти, не только полей паролей).

victor8632 15.10.10 в 08:04

0

KeePass версий выше 1.15 и 2.x использует Windows DPAPI для шифрования конфиденциальных данных, находящихся в памяти. При использовании DPAPI ключ шифрования данных в памяти, находится в особо защищенной, не свопируемой области памяти под управлением Windows. Если DPAPI недоступен или отключен (в расширенных настройках KeePass по умолчанию включено использование DAPI), KeePass будет использовать алгоритм шифрования ARC4 для создания случайного ключа. Имейте в виду, что это менее предпочтительно по безопасности по сравнению с DAPI не потому что ARC4 криптографически недостаточно строг, а потому что ключ для шифрования в памяти также будет храниться в свапируемой памяти процесса.

victor8632 15.10.10 в 08:29

0

Блокировка рабочего места
Когда блокируется рабочее место, KeePass закрывает файл базы данных и помнит только установки последнего просмотра (последнюю выбранную группу, выбранную запись пароля и т.п.)

victor8632 15.10.10 в 08:33

0

Это обеспечивает максимальную безопасность: разблокирование рабочего места является таким же простым как и открытие файла базы данных заново обычным путем. Также это предотвращает потерю данных (компьютер может отключиться, в то время как KeePass заблокирован, и это не доставит базе данных никакого вреда).

victor8632 15.10.10 в 08:41

0

Безопасность плагинов
Существует соответствующая страница в сети по безопасности плагинов, которая так и называется: Plugin Security.

victor8632 15.10.10 в 08:44

0

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

victor8632 15.10.10 в 08:51

0

Специализированное шпионское ПО
Этот раздел позволяет получить ответы на следующие вопросы:

victor8632 15.10.10 в 09:12

0

Поможет ли шифрование конфигурационного файла увеличению безопасности в плане предотвращения изменений вредоносными программами?
Поможет ли шифрование приложения (запускаемого файла, ну и в конечном итоге вместе с ним конфигурационного файла) увеличению безопасности в плане предотвращения изменений вредоносными программами?
Существует ли возможность увеличения безопасности при запуске плагинов?
Повысит ли безопасность хранение параметров безопасности в базе данных (для этого нужно переопределить настройки экземпляра KeePass)?
Ответ на все эти вопросы - нет. Добавление любой из этих возможностей не повысит безопасность.

victor8632 15.10.10 в 09:20

0

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

victor8632 15.10.10 в 09:59

0

В этой ситуации самые лучшие меры безопасности будут обречены на провал. Это закон №1 из 10 непреложных законов безопасности: "Если плохой парень сможет убедить вас запустить свою программу на вашем компьютере, это уже не ваш компьютер".

victor8632 15.10.10 в 10:03

0

Рассмотрим очень простой пример шпионской программы, направленной против KeePass: пусть это будет приложение, которое ждет запуска KeePass, потом скрывает запуск и имитирует из себя KeePass. Все взаимодействия с пользователем (такие как ввод пароля для расшифровки конфигурации и т.п.) могут быть сэмулированы. Единственным способом определить, что мы пользуемся шпионской программой является использование программы, о которой вредоносная программа не знает или которой не может манипулировать (рабочий стол безопасности); в любом случае это не может быть KeePass.

victor8632 15.10.10 в 10:15

0

Ссылки для дальнейшего чтения
[1] National Institute of Standards and Technology: Report on the Development of the Advanced Encryption Standard (AES) (PDF).

victor8632 15.10.10 в 10:15

0

[2] Bruce Schneier's blog: SHA-1 broken.

victor8632 15.10.10 в 10:16

0

[3] Bruce Schneier's blog: Cryptanalysis of SHA-1, with comments about the impact of that discovery and what to do now.

victor8632 15.10.10 в 10:16

0

[4] Scott Culp, Microsoft TechNet Essay, 2000: 10 Immutable Laws of Security.

victor8632 15.10.10 в 10:17

0

[5] Jesper M. Johansson, Microsoft TechNet Magazine, 2008: Revisiting the 10 Immutable Laws of Security, Part 1.

victor8632 15.10.10 в 10:17

0
Минутку...