Вы должны изменить дизайн.В настоящее время ваш дизайн имеет большой недостаток безопасности.Вы правильно поняли pubkey / prikey, но реализация неверна.Закрытый ключ должен быть закрытым.В настоящее время легко получить открытый ключ, учитывая закрытый ключ для множества алгоритмов, но не наоборот.Правильный дизайн выглядит следующим образом.
- Создание самозаверяющего сертификата.Этот сертификат будет содержать закрытый и открытый ключ
- Экспортировать открытый сертификат и встроить его в качестве ресурса / или жестко закодировать в приложение, которое вы собираетесь распространять
- Приложение затем будет хэшировать данные вподписаться и использовать открытый ключ из ресурса приложения.
- Эти хешированные данные затем отправляются по http на ваш сервер, на котором есть копия закрытого ключа.
- Сервер будет хэшировать данныеи проверьте хеш с закрытым ключом.
Все вышеперечисленные шаги хорошо документированы с примерами на MSDN.Если вам нужна дополнительная помощь, дайте мне знать, и я могу указать ее на статьи.
Приведенный выше дизайн гарантирует, что ваш закрытый ключ никогда не будет в свободном доступе.Если вы распространяете свой закрытый ключ в своем приложении, получение вашего личного ключа займет буквально несколько минут.
Хранение открытого ключа в приложении - это просто вопрос жесткого кодирования ключа в приложении с использованием байта.массив или помещение сертификата в файл ресурсов.
Часть закрытого ключа пары ключей никогда не должна жестко кодироваться ни в одном приложении.Закрытый ключ не должен экспортироваться и управляться только операционной системой.В Windows теперь есть клавиатурный щиток, использующий технологию VSM, благодаря которой даже локальный администратор не может знать секретный ключ.Администратор может использовать его только для подписи и проверки (и экспорта ключа, если экспорт разрешен), но никогда не сможет просматривать закрытый ключ и злоупотреблять им.
Относительно пошагового процесса.
- Создать самозаверяющий сертификат.Это создаст сертификат с открытым и закрытым ключом в файле pfx.
- Импортируйте самоподписанный сертификат в хранилище сертификатов.Этого можно добиться, просто дважды щелкнув файл и следуя инструкциям.
- Экспортируйте открытую часть нового импортированного сертификата, открыв диспетчер сертификатов.
- Вы можете встроить этот открытый экспортированныйсертификат в приложении в качестве ресурса.
- Затем приложение может загрузить сертификат из ресурса и использовать его для подписи хэша.
- На стороне сервера, если сертификат с закрытым ключом имеет значениееще не импортирован, выполните шаг 2 для его импорта.
- Сервер может затем использовать Apis для проверки подписанных данных с помощью закрытого ключа.