Como garantir aos usuários que site e senhas são seguros [fechado]

15

Em sites confiáveis, sempre vejo declarações como "Todos os dados são criptografados" ou "Todas as senhas são criptografadas usando a criptografia de 128 bits" e etc.

No meu site, armazenarei todas as senhas de usuário em um banco de dados depois de usar o hash SHA-512 (provavelmente) com um sal aleatório. Desejo adicionar um snipet que garanta aos usuários que suas senhas são seguras para que não sejam impedidos de usar meu site, pois exige uma senha. Quero que os usuários se sintam seguros, mas não acho que todos saibam o que é hash.

MINHA PERGUNTA: Posso enviar uma mensagem dizendo "Todas as senhas são criptografadas e seguras", pois não acho que o usuário médio saiba qual é a diferença entre hash e criptografia e provavelmente se sentirá seguro apenas por ver a palavra de conforto "criptografia"? Ou há uma mensagem alternativa que devo fornecer?

Em uma nota lateral, eu sou novo em criptografia e hash de senha e estava pensando se isso seria seguro o suficiente por enquanto, ao iniciar meu site. Não quero dizer aos usuários que é seguro, se não for. Qualquer informação seria muito apreciada. Obrigado.

user2698818
fonte
7
Pessoalmente, eu não me preocuparia muito com a comunicação: escreva uma descrição técnica do que você faz, enterrada em algum lugar profundo nas Perguntas Freqüentes, onde os técnicos o encontrarão. Qualquer outra pessoa realmente não se importa. Mais importante: certifique-se de fazer a coisa certa (isso é difícil se você é novo, mas pelo menos está tentando!). Não crie seu próprio hash, use algo como bcrypt .
Joachim Sauer
4
Bem, o certo é federar o logon e não incomodar os usuários com mais um nome de usuário e senha.
Jan Hudec
1
O OpenID é bom, mas o nome de usuário / senha também é válido. Não acho que seu problema seja convencer os usuários de que seu site é seguro. Como você é inexperiente, é como prometer algo que você não tem. Basta aplicar padrões comuns - você não impedirá que hackers profissionais venham, mas ninguém pode culpar você também.
Hoàng Long
3
@coredump De fato. Usar o SHA-512 para hash de senha não é bom. Não está "ok".
Thomas
3
Eu provavelmente valeria a pena fazer qualquer pergunta de acompanhamento sobre Segurança da informação para garantir que você receba os melhores conselhos atualizados. (Isso não significa que você esteja recebendo maus conselhos aqui, apenas que não somos necessariamente profissionais de segurança).
ChrisF

Respostas:

22
  1. Usuários não se importam.

    O único momento em que eles se importam é quando alguém retira o dinheiro da conta bancária e parece que ele tem um link que, alguns dias antes, alguém obteve acesso total ao seu banco de dados.

  2. Em quase todos os casos que vi essas mensagens, elas eram enganosas. O mais hilário foi em um site com rótulos "estilo militar seguro" em todas as páginas. Houve um alerta informando que o certificado HTTP é inválido. Houve uma injeção de SQL no formulário de logon. Algumas semanas depois, o site foi invadido e desapareceu para sempre.

    Paro de contar o número de sites que afirmam manter as informações seguras, enquanto possui um formulário "Recuperar minha senha", que na verdade envia a senha original por e-mail.

    É como aqueles rótulos "W3C XHTML válido". Por que eles geralmente são colocados em sites em que até uma página inicial contém pelo menos dezenas de erros e códigos semelhantes <DIV COLOR='red'>?

Se você ainda deseja tranquilizar os usuários, pode colocar algo como:

Suas senhas são mantidas em segurança. Lembre-se de que não podemos ver sua senha e nunca enviaremos um email solicitando que você forneça uma.

Mas, francamente, o formulário "Redefinir minha senha" substituindo o "Esqueci minha senha; envie-a por e-mail" é muito mais tranquilizador do que qualquer palavra.

Dicas dos diferentes comentários:

  • Não reinvente a roda: use o OpenID. Dessa forma, você nem armazena os hashes.

    Fonte: comentário de Jan Hudec .

  • Como você é estudante, abra seu projeto de código-fonte. Como sua preocupação é: "Não quero que os usuários pensem que suas senhas não são seguras porque alguma criança na escola a projetou". , não há nada mais tranquilizador do que poder verificar, lendo o código-fonte, se ele foi escrito por um desenvolvedor habilidoso que se preocupa com a segurança.

    Fonte: comentário de Jan Doggen .

Arseni Mourzenko
fonte
Obrigado pela contribuição pessoal. O problema é que eu sou um estudante projetando um serviço para minha universidade. Não quero que os usuários pensem que suas senhas não são seguras porque alguma criança na escola a projetou. Eu observei vários métodos diferentes, incluindo o bcrypt, e ainda não decidi qual deles usar. Eu acho que ele será seguro o suficiente agora e, se muitas pessoas começarem a usá-lo, posso adicioná-lo, se necessário. Só estou trabalhando para divulgá-lo por enquanto. Obrigado novamente.
user2698818
3
@ user2698818 O que você deve fazer é projetar a segurança, postar uma pergunta descrevendo-a em detalhes e perguntar 'isso é seguro (o suficiente)'. Uma boa segurança pode ser completamente pública.
precisa saber é o seguinte
@ user2698818: ok. Editou minha resposta.
Arseni Mourzenko
6
@ JanDoggen: bem, o que ele deveria fazer é usar um sistema de segurança existente que outra pessoa projetou e perguntou "é seguro o suficiente". De preferência um que essa pergunta ficou por algum tempo e teve a atenção de vários especialistas nas áreas ;-)
Joachim Sauer
12

Não armazene senhas em primeiro lugar! Siga o exemplo do Stack Exchange e permita que os usuários efetuem login com sua identidade em outro site que forneça autenticação via OpenID . As implementações estão disponíveis gratuitamente para as estruturas da Web mais comuns.

Ou possivelmente qualquer outro protocolo. Se for um projeto interno para alguma instituição (como sugere o seu comentário na outra resposta), quase certamente já existe um LDAP, Kerberos (o Windows Active Directory também é baseado nesses dois; o apache suporta autenticação HTTP contra eles) ou alguns serviço para login no computador. Basta conectar-se a isso.

Isso evita que você armazenar informações sensíveis (você provavelmente ainda tem de permissões de loja, mas eles não são que crítico) e os usuários de ter que lembrar ainda outro nome de usuário e senha, de modo geral win-win.

Jan Hudec
fonte
1
Diga-me quais sites você criou para que eu possa evitá-los se você considerar as permissões como não críticas à segurança.
orlp
1
E se o requisito for armazenar senhas. Também a pergunta especificamente sobre armazená-los.
Piotr Kula
3
@ppumkin: Existem muitas perguntas do tipo "como eu uso o X para fazer o Y", onde a melhor resposta é "você usa o Z". Se você não concorda, basta fornecer uma resposta melhor ;-).
Jan Hudec 20/08/2013
3
@ppumkin Para usar uma analogia: "Estou tentando quebrar uma pedra com meu punho, que luvas devo usar?" Verifique se eles conhecem os cinzéis antes de oferecer a 19ª Manopla da Cavalaria Alemã.
deworde
1
Eu evitaria ser muito rápido para sugerir o OpenID. Sim, é ótimo, mas geralmente funciona melhor se você oferecer suporte a vários provedores OpenID / OAuth. Existem muitos fóruns de tecnologia, blogs, perguntas e respostas, etc., onde você precisa fazer login através do provedor OID do Facebook e não pode usar nenhum outro. Estou em uma rede de trabalho que bloqueia os domínios do Facebook por atacado e, portanto, não posso trabalhar com esses sites. Se você for dar suporte ao OID e usar apenas um por enquanto, escolha um provedor que seja popular entre o público-alvo e que provavelmente não seja bloqueado por um administrador de sistemas. Google e Windows Live são boas escolhas.
Keiths
2

Dizendo:

"Isso é seguro."

é um julgamento pessoal que você faz sobre certos fatos ou processos tecnológicos, e esse julgamento é limitado pelo que você mesmo sabe sobre segurança na época. Mas você pode garantir, sem dúvida, que sua criptografia, método de armazenamento, etc. suportará qualquer tipo de ataque, mesmo aqueles que você não conhece ou ainda não conhece?

Significado: Esta declaração corre o risco de estar desatualizada, talvez mesmo sem você estar ciente disso.

Por isso, tendem a concordar com o comentário acima de @JoachimSauer: Apenas descreva o que você faz, como salva as informações do usuário e diz aos usuários como isso deve tornar seu serviço seguro. Então deixe que os usuários julguem por si mesmos.

stakx
fonte
Não, "Isso é seguro" não é uma afirmação "pessoal" ou subjetiva, não é como "é bonito", para mim . Na verdade, é uma declaração semanticamente vazia , sem especificar "em relação ao que" ou "seguro de que ataques" ou "em que nível em que contexto". Se toda a sua declaração consistir em "isso é seguro", ela estará desatualizada antes de terminar de digitá-la e é altamente provável que você não esteja ciente disso. Concordo, porém, que na última parte, trata-se de detalhes.
AviD 21/08/13
@AviD: Talvez você tenha lido muito em minha escolha específica de palavras. Sim, dizer que algo "é seguro" sem fornecer mais detalhes não faz sentido. Mas estou convencido de que também é um julgamento pessoal, porque nem todo mundo tem exatamente o mesmo senso e demanda por "segurança": o que A considera suficientemente seguro pode parecer inseguro para B. Assim, dizer que algo "é seguro" sugere que o pessoa que faz a afirmação "considera segura". E isso não é um argumento com o mesmo peso que dar a alguém os fatos relevantes e permitir que eles tirem suas próprias conclusões.
stakx
Certo ", em relação ao que" eu quis dizer com que requisitos, perfil de segurança, riscos etc. Ainda não é um julgamento pessoal, mas talvez o que você quis dizer com "pessoal" seja o que quero dizer com "contexto". "Seguro" é uma métrica científica difícil, não um "sentimento" insolente e suave. Mas sim, como você diz, não me diga que é "seguro", me diga o que você fez para fazê-lo.
AviD 21/08/2013
@AviD: OK. Não discutirei mais o argumento, exceto por dizer que segurança também é um sentimento insosso. É claro que é mais do que isso, mas quando a pergunta é sobre "garantir" os usuários (consulte o título da pergunta), o sentimento de insatisfação é o que conta no final.
stakx
1

Realmente depende do contexto do seu site específico.

Por exemplo, se este for um site de consumidor, é provável que a maioria deles se preocupe apenas com suas senhas (talvez), informações financeiras / de saúde (dependendo) e suas informações privadas, como fotos (hahaha, sim, certo ...) .

Se esse for um aplicativo comercial, o nível de segurança de todo o site é relevante, não apenas senhas. Da mesma forma, depende de quem são seus usuários-alvo - altamente técnicos / não tão técnicos, etc.

Todo esse contexto define muito o que você deve comunicar e que nível de garantia é necessário.

Por exemplo, para consumidores não técnicos, é suficiente ter alguns comentários genéricos e simples, como:

Este site foi construído usando técnicas de segurança de ponta. Sua senha é sempre criptografada e nunca enviaremos suas fotos para a NSA.

(E, como outros já disseram, é melhor você nem ter senhas, use algum padrão como OpenId ou OAuth.)

Para empresas altamente técnicas, convém ter uma página completa de detalhes técnicos e de procedimentos, como:

Implementamos um SDL (ciclo de vida de desenvolvimento seguro) completo em todo o processo de desenvolvimento e implantação.
...
Nossa arquitetura de segurança é ... Isso oferece os benefícios de ...
Garantimos a codificação segura, como ... por ... Realizamos esses e esses testes.
Nossa criptografia inclui esses algoritmos ... e ... Estamos em conformidade com qualquer regulamentação do setor que você precisa e certificada para ...
Nossa segurança é verificada por esse consultor independente.
...
Para obter mais detalhes e revisar nossas políticas ou organizar uma auditoria independente, discuta com o departamento de marketing.

Claro, você não quer estar dando muito informações muito detalhadas, deve ser mais sobre o processo do que as próprias senhas ... E é claro que deve ir sem dizer que a realidade deve realmente cumprir com o que você escreve lá , qualquer que seja o contexto com o qual você esteja lidando.

Como uma das respostas mencionadas, a maioria dos usuários não se importa, não entenderia o que você disser e ainda assim se inscreveria, mesmo se você disser que envia dados do usuário à NSA.
Isto não é para eles.
Eles ficariam felizes em não ter senhas, deixe-me escolher meu nome de usuário na lista e me conectar automaticamente.

Obviamente, isso é para a pequena porcentagem que importa - você deve permitir que os usuários inteligentes façam o que é certo, dar a eles as informações de que precisam e conceder a eles a educação que possam solicitar.
Caso contrário, quando isso der errado, os outros 98% acordarão de repente e ficarão com raiva.
("Claro, eu sabia que não precisava de uma senha para ver minhas fotos, mas não achei que mais alguém pudesse vê-las !!")

Ávido
fonte
0

Se você deseja que seu sistema seja seguro, a força do algoritmo de senha não faz sentido - a maioria dos hackers pode decifrar senhas em pouco tempo, especialmente se a senha escolhida for pequena ou composta de palavras genéricas que o hacker já "decifrou e armazenou" "usiong rainbow tables e similares. Leia o artigo da ArsTechnica sobre quebra de senha para obter muitas informações.

O que você precisa fazer é garantir aos usuários que os bandidos não conseguem acessar seus hashes em primeiro lugar. Uma empresa preocupada com a segurança em que trabalhei tinha um sistema da web de três camadas em que os servidores da web não estavam fisicamente conectados aos servidores de banco de dados. Quando meu chefe quis colocar seu site e ter acesso direto ao banco de dados (código mal projetado, disse nuff), ele foi informado de que não podia possuí-lo, e quando ele pressionou ... foi informado que não havia fios entre eles. . Ele teve que arquitetá-lo para transmitir todas as solicitações de dados por meio de um serviço de camada intermediária. E esses serviços não foram apenas protegidos, mas expuseram uma superfície mínima ao ataque e foram bloqueados. E o DB nunca expôs nenhuma de suas tabelas para leitura, apenas procedimentos armazenados que, por sua vez, foram bloqueados para que apenas o serviço relevante tivesse acesso.

Não foi tão ruim de codificar quanto você poderia pensar: depois de conhecer a arquitetura e a separação de cada camada, era muito fácil codificá-las.

gbjbaanb
fonte
0

Você pode desenvolver o site mais seguro do planeta e ter uma experiência muito ruim do usuário. Os usuários assumirão que seu site é inseguro.

Você pode criar o site menos seguro do planeta e ter uma experiência incrível do usuário. Os usuários assumirão que seu site é seguro. Pelo menos até aparecer no noticiário da noite.

CodeART
fonte