14.4.1. Concepten: trust, sleutels en bestandsformaat

Voor alle commando’s, drie stukjes achtergrond die op elke andere pagina in deze sectie van toepassing zijn.

14.4.1.1. Trust-modellen

Een TLS-verbinding kan drie oplopende niveaus van zekerheid bieden:

  • Alleen versleuteling – het verkeer is versleuteld maar geen van beide kanten bewijst wie het is. Eenvoudig op te zetten (geen certificaatvalidatie) maar kwetsbaar voor een man-in-the-middle-aanval. Gebruik alleen voor lokaal testen.

  • Serverauthenticatie – de client verifieert het certificaat van de server tegen een vertrouwd certificaat (het vertrouwde HTTPS-model). De OpenMV Cam kan optreden als de client (een externe server verifiëren) of als de server (zijn eigen certificaat presenteren).

  • Wederzijdse authenticatie (mTLS) – beide kanten presenteren en verifiëren certificaten. Gebruikt waar de server ook zeker moet zijn van de identiteit van de client.

14.4.1.2. Een sleuteltype kiezen

De mbedTLS-build van de camera ondersteunt ECDSA op de NIST/SEC prime-curves en RSA. Er zijn drie praktische manieren om een sleutel te maken; ECDSA P-256 (prime256v1) wordt aanbevolen:

  • ECDSA P-256 (prime256v1) – ongeveer 128-bit beveiliging met een 256-bit sleutel. Kleine sleutels en handtekeningen, en veruit de snelste handshake van de ondersteunde opties op een Cortex-M (elliptische-curve-bewerkingen zijn veel goedkoper dan RSA private-key-bewerkingen). Universeel ondersteund door TLS-peers. Dit is de beste balans tussen beveiliging, snelheid, RAM-/flashgebruik en compatibiliteit op een embedded apparaat, en daarom de standaardkeuze hier.

  • ECDSA P-384 (secp384r1) – ongeveer 192-bit beveiliging. Nog steeds elliptische-curve, dus redelijk efficiënt, maar groter en langzamer dan P-256 voor een veiligheidsmarge die typische IoT-implementaties niet nodig hebben. Gebruik alleen als een langlevend certificaat of een nalevingsvereiste dit verlangt.

  • RSA-2048 – ongeveer 112-bit beveiliging. Universeel compatibel, ook met zeer oude peers, maar RSA-sleutels en -certificaten zijn veel groter en RSA private-key-bewerkingen (uitgevoerd door de kant die het certificaat presenteert) zijn de langzaamste en meest geheugenintensieve optie op een microcontroller. Gebruik alleen wanneer een peer geen ECDSA kan doen.

Notitie

Ed25519- / Curve25519-sleutels worden niet ondersteund. De mbedTLS-build van de OpenMV Cam schakelt EdDSA of Curve25519 niet in, dus een Ed25519-certificaat of -sleutel zal niet kunnen laden of handshaken. Gebruik een van de drie bovenstaande opties.

14.4.1.3. Bestandsformaat: gebruik DER

De mbedTLS-build die door de OpenMV Cam wordt gebruikt, bevat geen PEM-parsing, dus de camera leest certificaten en sleutels alleen in DER-vorm (de binaire codering). De meeste tools produceren standaard de PEM-vorm (base64-tekst), dus elk bestand dat voor de camera bestemd is, wordt eerst naar DER geconverteerd – elk recept in deze sectie eindigt met die conversiestap. Je hebt nodig:

  • Een private sleutel – geheim gehouden, gebruikt door welke kant dan ook die een certificaat presenteert.

  • Een certificaat – het publieke deel, gepresenteerd aan de andere kant tijdens de handshake.

  • Een CA-/trustcertificaat – het certificaat dat de verifiërende kant laadt om te beslissen of de peer wordt vertrouwd. Voor een zelfondertekende opzet is dit simpelweg het eigen certificaat van de peer.