Caratteristiche

Servizio di accoppiamento rapido

Il fornitore dell'accoppiamento rapido disporrà del seguente servizio GATT.

Servizio UUID
Servizio di accoppiamento rapido 0xFE2C

Questo servizio avrà le seguenti caratteristiche.

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

Servizio Informazioni del dispositivo

Il fornitore dell'accoppiamento rapido deve supportare anche il servizio Device Information Service.

Servizio UUID
Servizio Informazioni del dispositivo 0x180A

La ricerca dell'accoppiamento rapido utilizza le seguenti caratteristiche.

Nome Criptato Autorizzazioni UUID
Revisione firmware No Leggi 0x2A26

Caratteristica: ID modello

Questa caratteristica consente al cercatore di leggere l'ID modello in base alle esigenze, al di fuori del Quando il dispositivo sta pubblicizzando in modalità rilevabile. Deve sempre essere restituito i seguenti dati:

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

Caratteristica: accoppiamento basato su chiavi

Questa caratteristica controlla la procedura di accoppiamento basato su chiavi. In questa procedura, viene stabilito un certo livello di fiducia verificando che chi cerca e Entrambi i provider sono in possesso di una chiave precondivisa. La chiave è diversa per ciascun caso:

  • Caso 1: la chiave precondivisa si basa sulla chiave pubblica/privata anti-spoofing e la coppia di chiavi pubblica/privata del ricercatore, che cambierà per ogni tentativo di associazione.

    • Il provider è in modalità di accoppiamento.
    • Il Cercatore verifica che il Fornitore sia in possesso dei chiave privata anti-spoofing.

    Tieni presente che quando è in modalità di accoppiamento, il Provider può ovviamente eseguire l'accoppiamento nella per l'accoppiamento con un dispositivo che non supporta la funzionalità dell'accoppiamento basato su chiave.

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

    • Il provider solitamente non è in modalità di accoppiamento. (Ma questo non è un requisito: il fornitore deve supportare l'utilizzo di una chiave dell'account anche quando modalità di accoppiamento).
    • Il Cercatore e il Fornitore verificano che l'altro sia in possesso del chiave dell'account.

Poiché entrambi i casi sono molto simili, ad eccezione della chiave precondivisa che viene utilizzata, vengono combinati in una procedura.

Formato dei dati

Consulta la procedura per informazioni su come viene utilizzato ogni formato.

Ottetto 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 ricercatore.

Ottetto Tipo di dati Descrizione Valore Obbligatorio?
0 uint8 Tipo di messaggio 0x00 = richiesta di associazione basata su chiave Obbligatorio
1 uint8 Flag
  • Bit 0 (MSB): deprecato e ignorato da Seeker.
  • Bit 1: 1 se il Cercatore richiede che il Provider avvii il collegamento e questa richiesta contiene l'indirizzo BR/EDR del Cercatore. 0 negli altri casi.
  • Bit 2: 1 se il Cercatore richiede che il Provider informi il nome esistente. 0 negli altri casi.
  • Bit 3: 1 se riguarda la scrittura retroattiva della chiave dell'account. 0 negli altri casi.
  • I bit da 4 a 7 sono riservati per un uso futuro e devono essere ignorati.
varia Obbligatorio
2 - 7 uint48 Una di queste soglie:
  • Indirizzo BLE attuale del fornitore
  • Indirizzo pubblico del fornitore
varia Obbligatorio
8 - 13 uint48 Indirizzo BR/EDR del richiedente varia Presente solo se è impostato il Flag Bit 1 o 3
N-15 Valore casuale (sale) varia Obbligatorio

Tabella 1.2.1: Richiesta non elaborata (tipo 0x00). Decriptata dal file per le richieste nella Tabella 1.1.

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

Tabella 1.2.2: Richiesta non elaborata (tipo 0x10). Decriptata dal file per le richieste nella Tabella 1.1.

Ottetto Tipo di dati Descrizione Valore
0 uint8 Tipo di messaggio 0x01 = risposta di accoppiamento basata su chiavi
1 - 6 uint48 Indirizzo pubblico (BR/EDR) del fornitore varia
7 - 15 Valore casuale (sale) varia

Tabella 1.3: Risposta non elaborata. Criptata per produrre la risposta criptata in Tabella 1.4.

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

Tabella 1.4: Risposta criptata, inviata dal provider al ricercatore tramite una invia una notifica.

Caratteristica: passkey

Questa caratteristica viene utilizzata durante l' accoppiamento basato su chiavi .

Ottetto Tipo di dati Descrizione Valore
0-15 uint128 Blocco di passkey criptate varia

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

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

Tabella 2.2: Blocco passkey non elaborato. Versione decriptata della Tabella 2.1.

Caratteristica: chiave account

Dopo l'accoppiamento, il ricercatore dell'accoppiamento rapido scriverà una chiave account all'accoppiamento rapido. Provider.

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

Dopo aver ricevuto una richiesta di scrittura, il provider di accoppiamento rapido procede come segue:

  1. Decripta la chiave dell'account utilizzando il secret condiviso generato nel passaggio 4 della procedura.
    • Per i fornitori che richiedono obbligazioni (comune):
      • Prima di decriptare, verifica che il secret condiviso sia stato utilizzato per decriptare richiesta di passkey al passaggio 12. Se questo passaggio non è stato superato utilizzando questo un secret, ignora questa scrittura ed esci.
    • A questo punto, il secret condiviso (K nella procedura) non verrà utilizzato di nuovo per questo accoppiamento. Tutte le richieste inviate sono criptate con questa chiave senza riavviare la procedura dovrebbe essere rifiutata.
  2. Verifica che il valore decriptato inizi con 0x04. In caso contrario, ignora questa scrittura ed esce.
  3. Controlla se nell'elenco delle chiavi dell'account persiste c'è 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 dell'account nell'elenco vengono utilizzate durante l'accoppiamento basato su chiave.

Caratteristica: revisione firmware

Questa caratteristica consente al cercatore di leggere la revisione del firmware del del fornitore in base alle esigenze. Dovrebbe essere sempre restituito i seguenti dati:

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

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

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

  2. status-abnormal: se il provider è in uno stato anomalo. Ad esempio, non ha funzionato correttamente a causa di un aggiornamento firmware non riuscito. Questo valore farà sì che l'utente in questione per mostrare un messaggio che comunica all'utente che deve essere aggiornato adesso.

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

  • I dispositivi collegati dovrebbero avere accesso in qualsiasi momento
  • qualsiasi dispositivo deve avere accesso quando il provider è rilevabile.

Caratteristica: dati aggiuntivi

Questo servizio avrà le seguenti caratteristiche.

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

Prima di scrivere o inviare una notifica a questa caratteristica, deve esserci un handshake tramite la caratteristica FE2C1234-8366-4814-8EB0-01DE32100BEA per avere un secret condiviso. Per crittografare il flusso di dati attraverso questo verrà utilizzato l'algoritmo AES-CTR caratteristica, il cui algoritmo è definito di seguito. Questa modalità sicura per tutti i dati che si estendono oltre un singolo blocco da 16 byte. HMAC-SHA256 essere utilizzati per garantire l'integrità dei dati, che viene definita anche di seguito.

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

Tabella 3.1: Pacchetto di dati inviato dal fornitore al ricercatore tramite una notificare o inviare dal Cercatore al Fornitore in scrittura.

Ottetto 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. Decriptata dai dati criptati in Tabella 3.1.

Quando viene richiesta una notifica (ad es., richiesta di nome personalizzato tramite Bit 2 in Tabella 1.2.1), il Fornitore dell’accoppiamento rapido dovrà:

  1. Genera 8 byte crittograficamente casuali per Nonce.
  2. Crittografa i dati utilizzando l'algoritmo AES-CTR, dove ogni blocco da 16 byte viene generato utilizzando

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

    dove

    1. La chiave AES è il secret condiviso nel passaggio 4 della procedura.
    2. clearBlock[i] è un blocco di 16 byte che parte dai dati[i * 16]. L'ultima può essere inferiore a 16 byte.
  3. Esegui concat(cryptBlock[0], cryptBlock[1],...) per creare il Dati crittografati.

  4. Genera HMAC-SHA256 per

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

    dove

    1. La K viene generata da concat(shared_secret, zeri a 48 byte), shared_secret proviene dal passaggio 4 della procedura.
    2. opad è una spaziatura interna di 64 byte, composta da byte ripetuti valutati 0x5C.
    3. iPad è una spaziatura interna di 64 byte, composta da byte ripetuti valutati 0x36.
  5. Prendi i primi 8 byte da HMAC-SHA256 come prefisso del un pacchetto.

Dopo aver ricevuto una richiesta di scrittura, il provider di accoppiamento rapido procede come segue:

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

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

    dove

    1. criptatoBlock[i] è un blocco di 16 byte a partire da criptato_data[i * 16]. L'ultimo blocco può essere inferiore a 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 può essere usato di nuovo per questo accoppiamento. Tutte le richieste ricevute tramite crittografia con questa chiave senza riavviare, la procedura dovrebbe essere rifiutato.
      2. nel flusso di denominazione 2, è la chiave dell'account.
  3. Esegui concat(clearBlock[0], clearBlock[1],...) per creare i dati non elaborati.