Ответ 1
"SHA256withRSA"
реализует дополнение и модульное возведение PKCS # 1 v1.5 с формальным именем RSASSA-PKCS1-v1_5 после вычисления хэш поверх данных с использованием SHA256.
Итак, общий порядок:
- хеширования;
- заполнение хеша для генерации подписи;
- модульное возведение в степень с использованием частного показателя и модуля.
Отступы, используемые для генерации шифрования и подписи, различны, поэтому использование шифрования может привести к ошибочным подписям.
Схема заполнения PKCS # 1 v1.5 была заменена PSS. Для новых протоколов рекомендуется использовать схему PSS. Для RSA существует очень читаемый общедоступный стандарт. Этот стандарт также использовался в качестве базы для RFC 3447: Стандарты криптографии с открытым ключом (PKCS) # 1: Спецификации шифрования RSA Версия 2.1 ( который в основном является копией).
Что касается дополнения в iOS, пожалуйста, проверьте этот ответ Томасом Порнином. В основном вы должны создать хэш SHA-256, префикс статического блока данных (определенный в спецификациях PKCS # 1), затем используйте SecKeyRawSign
с помощью kSecPaddingPKCS1
.
Для вашего удобства, блок данных PKCS # 1, который должен быть префикс в шестнадцатеричной нотации для SHA-256 (его можно легко найти в стандартных документах, это в примечаниях раздел 9.2):
30 31 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20
Примечания:
- Вышеуказанные шаги не включают преобразование из байтов в целое и наоборот. Результат необработанных операций RSA, как правило, преобразуется в беззнаковое кодирование большого конца с одинаковым размером модуля в байтах (что обычно совпадает с размером ключа, так как размер ключа уже кратен 8). Эти преобразования называются I2OSP и OS2IP в RFC.