Криптография. Создание сигнатуры

Одной из массовых систем для шифрования, для цифровой подписи является система RSA. Как уже было рассмотрено, в данной системе есть этап генерации ключей, передачи, шифрование и расшифровка. Если мы говорим про передачу отдельных параметров по средствам сети, то важно эти данные защищать, накладывать подписи, в противном случае есть риск компрометации данных/компрометации параметров ключей.
На практике часто используется SHA256RSA, SHA1RSA, ГОСТ серии 34.10 (где-то в государственных предприятиях)
SHA256 with RSA — это эффективный асимметричный метод шифрования. Этот алгоритм сначала вычисляет уникальный хэш исходных данных с помощью алгоритма SHA256. Хэш затем шифруется с помощью частного ключа с использованием алгоритма RSA
SHA1 with RSA — это эффективный асимметричный метод шифрования. Этот алгоритм сначала вычисляет уникальный хэш исходных данных с помощью алгоритма SHA1. Хэш затем шифруется с помощью частного ключа с использованием алгоритма RSA
Погружаем дальше
Алгоритм SHA-1 (англ. Secure Hash Algorithm 1-bit) – это безопасный алгоритм хеширования, применяющийся для шифрования, размер выходных данных при этом составляет 160 бит. С помощью алгоритмов хеширования создаются уникальные хеши с необратимым кодированием.
Алгоритм SHA-256 (англ. Secure Hash Algorithm 256-bit) – это безопасный алгоритм хеширования, применяющийся для шифрования, размер выходных данных при этом составляет 256 бит. С помощью алгоритмов хеширования создаются уникальные хеши с необратимым кодированием.
На языке C# используем пространство System.Security.Cryptography класс RSACryptoServiceProvider.
Для упрощения работы используем библиотечные функции импортирования ключей и вычисления сигнатуры, проверки сигнатуры.
Для подписания данных:
Первое, задаем входные данные, для которых определяем хеш значение, второе, определяем halg = Хэш-алгоритм, который следует использовать для создания хэш-значения, опционально смещение и количество байт.
Для подписания хэш алгоритма:
Первое, хеш значение подписываемых данных, второе, идентификатор хэш-алгоритма (OID), используемый для создания хэш-значения данных.
В результате получаем подпись System.Security.Cryptography.RSA для указанных данных. Размер подписи будет равен 256 байт.
Производим обратную процедуру – верификация подписи.
1. Получаем хэш значение входных данных (или хэш значение файла)
2. Указываем идентификатор хэш-алгоритма (OID), используемый для создания хэш-значения данных.
3. Данные подписи, которые требуется поверить.
На выходе получаем положительный или отрицательный результат