Неверная подпись файла файл не является базой keepass либо он поврежден
Я пытаюсь проверить подпись PGP последней версии установочного файла KeePass 2.14 по этой подписи, но я получаю вывод:
Я нашел эту команду здесь, но она не упоминала о файлах ".sig" или ".asc", поэтому решил, что сделал что-то не так. Читая справочные страницы, я также попробовал следующее:
Как видите, результаты довольно запутанные .
Я взглянул на это в SuperUser, но ни одна из ссылок, похоже, не отвечала на мой вопрос, по крайней мере, не настолько, чтобы я мог понять, как двигаться дальше в этом вопросе.
Может ли кто-нибудь здесь помочь мне с эзотерической технической спецификой OpenPGP и связанным с этим использованием программы GnuPG? Я чувствовал себя довольно глупо, изучая VBS, но это не просто унизительно: это абсолютно изнурительно и подрывает всю мою уверенность в своих навыках в области ИТ (опять же, у меня нет никаких оснований для того, чтобы хвастаться, так как я еще не получил свой + Cert, LOL).
ОБНОВЛЕНИЕ 04-04-2011
Итак, я устал от дурачения с Windows и решил, что сделаю это правильно, загрузив Ubuntu; одно это сделало вещи намного более логичными!
Итак, вот мой список команд и где я нахожусь:
Как и велел Майк, я поместил файлы «.exe» и «.asc» в тот же каталог, где находится «Рабочий стол». Как вы можете видеть в коде, я также поместил открытый ключ "Dominik_Reichl.asc" в каталог Desktop.
Пожалуйста, будьте терпеливы со мной, так как я был полностью испорчен MD5; Я предполагаю, что Шаг 5 сверху - это GPG, эквивалентный следующему:
Я говорю об этом, потому что поведение меняется, когда я перемещаю файл «KeePass-2.14-Setup.exe» в папку "temp" на рабочем столе. Когда я запускаю команду, это результат, который я получаю:
Эти результаты привели меня к мысли, что я должен извлечь "идентификатор ключа DSA" и "отпечаток первичного ключа" из шага 5 и сравнить их со значениями в верхней части страницы подписи. Итак, где же сходство с проверкой MD5? Это все, что нужно? Или есть еще один шаг? Есть ли команда, которую я использую для проверки этих двух строк? Это те строки, которые мне действительно нужно проверить? Что это за строки?
Пока я удаляю этот лишний пробел, мои результаты совпадают с результатами со страницы подписи, но разве они не должны совпадать без какого-либо вмешательства с моей стороны? Должна ли разница в пробелах вызывать тревогу?
К сожалению, страницы руководства GPG для меня все еще неясны, или, как некоторые могут назвать это "враждебным по отношению к пользователю" (поиск "user hostile gpg"), поэтому мне понадобится пара дополнительных морковок. Я признаю это: я тупой. На самом деле, когда я все еще учился использовать проверку MD5, я с ней почти так же, как и с ней, боролся с ней.
На днях мне нужно было реализовать расшифровку базы данных KeePass. Меня поразило то, что нет ни одного документа и ни одной статьи с исчерпывающей информацией об алгоритме расшифровки файлов .kdb и .kdbx с учетом всех нюансов. Это и побудило меня написать данную статью.
На данный момент существует 2 версии KeePass:
- KeePass 1.x (генерирует файлы .kdb);
- KeePass 2.x (генерирует файлы .kdbx).
Структура файла с базой данных KeePass (.kdb, .kdbx) состоит из 3 частей:
- Подпись (не зашифрована);
- Заголовок (не зашифрован);
- Данные (зашифрованы).
Далее я подробно расскажу о том, как дешифровать базу данных KeePass 1.x и KeePass 2.x.
Расшифровка базы данных KeePass
Последовательность действий:
- Читаем подпись базы данных.
- Читаем заголовок базы данных.
- Генерируем мастер-ключ.
- Расшифровываем базу данных.
- Проверяем целостность данных.
- Если файл был сжат, распаковываем его.
- Расшифровываем пароли.
Пункты 5, 6 и 7 относятся только к .kdbx файлам!
Подпись
BaseSignature (4 байта)
Первая подпись одинакова для .kdb и .kdbx файлов. Она говорит о том, что данный файл является базой данных KeePass:
VersionSignature (4 байта)
Bторая подпись указывает на версию KeePass и, следовательно, отличается для .kdb и .kdbx файлов:
- 0xB54BFB65 — KeePass 1.x (файл .kdb).
- 0xB54BFB66 — KeePass 2.x pre-release (файл .kdbx).
- 0xB54BFB67 — KeePass 2.x post-release (файл .kdbx).
FileVersion (4 байта)
Третья подпись есть только у файлов .kdbx и содержит в себе версию файла. Для файлов .kdb данная информация содержится в заголовке базы данных.
Таким образом, в KeePass 1.x длина подписи составляет 8 байт, а в KeePass 2.x — 12 байт.
Заголовок
После подписи базы данных начинается заголовок.
Заголовок KeePass 1.x
Заголовок .kdb файла состоит из следующий полей:
- Flags (4 байта): данное поле говорит о том, какие виды шифрования использовались при создании файла:
- 0x01 — SHA256;
- 0x02 — AES256;
- 0x04 — ARC4;
- 0x08 — Twofish.
- Version (4 байта): версия файла.
- Master Seed (16 байт): используется для создания мастер-ключа.
- Encryption IV (16 байт): используется для расшифровки данных.
- Number of Groups (4 байта): общее количество групп в базе данных.
- Number of Entries (4 байта): общее количество записей в базе данных.
- Content Hash (32 байта): hash расшифрованных данных.
- Transform Seed (32 байта): используется для создания мастер-ключа.
- Transform Rounds (4 байта): используется для создания мастер-ключа.
Заголовок KeePass 2.x
В .kdbx файлах каждое поле заголовка состоит из 3 частей:
- ID поля (1 байт): возможные значения от 0 до 10.
- Длина данных (2 байта).
- Данные ([длина данных] байт)
Заголовок .kdbx файла состоит из следующий полей:
- ID=0x01 Comment: данное поле может быть представлено в заголовке, но в моей базе данных его не было.
- ID=0x02 Cipher ID: UUID, указывающий на используемый метод шифрования (например, для AES 256 UUID = [0x31, 0xC1, 0xF2, 0xE6, 0xBF, 0x71, 0x43, 0x50, 0xBE, 0x58, 0x05, 0x21, 0x6A, 0xFC, 0x5A, 0xFF]).
- ID=0x03 Compression Flags: ID алгоритма, использующегося для сжатия базы данных:
- 0x00: None;
- 0x01: GZip.
- 0x00: None;
- 0x01: ARC4;
- 0x02: Salsa20.
Генерация мастер-ключа
Генерация мастер-ключа происходит в 2 этапа:
- Генерация составного ключа;
- Генерация мастер-ключа на основе составного ключа.
1. Генерация составного ключа
Для генерации составного ключа используется хэш-алгоритм SHA256. В таблицах ниже представлен псевдокод для генерации составного ключа, исходя из того, какая версия KeePass используется, и какие входные данные необходимы для расшифровки базы данных (только пароль, только файл-ключ или все вместе):
Пароль sha256(password) Файл-ключ sha256(keyfile) Пароль + Файл-ключ sha256(concat(sha256(password), sha256(keyfile)))
Пароль sha256(sha256(password)) Файл-ключ sha256(sha256(keyfile)) Пароль + Файл-ключ sha256(concat(sha256(password), sha256(keyfile))) Windows User Account (WUA) sha256(sha256(WUA)) Пароль + Файл-ключ + (WUA) sha256(concat(sha256(password), sha256(keyfile), sha256(WUA)))
Обращаю внимание на то, что если для расшифровки базы данных необходимо несколько сущностей (например, пароль и файл-ключ), то сначала нужно получить хэш от каждой сущности, а потом соединить их вместе (concat) и взять хэш от объединенной последовательности.
2. Генерация мастер-ключа на основе составного ключа
- Нужно зашифровать составной ключ, полученный выше, с помощью алгоритма AES-256-ECB.
- В качестве ключа нужно использовать Transform Seed из заголовка.
- Данное шифрование нужно произвести Transform Rounds (из заголовка) раз.
- С помощью SHA256 получаем хэш от зашифрованного составного ключа.
- Соединяем Master Seed из заголовка с полученным хэшем.
- С помощью SHA256 получаем хэш от объединенной последовательности — это и есть наш мастер-ключ!
Расшифровка данных KeePass 1.x
Сразу после заголовка начинается сама зашифрованная база данных. Алгоритм расшифровки следующий:
- Весь оставшийся кусок файла расшифровываем с помощью алгоритма AES-256-CBC.
- В качестве ключа используем сгенерированный выше мастер-ключ.
- В качестве вектора инициализации используем Encryption IV из заголовка.
- Последние несколько байт расшифрованной базы данных являются лишними — это несколько одинаковых байт в конце файла (padding). Чтобы устранить их влияние, нужно прочитать последний байт расшифрованной БД — это то количество «лишних» байт, которое в дальнейшем учитывать не надо.
- С помощью SHA256 получаем хэш от расшифрованных данных (байты из предыдущего пункта не учитываем).
- Проверяем, что полученный хэш совпадает с полем Content Hash из заголовка:
- eсли хэш совпадает, то мы успешно расшифровали нашу базу данных! Можно сохранить расшифрованные данные как .xml файл и убедиться, что все логины с паролями расшифрованы верно,
- eсли хэш не совпадает, это значит, что либо был предоставлен не верный пароль или файл-ключ, либо данные были повреждены.
Расшифровка данных KeePass 2.x
Сразу после поля End of Header заголовка начинается сама зашифрованная база данных. Алгоритм расшифровки следующий:
Вот в общем-то и все, что я хотела рассказать. Надеюсь данное руководство избавит кого-нибудь от лишней головной боли и будет познавательным и информативным=)
Читайте также: