14.4.1. Conceitos: confiança, chaves e formato de ficheiro

Antes de qualquer comando, três aspetos de fundo que se aplicam a todas as outras páginas desta secção.

14.4.1.1. Modelos de confiança

Uma ligação TLS pode fornecer três níveis crescentes de garantia:

  • Apenas encriptação – o tráfego é encriptado mas nenhum dos lados prova quem é. Fácil de configurar (sem validação de certificado) mas vulnerável a ataques man-in-the-middle. Use apenas para testes locais.

  • Autenticação do servidor – o cliente verifica o certificado do servidor contra um certificado de confiança (o familiar modelo HTTPS). O OpenMV Cam pode actuar como cliente (verificando um servidor remoto) ou como servidor (apresentando o seu próprio certificado).

  • Autenticação mútua (mTLS) – ambas as extremidades apresentam e verificam certificados. Usado quando o servidor também tem de ter a certeza da identidade do cliente.

14.4.1.2. Escolher um tipo de chave

A compilação mbedTLS da câmara suporta ECDSA nas curvas primas NIST/SEC e RSA. Existem três formas práticas de criar uma chave; ECDSA P-256 (prime256v1) é recomendado:

  • ECDSA P-256 (prime256v1) – cerca de 128 bits de segurança com uma chave de 256 bits. Chaves e assinaturas muito pequenas, e de longe o handshake mais rápido das opções suportadas num Cortex-M (as operações de curva elíptica são muito mais baratas do que as operações de chave privada RSA). Universalmente suportado por pares TLS. Este é o melhor equilíbrio entre segurança, velocidade, utilização de RAM/flash e compatibilidade num dispositivo embebido, razão pela qual é a escolha padrão aqui.

  • ECDSA P-384 (secp384r1) – cerca de 192 bits de segurança. Ainda baseado em curva elíptica, portanto razoavelmente eficiente, mas maior e mais lento do que P-256 para uma margem de segurança que as implementações IoT típicas não necessitam. Use apenas se um certificado de longa duração ou um requisito de conformidade o exigir.

  • RSA-2048 – cerca de 112 bits de segurança. Universalmente compatível, incluindo com pares muito antigos, mas as chaves e certificados RSA são muito maiores e as operações de chave privada RSA (realizadas pelo lado que apresenta o certificado) são a opção mais lenta e que mais memória consome num microcontrolador. Use apenas quando um par não consegue fazer ECDSA.

Nota

Chaves Ed25519 / Curve25519 não são suportadas. A compilação mbedTLS do OpenMV Cam não activa EdDSA nem Curve25519, pelo que um certificado ou chave Ed25519 falhará ao carregar ou no handshake. Use uma das três opções acima.

14.4.1.3. Formato de ficheiro: use DER

A compilação mbedTLS usada pelo OpenMV Cam não inclui análise PEM, pelo que a câmara lê certificados e chaves apenas no formato DER (a codificação binária). A maioria das ferramentas produz o formato PEM (texto base64) por defeito, pelo que todos os ficheiros destinados à câmara são convertidos para DER primeiro – cada receita nesta secção termina com esse passo de conversão. Necessitará de:

  • Uma chave privada – mantida em segredo, usada pelo lado que apresenta um certificado.

  • Um certificado – a parte pública, apresentada ao outro lado durante o handshake.

  • Um certificado CA / de confiança – o certificado que o lado verificador carrega para decidir se o par é de confiança. Para uma configuração autoassinada, é simplesmente o próprio certificado do par.