Использование ранее существующего закрытого ключа для подписи файла для создания сертификата (C #) - PullRequest
0 голосов
/ 19 сентября 2018

Я прочитал все статьи о StackOverflow, и хотя многие из них приближаются к желаемому решению, ни одна из них не работает.

Я просто хочу взять существующий закрытый ключ для создания подписичасти данных.Затем он становится частью файла данных, который включает в себя заголовок, описывающий используемые параметры.Затем следует подписанная версия файла данных, и, наконец, сам файл данных (шестнадцатеричный файл).Конкатенация файлов не является проблемой, генерация сертификата с использованием пар секретного и открытого ключей у меня есть.Ключи имеют формат ("----- BEGIN PRIVATE KEY -----"). Я могу с легкостью создавать файлы подписи с нуля, но программное обеспечение, которое будет считывать окончательный файл, ожидает 256-битную подпись, тогда какмой (использующий RSA-256) производит только 32-байтовые подписи.Он имеет доступ только к открытому ключу для расшифровки и проверки подписи файла.

Я столкнулся с рядом ошибок, таких как наборы ключей не действительны, не существуют, функция ComputeHash не работает и вызывает сбой.Я подозреваю, что мне нужно предоставить больше информации моему RSACryptographicService через CSPParameters, но я не уверен, что необходимо и достаточно для этого.Я хотел бы избежать углубления в математику, лежащую в основе алгоритма, такого как ручная установка / чтение значений модуля / P / Q и т. Д. Может кто-нибудь предложить простой способ сделать это или сказать мне, где я иду не так?Код предоставляется по запросу.

1 Ответ

0 голосов
/ 19 сентября 2018

Комментарии, которые вы получаете, говоря, что 256-байтовая подпись слишком длинная, абсурдны.Игнорировать их.

256 бит (32 байта) будет очень маленькой подписью, которая не может быть правильной.Я полагаю, что вы на самом деле ищете 2048-битные (256-байтовые) подписи RSA.Они более разумны по сегодняшним стандартам (хотя шаг больше не повредит).

С точки зрения импорта вашего ключа, а не установки ключевых компонентов вручную, вы должны рассмотреть ключи RSA формата "PEM".Есть несколько пакетов nuget для их обработки.В противном случае вы можете убрать верхний / нижний колонтитул и декодировать base64 самостоятельно и импортировать ключевые компоненты с некоторыми из встроенных классов X509.

.NET не поддерживает ключи формата PEM, поэтому я рекомендую использоватьавторитетная крипто-библиотека, такая как BouncyCastle, так как они поддерживают разбор ключей PEM в своих алгоритмах RSA.

Эта существующая ссылка на стек-поток описывает, как импортировать ключи в BouncyCastle: Чтение только открытого ключа PEM RSA с использованием Bouncy Castle

...