My Authors
Read all threads
Continuando, com calma.
O problema que eu queria ter falado antes diz respeito à política de senhas padrão pras instâncias do Mastodon.
Vou apresentar primeiro o problema, para então explicar por que é um problema e como o Mastodon trata isso pessimamente.
O problema é o limite de tamanho das senhas, que eles dizem que é 72 caracteres. Eu falo que eles dizem, porque no próprio sistema que eles usam o limite não é esse, mas isso eu explico daqui a pouco.
A questão é - se você tenta colocar uma senha mais longa que isso, dá erro.
E por que isso seria um problema? Bem, a maioria das pessoas de fato não vai ultrapassar esse limite, certo? Provavelmente sim, são poucas as pessoas que usam senhas maiores que 72 caracteres, mas o problema (por agora) não tá aí.
A questão é: limitar o tamanho máximo de senhas não é recomendado de forma alguma, já que isso só diminui a segurança do usuário.
Quem faz isso não entende ou não se importa com a segurança do usuário, o que é péssimo de qualquer jeito.
E por que eles limitam? Ainda, por que 72 caracteres?
Pelo que eu pude ver, o Mastodon usa o bcrypt, um dos melhores e mais recomendados algoritmos de hash, para criptografar as senhas dos usuários. O bcrypt, então, tem um limite de 72 bytes, isso é fato. E o que fazer com isso?
Frente a esse limite, o padrão mais aceito é fazer um pre-hash usando outra função (cujo resultado será menor que 72 bytes, sempre) pra depois passar pro bcrypt. Normalmente usamos o sha256.
Aí você me pergunta: por que então não usamos direto o sha256?
O problema do sha256 se dá na velocidade do hash, que é muito rápida. Isso não é bom, pois facilita ataques de força bruta. Por isso, o sha256 raramente é usado sozinho para senhas. Mas usá-lo junto do bcrypt, por exemplo, é perfeito.
O Mastodon não implementar nenhuma solução para esse limite evidencia a falta de importância que a segurança do usuário tem pra eles.

Pior de tudo: eles nem entendem o que significa esse limite do bcrypt de 72 bytes, e deixam bem claro isso na própria validação.
O Mastodon faz uma validação nas senhas que verifica se elas têm até 72 caracteres. Se tiverem mais, dá erro. Se não tiver, ele aceita.
O problema é que a limitação do bcrypt se dá sobre os BYTES, não sobre os CARACTERES.
Vem entender mais a diferença:
Caracteres dizem respeito ao texto, mas o computador não entende texto. A gente precisa, então, codificar esse texto e transformá-lo em bytes. Para isso, existem diversas codificações que fazem isso de formas diferentes.
No geral, hoje em dia usamos a UTF-8, que consegue codificar todos os caracteres UNICODE em até 4 bytes.
Isso permite uma internacionalização incrível, já que não se restringe a caracteres de uma só língua (como codificações como a ASCII fazem).
O problema tá aí: até 4 bytes. Isso significa que, com o UTF-8, dependendo dos caracteres que você usar, pode-se criar uma senha de 24 caracteres com 72 bytes.
E o Mastodon não entende isso.
Se você usa qualquer caractere que não faz parte da tabela ASCII, como um simples "á", o limite não é mais de 72 caracteres, porque esse caractere ocupa mais de 1 byte.
Porém, como a validação do Mastodon verifica caracteres, não bytes, essa senha é tratada como se fosse aceita.
E internamente, sem nenhum aviso para o usuário, a senha é CORTADA para o limite de 72 bytes. O usuário recebe a mensagem de sucesso, aparentemente está tudo bem, mas sua própria senha foi modificada sem ele saber.
Um exemplo tosco: eu crio uma senha que é o caractere "á" repetido 50 vezes.
O Mastodon aceita, porque tem menos de 72 caracteres. Mas "á" codificado em UTF-8 resulta em 2 bytes, então essa senha acabaria com 100 bytes, mais alto que o limite do bcrypt.
Internamente, essa senha seria cortada para apenas 72 bytes, que decodificando seria o "á" repetido 36 vezes (em vez do que eu havia decidido, 50).
Eu vou logar colocando a senha de 50 caracteres e vai funcionar, eu não vou nem perceber o que aconteceu.
Mas se eu tentar entrar com apenas os primeiros 49 caracteres, também funciona. A mesma coisa com os primeiros 48, 47, ..., 36.
E eu nem teria me tocado.
Ninguém tem o direito de modificar a senha do usuário assim. Isso é um absurdo tão tosco, que mostra um desconhecimento e uma desimportância tão grande quanto à segurança dos usuários, que eu fico até sem saber o que comentar.
Eu já tenho um texto sobre políticas de senha muito interessante, possivelmente o melhor texto técnico que eu já escrevi, pra quem se interessar:
blog.caelum.com.br/dicas-politica…
Só pra esclarecer uma coisa também, eu optei por deixar isso fora do texto porque é algo facilmente resolvível e pontual. Não diz respeito à estrutura de lá. Mas achei importante comentar à parte.
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with esquer.dev

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!