Skip to main content


PicoKeys HSM​


Eu deixei para escrever essa parte separadamente porque a anterior estava bem grande. Aqui eu quero explicar como o Pico HSM organiza as chaves, que tipos de chaves ele usa, como o PIN participa do acesso e como escolher tamanhos de chave RSA.


O Pico HSM é um firmware que transforma uma placa compatível em um dispositivo criptográfico. O computador conversa com ele como se fosse um cartão inteligente, através do USB/CCID, usando ferramentas como OpenSC, pkcs11-tool e aplicações compatíveis com PKCS#11. O objetivo é que a chave privada seja criada ou importada para o HSM e usada lá dentro. Em uma operação de assinatura, por exemplo, o computador envia os dados ao HSM e recebe a assinatura.


danger

Um HSM não impede que um computador comprometido solicite operações válidas para o HSM. O PIN autoriza o uso da chave, mas a aplicação e o computador que enviam os dados também precisam ser confiáveis.


O Pico HSM é um projeto de código aberto para estudo e uso pessoal. Ele não deve ser confundido com um HSM empresarial certificado para requisitos regulatórios ou para proteção contra ataques físicos avançados.



As chaves​


Existem chaves internas para proteger o armazenamento, chaves de transporte para backup e as chaves que você cria para assinar, criptografar ou autentica, a tabela abaixo exemplifica um pouco a sopa de letrinhas:

NomePara que serveOnde participa
PIN do usuárioAutoriza o uso das chaves privadas e secretasSessão de acesso ao HSM
SO PINAutoriza certas ações administrativas e de recuperaçãoGerenciamento do token
MKEKProtege as chaves privadas e secretas armazenadasCriptografia do armazenamento interno
DKEKProtege chaves exportadas ou importadas em formato wrappedBackup e transferência entre dispositivos do mesmo domínio
Chave privada de aplicaçãoAssina, descriptografa ou executa outra operação definidaObjeto armazenado e usado pelo HSM
Chave públicaVerifica assinaturas ou cifra dados para o par privadoPode ser exportada e distribuída
Chave de assinatura do Secure BootAssina o bootloader e as imagens de firmwareA privada fica com quem assina; o ESP32-S3 verifica com a confiança provisionada no eFuse

tip

O nome MKEK aparece em inglês como Master Key Encryption Key. O nome DKEK significa Device Key Encryption Key. Apesar de ambas ajudarem a proteger material criptográfico, elas têm papéis diferentes.



Como o armazenamento do Pico HSM funciona​


De forma bem simplificada, o HSM mantém os objetos criptográficos na memória flash, mas em formato criptografado. A MKEK é a chave mestra usada para proteger essas chaves. No fluxo do Pico HSM, o PIN participa da autorização e da proteção que permite ao firmware usar a MKEK e as chaves.


Em placas como ESP32-S3 e RP2350/RP2354, o firmware pode usar recursos OTP/eFuse para ancorar material sensível e oferecer uma proteção de hardware mais forte. O papel exato de cada campo depende da placa, do firmware e da configuração habilitada.


Durante uma operação criptográfica, o firmware autoriza a sessão, obtém o material necessário para usar a chave e executa a operação no dispositivo. A chave privada pode passar pela RAM do microcontrolador durante o processamento, mas a interface normal entrega ao computador o resultado (como uma assinatura) e não a chave privada em claro.



PIN do usuário e SO PIN​


O PIN do usuário é usado para autorizar operações com chaves privadas e secretas, já o SO PIN (Security Officer PIN) tem uma função administrativa, como certas ações de recuperação ou gerenciamento. Como recomendação, não use o mesmo PIN para ambos. Os limites de tentativas e as consequências de exceder dependem da inicialização e da versão do firmware.



O que fica na flash e o que fica no OTP/eFuse​


Na flash ficam os objetos do HSM (como chaves, certificados e outros dados) de forma criptografada. No OTP/eFuse podem ficar segredos internos ou configurações de segurança associadas ao hardware. O digest da chave pública de Secure Boot, quando habilitado, é outro dado de eFuse com outra finalidade.



Chaves públicas e privadas​


Algoritmos assimétricos, como RSA e ECDSA, usam um par relacionado:

  1. Chave privada: fica protegida no HSM e é usada para assinar ou descriptografar.
  2. Chave pública: pode ser compartilhada e é usada para verificar a assinatura ou criptografar dados destinados à chave privada.

Ao assinar um documento, o HSM usa a chave privada e devolve uma assinatura. Quem recebe o documento usa a chave pública para verificar que a assinatura corresponde aos dados e à chave privada associada. A chave pública não permite reconstruir a privada quando o algoritmo e o tamanho são adequados.


O Pico HSM também suporta outros tipos de material, como: AES para criptografia simétrica, HMAC e CMAC para autenticação de mensagens, ECDSA e EdDSA para assinaturas, ECDH/X25519/X448 para acordo de chaves e KDFs para derivar chaves.



RSA e tamanho em bits​


Em RSA, o tamanho da chave (como 2048 ou 3072 bits) é usado para representar o tamanho do módulo usado pelo par de chaves, mas isso não significa que ela tenha o mesmo número de bits de segurança. Por exemplo, uma chave RSA de 3072 bits oferece aproximadamente 128 bits de segurança, conforme as tabelas de referência do NIST.

Tamanho RSALeitura prática
1024 bitsLegado. Evite para chaves novas.
2048 bitsCerca de 112 bits de força; ainda aparece em sistemas existentes, mas oferece menos margem para uma chave de longa duração.
3072 bitsCerca de 128 bits de força; é o tamanho requerido pelo Secure Boot v2 RSA do ESP32-S3.
4096 bitsMódulo maior, com custo de geração e operação maior. Não é necessário para o Secure Boot v2 do ESP32-S3.

O Pico HSM anuncia geração RSA de 1024 a 4096 bits. Para o projeto de assinatura de firmware no ESP32-S3, devemos usar RSA-3072, já que ele é o formato esperado pelo Secure Boot v2.



RSA-PSS e RSA-PKCS#1 v1.5​


O RSA é o algoritmo criptográfico, enquanto o esquema de assinatura define como a assinatura será gerada e validada. Existem diferentes esquemas que podem ser usados com RSA:

  • RSA-PSS: esquema de assinatura mais moderno, que usa parâmetros específicos para gerar e validar assinaturas. É o esquema usado pelo Secure Boot v2 do ESP32-S3.
  • RSA-PKCS#1 v1.5: esquema de assinatura mais antigo, mas ainda bastante usado, principalmente por questões de compatibilidade.
  • RSA-OAEP: diferente dos anteriores, é usado para cifrar dados, não para gerar assinaturas digitais.

No ESP32-S3, o Secure Boot v2 usa RSA-3072 com RSA-PSS e SHA-256, seguindo os parâmetros exigidos pelo formato da imagem. Isso significa que não basta usar uma chave RSA de 3072 bits. O HSM ou a ferramenta responsável pela assinatura também precisa usar o esquema RSA-PSS com os parâmetros esperados pelo ESP32-S3, caso contrário, a assinatura não será validada pelo Secure Boot.



Credenciais FIDO usando ykman​


Para listar:

$ ykman fido credentials list
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
ERROR: Unable to list devices for connection
Enter your PIN:
Credential ID RP ID Username Display name
3c99f2caf1d00206000009... www.token2.com token2_user_369d11ac token2_user_369d11ac
3c99f2caf1d0020600003f... www.token2.com user_3f7488a6 user_3f7488a6
3c99f2caf1d0020600006a... www.token2.com token2_user_f85f6dd8
3c99f2caf1d00206000057... www.token2.com user_2b9e7720
3c99f2caf1d002060000c1... www.token2.com user_319904ca
3c99f2caf1d00206000026... www.token2.com user_fddcbdaf
3c99f2caf1d0020600000b... www.token2.com user_c2e21ab5 user_c2e21ab5
3c99f2caf1d00206000056... www.token2.com user_f6581068

Para deletar:

$ ykman fido credentials delete 3c99f2caf1d00206000009
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
ERROR: Unable to list devices for connection
Enter your PIN:
Delete www.token2.com token2_user_369d11ac token2_user_369d11ac (3c99f2caf1d002060000099b23d43f7b27668b5837891b8c339f62e2559909ce674a94f7e65b7100662e)? [y/N]: y
Deleting credential, DO NOT REMOVE YOUR YUBIKEY!
Credential deleted.


Resetar PIN com ykman​


Vamos trocar o PIN usando o ykman:

$ ykman fido access change-pin
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
ERROR: Unable to list devices for connection
Enter your current PIN:
Enter your new PIN:
Repeat for confirmation:
FIDO PIN updated.