То, что вы пытаетесь реализовать, называется DRM, по-видимому, в попытке помешать людям запускать копии вашего программного обеспечения, которые не были зарегистрированы.
Это проигрышная битва. Независимо от того, как вы это реализуете, конечный результат заключается в том, что где-то в вашем коде у вас будет что-то вроде этого:
if (authenticationSucceeded) {
// Allow access to program
} else {
// Show error and quit.
}
Все, что нужно сделать, - это декомпилировать эту функцию, вставить !
в оператор if и перекомпилировать ее снова (или напрямую изменить код промежуточного языка). Если они сделают это, они нарушат вашу безопасность.
Имея это в виду, вы также можете использовать очень простую, дешевую в реализации систему. Просто имейте список зарегистрированных незашифрованных ключей на вашем сервере, и пусть клиент отправит свой ключ через HTTPS (чтобы предотвратить перехват). Добавлять больше безопасности, чем это, вероятно, не стоит, так как обходить все равно будет так, как описано выше.
Обновление: постер говорит в комментарии, что программа бесполезна без доступа к удаленной базе данных. В этом случае может иметь смысл предотвращать несанкционированное использование программного обеспечения, а точнее - предотвращать несанкционированный доступ к вашей базе данных. Вы можете использовать WCF для создания безопасного соединения с сервером и требовать отправки вашего имени пользователя и хэша пароля, прежде чем разрешить доступ к остальной части интерфейса. Если имя пользователя / пароль не верны, сервер будет запрещать дальнейшие звонки на ваш сервис. На сервере вы можете хранить разрешенные имена пользователей и пароли в базе данных.