Mastodon

Fapico2 — The F**king Authenticator

O Fapico2 - The F**king Authenticator - é uma placa de US$ 5, a Raspberry Pi Pico 2, que vira um autenticador de hardware multi-applet: passkeys FIDO2, OpenPGP, OATH e Nostr, num único firmware, num único binário, num único dispositivo USB composto

Compartilhar
Fapico2 — The F**king Authenticator

Soberania digital não termina na seed phrase.

Minha primeira carteira fria foi uma hardware wallet. Tratei o objeto como um talismã: uma caixa lacrada que guardava minhas economias de um jeito que a internet não alcançava. Ela dormia numa gaveta. A seed phrase, noutro cofre. A liturgia completa da autocustódia, celebrada sem falhas.

Aí veio a pergunta que quebra a liturgia: e o resto?

A conta de e-mail que recebe os alertas do banco. Os códigos 2FA das exchanges. A chave SSH que abre meus servidores. A identidade PGP que assina meus commits. Todos esses guardiões moram no celular — um dispositivo permanentemente conectado, cheio de apps, cheio de permissões, cheio de superfície de ataque. A chave que move meus sats dorme num cofre. As chaves que movem minha vida digital inteira dormem num app.

Não guardamos mais nossas chaves. Nós as alugamos.

O Fapico2 é uma resposta direta a essa contradição. Uma placa de US$ 5 — a Raspberry Pi Pico 2 [6] — vira um autenticador de hardware multi-applet: passkeys FIDO2, OpenPGP, OATH e Nostr, num único firmware, num único binário, num único dispositivo USB composto [1]. Sem conta no fornecedor. Sem nuvem. Sem assinatura. E a criptografia — geração, uso e selamento das chaves — acontece inteira dentro da placa.

A mesma lógica que tirou seu Bitcoin das exchanges pode tirar suas credenciais das mãos de quem não precisa tê-las.


Parte I: A Ilusão de Segurança no Seu Bolso

O problema não são os apps de autenticação; é o modelo.

1. O app é a superfície de ataque. Seus códigos TOTP vivem num banco de dados do app, sobre o sistema operacional do celular. Sua chave privada PGP, idem. Um keylogger captura o que você digita. Um screen scraper captura o que você vê. Um vazamento no sync da nuvem entrega tudo que o app "salvou por segurança". O guardião mora na mesma casa que os ladrões.

2. A confiança é herdada, não verificada. Confiamos num app porque ele é "oficial", porque tem um logo conhecido, porque tem milhões de downloads. Isso não é segurança; é marketing. Um app oficial com um bug vira um vazamento oficial. Um app conhecido comprometido vira um canal de ataque conhecido, para milhões de pessoas ao mesmo tempo.

3. O comprometimento é em cascata. Um app de 2FA comprometido não entrega um código. Entrega o e-mail, o e-mail entrega as exchanges, as exchanges entregam o caminho até suas moedas — por engenharia social, por redefinição de senha, por SIM swap. Sua carteira fria não importa se a identidade em volta dela é alugada.

Concedo o óbvio: apps são convenientes, e a maioria funciona bem a vida inteira. É exatamente assim que todo modelo de segurança falha — até o dia em que falha com você dentro.


Parte II: O Que É o Fapico2

O Fapico2 transforma uma Raspberry Pi Pico 2 num autenticador que carrega numa única placa: passkeys FIDO2/U2F, identidade OpenPGP 3.4, códigos OATH (TOTP/HOTP), slots OTP no protocolo YubiKey e identidades Nostr [1]. Um firmware, um binário, um dispositivo USB composto. O ritual de comprar quatro tokens diferentes — um para passkeys, outro para PGP, outro para 2FA e um quarto para Nostr, que o mercado não vende — é substituído por uma placa que custa menos que um almoço.

O princípio é o da carteira fria: autocustódia para credenciais. As chaves geradas dentro da placa nunca saem dela. Em repouso, tudo é selado sob uma chave raiz derivada de uma linha OTP exclusiva do chip [1] — um flash dump arrancado da sua placa é inerte em qualquer outro lugar. O mesmo raciocínio que mantém chaves de Bitcoin fora de máquinas conectadas à internet se aplica às chaves que guardam seu e-mail, seu código e suas contas.

E a parte que separa o Fapico2 de quase tudo no mercado: o firmware é Rust, licença AGPLv3, e o build do dispositivo não tem pilha de rede nenhuma [1]. Não é "confie em nós, somos transparentes" — é "compila você mesmo". Como diz o repositório: se você está lendo isto, você pode reconstruir o dispositivo a partir do código-fonte [1].


Parte III: A Criptografia Que Fica No Dispositivo

Três mecanismos sustentam a promessa de autocustódia. Nenhum é marketing; todos estão no código.

1. Geração na placa. As chaves nascem do TRNG de hardware do RP2350 — o gerador de aleatoriedade verdadeira gravado no silício — e são usadas só ali [1]. O que sai da placa é assinatura e código; o que nunca sai é material de chave. E toda operação que toca chave privada exige toque físico [1]. Nada é assinado por acidente. O banco que valida seu código ainda media a transação — e nunca toca o material de chave que gera o código.

2. Selamento em repouso. Cada registro é cifrado com AEAD sob uma chave raiz derivada da linha OTP otp_key_1 — gravada de forma unidirecional nos fusíveis do chip — mais a identidade do próprio chip [1]. Em notação: HKDF(otp_key_1, hash do serial ‖ chipid) [1]. O firmware se recusa a iniciar se a linha OTP não estiver disponível; não existe constante pública de contingência [1]. Ou seja, o flash dump sozinho não abre nada — a chave do armazenamento não está nele. Duas placas idênticas, do mesmo lote, derivam chaves raiz diferentes.

3. Commit por registro. O armazenamento não é um bloco monolítico: cada credencial é gravada individualmente, com verificação de integridade. Uma gravação interrompida (torn-write) não corrompe o resto [1]. Um reset do FIDO — o que um navegador ou o ykman fido reset disparam — não leva junto suas credenciais OATH nem suas identidades Nostr [1]. Falha isolada é falha pequena.

Os números dão escala à promessa: 844 passkeys residentes — derivadas do layout atual da flash e verificadas por um teste que matricula credenciais até o armazenamento recusar [2] — contra 100 num YubiKey 5 [1]. 68 slots OATH [2]. 8 identidades Nostr [2]. Uma gaveta de tokens num objeto do tamanho de um polegar.


Parte IV: Fapico2 vs. o Resto do Mercado

Fapico2YubiKey 5Apps (Authy, Google Auth.)
FirmwareAGPLv3, reconstruívelProprietário, seladoProprietário
Onde as chaves vivemNa placa (TRNG)No secure elementNo app, no celular
Quem detém a custódiaVocêVocê + Yubico (firmware)A operadora do app
Rede no dispositivoNenhumaNenhumaSempre
Passkeys residentes844 (derivado)100—
Nostr (NIP-07)Sim, assinatura na placaNãoNão
NFCNãoSim—
Auditoria independenteNão (red-team interno publicado)SimVariável

Que fique claro: o YubiKey é a escolha madura. Tem auditoria independente, certificações, anos de batalha. Este artigo não é um ataque a ele. A diferença é o modelo de confiança: no YubiKey, você confia que a Yubico fez e fará certo — e o firmware é selado, então "verificar por conta própria" não é uma opção que exista. No Fapico2, o código está todo na mesa. Se não confia no build, verifica. Se encontra um bug, conserta. Se quiser forkar, forka. Confiança selada contra confiança inspecionável.

Os apps de autenticador não são concorrentes — são o problema descrito na Parte I. O código TOTP mora no mesmo aparelho onde moram os keyloggers. A conveniência é o produto; o armazém das suas credenciais é o preço.

O applet Nostr merece destaque porque não tem equivalente no mercado. A extensão de navegador expõe o padrão NIP-07 (window.nostr) [5]; o evento é hasheado no navegador e só o sighash de 32 bytes chega à placa; o nonce do NIP-44 é gerado no dispositivo [1]. Toda operação que toca a chave privada exige toque físico, e a custódia pode incluir um PIN com orçamento de três tentativas — esgotadas, a placa trava, e só um reset de fábrica destrói as identidades [4]. A custódia é import-only: não existe comando de exportação em nenhum dialeto, por decisão de projeto [4] — uma chave importada de software mantém sua cópia em papel; uma chave gerada na placa nunca sai dela.


Parte V: Menos de US$ 10 e Código Aberto

A lista de compras é uma placa: Raspberry Pi Pico 2, entre US$ 5 e US$ 7 [6]. É isso. Sem elemento seguro proprietário para confiar, sem hardware lacrado para devolver ao fornecedor.

O caminho mais curto: baixe a imagem fapico2.uf2 da release alpha (sha256 nas notas da release) ou compile do código-fonte com ./build.sh, que produz firmware/fapico2.uf2 [1]. Para gravar: segure o botão BOOTSEL, conecte a placa e copie o arquivo para o drive RP2350 que aparece. A reenumeração pode levar até um minuto — normal [1].

No Linux, são dois ajustes pontuais, e os dois importam: a allowlist do libccid para OpenPGP e OATH — sem ela o sistema não vê nenhum leitor de smartcard, o que parece hardware quebrado e não é [3] — e a regra udev para a interface HID do Nostr (platform/udev/70-fapico2-nostr.rules) [1]. A placa enumera como fa20:0002, dispositivo composto CCID + CTAP-HID [3]. FIDO2 funciona imediatamente em qualquer lugar — Chrome, ykman e Yubico Authenticator verificados contra hardware real [1].

O manual completo, com cada tela e cada procedimento: https://eddieoz.github.io/fapico2/ [7].


Parte VI: O Que Este Dispositivo Não É

Aqui está a parte que nenhum anúncio de segurança escreve. O Fapico2 é alpha, e a honestidade sobre isso faz parte do projeto.

A porta de debug SWD está aberta em toda imagem publicada — de propósito, para que placas alpha continuem recuperáveis [1]. Ou seja: com acesso físico breve e um probe de debug, alguém extrai todas as chaves que o dispositivo guarda. Até a primeira tag vX.Y.Z-release, isto é hardware de avaliação: não faça dele a única chave de nada que você não possa perder [1].

Não é auditado independentemente — a avaliação red-team publicada é de um build anterior; parte dos achados foi tratada — nem tudo [1]. Não tem certificação FIPS/Common Criteria nem NFC — um Pico 2 não tem rádio [1]. PIV está adiado. Um advisory de timing RSA conhecido segue sem correção upstream [1].

Por que publicar as próprias fraquezas? Porque as fraquezas não são críticasc e a alternativa é pior. O repositório diz em voz alta o que a indústria inteira evita: as falhas dele são públicas — e achados publicados são mais úteis do que a garantia que silencia [1].


Conclusão: Custódia É Um Pacote Fechado

Autocustódia não é um produto; é um pacote. A carteira fria guarda os sats. O autenticador guarda as chaves que guardam todo o resto — e-mail, código, servidores, identidade. Um sem o outro é uma porta com duas fechaduras e uma chave só.

A matemática é implacável: US$ 5 e uma tarde, contra o custo de uma única cascata de credenciais. Você já pagou o preço da aprendizagem no Bitcoin — "not your keys, not your coins" custou caro demais para a indústria esquecer. A mesma matemática se aplica à sua identidade digital: se as chaves que te definem moram num app que você não controla, a soberania é emprestada.

A questão não é se você vai proteger suas chaves. O ponto é quem segura as chaves que protegem você.


Referências

  1. fapico2 README — https://github.com/eddieoz/fapico2 (seções "What it does", "Security model, in plain terms", "What this is not", "Getting started")
  2. fapico2 docs/capacity.md — derivação dos tetos de armazenamento (844 / 68 / 8)
  3. fapico2 docs/identity.md — VID/PID fa20:0002 e allowlist libccid
  4. fapico2 docs/adr/0006-nostr-pin-custody.md — custódia PIN do applet Nostr (import-only)
  5. fapico2-nostr-extension — https://github.com/eddieoz/fapico2-nostr-extension (NIP-07 via WebHID)
  6. Raspberry Pi Pico 2 — https://s.click.aliexpress.com/e/_c37D3YYz
  7. Manual do usuário (mdBook) — https://eddieoz.github.io/fapico2/

Send sats if you liked.

⚡️eddieoz@sats4.life