Como autenticar o aplicativo cliente para confiar nas mensagens enviadas dele

A questão básica
Como sei que é meu aplicativo (cliente) acessível publicamente que está enviando minhas mensagens de serviço? Como sei que não é apenas algum outro aplicativo que está representando meu aplicativo?

Algum fundo
Atualmente, registramos todos os erros que ocorrem em nossos sites via log4net e WCF em um banco de dados. Isso funciona bem porque o servidor da Web (acessível pela Web - Confiável Parcial) relata erros no serviço WCF em execução no servidor de aplicativos (inacessível da Web - Confiável) por meio de um relacionamento confiável. Sabemos, portanto, que todos os logs de erros são reais e precisamos investigá-los.

Com nossos novos sites, planejamos usar o SilverLight para animar um pouco as coisas. O problema que enfrentamos é como relatar erros de volta do aplicativo SilverLight em execução no computador do consumidor da Web (não confiável) para o nosso servidor de aplicativos (inacessível da Web - Confiável).

Podemos resolver o problema de inacessibilidade do servidor de aplicativos, fazendo com que o cliente se comunique através de uma fachada de serviço no servidor da web, de modo que não se preocupe. O problema ocorre quando precisamos ter certeza de que o aplicativo que envia as mensagens é realmente nosso aplicativo e não apenas um imitador.

Alguns pensamentos
O código será escrito emC # e estar correndo em umSilverLight aplicativo que é executado localmente no PC cliente, portanto, não podemos garantir que ele não será descompilado e usado para enviar mensagens falsas ao nosso serviço.

Isso significa que não podemos usar a criptografia simétrica convencional porque não podemos armazenar nossa chave privada no aplicativo (ela pode ser descompilada). Da mesma forma, não podemos usar criptografia assimétrica, já que ela poderia ser representada (o invasor poderia apenas assinar mensagens com a chave pública armazenada e enviá-las - as mensagens pareceriam reais)

No caso deste aplicativo, não há autenticação de usuário, portanto, não podemos usá-lo para nos fornecer confiança.

Sim, eu sei que isso é um pouco bizarro com os logs de erro sendo melhor protegidos do que os dados que o aplicativo exibe, mas é o caso :)

Qualquer pensamento ou ajuda seria muito apreciado!

questionAnswers(3)

yourAnswerToTheQuestion