>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML
PHP

Crittografia da Fiammiferi: Come Infilare ECDSA in un Microcontrollore Economico

1419 stelle

Quando si tratta di proteggere i dati nell'IoT o nell'hardware economico, gli sviluppatori spesso si scontrano con un muro. Provate a distribuire un OpenSSL completo su un AVR a 8 bit o su un ARM Cortex-M0 debole. Più probabilmente di no, il vostro firmware semplicemente non entrerà nella memoria, e anche se ci entrasse, non ci saranno più risorse per la logica principale dell'applicazione. È qui che entra in gioco il progetto micro-ecc—fa una cosa sola, ma la fa dannatamente bene.

Qual è lo Scopo di Questo Progetto

micro-ecc è un'implementazione compatta degli algoritmi ECDH (scambio di chiavi) e ECDSA (firma digitale) in C. L'autore del progetto, Ken MacKay, si è chiaramente prefissato di creare una libreria che girasse ovunque ci sia almeno un processore.

Il trucco principale qui è l'abbandono completo dell'allocazione dinamica della memoria. Nessun malloc e heap, solo stack e memoria statica. Per i sistemi embedded questo è fondamentale: sapete esattamente quanta memoria la crittografia consumerà in fase di compilazione, e non temete la frammentazione o le perdite a runtime.

Cosa Può Fare la Libreria

La libreria supporta cinque curve standard, incluse la popolare secp256r1 (nota anche come P-256) e la "Bitcoin" secp256k1.

Le caratteristiche principali sono queste:

  • Funziona su architetture a 8, 32 e 64 bit.
  • Protetta contro attacchi side-channel noti.
  • Scritta in C puro, ma ci sono frammenti assembly per AVR e ARM per spremere la massima velocità.
  • Distribuita sotto la licenza BSD 2-clause liberale.

A proposito, se state lavorando con Arduino, il progetto è disponibile direttamente nel Library Manager. Non c'è bisogno di scaricare nulla manualmente—trovate semplicemente micro-ecc e aggiungetelo al vostro sketch.

Codice Piccolo per Grandi Compiti

L'autore afferma che il codice è ottimizzato per le dimensioni. Nel mondo dei microcontrollori, questo è spesso più importante della velocità bruta. Se dovete solo verificare una firma di aggiornamento del firmware una volta al mese, non importa se ci vogliono 100ms o 500ms. Quello che importa è che il codice di verifica non mangi l'80% della vostra memoria flash.

Detto questo, nel codice ci sono ottimizzazioni opzionali. Per esempio, attraverso le opzioni di compilazione potete regolare le prestazioni. Ma attenzione: con alti livelli di ottimizzazione per piattaforme ARM, GCC potrebbe richiedere flag specifici come -fno-tree-vectorize, altrimenti tutto potrebbe rompersi.

Come Appare nel Codice

La libreria ha un'interfaccia minimalista. Per iniziare, basta copiare un paio di file nel vostro progetto e includere il file header.

I punti delle curve sono rappresentati in forma non compressa senza il prefisso 0x04 per impostazione predefinita. Se avete bisogno di risparmiare ogni byte durante la trasmissione via radio, la libreria fornisce le funzioni ecdsa_compress() e ecdsa_uncompress().

A Chi È Rivolto

Vedo diversi scenari in cui micro-ecc è semplicemente indispensabile. Prima di tutto, l'autenticazione dei dispositivi. Per esempio, quando il vostro sensore deve provare al server che è quello che è, non un contraffatto. ECDSA è perfetto per generare una tale firma.

Secondo, Secure Boot. Se state scrivendo un bootloader personalizzato per STM32 o qualche AVR, micro-ecc vi aiuterà a verificare la firma di una nuova immagine firmware prima di scriverla nella flash.

Terzo, se state creando elettronica indossabile o sensori alimentati a batteria. Meno cicli CPU spesi per i calcoli, più a lungo vive il dispositivo. I frammenti assembly per ARM e AVR saranno molto utili qui.

Alcune Note per la Strada

Nonostante la sua awesomeness, il progetto ha le sue stranezze. Il README è piuttosto stringato, quindi per i dettagli su ogni funzione dovrete scavare nel codice sorgente. La documentazione vive direttamente nei commenti del codice.

Se state pianificando di compilare il progetto su Windows, non dimenticate di linkare la libreria di sistema -lwinmm—è necessaria per lavorare con l'entropia. E per AVR, assicuratevi di abilitare l'ottimizzazione del compilatore (-O2 e superiore), altrimenti la libreria potrebbe non funzionare correttamente a causa delle specificità della gestione dello stack.

Nel complesso, questo è un ottimo esempio di come dovrebbe apparire una libreria specializzata: focus ristretto, dipendenze minime e comportamento prevedibile. Se il vostro hardware è troppo debole per TLS ma avete bisogno di sicurezza—micro-ecc merita sicuramente un posto nel vostro stack.