Tenho um Raspberry PI Pico por aí e estava pensando em criar um dispositivo que, quando eu precisasse me autenticar no Linux, eu pudesse simplesmente clicar em um botão soldado no Pico, que então enviaria uma mensagem ao computador que me autenticaria.
Este dispositivo estaria conectado a um computador seguro, então não haveria problema.
A questão é: como posso fazer isso? Não tenho experiência com programação em Linux, então não sei se já existe um serviço ou biblioteca que possa ser usado para isso. Sei que a YubiKey tem dispositivos com um botão que funciona mais ou menos assim, mas também li que eles precisam de conexão com a internet para funcionar, o que é inaceitável.
Não, não precisa disso. Isso está errado.
Até onde sei, nada disso existe ainda, então você terá que programá-lo você mesmo.
Teoricamente, você pode implementar um dispositivo de token FIDO muito menos seguro do que Yubikeys etc. no Linux usando o driver de gadget HID — há até algumas implementações rudimentares escritas para fins de depuração, por exemplo, pela comunidade solokeys — mas mesmo fazer isso funcionar (e isso ainda não lhe dará login em nada) exigirá diversas habilidades da caixa de ferramentas de "programação de software de sistema Linux".
Digo "menos seguro" porque, diferentemente do RPi zero, esses tokens geralmente têm memória realmente segura e ilegível.
Se você não fizer isso, poderá economizar o esforço de executar uma implementação FIDO stub e simplesmente programar um módulo PAM que abre um dispositivo USB em massa e aguarda que um endpoint específico retorne os dados que significam "botão pressionado pelo usuário". Mas isso é, pelo menos, o mesmo nível de programação.
Portanto, receio que, sem saber programar, criar seu próprio token de login não esteja ao seu alcance por enquanto. Eu recomendo fortemente que você invista em um token de segurança adequado – um yubikey, um nitrokey, um solokeys, um onleykey ou um de seus concorrentes (também há tokens do Google e de outras grandes empresas). No fim das contas, todos eles fazem a mesma coisa e, ao contrário da sua solução RPi Zero, alguém já escreveu o software para eles. E eles realmente conseguem armazenar segredos, com os quais você pode provar diretamente que é a pessoa que afirma ser em outros computadores, ou até mesmo descriptografar seu disco rígido.
O dispositivo não precisa de conexão com a internet para funcionar. O computador precisa de conexão com a internet para validar a OTP programada de fábrica, cuja chave secreta é conhecida apenas pela Yubico. O computador não precisa de conexão com a internet para validar uma OTP programada personalizada, cuja chave secreta é conhecida por você, ou para validar uma senha estática programada personalizada, ou para usar os diversos recursos não OTP (FIDO2, PIV, OpenPGP) de um Yubikey.
Para o recurso OTP (onde você toca na tecla e ela insere algo inapropriado, como um teclado), todos os Yubikeys têm dois slots OTP (toque curto e toque longo), um dos quais é programado de fábrica com uma chave secreta conhecida pela Yubico e o outro está vazio. Ambos os slots podem ser reprogramados usando o aplicativo Yubico Authenticator, ou o antigo Yubikey Manager Qt (ykman-gui), ou a CLI yubikey-manager (ykman), ou o antigo yubikey-personalization (ykpersonalize).
Cada slot pode ser alternado entre uma OTP estilo Yubikey com uma chave personalizada, um token OATH HOTP de 6 dígitos (como os tokens TOTP 2FA, só que sem base temporal) ou uma senha estática (uma string arbitrária inserida pelo Yubikey). Não me lembro que tipo de software existe para verificação local de OTPs estilo Yubikey (o Fedora já tinha uma implementação como parte do FAS), mas OATH HOTP ou senha simples funcionariam para a maioria dos propósitos.
Para o recurso FIDO2, um programa pode solicitar a chave para criar uma assinatura (o que requer confirmação por toque) e, em seguida, validá-la com uma chave pública armazenada localmente. Não há um requisito específico para que a assinatura seja enviada para algum lugar ou que um navegador esteja envolvido (por exemplo, o OpenSSH suporta autenticação SSH usando uma chave FIDO e assinatura de dados locais via ssh-keygen usando uma chave FIDO).
Para o recurso PIV, da mesma forma, um programa pode solicitar a chave para criar uma assinatura (que em modelos mais recentes – acho que Yubikey 5 ou posterior – pode exigir confirmação por toque para determinados slots) e, em seguida, validá-la com uma chave pública armazenada localmente. Algo como pam_pkcs11 poderia ser usado para integração.
Acontece que não sou a primeira pessoa que pensou em usar um Raspberry Pi Pico como dispositivo de segurança: