Descrizione
La libreria TOTP (Time-based One Time Password) per Arduino implementa l’algoritmo descritto nella RFC 6238 per la generazione di codici OTP basati sull’orario.
In particolare viene generato un nuovo codice ogni 30 secondi partendo da una password (shared secret) e dal valore attuale di timestamp (= numero di secondi trascorsi dal giorno 01/01/1970, definito Epoch).
Questi codici OTP sono comunemente utilizzati per accedere a siti web, applicazioni bancarie… e vengono generati utilizzando dei token, che possono essere hardware oppure software
Installazione
La libreria può essere facilmente installata utilizzando il Library Manager dell’IDE (menu Sketch – Include Library – Manage Libraries…):
In alternativa è possibile scaricare l’ultima release da Github e installarla manualmente.
Utilizzo
Definire la password e istanziare l’oggetto TOTP passando al suo costruttore il puntatore alla password e la sua lunghezza:
uint8_t hmacKey[] = {0x4d, 0x79, 0x4c, 0x65, 0x67, 0x6f, 0x44, 0x6f, 0x6f, 0x72}; TOTP totp = TOTP(hmacKey, 10); |
Per convertire la password in un byte array è possibile utilizzare la seguente pagina web:
http://www.lucadentella.it/OTP
che visualizza anche la password in formato base32 e come QRCode per la configurazione dell’applicazione Google Authenticator:
Per ottenere un codice, invocare il metodo getCode() passando il valore di timestamp attuale:
char* newCode = totp.getCode(timeStamp); |
Il valore di timestamp può essere ottenuto da un RTC (real-time clock) quale l’integrato DS1307 di Maxim.