Pergunta

Eu estou fazendo um cliente twitter, e estou avaliando as várias maneiras de proteger informações de login do usuário.

IMPORTANTE: eu preciso para proteger os dados do usuário a partir de outras outras aplicações. Por exemplo, imagine o que acontece se um bot começa por aí roubando senhas Twhirl ou Hotmail / Gmail / Yahoo / Paypal de aplicações que rodam no desktop do usuário.

Esclarecimento: Eu perguntei isso antes sem a parte 'importante', mas UI de stackoverflow não ajuda com a adição de detalhes mais tarde dentro do Q / A conversa

.
  • Hashing, aparentemente, não fazê-lo
  • Ofuscando de forma reversível é como tentar esconder atrás meu dedo
  • Plain sons de texto e Propably é promíscuo
  • exigir que o usuário digite sua senha cada vez que tornaria a aplicação cansativo

Todas as idéias?

Foi útil?

Solução

Este é um catch-22. Ou você faz o tipo de usuário em sua senha a cada vez, ou você armazená-lo de forma insegura (ofuscado, criptografado, qualquer que seja).

A maneira de corrigir isso é para mais sistemas operacionais para incorporar built-in gerenciadores de senha - como Keychain do OS X. Dessa forma, você apenas armazenar sua senha no chaveiro, o sistema operacional mantém-lo seguro, eo usuário só tem que digitar uma senha mestra. Lotes de aplicativos (como o Skype) no OS X Keychain uso para fazer exatamente o que você está descrevendo.

Mas desde que você provavelmente está usando o Windows, eu diria que apenas ir com alguns ofuscação e criptografia. Eu acho que você pode ser um pouco paranóico sobre os para roubo de senhas-bots; se sua aplicação não tem uma grande base de usuários, as probabilidades são muito baixas que alguém vai destiná-las e, especificamente, tentar roubar as senhas. Além disso, eles também teriam que ter acesso ao sistema de arquivos da sua vítima. Se for esse o caso, eles provavelmente têm um vírus / sem-fim e tem problemas maiores.

Outras dicas

Eu acho que está faltando a foto maior aqui:

Se o ambiente de trabalho está comprometido, você é F # *% ED!

Para roubar uma senha de seu programa, um vírus teria que ser executado no sistema como administrador. Se o vírus tenha conseguido que, roubando senhas de seu programa é maneira para baixo, por si lista de coisas maliciosas que quer fazer.

Guarde-o em texto simples e que o usuário saiba .

Dessa forma, não há equívocos sobre o nível de segurança que você tem alcançado. Se os usuários começam a reclamar, consideram xor'ing uma constante publicada-no-seu-site para ele. Se os usuários continuam reclamando, "esconder" a constante em seu código e dizer-lhes que é ruim de segurança.

Se os usuários não podem manter as pessoas ruins fora da caixa, em seguida, em vigor todos os dados secretos que eles têm é conhecido por Dr. Evil. Não importa se é criptografada ou não. E se eles podem manter mal as pessoas de fora, por que se preocupar com o armazenamento de senhas em texto puro?

Eu poderia estar falando a minha bunda aqui, é claro. Existe um estudo mostrando que armazenar senhas em resultados de texto simples em pior segurança de armazená-los ofuscado?

Se você está fazendo um cliente Twitter, em seguida, usar sua API

Twitter tem muito boa documentação , então eu aconselho que você leia tudo antes de fazer um cliente. A parte mais importante em relação a esta questão é que você não precisa armazenar as senhas, armazenar o OAuth símbolo vez. Você precisa usar o palco XAUTH para obter o token OAuth, em seguida, usar outra Twitter API Com este símbolo OAuth quando necessário.

XAUTH fornece uma maneira para desktop e aplicações móveis para troca de um nome de usuário e senha para um token de acesso OAuth. Uma vez que o token de acesso é recuperada, os desenvolvedores habilitados para XAUTH deve descartar o login e senha correspondente para o usuário.

Você nunca armazenar senhas se você pode obter afastado com ele

Usando OAuth o pior que pode acontecer é uma parte 3 (hacker de chapéu preto) recebe Acesso para que conta no Twitter, mas não o senha . Isto irá proteger os usuários que ingenuamente usam a mesma senha para vários serviços on-line.

Use um chaveiro de algum tipo

Finalmente eu concordo que as soluções pré-fabricados, como chaveiro da OSX deve ser usado para armazenar as informações sensíveis OAuth, uma máquina comprometida só iria revelar a informação dos chaveiros atualmente desbloqueado. Isto significa, em um sistema multi usuário somente a usuários logados têm suas chaves tornam-se vulneráveis.

Outras limitações danos

Pode haver coisas que eu perdi dar um Google de "melhores práticas de segurança" e começar a ler para o que pode ser relevante.

EDIT (em resposta a finnw desejado solução geral caso)

Você quer que, dada nenhuma entrada do usuário, o acesso a um serviço on-line. Isto significa geralmente que você tem, no máximo, o controle de acesso em nível de usuário para as credenciais de autenticação através de algo como chaveiro.

Eu nunca usei OSX Keychain então agora eu vou falar sobre SELinux. Em SELinux você também pode garantir que essas credenciais de autenticação só seria dada ao seu programa. E se estamos continuam acontecendo coisas nível do sistema operacional, você também pode assinar todos os processos de inicialização para cryptographicly ser determinada nenhum outro programa poderia ser imitando seu programa. Isso tudo é para além de um sistema de usuário típico e dado este nível de configuração que você pode ter certeza de que o usuário não é suficiente ingênuo a ser comprometida, ou um administrador de sistema é suficiente compitant. A este nível, poderíamos proteger essas credenciais.

Vamos supor que nós não ir tão longe para proteger essas credenciais, então podemos assumir que o sistema é comprometido. Neste ponto, as credenciais de autenticação ficar comprometido, ofuscação / criptografia dessas credenciais no lado local não adiciona nenhuma segurança verdadeira e nem armazenar parte ou todo-o em um servidor 3rd party. Isso é fácil de ver porque deu nenhuma entrada do usuário, o programa precisa de inicialização próprio para obter essas credenciais. Se o seu programa pode fazê-lo sem entrada, em seguida, isso pode qualquer pessoa que tenha revertido engenharia seu / protocolo de ofuscação de criptografia / servidor.

Neste ponto é a limitação dos danos, não guarde a senha como credenciais de autenticação. Use OAuth, sessões de biscoito, hashs salgados, etc, todos eles são apenas fichas representando que em algum momento no passado, você provou que sabia a senha. Em qualquer sistema de bom esses tokens podem ser revogada, o tempo expirado e / ou periódico trocado por um novo token durante a sessão ativa.

O token (qualquer forma que seja) também podem conter informações de autenticação adicional não entrada do usuário que restringe sua capacidade de usá-los em outro lugar. Ele poderia, por exemplo encapsular o nome da máquina e / ou o endereço IP. Isso torna mais difícil de usar tele credenciais em um diferentes máquinas desde imitando estas formas de credenciais exigiria acesso ao nível adequado de infra-estrutura de rede.

Após mais contemplação Acho que encontrei uma maneira. Vou usar a autenticação ASP.net para o meu aplicativo de desktop do aplicativo, armazenar as suas credenciais online e deixar alça gerente da senha do Internet Explorer a cache local deste par secundário ou credenciais para mim.

Eu vou apenas tem que tê-los autenticar através de um Facebook-API como forma durante o primeiro login.

Eu não entendo ... porque é que a criptografia não é bom? Use uma chave grande e armazenar a chave no armazenamento de chaves máquina (assumindo Windows). Feito, e feito.

OSX: Use o chaveiro

Windows: Use CryptProtectData e CryptUnprotectData

Linux: Use Chaveiro do GNOME e KDE KWallet

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top