O documento discute autenticação de dois fatores, descrevendo métodos como senhas, biometria, PIN e tokens. Ele explica os protocolos HOTP e TOTP para gerar códigos OTP baseados em hash e tempo, respectivamente, e como implementá-los usando a biblioteca OTPHP.
18. HOTP vs. TOTP
HOTP não exige sincronização de relógios
TOTP trabalha melhor com janelas
estreitas (mais segurança)
HOTP permite validação bi-direcional
TOTP não perde sincronização por mal uso
23. BASE64
0 - A
1 - B
2 - C
3 - D
4 - E
5 - F
6 - G
7 - H
8 - I
9 - J
10 - K
11 - L
12 - M
13 - N
14 - O
15 - P
16 - Q
17 - R
18 - S
19 - T
20 - U
21 - V
22 - W
23 - X
24 - Y
25 - Z
26 - a
27 - b
28 - c
29 - d
30 - e
31 - f
32 - g
33 - h
34 - i
35 - j
36 - k
37 - l
38 - m
39 - n
40 - o
41 - p
42 - q
43 - r
44 - s
45 - t
46 - u
47 - v
48 - w
49 - x
50 - y
51 - z
52 - 0
53 - 1
54 - 2
55 - 3
56 - 4
57 - 5
58 - 6
59 - 7
60 - 8
61 - 9
62 - +
63 - /
25. BASE32
0 - A
1 - B
2 - C
3 - D
4 - E
5 - F
6 - G
7 - H
16 - Q
17 - R
18 - S
19 - T
20 - U
21 - V
22 - W
23 - X
24 - Y
25 - Z
26 - 2
27 - 3
28 - 4
29 - 5
30 - 6
31 - 7
8 - I
9 - J
10 - K
11 - L
12 - M
13 - N
14 - O
15 - P
31. Implementação
<?php
use OTPHPTOTP;
$totp = TOTP::create();
$totp->setLabel(‘usuario@servidor.com’);
$renderer = new BaconQrCodeRendererImagePng();
$renderer->setHeight(256);
$renderer->setWidth(256);
$writer = new BaconQrCodeWriter($renderer);
$writer->writeFile(
$totp->getProvisioningUri(),
‘qrcode.png’
);
otpauth://totp/usuario@servidor.com
?secret=4CAF7G34BBGS4CTF
&period=30&digits=6
&algorithm=SHA1&issuer=MeuApp
32. Implementação
Jamais ative a autenticação em dois
fatores sem exigir a confirmação do OTP
pelo usuário
Jamais desative também
Implemente um canal alternativo para
entrega do OTP (SMS, e-mail)
33. OTP vs. Passwords
OTP é limitado em termos de segurança
Senhas têm tamanho variado
Senhas podem nunca expirar
Ambos são baseados em segredo
35. Segurança
Janelas TOTP devem ter no máximo 30s
Implemente notificação de login simultâneo
Criptografe o segredo, guarde apenas hash
das senhas
OTP não protege aplicação contra
vazamentos catastróficos (banco e fonte)