Recebi umas duvidas em inbox, vou trazer aqui pra responder.
Apontaram que o SHA512 usado nas senhas do Telegram Passport é vulnerável a ataques de força bruta..
Qual a diferença entre usar o SHA512 para encriptar senhas e nas private keys de alguma moeda? É por que as private keys usam outras técnicas em conjunto? como ECDSA, etc?
Por que ele é não é(ou é) tão seguro para encriptar senhas? Por conta de senhas fracas?
Quanto tempo levaria para encontrar tal hash sem conhecer nenhuma parte da senha com uma GPU normal? Esse tempo depende do comprimento da senha?
SHA512:
SHA512 (SHA2 com 512 bits) é um algoritmo de hash. Ele é não reversível. Você cria um "hash", um "resumo", da informação (senha, arquivo, etc) e é impossível (literalmente) recuperar a informação criptografada porque parte da informação é perdida no processo. Mas o SHA512 não é projetado para usar como hash de senhas. Ele é projetado para processar grandes quantidades de dados e gerar um identificador único, como por exemplo, os hashes das transações de bitcoin, ou os identificadores de blocos.
Força bruta:
Para o uso com senha, ele fica suscetível a ataques de força bruta porque senhas são pequenas. A tabela abaixo mostra o tempo necessário para uma força bruta com varios tipos de senha:
Tipo de senha | Tempo
--------------------------+------------------
6 dígitos ASCII | 40 minutos
8 dígitos ASCII | 18 meses
8 dígitos alfanuméricos | 2 dias
A maioria das senhas encaixaria na terceira categoria. Enfim, sha512 não é apropriado pra isso. Mas como eu disse, tem de ver como ele é usado. Se for usado apenas tirando um hash da senha, é realmente inseguro. Se for usado em combinação com sistemas de resistencia a força bruta (como scrypt, bcrypt ou hashcash) ele é tão bom quanto qualquer outro.
Criptografia de chave privada:
Criptografia de chave privada é outra coisa completamente diferente. É uma criptografia reversível e assimétrica. isso quer dizer que não há perda de informação e é possível recuperar a mensagem original completa. O processo usa duas chaves, uma delas para cifrar e a outra para decifrar a informação. A produção da chave publica a partir da privada é trivial, mas a recuperação da chave privada através da publica é virtualmente impossivel. O mesmo dá pra dizer da mensagem cifrada: é impossível recuperar a chave privada a partir da mensagem cifrada. Essa criptografia serve também para fazer assinaturas eletronicas. A assinatura eletronica é simplesmente uma mensagem criptografada com a chave privada que pode ser decifrada co ma chave pública. Assim vc consegue garantir que apenas o destinatário lê a mensagem, e o destinatário pode ter certeza de que quem enviou a mensagem foi realmente o remetente, sem ninguem no meio do caminho ler o alterar a mensagem.
Ainda assim, gerenciar as chaves privadas é algo complexo. Você precisa trazer a segurança para dentro do computador/celular do usuário. por isso hardware wallets são tão comuns. Ela também não é apropriada para armazenar senhas de segura, e sim para troca de mensagens assinadas entre usuários.
São bastante resistentes a força bruta por serem lentas e difíceis de calcular. Por esse mesmo motivo, ninguem usa elas diretamente. Você usa a cripto de chave privada para cifrar uma senha aleatória e usa essa senha aleatória com um algoritmo mais rápido, de chave secreta (onde a mesma chave cifra e decifra a mensagem), como o AES. Ai envia junto da mensagem cifrada com AES a chave aleatória cifrada com a chave publica do remetente.
ECDSA:
ECDSA é um variação de sistemas de chave publica que não permite cifrar ou decifrar mensagens, apenas assiná-las. (DSA = Digital Signature Algorithm). Ele usa chaves mais curtas que outros sistemas de chave privada, mas ainda tem os mesmos problemas de gerenciamento de chaves. No bitcoin ele é usado como prova de posse dos bitcoins. Ao emitir uma transação, você assina usando a chave privada correspondente ao endereço (chave publica) do destinatário da transação anterior. Como se fosse o "endosso" de um cheque: Você recebe um cheque nominal, e assina no verso desse cheque, indicando que ele deve ser pago a um terceiro. Não serve também para guardar senhas de forma segura (a informação pode ser recuperada).
Minha opinião sobre a suposta falha de segurança está no post anterior.