Caratteristiche

Servizio di accoppiamento rapido

Il Fornitore dell'accoppiamento rapido avrà il seguente servizio GATT.

Servizio UUID
Servizio di accoppiamento rapido 0xFE2C

Il servizio dovrà avere le caratteristiche riportate di seguito.

Caratteristica del servizio di accoppiamento rapido Criptato Autorizzazioni UUID
ID modello No Letto FE2C1233-8366-4814-8EB0-01DE32100BEA
Accoppiamento basato su chiave No Scrivi e invia notifica FE2C1234-8366-4814-8EB0-01DE32100BEA
Passkey No Scrivi e invia notifiche FE2C1235-8366-4814-8EB0-01DE32100BEA
Chiave account No Scrittura FE2C1236-8366-4814-8EB0-01DE32100BEA

Servizio informazioni del dispositivo

Il fornitore dell'accoppiamento rapido dovrebbe inoltre supportare il Servizio informazioni dispositivo.

Servizio UUID
Servizio informazioni del dispositivo 0x180A

La ricerca dell'accoppiamento rapido utilizza le caratteristiche riportate di seguito.

Nome Criptato Autorizzazioni UUID
Revisione firmware No Letto 0x2A26

Caratteristica: ID modello

Questa caratteristica consente al richiedente di leggere l'ID modello in base alle esigenze, al di fuori dei casi in cui il dispositivo pubblicizza in modalità rilevabile. Deve sempre restituire i seguenti dati:

Ottobre Tipo di dati Descrizione Valore
0 - 2 uint24 ID modello varia

Caratteristica: accoppiamento basato su chiave

Questa caratteristica controlla la procedura di accoppiamento basato su chiave. In questa procedura viene stabilito un determinato livello di attendibilità verificando che il richiedente e il provider siano entrambi in possesso di una chiave precondivisa. La chiave è diversa in ogni caso:

  • Caso 1: la chiave precondivisa si basa sulla coppia di chiavi pubblica/privata anti-spoofing e sulla coppia di chiavi pubblica/privata del richiedente che cambierà a ogni tentativo di accoppiamento.

    • Il provider è in modalità di accoppiamento.
    • Il Seeker verifica che il Provider sia in possesso della chiave privata anti-spoofing.

    Tieni presente che quando è attiva la modalità di accoppiamento, il Fornitore può ovviamente anche eseguire l'accoppiamento nel modo abituale, ad esempio per accoppiarsi con un dispositivo che non supporta l'accoppiamento basato su chiave di accoppiamento rapido.

  • Caso 2: la chiave precondivisa è una delle chiavi dell'account.

    • Solitamente il provider non è in modalità di accoppiamento. (Questo non è però un requisito obbligatorio, pertanto il fornitore dovrebbe supportare l'utilizzo di una chiave dell'account anche in modalità di accoppiamento.)
    • Il Cercatore e il Fornitore verificano entrambi che l'altro sia in possesso della chiave dell'account.

Poiché entrambi i casi sono estremamente simili, tranne per il quale viene utilizzata la chiave precondivisa, vengono combinati in procedura.

Formato dei dati

Consulta la procedura per scoprire come viene utilizzato ciascun formato.

Ottobre Tipo di dati Descrizione Valore Obbligatorio?
0-15 uint128 Richiesta criptata varia Obbligatorio
16 - 79 Chiave pubblica varia Facoltativo

Tabella 1.1: Richiesta criptata, scritta nella caratteristica dal Cercatore.

Ottobre Tipo di dati Descrizione Valore Obbligatorio?
0 uint8 Tipo di messaggio 0x00 = richiesta di accoppiamento basata su chiave Obbligatorio
1 uint8 Segnalazioni
  • Bit 0 (MSB): deprecato e ignorato da Seeker.
  • Bit 1: 1 se il Cercante richiede che il Fornitore avvii il vincolo, e questa richiesta contiene l'indirizzo BR/EDR del Cercatore. 0 negli altri casi.
  • Bit 2: 1 se il Cercante richiede che il Fornitore comunichi il nome esistente. 0 negli altri casi.
  • Bit 3: 1 se è per la scrittura retroattiva della chiave dell'account. 0 negli altri casi.
  • I bit 4-7 sono riservati per un uso futuro e devono essere ignorati.
varia Obbligatorio
2 - 7 uint48 Una di queste soglie:
  • Indirizzo BLE attuale del provider
  • Indirizzo pubblico del fornitore
varia Obbligatorio
8 - 13 uint48 Indirizzo BR/EDR del richiedente varia Presente solo se sono impostati i flag Bit 1 o 3
n - 15 Valore casuale (sale) varia Obbligatorio

Tabella 1.2.1: Richiesta non elaborata (tipo 0 x 00). Decritto dalla richiesta criptata nella Tabella 1.1.

Ottobre Tipo di dati Descrizione Valore Obbligatorio?
0 uint8 Tipo di messaggio 0x10 = Richiesta di azione Obbligatorio
1 uint8 Segnalazioni varia Obbligatorio
2 - 7 uint48 Una di queste soglie:
  • Indirizzo BLE attuale del provider
  • Indirizzo pubblico del fornitore
varia Obbligatorio
8 uint8 Gruppo di messaggi varia Obbligatorio se è impostato il bit 0 dei flag
9 uint8 Codice messaggio varia Obbligatorio se è impostato il bit 0 dei flag
10 uint8 Dipende dalle segnalazioni:
  • Il bit 0 è impostato: lunghezza dati aggiuntiva, minore di 6
  • Il bit 1 è impostato: ID dati
varia Obbligatorio se è impostato il bit 0 o 1 dei flag
11 - n Dati aggiuntivi varia Facoltativo
n - 15 Valore casuale (sale) varia Obbligatorio

Tabella 1.2.2: Richiesta non elaborata (tipo 0x10). Decritto dalla richiesta criptata nella Tabella 1.1.

Ottobre Tipo di dati Descrizione Valore
0 uint8 Tipo di messaggio 0x01 = Risposta all'accoppiamento basato su chiave
1 - 6 uint48 Indirizzo pubblico del fornitore (BR/EDR) varia
7 - 15 Valore casuale (sale) varia

Tabella 1.3: Risposta non elaborata. Criptato per produrre la risposta criptata nella Tabella 1.4.

Ottobre Tipo di dati Descrizione Valore
0 -15 uint128 Risposta criptata varia

Tabella 1.4: Risposta criptata, inviata dal Fornitore al richiedente tramite una notifica.

Caratteristica: passkey

Questa caratteristica viene utilizzata durante la procedura di accoppiamento basato su chiave.

Ottobre Tipo di dati Descrizione Valore
0-15 uint128 Blocco passkey criptato varia

Tabella 2.1: Blocco delle passkey criptate. Consulta Procedura di accoppiamento basato su chiave per l'utilizzo.

Ottobre Tipo di dati Descrizione Valore
0 uint8 Tipo di messaggio Uno dei seguenti:
  • 0x02 = Passkey del richiedente
  • 0x03 = Passkey del fornitore
1 - 3 unit32 passkey di 6 cifre varia
4 - 15 Valore casuale (sale) varia

Tabella 2.2: Blocco di una passkey non elaborata. Versione decriptata della Tabella 2.1.

Caratteristica: chiave account

Dopo l'accoppiamento, la persona che cerca l'accoppiamento rapido scrive una chiave account nel provider dell'accoppiamento rapido.

Ottobre Tipo di dati Descrizione Valore
0-15 uint128 Chiave account (criptata) varia

Una volta ricevuta una richiesta di scrittura, il fornitore dell'accoppiamento rapido dovrà procedere come segue:

  1. Decripta la chiave dell'account utilizzando il secret condiviso generato nel passaggio 4 della procedura.
    • Per i provider che richiedono il bonding (comune):
      • Prima di decriptare, verifica che il secret condiviso sia stato utilizzato per decriptare la richiesta di passkey del passaggio 12. Se questo passaggio non è stato superato utilizzando questo secret, ignora il file di scrittura ed esci.
    • A questo punto, il secret condiviso (K nella procedura) non verrà più utilizzato per questo accoppiamento. Tutte le richieste criptate con questa chiave senza riavviare la procedura dovrebbero essere rifiutate.
  2. Verifica che il valore decriptato inizi con 0x04. In caso contrario, ignora questa operazione di scrittura ed esci.
  3. Verifica se nell'elenco chiavi dell'account permanente esiste spazio per il nuovo valore.
  4. In caso contrario, elimina dall'elenco il valore utilizzato meno di recente.
  5. Aggiungi il nuovo valore all'elenco.

Le chiavi account nell'elenco vengono utilizzate durante l'accoppiamento basato su chiave.

Caratteristica: revisione firmware

Questa caratteristica consente al richiedente di leggere la revisione del firmware del provider in base alle esigenze. Deve sempre restituire i seguenti dati:

Ottobre Tipo di dati Descrizione Valore
0 - var utf8s Codice di revisione firmware varia

Deve essere incapsulato in una singola stringa utf8 anche se sul provider è presente più di un firmware (ad es. 3 firmware per l'auricolare sinistro, l'auricolare destro e la custodia). Il provider può anche restituire le stringhe specifiche per casi speciali:

  1. stato-aggiornamento: se il fornitore sta eseguendo l'aggiornamento a un nuovo firmware. In alternativa, il fornitore potrebbe restituire la versione del firmware temporaneo.

  2. stato-anomalo: indica se il provider è in uno stato anomalo. Ad esempio, non ha funzionato correttamente perché l'aggiornamento del firmware non è riuscito. Con questo valore, lo strumento di ricerca mostrerà un messaggio per comunicare all'utente che deve essere aggiornato immediatamente.

Il provider deve limitare l'accesso alla caratteristica Revisione firmware per impedire il monitoraggio del dispositivo. Limitazioni suggerite:

  • i dispositivi collegati dovrebbero avere accesso in qualsiasi momento
  • ogni dispositivo deve avere accesso quando il fornitore è rilevabile

Caratteristica: dati aggiuntivi

Questo servizio dovrà avere la seguente caratteristica.

Caratteristica del servizio di accoppiamento rapido Criptato Autorizzazioni UUID
Dati No Scrivi e invia notifiche FE2C1237-8366-4814-8EB0-01DE32100BEA
Vecchia caratteristica del servizio di accoppiamento rapido (target da ritirare il giorno 1/1/2021) Criptato Autorizzazioni UUID
Dati No Scrivi e invia notifica 0x1237

Prima di scrivere o inviare notifiche a questa caratteristica, deve verificarsi un handshake tramite la caratteristica FE2C1234-8366-4814-8EB0-01DE32100BEA per avere un secret condiviso. Per criptare i dati che passano attraverso questa caratteristica, il cui algoritmo è definito di seguito, verrà utilizzato l'algoritmo AES-CTR. Questa modalità è più sicura per i dati che si estendono oltre un singolo blocco di 16 byte. Per garantire l'integrità dei dati, verrà utilizzato HMAC-SHA256, come definito anche di seguito.

Ottobre Descrizione Valore
abbastanza I primi 8 byte di HMAC-SHA256. varia
8 - 15 Nonce, utilizzato dalla crittografia AES-CTR. varia
16 - var Dati criptati. varia

Tabella 3.1: Pacchetto di dati inviato dal Fornitore al Fornitore tramite una notifica o inviato dal Cercante al Fornitore tramite scrittura.

Ottobre Tipo di dati Descrizione Valore
0 - var byte array Dati varia, decodificalo in base all'ID dati della Tabella 1.2.2:
  • 0x01(nome personalizzato): utf8s

Tabella 3.2: Dati non elaborati. Decriptati dai dati criptati in Tabella 3.1.

Quando viene richiesta una notifica (ad esempio, si richiede un nome personalizzato tramite il Bit 2 nella Tabella 1.2.1), il provider dell'accoppiamento rapido dovrà procedere come segue:

  1. Genera 8 byte crittograficamente casuali per Nonce.
  2. Criptare i dati utilizzando AES-CTR, dove ogni blocco di 16 byte viene generato utilizzando

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    dove

    1. La chiave AES è il secret condiviso del passaggio 4 della procedura.
    2. ClearBlock[i] è un blocco di 16 byte che parte dai dati[i * 16]. L'ultimo blocco può contenere meno di 16 byte.
  3. Esegui concat(cryptBlock[0], criptateBlock[1]...) per creare i dati criptati.

  4. Genera HMAC-SHA256 tramite

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    dove

    1. K viene generato da concat(shared_secret, zeri di 48 byte), il secret_secret deriva dal passaggio 4 della procedura.
    2. L'opad ha una spaziatura interna esterna di 64 byte, composta da byte ripetuti con valore 0x5C.
    3. l'iPad ha una spaziatura interna di 64 byte, composta da byte ripetuti con valore 0x36.
  5. Prendi i primi 8 byte di HMAC-SHA256 come prefisso del pacchetto di dati.

Una volta ricevuta una richiesta di scrittura, il fornitore dell'accoppiamento rapido dovrà procedere come segue:

  1. Verifica l'integrità dei dati controllando i primi 8 byte di HMAC-SHA256.
  2. Decriptare i Dati crittografati utilizzando l'algoritmo AES-CTR, dove ogni blocco viene generato

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    dove

    1. criptateBlock[i] è un blocco di 16 byte che inizia da criptate_data[i * 16]. L'ultimo blocco può contenere meno di 16 byte.
    2. La chiave AES viene generata o identificata dall'handshake, ad esempio
      1. nel flusso di denominazione 1, proviene da ECDH e non verrà utilizzato di nuovo per questa associazione. Eventuali richieste criptate con questa chiave senza riavviare la procedura dovrebbero essere rifiutate.
      2. nel flusso di denominazione 2, è la chiave dell'account.
  3. Esegui concat(clearBlock[0], clearBlock[1],...) per creare i dati non elaborati.