Добрый день!
Реализовываю проверку подлинности подписи на бэке с помощью тестовых ключей.
На фронте происходит подпись документа в base64 формате с установленными флагами:
decode: true,
encapsulate: false,
digested: false.
Обращение идет к модулю “kz.gov.pki.knca.basics”, метод “sign”.
Далее, detached подпись проверяется с помощью функции VerifyData (KalkanCryptCOM, v3.0.0.0, проект на .NET) с флагами:
KC_SIGN_CMS,
KC_IN_PEM,
KC_IN2_BASE64,
KC_OUT_BASE64,
KC_DETACHED_DATA.
Обнаружил два кейса:
- если подписываемые данные (string) небольшого размера, то проверка проходит успешно.
- если же данные большого размера, то получаю ошибку:
error:2E09A09E:CMS routines:CMS_SignerInfo_verify_content:verification failureCMS Verify - FAILED.
При подписывании использую один и тот же ключ.
Подскажите, в чем может заключаться проблема, и как ее решить?
Правильно ли подписывать/валидировать длинную base64 строку, или размер входящих данных не имеет значения? Может необходимо пользоваться иными методами при формировании/валидации подписи?
Правильнее ли будет подписывать SHA256 хэш документа (и проверять соответственно его же)?