Форматы файлов 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 проверьте здесь.

Другие вопросы по тегам