Skip to main content

Introdução a Yubico/Yubikey




Introdução


A Yubico é uma empresa conhecida por desenvolver soluções de segurança para autenticação multifatorial, com o objetivo de tornar a proteção digital mais acessível e eficaz. Seu produto principal é a YubiKey, uma chave de segurança física que pode ser utilizada em diversas plataformas e dispositivos para aumentar a segurança de contas digitais, serviços online, sistemas e redes.


A YubiKey atua como um método adicional de autenticação, proporcionando uma camada extra de proteção, além de senhas e outros fatores tradicionais. Ela utiliza diversos métodos de autenticação, incluindo OTP (One-Time Password), FIDO U2F (Universal 2nd Factor), FIDO2, e autenticação por certificado, permitindo que seja integrada com grande flexibilidade a diferentes sistemas e aplicações.


As principais vantagens de usar a YubiKey incluem:

  • Segurança reforçada
    A autenticação multifatorial torna mais difícil o comprometimento de contas, mesmo que uma senha seja descoberta.

  • Facilidade de uso
    Basta inserir a chave no dispositivo (via USB ou NFC) e tocar no botão com o dedo, permitindo que a YubiKey reconheça o contato humano para autenticar rapidamente.

  • Compatibilidade ampla
    Funciona em sistemas operacionais variados (Windows, macOS, Linux) e em serviços online que suportam FIDO e OTP.


A Yubico se destaca no mercado de segurança por oferecer uma alternativa prática e confiável para proteger identidades digitais e dados sensíveis, promovendo uma forma de autenticação que é rápida e não depende da conexão à internet. A YubiKey tem sido amplamente adotada por organizações e indivíduos em busca de maior segurança em ambientes digitais.



Opções de Autenticação Suportados pela Yubico

As opções de autenticação são diferentes modos de autenticação oferecidos pela YubiKey, que são níveis de segurança configuráveis dependendo das necessidades do usuário ou da organização. As opções de autenticação promovidos pela Yubico incluem autenticação sem senha (passwordless), autenticação de dois fatores (2FA) e autenticação multifatorial (MFA), oferecendo diferentes níveis de segurança e conveniência para proteger o acesso a contas e sistemas.



Passwordless Authentication (Autenticação sem Senha)

O Passwordless authentication elimina a necessidade de senhas, que muitas vezes são fracas e sujeitas a ataques. Esse método utiliza um autenticador físico (como a YubiKey) para fornecer um único fator de autenticação seguro, substituindo a senha tradicional. A remoção de senhas reduz o risco de ataques como phishing e vazamento de senhas. Com um autenticador físico, apenas o usuário com a posse do dispositivo pode acessar a conta, aumentando significativamente a segurança sem comprometer a conveniência. Login em contas de e-mail ou serviços corporativos sem a necessidade de uma senha, utilizando a YubiKey para autenticação direta são exemplos de seu uso.



Two-Factor Authentication (2FA)

O 2FA adiciona uma camada extra de segurança ao exigir dois fatores para autenticação: algo que o usuário sabe (uma senha) e algo que o usuário possui (um dispositivo físico, como a YubiKey). Isso protege contra tentativas de acesso não autorizado, pois o invasor precisaria não só da senha, mas também do dispositivo de autenticação física. Acesso a contas bancárias ou plataformas de software que exigem tanto uma senha quanto a presença do dispositivo YubiKey como um segundo fator de autenticação são exemplos de uso.



Multi-Factor Authentication (MFA)

O MFA eleva ainda mais o nível de segurança ao exigir múltiplos fatores de autenticação, como um dispositivo físico, um PIN e, possivelmente, biometria (impressão digital ou reconhecimento facial). A combinação desses fatores oferece a mais alta segurança. O uso de vários fatores diminui o risco de acesso não autorizado, mesmo que um dos fatores seja comprometido. É uma solução ideal para acesso a informações sensíveis em ambientes corporativos e governamentais.


yubikey

A YubiKey oferece suporte aos três tipos de autenticação mencionados acima.



Protocolos de Autenticação


São os métodos técnicos ou protocolos específicos que a YubiKey suporta para realizar a autenticação, garantindo compatibilidade e segurança com diversos serviços e sistemas. Abaixo podemos conferir os principais protocolos de Autenticação:

  • FIDO U2F (Universal 2nd Factor)
    Um padrão que adiciona uma segunda camada de segurança aos logins tradicionais, exigindo a presença física de um dispositivo de autenticação, como a YubiKey. O FIDO U2F ajuda a proteger contra ataques de phishing e sequestro de sessão, garantindo que apenas usuários autorizados possam acessar suas contas.

  • FIDO2 e WebAuthn
    O FIDO2 é a evolução do padrão FIDO U2F, projetado para autenticação forte sem senhas. Com o WebAuthn, a YubiKey utiliza criptografia de chave pública para autenticar o usuário. Nesse processo, o serviço verifica se a chave pública registrada corresponde à privada armazenada na YubiKey e confirma que o dispositivo está fisicamente presente. Essa autenticação por presença requer a interação do usuário, como um toque na YubiKey, para iniciar a comunicação, garantindo tanto a identidade quanto a participação ativa do usuário no momento da autenticação.

  • OATH (Initiative for Open Authentication)
    Um conjunto de padrões abertos para autenticação forte, incluindo OTP (One-Time Password) e TOTP (Time-Based One-Time Password). Esse padrão permite a geração de senhas únicas que expiram após um curto período, aumentando a segurança contra acessos não autorizados.

  • Smart Card/PIV (Personal Identity Verification)
    Um padrão do governo dos EUA para autenticação baseada em certificados digitais, utilizado principalmente em cartões inteligentes. Oferece autenticação de alta segurança para acesso a sistemas e dados sensíveis, sendo amplamente adotado em ambientes governamentais e corporativos. Esse padrão permite que a YubiKey funcione como um cartão inteligente (smart card). Essa funcionalidade é baseada na especificação NIST SP 800-73, permitindo operações de assinatura e descriptografia usando chaves privadas armazenadas no dispositivo.

  • OpenPGP
    Um padrão para criptografia de dados e comunicação segura, permitindo a assinatura e criptografia de e-mails e documentos. Garante a integridade e confidencialidade das comunicações, sendo uma ferramenta essencial para profissionais que lidam com informações sensíveis.


Ao suportar esses padrões, a Yubico assegura que seus dispositivos de autenticação, como a YubiKey, sejam versáteis e compatíveis com diversas aplicações e serviços, atendendo às necessidades de segurança de indivíduos e organizações em todo o mundo.



Segurança durante Autenticação de Login

Para segurança em autenticação de login em computadores, a Yubico oferece ferramentas que permitem integrar a YubiKey ao login de sistemas operacionais como Windows, macOS e Linux, fortalecendo a proteção de acessos locais.


A YubiKey pode ser configurada como parte do login no sistema, exigindo sua presença física para autenticação. Dependendo do sistema, o dispositivo pode ser utilizado para autenticação passwordless, dois fatores (2FA) ou como parte de um sistema de autenticação multifatorial (MFA).

  • Login em Windows, Linux e macOS
    A YubiKey funciona como um segundo fator de autenticação ou como parte de MFA. Isso significa que, além da senha, o usuário precisa inserir ou tocar a YubiKey para completar o login, reduzindo o risco de invasão. No macOS, por exemplo, é possível configurar a YubiKey como um segundo fator para desbloquear o sistema.

  • Login em Ubuntu/Linux
    Para Linux, como Ubuntu, a YubiKey pode ser configurada para autenticação de login usando o padrão FIDO U2F. O processo envolve configurar o sistema para solicitar a chave YubiKey no momento do login, adicionando uma camada de segurança física além da senha. Para ver como aplicar no Linux, veja o guia oficial.



YubiKey


As YubiKeys são dispositivos físicos compactos, geralmente conectados via USB ou NFC, projetados para aprimorar a segurança durante o processo de autenticação de contas. Funcionam simulando entradas de teclado ou utilizando protocolos de segurança avançados, como OATH (incluindo TOTP e OTP), FIDO U2F e FIDO2/WebAuthn. Sua função pode variar desde a simples verificação da presença do dispositivo como um fator de autenticação adicional, até o fornecimento de códigos de uso único ou autenticação sem senha, tornando o acesso mais seguro e resistente a ataques de phishing ou roubo de credenciais.



Tipos de YubiKey


Existem vários tipos de YubiKeys, cada um projetado para atender a diferentes necessidades de autenticação e compatibilidade com dispositivos, lembrando que nem todos os modelos aceitam todos os protocolos que vamos mencionar. Abaixo estão os principais modelos e suas características:

  • YubiKey 5 FIPS Series
    Certificada pelo padrão FIPS 140-2, esta série é projetada para organizações que precisam cumprir regulamentações rigorosas de segurança, como governos e setores financeiros. Oferece suporte a uma ampla gama de protocolos, incluindo FIDO2/WebAuthn, OTP, OATH, Smart Card (PIV) e OpenPGP. Disponível em várias opções de conectores, como USB-A, USB-C e NFC.

  • YubiKey 5 Series
    A série mais versátil, com suporte completo a protocolos como FIDO2/WebAuthn, OTP, Smart Card (PIV) e OpenPGP. Compatível com uma ampla variedade de dispositivos e sistemas. Disponível em diferentes conectores: USB-A, USB-C e modelos com NFC integrado.

  • YubiKey Bio Series
    Projetada para segurança aprimorada com autenticação biométrica, utiliza impressão digital para FIDO2/WebAuthn, FIDO U2F e PIV (Smart card). Sem suporte a OTP.

  • Security Key Series
    Uma opção mais básica e acessível, suporta apenas os protocolos FIDO2/WebAuthn e FIDO U2F, focando em autenticação sem senha. Compatível com muitos serviços online e disponível em versões com USB-A, USB-C e algumas com NFC.

  • YubiKey FIPS Series
    Semelhante à YubiKey 5 FIPS, essa série também é certificada pelo padrão FIPS 140-2, mas focada em versões anteriores da linha. Oferece suporte a OTP, FIDO U2F, Smart Card e outros protocolos de segurança robusta. Ideal para organizações que priorizam conformidade regulatória.

  • YubiHSM Series
    Diferente das YubiKeys tradicionais, o YubiHSM (Hardware Security Module) é um dispositivo focado em proteger infraestruturas críticas. Usado para tarefas como gerenciamento seguro de chaves criptográficas e assinatura de dados, ele é conectado a servidores via USB e oferece segurança de nível empresarial para ambientes que exigem proteção avançada.

  • YubiKey 4 Series (descontinuada)
    Esta série foi uma das principais da Yubico antes do lançamento da YubiKey 5 Series. Oferecia suporte a vários protocolos de autenticação, incluindo OTP (Yubico OTP e OATH), FIDO U2F, Smart Card (PIV) e OpenPGP. Era compatível com USB-A e tinha uma versão compacta chamada YubiKey 4 Nano. Embora funcional e ainda usada em muitos cenários, foi substituída pela YubiKey 5 Series, que adicionou suporte a protocolos mais modernos como FIDO2/WebAuthn.


Para mais detalhes sobre tamanho e versões de chaves GPG e outros protocolos suportados por cada uma das Yubikeys, veja no site oficial.



Onde usar a Yubikey?


As YubiKeys podem ser configuradas para autenticação ao fazer login em Servidores remotos via SSH ou localmente em Desktops, nesse cenário é possível usar tanto o OTP quanto HMAC-SHA1 Challenge-Response. Ainda é possível usar a Yubikey para fazer autenticação em serviços online como Bitwarden, Google Accounts, Microsoft Accounts, Facebook, Github entre diversos outros, acesse aqui para obter mais detalhes.


O acesso a serviços online é possível graças ao WebAuthn, um padrão desenvolvido pelo W3C em colaboração com empresas como Yubico, Google, Mozilla e Microsoft. O WebAuthn permite que servidores registrem e autentiquem usuários utilizando criptografia de chave pública, eliminando a necessidade de senhas tradicionais. Nesse processo, a YubiKey atua como um autenticador, armazenando a chave privada de forma segura e assinando desafios enviados pelo servidor durante a autenticação. O servidor, por sua vez, armazena a chave pública e verifica a assinatura para confirmar a identidade do usuário. Esse método não apenas fortalece a segurança, mas também simplifica a experiência do usuário, reduzindo a dependência de senhas que podem ser esquecidas ou comprometidas.


A maioria dos serviços online utiliza WebAuthn como padrão, aproveitando a criptografia de chave pública para oferecer autenticação segura e sem senha. Para autenticação remota, como em acessos SSH, há dois métodos principais. O primeiro é o uso de chaves públicas SSH geradas e armazenadas diretamente no dispositivo (YubiKey). O segundo, considerado mais seguro, envolve o uso de OTP (One-Time Password), validado online através do YubiCloud ou de servidores próprios, utilizando ferramentas como o ykval (Yubico Validation Server) e o ykksm (Key Storage Module). Combinar o uso de chaves públicas SSH com OTP gerados pela YubiKey proporciona um sistema de autenticação remoto altamente seguro, dificultando significativamente o acesso não autorizado.


Já para login local offline, o padrão, ao utilizar o pam_u2f, é baseado em criptografia de chave pública por meio do protocolo FIDO U2F. Esse método exige a presença física do dispositivo, garantindo um nível elevado de segurança mesmo sem conexão com a rede.


Como funciona Login local com pam_u2f?

Durante a configuração inicial (registro), uma chave pública é gerada pela YubiKey e associada à conta do usuário no sistema local. No momento do login, o sistema (através do módulo PAM) envia um desafio ao dispositivo. A YubiKey utiliza sua chave privada para assinar o desafio, e o sistema verifica a assinatura utilizando a chave pública armazenada.



Slots


As YubiKeys possuem slots configuráveis que permitem armazenar diferentes configurações e funcionalidades. Um slot é como uma área interna dedicada, onde são configurados os comportamentos desejados para a autenticação. Existem dois slots principais disponíveis para o OTP (One-Time Password), sendo o Slot 1 associado a um pressionamento curto do botão da YubiKey e o Slot 2 a um pressionamento longo. Essa distinção permite que o dispositivo realize diferentes ações dependendo do tipo de interação.



Slots OTP


Os slots de OTP podem ser configurados para oferecer diversas funcionalidades, dependendo da necessidade. Eles podem ser programados para operar com:

  • Yubico OTP: Um algoritmo proprietário que gera senhas descartáveis (One-Time Passwords) exclusivas para autenticação segura.
  • OATH HOTP (HMAC-based One-Time Password): Um padrão aberto que gera senhas descartáveis baseadas em eventos.
  • Senha estática: Pode ser configurado para inserir uma senha fixa como se fosse digitada por um teclado.
  • Desafio-resposta: Usa algoritmos como HMAC-SHA1 ou Yubico OTP para autenticações mais robustas, respondendo a desafios enviados pelo sistema.

Para fixar as informações:

  • Slot 1 (Pressionamento curto)
    Por padrão, este slot é configurado para Yubico OTP, permitindo que a YubiKey gere senhas descartáveis rapidamente com um toque breve. É ideal para autenticação rápida em serviços compatíveis. Também pode ser reprogramado para outros protocolos, como OATH HOTP, senha estática ou Challenge-Response.

  • Slot 2 (Pressionamento longo)
    Usado para funções mais avançadas, como Challenge-Response ou senha estática, mas é totalmente configurável. Ativado por um toque prolongado (cerca de 2 segundos), esse slot possibilita o uso simultâneo das diferentes funcionalidades da YubiKey em um único dispositivo.


Vamos entender os modos de configuração suportados nos slots OTP:

  • Yubico OTP
    Gera um código OTP baseado em chaves Yubico, que pode ser configurado em qualquer slot.

  • Challenge-Response
    É um método de autenticação suportado pelas YubiKeys que envolve a troca de desafios e respostas entre o dispositivo e o sistema host. Nesse processo, o sistema envia um "desafio" (challenge) para a YubiKey, que responde (response) utilizando um algoritmo criptográfico previamente configurado. As YubiKeys suportam dois principais algoritmos para Challenge-Response:

    • HMAC-SHA1
      Esse protocolo é amplamente utilizado em ambientes offline, onde não há conexão de rede. O sistema que solicita a autenticação gera um valor aleatório (o desafio) e o envia para a YubiKey. A YubiKey combina esse desafio com uma chave secreta interna e utiliza o algoritmo HMAC-SHA1 para gerar uma resposta. O sistema calcula a resposta esperada utilizando a mesma chave secreta e o mesmo desafio e, se ambas as respostas coincidirem, a autenticação é confirmada com sucesso.

    • OTP
      Nesse modo, a YubiKey recebe um desafio de 6 bytes enviado pelo sistema host e o concatena com 10 bytes únicos do dispositivo. Essa combinação é criptografada usando uma chave AES interna de 16 bytes para gerar uma resposta de 16 bytes. O sistema descriptografa essa resposta e verifica se os primeiros 6 bytes correspondem ao desafio enviado. Esse método é utilizado em autenticações que requerem validação remota, como no YubiCloud ou em servidores de autenticação compatíveis com o Yubico OTP.

  • Static Password
    Armazena uma senha fixa que pode ser usada em locais onde senhas OTP não são suportadas.

  • OATH HOTP
    Gera códigos OTP baseados em eventos (como contador) para autenticação multifatorial.


Podemos configurar os slots usando o YubiKey Manager (GUI ou CLI), onde é possível definir qual slot será utilizado para cada função. Isso permite personalizar a YubiKey para atender a diferentes necessidades de segurança e autenticação, escolhendo a função mais apropriada para cada slot. Também é possível usar o Yubikey Personalization Tool.


Esses dois slots proporcionam uma grande flexibilidade, permitindo que um único dispositivo atenda a múltiplas necessidades de segurança em diferentes serviços e cenários de uso.



Código OTP

O código OTP é um sistema de autenticação forte que gera uma senha única e dinâmica cada vez que é usado. O sistema é projetado para impedir a reutilização de senhas e fornecer uma autenticação segura em várias situações. A YubiKey gera OTPs utilizando uma combinação de identificadores e uma chave secreta, protegida por criptografia AES.


O OTP gerado pela YubiKey tem 44 caracteres e é composto por três partes principais:

  1. Public ID (Identificador Público)
    Os primeiros 12 caracteres do OTP representam o Public ID da YubiKey. Identifica exclusivamente a YubiKey e serve para identificar a chave sem revelar informações sensíveis. Ele é utilizado pelo servidor para localizar a Private ID e Secret Key da YubiKey no banco de dados.

  2. Encrypted OTP (Token Criptografado)
    Os últimos 32 caracteres formam o token OTP criptografado. Esse token contém o Private ID da chave, o contador e a chave secreta (Secret Key) da YubiKey. Esses dados são criptografados usando AES-128.

  3. HMAC e API Key (Autenticação)
    A API Key é usada pelo cliente para autenticar a comunicação com o servidor YubiKey Validation Server (ykval). Ela fornece um mecanismo de segurança para garantir que os dados do cliente não sejam adulterados.


A estrutura detalhada do Yubico OTP é a seguinte:

  • UID (6 bytes)
    ID privada única da YubiKey.

  • Contador de Uso (2 bytes)
    Incrementa a cada uso, mesmo após reinicializações, ajudando a detectar OTPs reutilizados.

  • Timestamp (3 bytes)
    Marca temporal que incrementa aproximadamente 8 vezes por segundo, indicando quando o OTP foi gerado.

  • Contador de Sessão (1 byte)
    Incrementa a cada OTP gerado durante uma sessão de energia contínua, reiniciando após desligamento.

  • Número Aleatório (2 bytes)
    Adiciona entropia ao OTP, tornando-o mais seguro.

  • Checksum (2 bytes)
    Verifica a integridade dos dados do OTP.


A segurança dos OTPs gerados pela YubiKey está garantida pelo fato de que o OTP não pode ser revertido para obter o Private ID ou a Secret Key. O código de 32 caracteres que compõe o OTP é gerado utilizando esses elementos, combinados com outros parâmetros, por meio de uma função de criptografia unidirecional. Isso significa que, mesmo com acesso ao OTP, não há como decifrá-lo para recuperar os dados sensíveis que o geraram.


No entanto, com o Public ID, Private ID e a Secret Key, é possível recriar um OTP completo, pois esses são os elementos essenciais que formam o código. Por esse motivo, é crucial proteger essas informações, especialmente ao operar um servidor KSM (Key Storage Module), que armazena e utiliza esses dados para validar os OTPs. A segurança desses elementos é fundamental para evitar comprometimentos no sistema de autenticação.



Estrutura do OTP

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


  • Hexadecimal (Hex)
    O Hexadecimal é um sistema numérico base 16 usado para representar dados de maneira compacta e legível. Ele usa os dígitos de 0 a 9 e as letras de A a F para representar os valores de 0 a 15. O formato hexadecimal é amplamente usado em computação e criptografia para representar valores binários de forma simplificada, pois cada caractere hex representa exatamente 4 bits (um nibble). Por exemplo, o byte binário 10101100 pode ser escrito como AC em hexadecimal.

  • Modhex (Modified Hexadecimal)
    Já o Modhex é uma variação do formato hexadecimal usada pela Yubico para garantir a compatibilidade dos códigos gerados pelas YubiKeys com diferentes layouts de teclado. Nem todos os layouts suportam os caracteres tradicionais de hexadecimal (A-F), então o Modhex substitui esses caracteres por letras que são consistentes em praticamente todos os layouts de teclado.

    O mapeamento entre Hex e Modhex é o seguinte:

    Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
    Modhex: c b d e f g h i j k a n t r u v

    Por exemplo, a sequência hexadecimal 1A3F seria representada como bant em Modhex.



PIV certificate slots


As YubiKeys compatíveis com PIV (Personal Identity Verification) possuem diversos slots de certificados, cada um destinado a uma função específica na autenticação e segurança. Os modelos YubiKey 4 e 5 oferecem 24 slots, enquanto a YubiKey NEO possui 4 slots. Cada slot pode armazenar um certificado X.509 juntamente com sua chave privada correspondente.

Principais slots de certificados PIV:

  • Slot 9a: PIV Authentication
    Utilizado para autenticar o cartão e o portador, sendo comum em logins de sistemas. Requer a inserção do PIN do usuário para operações com a chave privada. Após a autenticação inicial, múltiplas operações podem ser realizadas sem solicitar o PIN novamente.

  • Slot 9c: Digital Signature
    Destinado a assinaturas digitais, como documentos ou executáveis. Exige a inserção do PIN antes de cada operação de assinatura, garantindo a participação ativa do usuário em cada assinatura gerada.

  • Slot 9d: Key Management
    Usado para criptografia visando confidencialidade, como na encriptação de e-mails ou arquivos. Requer o PIN do usuário para operações com a chave privada. Após a autenticação inicial, múltiplas operações podem ser realizadas sem solicitar o PIN novamente.

  • Slot 9e: Card Authentication
    Suporta aplicações de acesso físico, como controle de entrada em edifícios com fechaduras compatíveis com PIV. Não requer a inserção do PIN para operações com a chave privada.

  • Slots 82-95: Retired Key Management
    Disponíveis apenas nas YubiKeys 4 e 5, são destinados ao armazenamento de chaves de gerenciamento anteriores, permitindo a decriptação de documentos ou e-mails antigos. Todos os 20 slots estão disponíveis para uso.

  • Slot f9: Attestation
    Disponível em YubiKeys a partir da versão 4.3, é utilizado para atestar outras chaves geradas no dispositivo. Este slot não é limpo durante um reset, mas pode ser sobrescrito conforme necessário.


É importante notar que as políticas de PIN para esses slots podem ser ajustadas nas YubiKeys 4 e 5. No entanto, aplicativos que utilizam backends genéricos, como PKCS#11, podem não considerar essas diferenças e solicitar o PIN mesmo quando não é necessário.



Ferramentas online


A Yubico oferece diversas ferramentas online para facilitar a configuração e o uso de suas chaves de segurança YubiKey. A seguir, vou comentar uma visão geral de alguns serviços online que são interessantes ter conhecimento:

  • Yubico OTP Verification
    Esta ferramenta permite que você teste e verifique se sua YubiKey está funcionando corretamente ao gerar e validar um One-Time Password (OTP). O sistema validará o código para confirmar o funcionamento adequado do dispositivo. Para que possa ser confirmado, você deve ter submetido os dados para o servidor do YubiCloud ou ter a configuração de fábrica (quando a chave é nova). Para acessar esse serviço, utilize o link Yubico OTP Verification.

  • Yubico API Key Signup
    Este serviço permite que desenvolvedores obtenham uma chave de API necessária para integrar a funcionalidade de OTP da YubiKey em seus aplicativos ou serviços. Ele forneça um Client ID e uma chave secreta, que serão utilizados na autenticação de solicitações ao YubiCloud. Para que possa ser obtidos os dados, você deve ter submetido os dados para o servidor do YubiCloud ou ter a configuração de fábrica (quando a chave é nova). Para acessar esse serviço, utilize o link Yubico API Key Signup.

  • Yubico OTP Key Upload
    Se você personalizou sua YubiKey com uma chave OTP específica, este serviço permite que você carregue essa chave para os servidores de validação da Yubico, garantindo que terceiros possam autenticar seu dispositivo corretamente. Esse serviço sincroniza sua YubiKey personalizada com os servidores de validação da Yubico. Para acessar esse serviço, utilize o link Yubico OTP Key Upload.



Ferramentas de Linha de Comando


As ferramentas de linha de comando (CLI) da Yubico oferecem várias opções para gerenciar e configurar YubiKeys diretamente do terminal, o que é ideal para administradores de sistemas e usuários avançados. Abaixo estão as principais ferramentas de CLI da Yubico e suas funcionalidades:

  • YubiKey Manager CLI (ykman)
    Ferramenta principal para configurar e gerenciar YubiKeys, possui um equivalente para ser usado na Interface Gráfica. Possibilita as seguintes funcionalidades:

    • Visualizar informações detalhadas da YubiKey, como modelo e número de série.

    • Configurar os diferentes modos de autenticação, como OTP, FIDO2, PIV (cartão inteligente) e OpenPGP.

    • Habilitar ou desabilitar funcionalidades de cada slot de configuração.

    • Gerenciar certificados, chaves e senhas armazenadas na YubiKey.

    • Exemplo de Uso:

      # Exibir informações gerais da YubiKey
      ykman info

      # Configurar o slot 1 para OTP
      ykman otp yubiotp 1

  • Yubico PAM Modules
    São Módulos PAM que permitem usar YubiKeys para autenticação de usuários em sistemas Unix/Linux. Eles possuem as seguintes funcionalidades:
    • pam_yubico.so: Usado para autenticação com Yubico OTP, requer um servidor de validação (local ou YubiCloud).
    • pam_u2f.so: Usado para autenticação com FIDO U2F/FIDO2, funcionando de maneira offline.

  • YubiOTP Personalization Tool
    É uma ferramenta usada para personalizar as configurações OTP da YubiKey, possui um equivalente para ser usado na Interface Gráfica.

    • Exemplo de Uso:
      # Configurar o Slot 2 para Challenge-Response HMAC-SHA1
      ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

  • yubico-piv-tool
    Ferramenta CLI para gerenciar e configurar o modo PIV (Personal Identity Verification) da YubiKey, usado para autenticação baseada em certificados digitais.

  • yubikey-agent
    Ferramenta para usar a YubiKey como agente SSH, substituindo chaves SSH armazenadas no disco.


Yubico Authenticator


O Yubico Authenticator é um aplicativo desenvolvido pela Yubico que adiciona uma camada extra de segurança às suas contas online, gerando códigos de verificação em duas etapas (2FA) diretamente no seu dispositivo móvel ou desktop. Diferentemente de outros aplicativos autenticadores, o Yubico Authenticator armazena as credenciais de autenticação diretamente na YubiKey, um dispositivo de hardware, em vez de no dispositivo móvel ou computador. Isso significa que, mesmo que seu dispositivo seja comprometido ou perdido, suas credenciais permanecem seguras no YubiKey.


Se a YubiKey for perdida ou roubada, as chaves OTP armazenadas nela também serão perdidas, pois elas são mantidas diretamente no dispositivo para aumentar a segurança e minimizar o risco de vazamento. Essa é uma característica intencional, já que o YubiKey foi projetado para manter as chaves de autenticação apenas em seu hardware, não as armazenando no computador ou dispositivo móvel para evitar que sejam expostas ou copiadas.


O aplicativo é compatível com diversas plataformas, incluindo Windows, macOS, Linux, iOS e Android, e funciona com conexões USB, Lightning e NFC. Além de gerar códigos OTP (One-Time Password) para autenticação de dois fatores, o Yubico Authenticator permite gerenciar credenciais e contas em várias aplicações do YubiKey, como passkeys FIDO2, certificados PIV e OTPs Yubico.


Para utilizar o Yubico Authenticator, é necessário possuir um YubiKey compatível. O aplicativo pode ser baixado diretamente do site da Yubico ou das respectivas lojas de aplicativos das plataformas suportadas.



YubiHSM


O YubiHSM é um módulo de segurança de hardware (HSM) desenvolvido pela Yubico, projetado para proteger chaves criptográficas e operações sensíveis em servidores, aplicações e dispositivos. Com um formato compacto que se conecta via USB, o YubiHSM oferece uma solução acessível e eficiente para organizações que buscam fortalecer sua segurança digital.


Um HSM (Hardware Security Module) é um dispositivo de hardware dedicado à segurança que realiza operações criptográficas e protege chaves criptográficas e dados sensíveis contra acessos não autorizados. HSMs são projetados para oferecer uma camada de segurança robusta em operações como criptografia, geração e armazenamento de chaves, assinatura digital e autenticação, sendo amplamente usados em setores financeiros, governamentais e em organizações que precisam de alto nível de segurança para dados críticos.


HSMs são capazes de gerar chaves criptográficas seguras e armazená-las de forma que nunca saiam do dispositivo. Isso impede a cópia ou roubo das chaves. Ela realiza operações como assinatura digital e autenticação de forma rápida e segura. Um HSM garante que apenas usuários autorizados possam executar essas operações. A Criptografia e Decriptação é utilizado para proteger dados durante o trânsito e em repouso, assegurando que apenas aqueles com as chaves apropriadas possam acessar ou modificar esses dados.


HSMs variam em formato e aplicação. Alguns, como o YubiHSM, são compactos e conectados via USB, enquanto outros são dispositivos grandes e independentes, projetados para data centers e operações de alta escala.



SSH com Yubikey


A YubiKey oferece várias maneiras de fortalecer a autenticação SSH, permitindo diferentes métodos de autenticação com segurança adicional. Aqui estão todos os métodos principais que podem ser usados para autenticação SSH com uma YubiKey:

  • Autenticação SSH com Yubico OTP
    A YubiKey gera um One-Time Password (OTP) que é validado remotamente por um servidor de autenticação, como o YubiCloud ou um servidor OTP próprio da organização. Nesse método, o módulo pam_yubico.so é configurado no PAM do sistema, e o SSH é configurado para utilizar o PAM como método de autenticação. Esse processo exige um Client ID e uma chave secreta para autenticação no servidor de validação.

  • Autenticação SSH com Challenge-Response HMAC-SHA1
    Usa um método Challenge-Response onde a YubiKey responde a um "desafio" do servidor SSH usando o algoritmo HMAC-SHA1. É necessário configurar o módulo PAM para usar o Challenge-Response da YubiKey, similar a configuração acima. A YubiKey também deve ser configurada no modo HMAC-SHA1 (Challenge-Response).

  • Autenticação SSH com FIDO U2F
    Utiliza o protocolo FIDO U2F para autenticação forte sem necessidade de senha. Requer uma YubiKey compatível com FIDO U2F. Durante o login, o servidor SSH envia um pedido de autenticação, e o usuário confirma a autenticação tocando na YubiKey. A chave privada permanece protegida na YubiKey, enquanto a chave pública é registrada no servidor SSH.



SSH via PAM usando YubiCloud


Nesta seção, configuraremos o SSH para autenticação com YubiKey usando o módulo PAM e validação de OTP via YubiCloud. O YubiCloud, que opera os servidores YK-VAL (Servidor de Validação) e YK-KSM (Servidor de Armazenamento de Chave), será responsável por validar os OTPs gerados pelas YubiKeys. Após a configuração, apenas usuários com uma YubiKey registrada poderão realizar login, usuários sem uma Yubikey não poderão logar.


A Yubico oferece duas opções para associar Chaves YubiKeys a usuários do sistema, (link oficial):

  • Nível Global
    É necessário criar um arquivo único de mapeamento para todos os usuários do sistema, associando cada nome de usuário aos IDs das YubiKeys correspondentes. Cada linha deve seguir o formato: username:ID_YubiKey1:ID_YubiKey2:.....

  • Nível do Usuário
    Como alternativa, cada usuário pode ter um arquivo de mapa pessoal, que deve ficar em $HOME/.yubico/authorized_yubikeys com o mesmo formato acima. Isso permite que usuários mantenham suas próprias YubiKeys autorizadas.



Configuração no Nível Global

Neste exemplo, vamos usar o nível global para associar YubiKeys aos usuários. Primeiramente, instale a biblioteca necessária para autenticação via PAM:

# Install dependencies
$ sudo apt install -y libpam-yubico

O Token ID é necessário para o mapeamento. Gere-o executando o seguinte comando, substituindo pelo código OTP gerado pela sua YubiKey:

# Obtenha o YubiKey token ID:
echo 'seu_otp_yubikey_aqui' | cut -c1-12

Em seguida, crie ou edite o arquivo de mapeamento, onde você associará cada usuário aos IDs das YubiKeys correspondentes.

# Crie o arquivo contendo o mapeamento entre usuário e IDs das chaves:
$ sudo vim /etc/yubikeyid

# A linha abaixo é apenas um exemplo:
vagrant:ccccccccccci

O Token ID é composto pelos primeiros 12 caracteres do OTP gerado pela YubiKey e deve ser associado ao nome do usuário no arquivo de mapeamento. Acesse o link upgrade.yubico.com/getapikey para obter o Client ID (Public ID) e Secret Key da YubiKey que foi cadastrado no site da YubiCloud. Esses dados serão necessários na configuração do módulo PAM.


Você não consegue obter o Public ID e Secret Key em upgrade.yubico.com/getapikey

Se você alterou a configuração da Yubikey e não submeteu os dados novos no servidor da YubiCloud, recomendo que reconfigure a chave e submeta os dados para que a autenticação seja possível usando o servidores deles.


Adicione a configuração da YubiKey ao final do arquivo PAM para SSH.

# Edite o pam do ssh:
$ sudo vim /etc/pam.d/sshd

# Adicione a linha abaixo:
auth required pam_yubico.so mode=client id=16 key=20s3a0f debug debug_file=/var/log/yubikey.log authfile=/etc/yubikeyid

Para ativar o debug dos registros de login
$ sudo touch /var/log/yubikey.log
$ sudo chmod go+w /var/log/yubikey.log

$ sudo journalctl -f -l
$ tail -f /var/log/yubikey.log

Não se esqueça de trocar id=16 pelo seu ID e key=20s3a0f pela sua API Key. Este é o Client ID que você obteve no passo anterior. O parâmetro authfile=/etc/yubikeyid especifica o caminho do arquivo de mapeamento onde os IDs das YubiKeys são associados aos usuários.


Caso você tenha ou vá ter seu próprio servidor de validação (conjunto de servidores YK-VAL e YK-KSM), use o exemplo abaixo para autenticar no seu servidor.

auth required pam_yubico.so mode=client urllist=http://192.168.121.66/wsapi/2.0/verify id=1 key=+nzbRHG3/zZUEHuLBSPahBL0XS8= authfile=/etc/yubikeyid

Para que o PAM reutilize a senha informada no primeiro módulo de autenticação, evitando que o usuário precise digitá-la novamente, modifique o arquivo de autenticação comum.

# Edite o pam da autenticação normal:
$ sudo vim /etc/pam.d/common-auth

# Encontre a linha abaixo:
auth [success=1 default=ignore] pam_unix.so nullok

# Substitua por esta linha para reutilizar a senha já fornecida:
auth [success=1 default=ignore] pam_unix.so nullok try_first_pass

Para finalizar a configuração, ative o suporte à autenticação via PAM no SSH seguindo os passos abaixo:

# Edite o arquivo de configuração do servidor SSH:
$ sudo vim /etc/ssh/sshd_config

# Adicione as linhas abaixo caso ainda não estejam configuradas:
ChallengeResponseAuthentication yes
UsePAM yes

# Reinicie o serviço SSH para aplicar as alterações:
$ sudo systemctl restart sshd ssh

A partir de agora será possível logar no SSH usando sua chave Yubikey.


considerações importantes

Ao adicionar auth required pam_yubico.so... no final do arquivo pam.d/sshd, a autenticação via YubiKey ocorre após a senha do usuário ser validada. Isso garante que apenas usuários com credenciais corretas avancem para a etapa de validação da YubiKey.


Se colocarmos a linha no início do arquivo, o sistema tentará validar a YubiKey antes de verificar a senha. Embora isso funcione, introduz um risco de segurança: atacantes poderiam usar o comportamento do sistema para inferir a existência de usuários válidos no sistema. Isso ocorre porque o processo de validação da YubiKey só é executado se o nome do usuário existir e a YubiKey estiver registrada para ele. Essa diferença de comportamento pode ser explorada para mapear nomes de usuários válidos.


Quando configurado ao final, o processo exige que a senha seja avaliada como correta antes de prosseguir para a etapa da YubiKey, reduzindo a exposição a essa vulnerabilidade de enumeração de usuários.



Logando apenas com a yubikey

Para logar apenas com a Yubikey, sem precisar de uma senha (em todo o sistema), você pode fazer:

/etc/pam.d/common-auth
# Comente a linha abaixo:
#auth [success=1 default=ignore] pam_unix.so nullok try_first_pass

# Adicione a linha abaixo:
auth [success=2 default=ignore] pam_yubico.so mode=client urllist=http://192.168.121.66/wsapi/2.0/verify id=1 key=+nzbRHG3/zZUEHuLBSPahBL0XS8= authfile=/etc/yubikeyid

O campo [success=2 default=ignore] é importante porque define as ações com base no resultado da autenticação realizada pelo módulo pam_yubico.so. O success=2 faz com que, se a autenticação for bem-sucedida, o fluxo de autenticação avance duas etapas, pulando as próximas duas regras de auth, como se a autenticação já tivesse sido concluída com sucesso. Já o default=ignore determina que, para qualquer outro resultado (como falha na autenticação), esta regra será ignorada, e o PAM continuará avaliando a próxima regra na configuração.


Com esse método usando o common-auth não é preciso definir UsePAM yes no SSH, apenas ChallengeResponseAuthentication yes.



common-auth

Para configurar o arquivo common-auth de forma que o módulo pam_yubico.so seja adicionado corretamente, insira a regra correspondente após a linha contendo auth requisite pam_deny.so. Nesse método, não é necessário comentar nenhuma linha existente (como foi feito acima).


O arquivo final deve ficar assim:

# here are the per-package modules (the "Primary" block)
auth [success=1 default=ignore] pam_unix.so nullok try_first_pass

# here's the fallback if no module succeeds
auth requisite pam_deny.so

auth [success=1 default=ignore] pam_yubico.so mode=client urllist=http://192.168.121.66/wsapi/2.0/verify id=1 key=+nzbRHG3/zZUEHuLBSPahBL0XS8= authfile=/etc/yubikeyid

# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config

A regra auth requisite pam_deny.so garante que, se nenhuma das regras anteriores for bem-sucedida, o acesso será negado imediatamente. Ao adicionar o módulo pam_yubico.so depois dessa linha, ele será avaliado como parte do fluxo de autenticação sem interferir nas configurações padrão do sistema.


CUIDADO

Vale destacar que este modelo configura a autenticação com YubiKey de forma abrangente para todos os métodos de autenticação do sistema. Isso inclui autenticações realizadas via SSH, login local em terminais (TTY), troca de usuário com su, autenticação em interfaces gráficas e também durante o uso de comandos protegidos pelo sudo.


A aplicação global ocorre porque as configurações do arquivo common-auth são utilizadas como base para todos os processos de autenticação gerenciados pelo Pluggable Authentication Modules (PAM) no sistema.



Autenticação Local e Remota Usando Challenge Response


Neste exemplo, não vamos demonstrar o passo a passo da configuração. No entanto, com a YubiKey conectada e uma configuração simples, é possível fazer login no servidor remoto sem validação pelo YubiCloud, pois toda a autenticação ocorre offline.


Para que esse método funcione, é necessário configurar a YubiKey no modo Challenge-Response usando a YubiKey Personalization Tool. Esse modo de autenticação pode ser utilizado tanto para login local quanto para SSH.


Para mais detalhes sobre a configuração, acesse a documentação oficial.



Autenticação Local Usando OTP com FIDO U2F


Nesta seção, implementaremos a autenticação de dois fatores (2FA) no Linux, exigindo que o usuário esteja com a YubiKey conectada no momento do login local. Esse método utiliza o módulo PAM para autenticação, mas, ao contrário do método que usa um servidor de validação, não requer validação online, pois todo o processo ocorre offline.


É importante notar que a partir do momento que isso for configurado, somente usuários com uma Yubikey cadastrada poderão logar. A chave da Yubikey deve estar cadastrada no sistema local também.


Essa configuração pode ser feita em dois níveis: Global e Usuário. Aqui, descreveremos o processo no Nível Global, onde o mapeamento de usuários e YubiKeys é centralizado em um único arquivo. O formato para configurar o arquivo de mapeamento de usuários e YubiKeys é o seguinte:

<username>:<KeyHandle1>,<UserKey1>,<CoseType1>,<Options1>:<KeyHandle2>,<UserKey2>,<CoseType2>,<Options2>:…

Abaixo está uma explicação para cada campo no formato de mapeamento de usuários e chaves para autenticação local com FIDO U2F:

  • username: O nome do usuário no sistema Linux que está autorizado a usar a YubiKey para autenticação. Esse campo permite que o sistema associe a YubiKey ao usuário específico durante o login.

  • KeyHandle1: Um identificador único gerado para a chave pública U2F associada ao usuário. Esse KeyHandle é utilizado para identificar a chave correta armazenada na YubiKey durante o processo de autenticação.

  • UserKey1: A chave pública do usuário registrada para autenticação. Essa chave pública é associada ao KeyHandle e utilizada pelo servidor para verificar a autenticidade do desafio (challenge) recebido durante o login.

  • CoseType1: Indica o tipo de chave de criptografia usada (também conhecida como algoritmo COSE). Em geral, FIDO U2F utiliza ES256 (que representa o algoritmo ECDSA com curva P-256) como padrão, mas outras opções podem existir dependendo da configuração e do dispositivo.

  • Options1: Este campo é utilizado para definir opções adicionais de configuração para o dispositivo. Alguns exemplos de opções comuns incluem up=true para indicar que a autenticação requer uma ação do usuário, como tocar na YubiKey, ou uv=false para especificar que a verificação do usuário não é necessária.


Primeiramente, instale a biblioteca necessária para autenticação via PAM:

# Install dependencies
$ sudo apt install -y libpam-u2f pamu2fcfg

Agora vamos gerar os dados necessários para efetuar a autenticação da Yubikey do usuário:

# Quando a yubikey piscar, toque nela!
pamu2fcfg -u fulano >> /etc/u2f_mappings

Para configurar a YubiKey no gerenciador de login do Ubuntu 22.04 (GDM), adicione a seguinte configuração ao final do arquivo /etc/pam.d/gdm-password:

# Edite o arquivo:
$ sudo vim /etc/pam.d/gdm-password

# Encontre a linha abaixo:
@include common-auth

# Após a linha acima, coloque a configuração abaixo em baixo da linha acima:
auth required pam_u2f.so authfile=/etc/u2f_mappings debug_file=/var/log/yubikey_gdm_u2f.log

# Reinicie o GDM:
$ sudo systemctl restart gdm

Para ativar o debug dos registros de login
$ sudo touch /var/log/yubikey_gdm_u2f.log
$ sudo chmod go+w /var/log/yubikey_gdm_u2f.log

Podemos configurar a YubiKey para autenticação em diversos módulos PAM, alguns deles são:

  • gdm-password e lightdm
    Utilizados pelos gerenciadores de login gráfico, como o GDM e o LightDM, esses módulos permitem implementar autenticação em dois fatores (2FA) com FIDO U2F no login via interface gráfica (não funciona na troca de usuário via terminal).


  • sudo
    Configurado no módulo PAM do comando sudo, este método adiciona 2FA ao sudo, oferecendo uma camada extra de segurança além do controle de permissões padrão.


  • login
    Utilizado para logins em terminais TTY (usado ao trocar de usuário via CLI), permitindo que sessões de terminal tenham autenticação protegida com YubiKey e FIDO U2F.



Configurando o UDEV - Opcional


Vamos configurar o Udev para bloquear o sistema quando a chave Yubikey for removida do computador.

# Crie o arquivo com as regras abaixo:
echo "ACTION==\"remove\", ATTRS{idVendor}==\"1050\", RUN+=\"/bin/loginctl lock-sessions\"" > /etc/udev/rules.d/80-yubilock.rules

# Corrija as permissões do arquivo:
chmod 644 /etc/udev/rules.d/80-yubilock.rules

# Recarregue as regras do udev:
udevadm control --reload

como obter o idvendor?

Para obter o idVendor da Yubikey ou de qualquer outro dispositivo USB, basta executar o comando abaixo:

$ lsusb -v -d $(lsusb | grep -i yubikey | awk '{ print $6 }') | grep -i 'idVendor'
idVendor 0x1050 Yubico.com


Autenticando SSH com OTP via FIDO U2F


No tópico anterior, Autenticação Local Usando OTP com FIDO U2F, mostramos como configurar o módulo PAM pam_u2f.so para implementar autenticação em dois fatores (2FA) durante o login no Linux, sendo possível aplicá-lo também em outros tipos de login.


Esse mesmo módulo não pode ser utilizado para autenticação remota via SSH, apesar de ser possível configurar num primeiro momento. Por padrão, usando o módulo pam_u2f.so, a chave precisa estar conectada no computador que está sendo acessado, isso não é possível para conexões remotas, já que o servidor pode estar bem longe e fica inviável espetar fisicamente a chave no servidor enquanto estamos numa conexão via SSH.