В рамках нашей реализации безопасной загрузки Linux с использованием dm-verity и проверка подписи корневого хэша, мне нужно подписать файл следующей командой openssl (пример):
openssl smime -sign -nocerts -noattr -binary -in unsigned.txt -inkey private.key -signer cert.pem -outform der -out signed.txt
При этом создается файл PKCS#7, который затем может быть успешно обработан ядром Linux.
Но для производства мы не используем openssl, а Сервер подписи PrimeKey (который основан на bouncycastle) с подписчиком CMS. Здесь мне пока не удалось настроить подписывающую сторону CMS для создания рабочего PKCS#7. Проблема заключается в различии алгоритма дайджеста_enc_algorithm, как показано на изображении ниже (слева: сервер подписи, справа: openssl).
Проблема в том, что ядро не будет поддерживать этот OID. Простое добавление sha256WithRsaEncryption к коммутатору устраняет проблему, но я не уверен, что это правильное решение.
Еще одно «исправление», которое я нашел, заключалось в простой замене OID подписанного файла PKCS # 7, что также вызывает у меня несколько вопросов ?!
Теперь мои вопросы:
- Есть ли реальная разница между rsaEncryption и sha256WithRsaEncryption в этом контексте?
- Почему можно изменить файл PKCS#7 и все работает нормально?
- Было бы правильным исправить добавление OID в регистр переключателей в ядре? (по крайней мере, с точки зрения криптографии)
Спасибо за Вашу поддержку!
ОБНОВИТЬ: Нашел эту проблему об отставании сервера подписи PrimeKey.