OTPs Explicados

O Yubico OTP é um ID Público e Senha criptografados de 44 caracteres, de uso único, seguros e criptografados em 128 bits, quase impossíveis de falsificar. O OTP é composto por duas partes principais: os primeiros 12 caracteres permanecem constantes e representam o ID público do próprio dispositivo YubiKey. Os 32 caracteres restantes formam uma senha exclusiva para cada OTP gerado.

Exemplos de saídas de uma YubiKey de serie 5 onde o botão foi pressionado três vezes:

cccjgjgkhcbbirdrfdnlnghhfgrtnnlgedjlftrbdeut

cccjgjgkhcbbgefdkbbditfjrlniggevfhenublfnrev

cccjgjgkhcbbcvchfkfhiiuunbtnvgihdfiktncvlhck

A senha é gerada a partir de várias fontes aleatórias, incluindo contadores para sessões YubiKey e OTPs gerados. Quando um Yubico OTP é verificado, os valores do contador de sessão e OTP são comparados aos últimos valores enviados. Se os contadores forem menores que os valores usados anteriormente, o OTP será rejeitado. Copiar um OTP não permitirá que outro usuário falsifique uma YubiKey — o valor do contador permitirá que o servidor de validação saiba quais OTPs já foram usados.

 

O OTP de saída do Yubico OTP é fornecido no conjunto de caracteres Modhex. O conjunto de caracteres Modhex usa caracteres comuns na maioria dos layouts de teclado QWERTY do alfabeto latino, permitindo a funcionalidade independentemente do conjunto de idiomas.

Substituição de Hex para Modhex

Hex

a

b

c

d

e

f

0

1

2

3

4

5

6

7

8

9

Modhex

l

n

r

t

u

v

c

b

d

e

f

g

h

i

j

k

Essa substituição pode ser facilmente programada. Por exemplo, no Linux, a conversão de uma string aleatória de 6 caracteres hexadecimais para modhex pode ser realizada com o comando:

openssl rand -hex 6 | tr abcdef0123456789 lnrtuvcbdefghijk

O algoritmo de geração do Yubico OTP

A geração do YubiKey OTP é composta pelos seguintes campos, criptografados com uma chave AES de 128 bits exclusiva. O resultado é a string modhex de 32 caracteres incluída após o ID público de 12 caracteres.

Mnemonic

Byte offset

Size

Description

uid

0

6

Private (secret) id

useCtr

6

2

Usage counter

tstp

8

3

Timestamp

sessionCtr

11

1

Session usage counter

rnd

12

2

Random number

Private ID

O campo id privado compreende 6 bytes copiados do valor de configuração do campo id privado. Este campo pode ser usado para armazenar uma identidade privada que pode ser acessada quando o OTP é descriptografado em um servidor de validação Yubico OTP contendo a chave AES usada para criptografar o OTP.

A instância de verificação deve verificar este campo em relação ao valor esperado. Se um OTP for criptografado com uma chave AES não correspondente, este campo será inválido e, nesse caso, o OTP será rejeitado.

Contador de uso da sessão

Na inicialização, o contador de uso da sessão é zerado. Após a geração de cada novo OTP, esse campo é incrementado em uma unidade. Se esse campo mudar de 0xff para 0, o campo do contador de uso será incrementado automaticamente.

Contador de uso

O contador de uso é um contador não volátil cujo valor é preservado mesmo quando o dispositivo é desconectado. Na primeira vez que o dispositivo é usado após uma inicialização ou reinicialização, esse valor é incrementado em 1 e o contador de sessão é definido como zero.
 
Este campo tem apenas 15 bits de largura, dando um intervalo utilizável de 1 – 0x7fff. Quando esse contador atinge 0x7fff, ele para aí. Alguém poderia pensar que isso poderia levar a uma YubiKey a ser praticamente inútil durante sua vida se isso ocorrer. No entanto, considerando que uma YubiKey é usada cinco vezes ao dia, 365 dias por ano, levará 18 anos para o contador travar. Além disso, como esse contador incrementa apenas na primeira vez após a inicialização/reinicialização, a vida útil prática é ainda maior.
 
Se o contador atingir o valor final, o dispositivo ainda pode ser reconfigurado, o que causaria a reinicialização do contador. O campo é armazenado no formato little-endian, ou seja, o byte menos significativo sendo armazenado primeiro.
 

Timestamp

O timestamp é um campo de 24 bits incrementado com uma taxa de aproximadamente 8 Hz. O valor do carimbo de data/hora é definido como um valor aleatório após a inicialização do gerador interno de números aleatórios.

Este campo pode ser usado pela parte verificadora para determinar o tempo decorrido entre dois OTPs subsequentes recebidos durante uma sessão.
 
Este campo muda de 0xffffff para 0 sem qualquer outra ação. Se usado pela parte verificadora, esta condição deve ser levada em consideração. Dada uma taxa de 8 Hz, o cronômetro será encerrado aproximadamente a cada 24 dias. O campo é armazenado no formato little-endian, ou seja, o byte menos significativo sendo armazenado primeiro.

Números aleatórios

Um número aleatório de 16 bits é escolhido do gerador interno de números aleatórios para adicionar alguma entropia adicional ao resultado final.

Checksum

Uma soma de verificação do primeiro complemento ISO13239 de 16 bits é adicionada ao final. A soma de verificação abrange todos os bytes, exceto a própria soma de verificação. A soma de verificação é verificada calculando a soma de verificação de todos os bytes, incluindo o campo de soma de verificação. Isso dará um resíduo fixo de 0xf0b8 se a soma de verificação for válida. Se a soma de verificação for inválida, o OTP será rejeitado.
 
O campo é armazenado no formato little-endian, ou seja, o byte menos significativo sendo armazenado primeiro.
 

Fonte: developers.yubico.com

-80%
Lançamento
-47%
R$369,00
-50%
Lançamento
R$997,00
-60%
R$399,00
-54%
R$599,00
-57%
R$429,00
-58%
R$459,00
-60%
R$399,00