AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 793732
Accepted
arslivinski
arslivinski
Asked: 2025-04-14 23:41:35 +0800 CST2025-04-14 23:41:35 +0800 CST 2025-04-14 23:41:35 +0800 CST

Autenticar com um botão físico

  • 772

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.

linux
  • 3 3 respostas
  • 62 Views

3 respostas

  • Voted
  1. Best Answer
    Marcus Müller
    2025-04-15T07:24:07+08:002025-04-15T07:24:07+08:00

    Eu 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.

    A questão é: como posso fazer isso? Não tenho experiência com programação Linux, então não sei se já existe algum serviço ou biblioteca que possa ser usada para isso.

    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.

    • 2
  2. grawity
    2025-04-15T13:13:00+08:002025-04-15T13:13:00+08:00

    Eu 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.

    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.

    • 1
  3. arslivinski
    2025-04-16T04:34:37+08:002025-04-16T04:34:37+08:00

    Acontece que não sou a primeira pessoa que pensou em usar um Raspberry Pi Pico como dispositivo de segurança:

    • pico-fido : Chave de acesso FIDO para Raspberry Pico e ESP32
    • fidelio : token U2F Fido1.2 para 2FA com Raspberry Pi Pico
    • pico-crypto-key : Dispositivo de Criptografia RasPi Pico (SHA256, AES256, ECDSA)
    • 0

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve