Форматы файлов JKS, BKS и PKCS12
Я нахожусь в процессе настройки безголового сервера, который создает гибридные приложения PhoneGap для Android с использованием данных - JS, CSS, HTML + хранилище ключей - предоставляемых пользователем. Я хочу установить некоторые базовые проверки на стороне клиента, чтобы убедиться, что загружаемое хранилище ключей действительно. Я обнаружил, что для файлов JKS я могу выполнить элементарную проверку, убедившись, что первые четыре байта предоставленного файла являются ВОЛШЕБНЫМ числом. 0xFEEDFEED
как указано здесь. Я понимаю, что это не исключает возможности того, что пользователь поставляет мусор, но помогает в качестве предварительного экрана на стороне клиента. Я хотел бы реализовать аналогичное экранирование для хранилищ ключей PKCS12 и BKS, но не смог найти объяснений для этих форматов файлов. Я был бы очень признателен всем, кто мог бы предоставить некоторую информацию по этому вопросу.
1 ответ
Во-первых, две вещи, которые следует учитывать:
- JCEKS отсутствует в вашем списке (более безопасная версия JKS, магический номер
0xCECECECE
). - Есть две несовместимые версии БКС. Более новая версия была представлена в Bouncy Castle 1.47, полностью заменив старую версию. Поэтому хранилища ключей BKS, созданные с помощью BC 1.47 или новее, не могут быть прочитаны с BC 1.46 или старше. В BC 1.49 был добавлен новый тип хранилища ключей "BKS-V1", который совместим со старым форматом (см. Примечания к выпуску BC).
Формат BKS начинается с номера версии в первых 4 байтах и заканчивается нулевым байтом и хешем SHA-1 (20 байтов).
PKCS # 12 не так легко обнаружить. Вам придется проанализировать его как структуру ASN.1 (см. RFC 7292):
PFX ::= SEQUENCE {
version INTEGER {v3(3)}(v3,...),
authSafe ContentInfo,
macData MacData OPTIONAL
}
Если это не может быть проанализировано как ASN.1, это не PKCS#12.
Для более доступного объяснения формата PKCS12 проверьте здесь.