Attestazione con chiave simmetrica
Questo articolo descrive il processo di attestazione di identità quando si usano le chiavi simmetriche con il servizio Device Provisioning. L'attestazione con chiave simmetrica costituisce un approccio semplice per autenticare un dispositivo con un'istanza del servizio Device Provisioning. Questo metodo di attestazione rappresenta un'esperienza "Hello world" per gli sviluppatori che non hanno familiarità con il provisioning dei dispositivi o non hanno requisiti di sicurezza rigorosi. L'attestazione relativa al dispositivo che si serve di un certificato TPM o X.509 è più sicura e deve essere usata per requisiti di sicurezza più rigorosi.
Le registrazioni con chiave simmetrica offrono anche un modo per i dispositivi legacy con funzionalità di sicurezza limitate per eseguire il bootstrap nel cloud tramite Azure IoT.
Per impostazione predefinita, il servizio Device Provisioning crea nuove chiavi simmetriche con una lunghezza di 64 byte quando vengono create nuove registrazioni con l'opzione Genera chiavi simmetriche abilitata automaticamente .
È anche possibile fornire le proprie chiavi simmetriche per le registrazioni, disabilitando questa opzione. Le chiavi simmetriche devono essere in formato Base 64 e avere una lunghezza della chiave compresa tra 16 byte e 64 byte.
L'attestazione con chiave simmetrica con il servizio Device Provisioning viene eseguita usando gli stessi token di sicurezza supportati dagli hub IoT per identificare i dispositivi. Questi token di sicurezza sono token di firma di accesso condiviso (SAS).
I token di firma di accesso condiviso possiedono una firma in codice hash creata usando la chiave simmetrica. Il servizio Device Provisioning ricrea la firma per verificare se un token di sicurezza presentato durante l'attestazione è autentico.
I token di firma di accesso condiviso hanno il formato seguente:
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
Di seguito sono riportati i componenti di ciascun token:
Valore | Descrizione |
---|---|
{signature} | Stringa della firma HMAC-SHA256. Per le registrazioni individuali, questa firma viene generata utilizzando la chiave simmetrica (primaria o secondaria) per eseguire il codice hash. Per i gruppi di registrazioni, viene usata una chiave derivata dalla chiave del gruppo di registrazioni per eseguire il codice hash. Il codice hash viene eseguito su un messaggio nel formato: URL-encoded-resourceURI + "\n" + expiry . Importante: la chiave deve essere decodificata dalla codifica Base64 prima di essere usata per eseguire il calcolo di HMAC-SHA256. Inoltre, il risultato di firma deve essere codificato con URL. |
{resourceURI} | URI dell'endpoint di registrazione a cui è possibile accedere tramite questo token, a partire da ID ambito per l'istanza del servizio Device Provisioning. Ad esempio, {Scope ID}/registrations/{Registration ID} |
{expiry} | Stringhe UTF8 per il numero di secondi trascorsi dalle 00:00:00 UTC dell'1 gennaio 1970. |
{URL-encoded-resourceURI} | Codifica URL con lettere minuscole dell'URI della risorsa con lettere minuscole |
{policyName} | Nome del criterio di accesso condiviso a cui fa riferimento il token. Il nome del criterio usato durante il provisioning con l'attestazione con chiave simmetrica è registrazione. |
Per esempi di codice che creano un token di firma di accesso condiviso, vedere Token di firma di accesso condiviso.
Quando un dispositivo esegue l'attestazione con una registrazione singola, viene usata la chiave simmetrica definita nella voce di registrazione singola per creare la firma con codice hash per il token di firma di accesso condiviso.
A differenza di una registrazione singola, la chiave simmetrica di un gruppo di registrazione non viene usata direttamente dai dispositivi durante il provisioning. I dispositivi di cui viene effettuato il provisioning tramite un gruppo di registrazione usano invece una chiave del dispositivo derivata. La chiave del dispositivo derivata è un hash dell'ID di registrazione del dispositivo e viene calcolata usando la chiave simmetrica del gruppo di registrazione. Il dispositivo può quindi usare la chiave del dispositivo derivata per firmare il token di firma di accesso condiviso usato per la registrazione con DPS. Poiché il dispositivo invia l'ID di registrazione al momento della registrazione, DPS può usare la chiave simmetrica del gruppo di registrazione per rigenerare la chiave del dispositivo derivata dal dispositivo e verificare la firma nel token di firma di accesso condiviso.
Prima di tutto, viene definito un ID di registrazione univoco per ogni dispositivo che esegue l'autenticazione tramite un gruppo di registrazione. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici e caratteri speciali validi: - . _ :
. L'ultimo carattere deve essere alfanumerico o trattino ('-'
). L'ID registrazione deve essere un elemento univoco che identifica il dispositivo. Ad esempio, un indirizzo MAC o un numero di serie disponibile per identificare in modo univoco un dispositivo. In tal caso, un ID di registrazione può essere composto da un indirizzo MAC e da un numero di serie simile al seguente:
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
Dopo aver definito un ID di registrazione del dispositivo, la chiave simmetrica per il gruppo di registrazione viene usata per calcolare un codice hash HMAC-SHA256 dell'ID di registrazione per produrre una chiave di dispositivo derivata. Alcuni approcci di esempio al calcolo della chiave del dispositivo derivata vengono forniti nelle schede seguenti.
In Linux è possibile usare openssl per generare una chiave del dispositivo derivata.
Sostituire il valore di KEY
con la chiave primaria del gruppo di registrazione.
Sostituire il valore di REG_ID
con l'ID registrazione.
KEY=8isrFI1sGsIlvvFSSFRiMfCNzv21fjbE/+ah/lSh3lF8e2YG1Te7w1KpZhJFFXJrqYKi9yegxkqIChbqOS9Egw==
REG_ID=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
Risultato di esempio:
Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=
La chiave del dispositivo risultante viene quindi usata per generare un token di firma di accesso condiviso da utilizzare per l'attestazione. Ogni dispositivo in un gruppo di registrazione deve eseguire l'attestazione usando un token di sicurezza generato da una chiave derivata univoca. La chiave simmetrica del gruppo di registrazione non può essere usata direttamente per l'attestazione.
Idealmente, le chiavi del dispositivo sono derivate e installate nella factory. Questo metodo garantisce che la chiave di gruppo non sia mai inclusa in alcun software distribuito nel dispositivo. Quando al dispositivo viene assegnato un indirizzo MAC o un numero di serie, la chiave può essere derivata e inserita nel dispositivo in qualsiasi modo il produttore scelga di archiviarla.
Si consideri il seguente diagramma che mostra una tabella di chiavi del dispositivo generate in ambiente di fabbrica eseguendo il codice hash di ogni ID di registrazione dispositivo con la chiave di registrazione di gruppo (K).
L'identità di ogni dispositivo è rappresentata dall'ID di registrazione e dalla chiave di dispositivo derivata che viene installata in fase di produzione. La chiave del dispositivo non viene mai copiata in un'altra posizione e la chiave di gruppo non viene mai archiviata in un dispositivo.
Se le chiavi del dispositivo non sono installate nella factory, è necessario usare un modulo di protezione hardware HSM per archiviare in modo sicuro l'identità del dispositivo.
Ora che si ha familiarità con l'attestazione con chiave simmetrica, vedere gli articoli seguenti per altre informazioni: