
Olá% username%!
Em 13 de junho de 2019, a Yubico, fabricante de dispositivos de autenticação de dois fatores, emitiu
um aviso de segurança informando a vulnerabilidade crítica de alguns dispositivos Yubikey FIPS. Vamos ver o que é essa vulnerabilidade e como ela pode ser evitada.
Prefácio
Os Estados também têm seus próprios GOSTs, chamados FIPS - Federal Information Processing Standard. Hardware e software com o qual o estado. estruturas necessárias para cumprir o FIPS.
De acordo com os colegas que conhecemos no EuroCrypt 2019, a certificação FIPS é uma coisa enorme, a ponto de os especialistas em FIPS chegarem até você, iniciar o software no modo de depuração, alterar os valores na memória e verificar se ele cai onde se destina.
Apesar disso, obter a certificação e tornar-se compatível com FIPS é real. Portanto, os produtos e empresas que prestam serviços ao estado, existem muitas vezes mais que os nossos.
ECDSA
Dentro do token usb do Yubico, há um armazenamento de chaves e um mecanismo que implementa, incluindo ECDSA. Durante o registro, a chave pública do token é transferida para o servidor e armazenada.
E no login, o servidor envia uma sequência aleatória para o cliente, que assina junto com as meta-informações, como, por exemplo, um domínio.
Em poucas palavras, como funciona o ECDSA ou a assinatura digital nas curvas elípticas. Alguns detalhes são omitidos para facilitar a apresentação:
- Consideramos o hash da mensagem e o convertemos em um número. .
- Geramos um número aleatório criptograficamente forte k.
- Calcular ponto onde G é o ponto base da curva chamado gerador (constante)
- Calculamos onde n é a ordem do ponto base (constante)
- Calculamos onde d é a chave privada
- A assinatura digital consiste em um par de números r, s
É fundamental que o número k não seja apenas secreto, mas sempre diferente. Caso contrário, torna-se possível calcular a chave privada.
Por exemplo, temos duas assinaturas (r, s) e (r1, s1), que foram recebidas para diferentes mensagens m e m1, mas com a ajuda do mesmo segredo k. Vamos calcular a chave privada.
- O atacante calcula e e e1.
- Desde então podemos descobrir k.
- Desde , então podemos calcular d.
- d - chave privada
Se os números k forem diferentes, mas
não totalmente , também é possível calcular a chave privada, basta forçar um pouco. A propósito, em 2013, eu já
escrevi como o DSA desajeitado (EC) implementado quebrou no PlayStation e em outros produtos, eu recomendo a leitura.
Yubico
Portanto, em vários produtos Yubico FIPS, ocorreu um erro em que os números k imediatamente após ativar o token não eram inteiramente aleatórios. E havia uma oportunidade real de calcular a chave privada conectada dentro. Portanto, eles recuperaram dispositivos vulneráveis e emitiram uma notificação.
O que poderia ser feito?
De um modo geral, o problema já foi resolvido. Desde 2013, existe o
RFC 6979 , que descreve um ECDSA
determinístico obtido a partir do usual por meio de várias modificações simples. Além disso, em 2014, ao desenvolver o padrão U2F, foi precisamente por causa de possíveis problemas com o RPS que o FIPS
propôs abertamente a mudança para o ECDSA determinístico, mas a oferta foi rejeitada. Esse é um dos motivos pelos quais o FIPS representa os padrões F * cked-up, Insecure, Persnickety Standards.
O Yubico pode atender formalmente aos requisitos do FIPS para a aleatoriedade do número k, mas usar a solução alternativa, gerando k deterministicamente e, em seguida, fazer o XOR com o fato de que emitiu um RNG (ou executando tudo pelo KDF). No entanto, isso não foi feito.
E nós?
E nós temos a mesma coisa. GOST R 34.10-2012 - essencialmente o mesmo ECDSA, apenas com curvas diferentes. Os requisitos para gerar o número k permanecem os mesmos do ECDSA tradicional. Algum dos fabricantes de nossos tokens executa a solução descrita acima? Ele usa a versão determinística do ECDSA? Eu duvido.
Se houver representantes de desenvolvedores russos, seria interessante ouvir a opinião deles sobre esse assunto. Ou pelo menos para manter isso em mente.
Obrigado pela atenção.