Share
Embed
como funcionam as senhas e por que não funcionam: tentando resolver um problema sem solução
Slides da palestra "como funcionam as senhas e por que não funcionam: tentando resolver um problema sem solução" apresentada na CryptoRave 2024, no dia 11/05/2024.
yyyyyyyan
May 11, 2024
Transcript
97 slides
-
como funcionam as senhas e por que não funcionam @yyyyyyyan
/ @yyyyyyy07492366 yan orestes software developer (tentando resolver um problema sem solução) -
nunca armazene senhas em texto plano! ⚠ ↪ e se
seu banco de dados vazar? não faça apostas ↪ usuários tendem a reutilizar senhas em diferentes plataformas ❌ -
o que é uma função hash? ↪ algoritmo de mapeamento
↪ recebe um valor de entrada com tamanho arbitrário ↪ retorna um valor de saída com tamanho fixo - digest/soma ↪ deve ser rápida de se calcular ↪ não há garantia de que valores de saída iguais correspondam a valores de entrada iguais https://en.wikipedia.org/wiki/Hash_function -
função hash criptográfica 1. modificar o valor de entrada sem
alterar a hash de saída 2. determinar o valor de entrada a partir da hash de saída 3. encontrar dois valores de entrada que geram a mesma hash de saída deve ser extremamente difícil de: cryptographic hash function -
problemas restantes 1. usuários usam poucas senhas e senhas simples
demais 2. funções hash são iguais em todo lugar 3. funções hash são facilmente calculadas -
tabela hash senha hash digest (md5) 00 240181530756648252419641605934510424179 01 200234402242227250667150127387849862099
02 216577201069318744982597237570303239213 ... ... 99 229138548907862643092856609226723050075 hash table -
tabela arco-íris 01 H 200234402242227250667150127387849862099 R 99 99 H 229138548907862643092856609226723050075
R 75 75 H 277289179729312395903094935180405519811 R 11 11 H 134349327668835346876933282647662472650 R 50 50 H 256249087116017178292043637459846421514 R 14 rainbow table -
tabela arco-íris 02 68 04 54 05 40 06 42
10 46 17 03 18 57 21 33 22 12 23 11 25 46 26 85 27 33 30 38 31 50 37 74 39 51 49 12 52 16 58 11 60 50 63 96 64 11 66 62 67 74 77 12 78 11 81 57 83 43 84 43 86 54 87 74 88 38 90 54 91 75 92 12 94 03 98 54 p r p r p r p r -
tabela arco-íris 02 68 04 54 05 40 06 42
10 46 17 03 18 57 21 33 22 12 23 11 25 46 26 85 27 33 30 38 31 50 37 74 39 51 49 12 52 16 58 11 60 50 63 96 64 11 66 62 67 74 77 12 78 11 81 57 83 43 84 43 86 54 87 74 88 38 90 54 91 75 92 12 94 03 98 54 p r p r p r p r -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 r na tabela? -
tabela arco-íris 02 68 04 54 05 40 06 42
10 46 17 03 18 57 21 33 22 12 23 11 25 46 26 85 27 33 30 38 31 50 37 74 39 51 49 12 52 16 58 11 60 50 63 96 64 11 66 62 67 74 77 12 78 11 81 57 83 43 84 43 86 54 87 74 88 38 90 54 91 75 92 12 94 03 98 54 p r p r p r p r -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 r na tabela? ✅ 88 38 90 54 91 57 92 12 94 03 -
tabela arco-íris 91 H 111834828427044464997583789365696746132 R 32 32 H 132117099947440863086225782187112663809
R 09 09 H 13957014806325298886391986709069375046 R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 240181530756648252419641605934510424179 -
tabela arco-íris ☹ 91 H 111834828427044464997583789365696746132 R 32 32 H
132117099947440863086225782187112663809 R 09 09 H 13957014806325298886391986709069375046 R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 240181530756648252419641605934510424179 -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 h no caminho? ❌ H 277289179729312395903094935180405519811 R 11 11 r na tabela? -
tabela arco-íris 02 68 04 54 05 40 06 42
10 46 17 03 18 57 21 33 22 12 23 11 25 46 26 85 27 33 30 38 31 50 37 74 39 51 49 12 52 16 58 11 60 50 63 96 64 11 66 62 67 74 77 12 78 11 81 57 83 43 84 43 86 54 87 74 88 38 90 54 91 75 92 12 94 03 98 54 p r p r p r p r -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 h no caminho? ❌ H 277289179729312395903094935180405519811 R 11 11 r na tabela? ✅ 23 11 58 11 64 11 78 11 -
tabela arco-íris 23 H 73653967884445055195080758170312354509 R 09 09 H 13957014806325298886391986709069375046
R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 75 H 277289179729312395903094935180405519811 R 11 240181530756648252419641605934510424179 ☹ -
tabela arco-íris 58 H 136828743031992740684846204241313544089 R 89 89 H 157220607454102675501137493357688321846
R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 75 H 277289179729312395903094935180405519811 R 11 240181530756648252419641605934510424179 ☹ -
tabela arco-íris 64 H 311523190134827763482847747636510740789 R 89 89 H 157220607454102675501137493357688321846
R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 75 H 277289179729312395903094935180405519811 R 11 240181530756648252419641605934510424179 ☹ -
tabela arco-íris 78 H 71719428482804011558600081903487337809 R 09 09 H 13957014806325298886391986709069375046
R 46 46 H 289548202804218369273708443831392368399 R 99 99 H 229138548907862643092856609226723050075 R 75 75 H 277289179729312395903094935180405519811 R 11 240181530756648252419641605934510424179 ☹ -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 h no caminho? ❌ H 277289179729312395903094935180405519811 R 11 11 h no caminho? ❌ H 134349327668835346876933282647662472650 R 50 50 r na tabela? -
tabela arco-íris 02 68 04 54 05 40 06 42
10 46 17 03 18 57 21 33 22 12 23 11 25 46 26 85 27 33 30 38 31 50 37 74 39 51 49 12 52 16 58 11 60 50 63 96 64 11 66 62 67 74 77 12 78 11 81 57 83 43 84 43 86 54 87 74 88 38 90 54 91 75 92 12 94 03 98 54 p r p r p r p r -
tabela arco-íris 240181530756648252419641605934510424179 R 79 79 H 279127965852212042158562975737410652375 R 75
r na tabela? ❌ 75 h no caminho? ❌ H 277289179729312395903094935180405519811 R 11 11 h no caminho? ❌ H 134349327668835346876933282647662472650 R 50 50 r na tabela? ✅ 31 50 60 50 -
tabela arco-íris 31 H 257093072706249247234947985073233030901 R 01 01 H 200234402242227250667150127387849862099
R 99 99 H 229138548907862643092856609226723050075 R 75 75 H 277289179729312395903094935180405519811 R 11 11 H 134349327668835346876933282647662472650 R 50 240181530756648252419641605934510424179 ☹ -
tabela arco-íris 60 H 9527926504023878167735682838127308100 R 00 00 H 240181530756648252419641605934510424179
240181530756648252419641605934510424179 -
temperando nossa hash: sal 🧂 senha entrada da função hash
hash digest (md5) senha123 senha123 e7d80ffeefa212b7c5c55700e4f7193e senha123 senha123 e7d80ffeefa212b7c5c55700e4f7193e salt -
senha entrada da função hash hash digest (md5) senha123 senha123
e7d80ffeefa212b7c5c55700e4f7193e senha123 senha123 e7d80ffeefa212b7c5c55700e4f7193e senha sal entrada da função hash hash digest (md5) senha123 yN+$IcdRJb senha123yN+$IcdRJb cb64b87374b53373d9af6b301b257c69 senha123 AA'!OPix-O senha123AA'!OPix-O 4dee1f255bf1d1ba7f2ac8dae1483bae temperando nossa hash: sal 🧂 -
salting é uma técnica efetiva de defesa contra ataques de
pré-computação -
salting é uma técnica efetiva de defesa contra ataques de
pré-computação contanto que: 1. o valor do sal não seja reutilizado entre os usuários 2. o valor do sal seja longo o bastante -
problemas restantes 1. computadores estão cada vez mais rápidos 2.
ataques estão cada vez mais modernos e se um atacante tiver acesso ao banco de dados? -
hashes de senha e funções de derivação de chave 01.3
password hash functions; key derivation functions (kdf) -
função de hash de senha 1. argon2id ◦ m=47104 (46
MiB), t=1, p=1 ◦ m=19456 (19 MiB), t=2, p=1 ◦ m=12288 (12 MiB), t=3, p=1 ◦ m=9216 (9 MiB), t=4, p=1 ◦ m=7168 (7 MiB), t=5, p=1 3. bcrypt ◦ work factor = 10 ◦ nota: tamanho máximo de entrada é 72 bytes 2. scrypt ◦ N=2^17 (128 MiB), r=8 (1024 bytes), p=1 ◦ N=2^16 (64 MiB), r=8 (1024 bytes), p=2 ◦ N=2^15 (32 MiB), r=8 (1024 bytes), p=3 ◦ N=2^14 (16 MiB), r=8 (1024 bytes), p=5 ◦ N=2^13 (8 MiB), r=8 (1024 bytes), p=10 4. pbkdf2-hmac-sha256 ◦ 600.000 iterações -
evite regras estáticas (ou sobre a farsa da senha complexa)
• sua senha deve conter pelo menos 8 caracteres • sua senha deve conter pelo menos uma letra maiúscula (A-Z) e um número (0-9) • sua senha deve conter pelo menos um símbolo (@, !, …) • sua senha não pode conter uma sequência de 3 caracteres iguais -
evite regras estáticas (ou sobre a farsa da senha complexa)
expectativa WGG3#GgIUk"qE%W1_=>W gr!vz8!`qDyZC%9k8 w.=%i<D_]5,:a"OKef+B,xw -
evite regras estáticas (ou sobre a farsa da senha complexa)
expectativa realidade WGG3#GgIUk"qE%W1_=>W gr!vz8!`qDyZC%9k8 w.=%i<D_]5,:a"OKef+B,xw Senh@123 M4rquinhos! P@nqu3ca -
evite regras estáticas (ou sobre a farsa da senha complexa)
segurança às custas da usabilidade vem às custas da segurança “ ” Regra de Usabilidade do AviD -
liberte-se do ascii 2 3 4 5 6 7 30
40 50 60 70 80 90 100 110 120 ------------- --------------------------------- 0: 0 @ P ` p 0: ( 2 < F P Z d n x 1: ! 1 A Q a q 1: ) 3 = G Q [ e o y 2: " 2 B R b r 2: * 4 > H R \ f p z 3: # 3 C S c s 3: ! + 5 ? I S ] g q { 4: $ 4 D T d t 4: " , 6 @ J T ^ h r | 5: % 5 E U e u 5: # - 7 A K U _ i s } 6: & 6 F V f v 6: $ . 8 B L V ` j t ~ 7: ' 7 G W g w 7: % / 9 C M W a k u DEL 8: ( 8 H X h x 8: & 0 : D N X b l v 9: ) 9 I Y i y 9: ' 1 ; E O Y c m w A: * : J Z j z B: + ; K [ k { C: , < L \ l | D: - = M ] m } E: . > N ^ n ~ F: / ? O _ o DEL -
hashes de uma mesma função sempre têm o mesmo tamanho
cuidado com o tamanho máximo -
o problema do problema do bcrypt `nGu}AXY}Fh%+kC]vqXrn@nE/9!)r>+9~4;yb120,UP@<|yj[v!)OWR,jr&BmL\`O"'>I'Fm,30:x`0m 상상력을 키워봐 불가능이라는
건 없어 내일 밤이 되면 나는 80 caracteres 80 bytes 32 caracteres 80 bytes github github -
dê suporte a gerenciadores de senha ⤷ evite invenções no
formulário de login ⤷ permita a ação de colar (ctrl-v) no formulário de login ⤷ permita navegação com tab pelo formulário de login -
biometria ☹ ⤷ único para cada indivíduo ⤷ conveniente e
fácil de usar ⤷ cada vez mais usada ⤷ irreversível e imutável ⤷ problemas de privacidade ⤷ falsos positivos e negativos -
openid/oauth ☹ ⤷ auth delegada ⤷ menos senhas para usuário
⤷ controles de acesso granulares ⤷ auth delegada ⤷ implementação complexa ⤷ risco de phishing -
links mágicos ☹ ⤷ menos senhas para usuário ⤷ conveniente
e fácil de usar ⤷ acesso temporário ⤷ depende de segurança terceira ⤷ depende de entrega terceira ⤷ risco de phishing -
senha de uso único ☹ ⤷ menos senhas para usuário
⤷ conveniente e fácil de usar ⤷ acesso temporário ⤷ depende de dispositivo externo ⤷ risco de intercepção ⤷ risco de phishing -
autenticação de múltiplos fatores ↪ algo que você sabe (senha,
pin) ↪ algo que você tem (otp, chave de hardware, certificado, sms) ↪ algo que você é (biometria, ip, localização, geofencing) ↪ algo que você faz (profiling, movimentos de mouse) -
login ↪ "senha incorreta" ↪ "usuário não encontrado" ↪ "usuário
desativado" ❌ ✅ ↪ "usuário ou senha inválidos" -
recuperação de senha ↪ "te enviamos um email com o
link de recuperação" ↪ "esse email não existe em nosso banco de dados" ❌ ✅ ↪ "se essa conta estiver registada, enviaremos um email para recuperação" -
rate limiting mecanismo de defesa contra ataques de negação de
serviço ⤷ definir limites mínimo e máximo de taxa de transferência de dados ⤷ definir tempo máximo de conexão aberta ⤷ definir limite máximo de requisições a um mesmo serviço -
login throttling número máximo de tentativas de login até bloqueio
da conta ⤷ relativo à conta, não ao ip ⤷ tempo de bloqueio pode ser fixo ou exponencial ⤷ use rate limits para evitar bloqueios propositais da conta de terceiros -
obrigado! twitter: @yyyyyyy07492366 github: @yyyyyyyan linkedin: /in/yanorestes [email protected] | [email protected]
https://speakerdeck.com/yyyyyyyan