Подписание сборки в .NET включает в себя пару открытый / закрытый ключ. Насколько я могу судить по тому, что я прочитал, .NET использует алгоритм RSA и закрытый ключ для подписи сборки, проверяя ее с помощью встроенного открытого ключа.
Я знаю, как получить открытый ключ (Assembly.PublicKey
). Мне было интересно, можно ли использовать этот ключ для расшифровки короткой строки, содержащей некоторые данные, зашифрованные с помощью закрытого ключа.
Документы, которые я читал до сих пор ( например, ), по-видимому, подразумевают, что возможен только обратный путь: что мне придется использовать открытый ключ для шифрования и закрытый ключ для расшифровки - но я действительно не хочу включать это в сборку, делаю я.
Полагаю, было бы хорошо, если бы я только что подписал строку. Но как?
Я немного растерялся, как начать это. У кого-нибудь есть фрагмент кода?
Кроме того, шифрование / подписывание небольшой строки в идеале должно происходить в PHP, поскольку я хочу перенести это на веб-сервер, и все, что у нас есть, - это ваш общий веб-сайт на PHP / MySQL.
Сценарий использования : я пытаюсь придумать упрощенную схему лицензирования для программного обеспечения, которое мы собираемся выпустить для бета-тестеров. Поскольку программное обеспечение, вероятно, будет бесплатным, все, чего мы действительно хотим достичь, это
- знать, у кого установлено программное обеспечение (адрес электронной почты)
- истечение срока действия программного обеспечения по истечении заданного периода, после которого пользователь должен будет получить новую лицензию.
- это так же просто, как заполнить форму и ждать автоматического письма с ключом, чтобы прибыть
- мы пытаемся уменьшить вероятность того, что старые версии вернутся, чтобы укусить нашу репутацию / преследовать нас
Возможность зашифровать кортеж (дату истечения срока действия, отпечаток пальца) и расшифровать, что при запуске создаст простой модуль лицензирования: при первом запуске приложения у пользователя запрашивается адрес электронной почты, имя, организация. Эта информация публикуется на веб-сервере вместе с отпечатком md5 некоторой системной информации (ник, имя компьютера, основная и дополнительная версия сборки). Веб-сервер отвечает по электронной почте (проверяет правильность адреса электронной почты) с зашифрованной версией кортежа (срок действия, отпечаток пальца), который затем сохраняется на диск. При запуске его можно расшифровать и сравнить с текущей датой и восстановленным отпечатком.
РЕДАКТИРОВАТЬ : ОК, поэтому у меня пока нет ответов на все мои вопросы. Но похоже, что .NET не облегчит использование закрытого ключа для шифрования (если это вообще возможно, ответы на самом деле не согласны с этим).
Я выберу следующий маршрут (в зависимости от моего варианта использования):
- Я буду использовать закрытый ключ для подписания лицензии.
- Я буду использовать открытый ключ, чтобы убедиться, что лицензия была подписана закрытым ключом
- Я опубликую еще один вопрос, направленный на разработчиков PHP, о том, как использовать ключи .NET (созданные
sn.exe
) для подписи некоторого текста
- Я не очень беспокоюсь о том, что пользователь увидит лицензию, так как в любом случае это хеш, который вычисляется из того, что он уже знает. Все, что я хочу, - это сделать слишком трудным то, что ваш типичный архитектор здания будет стоить того, чтобы копировать мое программное обеспечение без моего ведома (помните, что программное обеспечение будет бесплатным - все, что мне нужно, - это бумажный след о том, кто его установил ...) )
Большое спасибо за ваши ответы.