Используйте MSBuild, чтобы добавить серийный номер и закрытые ключи RSA для каждой копии приложения клиента - PullRequest
1 голос
/ 31 августа 2011

Мне нужно встроить закрытые ключи RSA в мое приложение. Мои ключи RSA генерируются на основе серийного номера и опции продукта. Пример serial # 1_opt1.private (этот файл содержит ключ, который я хочу встроить в код) serial # 1_opt1.public (если пользователю, например, реселлеру оборудования необходим доступ к ограниченной функции, я отправляю ему этот файл, чтобы разблокировать конкретную опцию) Каждому клиенту нужен / может потребоваться свой набор ключей в зависимости от опций, которые он имеет право использовать.

В моем приложении есть стандартный набор функций, который должен быть у каждого (базовое управление оборудованием). Мое видение заключается в том, что у стандартного набора функций нет серийного номера и встроенных ключей. Так что ни одна из ограниченных функций не будет работать, но все стандартные вещи будут работать. Программа будет иметь номер версии, но без серийного номера в разделе about / help

Если мне нужно включить ограниченную функцию [s], я компилирую программу, используя MSbuild, с серийным номером, сгенерированным для этого клиента в командной строке. MSBuild возьмет серийный номер и вставит его, где я могу получить к нему доступ в своем коде Я надеюсь, что это закончится в файле properties.settings ??? и поместите его в серийный номер с именем var, который по умолчанию будет пустым. Теперь, когда MSBuild поместил серийный номер в правильное место, я теперь хочу, чтобы он пошел поискать файл serial # 1_opt1.private с закрытым ключом [s] и поместил его / их где-нибудь? где я могу получить к ним доступ ... но, надеюсь, не там, где их легко найти. Когда мое приложение запускается, я использую закрытые ключи для шифрования «чего-то», и, если у пользователя есть файл с открытыми ключами, он может расшифровать это «что-то», что позволит ему использовать эту конкретную опцию. Если у него есть все файлы с открытым ключом для всех опций, он может сделать все, что я могу с аппаратным обеспечением ... как в случае, если он испортит его, его нужно вернуть на завод для повторной калибровки. Кто-нибудь может сказать мне, если это правильный подход? Если нет, то какой будет правильный подход? И если это так, как я могу заставить MSBuild выполнять эти трюки?

1 Ответ

2 голосов
/ 31 августа 2011

почему бы не пойти другим путем:

  • встроить открытый ключ в ваше приложение (или просто распространять его вместе с вашим приложением)
  • этот открытый ключ может быть одинаковым для всех клиентов
  • если вам нужно предоставить клиенту какой-то особый вариант, вы создаете XML
  • этот XML содержит любые параметры в определяемом вами формате
  • что XML может содержать все что угодно в открытом тексте
  • вы подписываете этот XML (создайте подпись с вашим закрытым ключом, который НИКОГДА не распространяется)
  • ваше приложение может проверить подлинность XML, проверив подпись (для этого ему нужен открытый ключ)

ваш клиент не может создавать действительные подписи на основе открытого ключа ... если ваше оборудование имеет какой-то неизменяемый серийный номер, который может прочитать ваше приложение, тогда я бы тоже поместил этот серийный номер оборудования в XML ... таким образом один XML-файл не может быть скопирован / использован разными клиентами ...

Вы даже можете расширить эту схему, предоставив специфические для клиента открытые ключи (и оставив соответствующие закрытые ключи закрытыми) ... они могут распространяться открыто вместе с приложением, без необходимости скрывать или использовать трюк MSBUILD, так как открытый ключ известен ни у кого нет угрозы безопасности вообще ...

В идеале вы подписываете свое приложение / сборку (для этого вам нужен сертификат), который обеспечивает некоторую защиту от вмешательства в ваше приложение / сборку, тогда у вас есть что-то действительно надежное, без каких-либо «хитростей» ...

...