Özellikleri

Hızlı Eşleme Hizmeti

Hızlı Eşleme Sağlayıcı'da aşağıdaki GATT hizmeti bulunmalıdır.

Hizmet UUID
Hızlı Eşleme Hizmeti 0xFE2C

Bu hizmet aşağıdaki özelliklere sahip olmalıdır.

Hızlı Eşleme Hizmeti özelliği Şifrelenmiş İzinler UUID
Model Kimliği Hayır Okuma FE2C1233-8366-4814-8EB0-01DE32100BEA
Anahtar tabanlı eşleme Hayır Yazma ve bildirim gönderme FE2C1234-8366-4814-8EB0-01DE32100BEA
Geçiş anahtarı Hayır Yazma ve bildirim gönderme FE2C1235-8366-4814-8EB0-01DE32100BEA
Hesap anahtarı Hayır Yazma FE2C1236-8366-4814-8EB0-01DE32100BEA

Cihaz Bilgileri Hizmeti

Hızlı Eşleme Sağlayıcı, Cihaz Bilgisi Hizmeti'ni de desteklemelidir.

Hizmet UUID
Cihaz Bilgileri Hizmeti 0x180A

Hızlı Eşleme Arayıcı aşağıdaki özellikleri kullanır.

Ad Şifrelenmiş İzinler UUID
Donanım Yazılımı Revizyonu Hayır Okuma 0x2A26

Özellik: Model kimliği

Bu özellik, cihaz bulunabilir modda reklam yayınlarken dışında, Arayan'ın gerektiğinde model kimliğini okumasına olanak tanır. Her zaman aşağıdaki verileri döndürmelidir:

Sekizlik Veri türü Açıklama Değer
0 - 2 uint24 Model Kimliği değişir

Özellik: Anahtara Dayalı Eşleme

Bu özellik, anahtar tabanlı eşleme prosedürünü kontrol eder. Bu prosedürde, Talep Eden ve Sağlayıcı'nın her ikisinin de önceden paylaşılan bir anahtara sahip olduğu doğrulanarak belirli bir güven düzeyi oluşturulur. Anahtar her durumda farklıdır:

  • 1. örnek: Önceden paylaşılmış anahtar, sahteciliğe karşı ortak/özel anahtar çiftine ve her eşleştirme denemesinde değişecek olan Arayan'ın kendi ortak/özel anahtar çiftine dayanır.

    • Sağlayıcı, eşleme modundadır.
    • İsteyen, Sağlayıcı'nın sahteciliğe karşı koruma özel anahtarına sahip olduğunu doğrular.

    Eşleme modundayken Sağlayıcı'nın, Fast Pair'in anahtar tabanlı eşlemesini desteklemeyen bir cihazla eşlemek gibi normal şekilde de eşleme yapabileceğini unutmayın.

  • 2. durum: Önceden paylaşılan anahtar, hesap anahtarlarından biridir.

    • Sağlayıcı genellikle eşleme modunda değildir. (Ancak bu bir zorunluluk değildir. Sağlayıcı, eşleme modundayken bile hesap anahtarı kullanımını desteklemelidir.)
    • İsteyen ve Sağlayıcı, diğer tarafın hesap anahtarına sahip olduğunu doğrular.

Her iki durum da, kullanılan önceden paylaşılmış anahtar dışında son derece benzer olduğundan prosedürde birleştirilmiştir.

Veri Biçimi

Her biçimin nasıl kullanıldığıyla ilgili prosedürü inceleyin.

Sekizlik Veri türü Açıklama Değer Zorunlu mu?
0 - 15 uint128 Şifrelenmiş İstek değişir Zorunlu
16 - 79 Ortak Anahtar değişir İsteğe bağlı

Tablo 1.1: Arayan tarafından özelliğe yazılan şifrelenmiş istek.

Sekizlik Veri türü Açıklama Değer Zorunlu mu?
0 uint8 Mesaj türü 0x00 = Anahtara Dayalı Eşleme İsteği Zorunlu
1 uint8 İşaretler
  • Bit 0 (MSB): desteği sonlandırıldı ve Seeker tarafından yoksayılıyor.
  • Bit 1: Arayan, Sağlayıcı'nın eşleme başlatmasını isterse ve bu istek Arayan'ın BR/EDR adresini içeriyorsa 1. Aksi takdirde 0.
  • Bit 2: Sağlayıcı, Arayan'ın mevcut adı bildirmesini isterse 1. Aksi takdirde 0.
  • Bit 3: Hesap anahtarını geriye dönük olarak yazma içinse 1. Aksi takdirde 0.
  • 4-7 bitleri gelecekte kullanılmak üzere ayrılmıştır ve yoksayılmalıdır.
değişir Zorunlu
2 - 7 uint48 Şunlardan biri:
  • Sağlayıcının mevcut BLE adresi
  • Sağlayıcının herkese açık adresi
değişir Zorunlu
8 - 13 uint48 Arayanın BR/EDR adresi değişir Yalnızca Flags Bit 1 veya 3 ayarlanmışsa gösterilir.
n - 15 Rastgele değer (tuz) değişir Zorunlu

Tablo 1.2.1: Ham İstek (tür 0x00). Decrypted from the Encrypted Request in Table 1.1.

Sekizlik Veri türü Açıklama Değer Zorunlu mu?
0 uint8 Mesaj türü 0x10 = İşlem İsteği Zorunlu
1 uint8 İşaretler
  • Bit 0 (MSB): Cihaz işlemi ise 1, aksi takdirde 0.
  • Bit 1: Ek Veri özelliği ile devam edilecekse 1, aksi takdirde 0.
  • 2-7 bitleri ileride kullanılmak üzere ayrılmıştır ve yoksayılmalıdır.
değişir Zorunlu
2 - 7 uint48 Şunlardan biri:
  • Sağlayıcının mevcut BLE adresi
  • Sağlayıcının herkese açık adresi
değişir Zorunlu
8 uint8 Mesaj grubu değişir Flags Bit 0 ayarlanmışsa zorunludur.
9 uint8 Mesaj kodu değişir Flags Bit 0 ayarlanmışsa zorunludur.
10 uint8 Bayraklara bağlıdır:
  • Bit 0 ayarlanmış: Ek veri uzunluğu 6'dan az
  • 1. bit ayarlanmış: Veri kimliği
değişir Flags Bit 0 veya 1 ayarlanmışsa zorunludur.
11 - n Ek veriler değişir İsteğe bağlı
n - 15 Rastgele değer (tuz) değişir Zorunlu

Tablo 1.2.2: Ham İstek (tür 0x10). Decrypted from the Encrypted Request in Table 1.1.

Sekizlik Veri türü Açıklama Değer
0 uint8 Mesaj türü 0x01 = Anahtara Dayalı Eşleştirme Yanıtı
1 - 6 uint48 Sağlayıcının herkese açık (BR/EDR) adresi değişir
7 - 15 Rastgele değer (tuz) değişir

Tablo 1.3: Ham Yanıt. Tablo 1.4'te Şifrelenmiş Yanıt'ı oluşturmak için şifrelenir.

Sekizlik Veri türü Açıklama Değer
0 -15 uint128 Şifrelenmiş Yanıt değişir

Tablo 1.4: Sağlayıcı tarafından bir notify aracılığıyla Talep Sahibi'ne gönderilen Şifrelenmiş Yanıt.

Özellik: Geçiş anahtarı

Bu özellik, anahtar tabanlı eşleme prosedürü sırasında kullanılır.

Sekizlik Veri türü Açıklama Değer
0 - 15 uint128 Şifrelenmiş geçiş anahtarı bloğu değişir

Tablo 2.1: Şifrelenmiş Geçiş Anahtarı Bloğu. Kullanım için Anahtar tabanlı eşleme prosedürü başlıklı makaleyi inceleyin.

Sekizlik Veri türü Açıklama Değer
0 uint8 Mesaj türü Şunlardan biri:
  • 0x02 = Arayanın geçiş anahtarı
  • 0x03 = Sağlayıcının geçiş anahtarı
1 - 3 unit32 6 basamaklı geçiş anahtarı değişir
4 - 15 Rastgele değer (tuz) değişir

Tablo 2.2: Ham Geçiş Anahtarı Bloğu. Tablo 2.1'in şifresi çözülmüş sürümü.

Özellik: Hesap Anahtarı

Eşleme işleminden sonra Hızlı Eşleme Arayıcı, Hızlı Eşleme Sağlayıcı'ya bir Hesap Anahtarı yazar.

Sekizlik Veri türü Açıklama Değer
0 - 15 uint128 Hesap anahtarı (şifrelenmiş) değişir

Yazma isteği alındığında Hızlı Eşleme Sağlayıcı aşağıdaki işlemleri yapmalıdır:

  1. Prosedürdeki 4. adımda oluşturulan paylaşılan gizli bilgileri kullanarak hesap anahtarının şifresini çözün.
    • Teminat gerektiren sağlayıcılar için (yaygın):
      • Şifreyi çözmeden önce, 12. adımda oluşturulan geçiş anahtarı isteğinin şifresini çözmek için paylaşılan gizli bilgilerin kullanıldığını doğrulayın. Bu adım, bu gizli anahtar kullanılarak geçilmediyse bu yazma işlemini yoksayın ve çıkın.
    • Bu noktada, paylaşılan gizli bilgiler (prosedürdeki K) bu eşleme için tekrar kullanılmaz. Bu anahtarla şifrelenmiş olarak gelen ve prosedür yeniden başlatılmadan gönderilen tüm istekler reddedilmelidir.
  2. Şifresi çözülen değerin 0x04 veya 0xFF ile başladığını doğrulayın. Aksi takdirde, bu yazma işlemini yoksayın ve çıkın.
    • Değer 0x04 ise:
      • Kalıcı Hesap Anahtarı listesinde yeni değer için yer olup olmadığını kontrol edin.
      • Aksi takdirde, listeden en son kullanılan değeri silin.
      • Yeni değeri listeye ekleyin.
    • Değer 0xFF ise:
      • Bunu geçici bir eşleme oturumu olarak değerlendirin ve herhangi bir işlem yapmayın.
      • Bu durum, Hesap anahtarını geriye dönük olarak yazma akışında yaşanabilir.
      • Anahtarı saklamayın ve hesap anahtarı listesinde, şifrelemede veya MAC hesaplamalarında kullanmayın.
      • Bağ kaldırma, özelliğe özgü bir etkinlik veya zaman aşımı tarafından tetiklenir. LE Audio Sharing için geçici oturumun bağlantısı kesildikten 10 dakika sonra BLE bağının ve bağlantı anahtarının kaldırılması önemle tavsiye edilir.

Listedeki hesap anahtarları, anahtar tabanlı eşleme sırasında kullanılır.

Özellik: Donanım Yazılımı Düzeltmesi

Bu özellik, İstemci'nin gerektiğinde Sağlayıcı'nın donanım yazılımı sürümünü okumasına olanak tanır. Her zaman aşağıdaki verileri döndürmelidir:

Sekizlik Veri türü Açıklama Değer
0 - var utf8s Donanım yazılımı düzeltme kodu değişir

Sağlayıcıda birden fazla yazılım olsa bile (ör. sol kulaklık, sağ kulaklık ve kılıf için 3 yazılım) tek bir UTF8 dizesi olarak kapsüllenmelidir. Sağlayıcı, özel durumlar için belirli dizeleri de döndürebilir:

  1. status-updating: Sağlayıcı şu anda yeni bir donanım yazılımına güncelleniyorsa. Alternatif olarak, Sağlayıcı, aşamalı donanım yazılımının sürümünü döndürebilir.

  2. status-abnormal: Sağlayıcı anormal durumdaysa. Örneğin, donanım yazılımı güncellemesi başarısız olduğundan cihaz arızalanmıştır. Bu değer, Arayıcı'nın kullanıcıya hemen güncelleme yapması gerektiğini bildiren bir mesaj göstermesine neden olur.

Sağlayıcı, cihaz takibini önlemek için Firmware Revision özelliğine erişimi sınırlandırmalıdır. Önerilen kısıtlamalar:

  • eşlenmiş cihazlar her zaman erişime sahip olmalıdır
  • Sağlayıcı bulunabilir olduğunda herhangi bir cihaz erişebilir

Özellik: Ek Veriler

Bu hizmet aşağıdaki özelliğe sahip olmalıdır.

Hızlı Eşleme Hizmeti özelliği Şifrelenmiş İzinler UUID
Veriler Hayır Yazma ve bildirim gönderme FE2C1237-8366-4814-8EB0-01DE32100BEA
Eski Hızlı Eşleme Hizmeti özelliği (1/1/2021'de desteği sonlandırılacak) Şifrelenmiş İzinler UUID
Veriler Hayır Yazma ve bildirim gönderme 0x1237

Bu özellikle ilgili yazma veya bildirimde bulunmadan önce, paylaşılan gizli bilgiler için FE2C1234-8366-4814-8EB0-01DE32100BEA özelliği üzerinden el sıkışma işlemi yapılması gerekir. Bu özellikten akan verileri şifrelemek için AES-CTR kullanılır. Bu algoritma aşağıda tanımlanmıştır. Bu mod, tek bir 16 baytlık bloktan daha büyük verilerde daha güvenlidir. Veri bütünlüğünü sağlamak için HMAC-SHA256 kullanılacaktır. Bu da aşağıda tanımlanmıştır.

Sekizlik Açıklama Değer
0 - 7 HMAC-SHA256'nın ilk 8 baytı. değişir
8 - 15 AES-CTR şifrelemesi tarafından kullanılan nonce. değişir
16 - var Şifrelenmiş veriler. değişir

Tablo 3.1: Sağlayıcı tarafından Arayıcı'ya bir bildirim aracılığıyla veya Arayıcı tarafından Sağlayıcı'ya bir yazma işlemi aracılığıyla gönderilen veri paketi.

Sekizlik Veri türü Açıklama Değer
0 - var byte array Veriler değişir. Tablo 1.2.2'nin veri kimliğine göre kodunu çözün:
  • 0x01(personalized name): utf8s

Tablo 3.2: Ham veriler. Tablo 3.1'deki şifrelenmiş verilerden şifresi çözülmüştür.

Bildirim istendiğinde (ör. Tablo 1.2.1'deki Bit 2 aracılığıyla kişiselleştirilmiş ad isteğinde bulunulduğunda) Hızlı Eşleme Sağlayıcı aşağıdaki işlemleri yapmalıdır:

  1. Nonce için kriptografik olarak rastgele 8 bayt oluşturun.
  2. Verileri AES-CTR kullanarak şifreleyin. Burada her 16 baytlık blok,

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

    burada

    1. AES anahtarı, prosedürdeki 4. adımda paylaşılan gizli bilgidir.
    2. clearBlock[i], data[i * 16] ile başlayan 16 baytlık bir bloktur. Son blok 16 bayttan kısa olabilir.
  3. Şifrelenmiş verileri oluşturmak için concat(encryptedBlock[0], encryptedBlock[1],...) işlevini uygulayın.

  4. Aşağıdaki yöntemle HMAC-SHA256 oluşturun:

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

    burada

    1. K, concat(shared_secret, 48-byte ZEROs) ile oluşturulur. shared_secret, prosedürdeki 4. adımdan alınır.
    2. opad, 64 baytlık dış dolgudur ve değeri 0x5C olan tekrarlanan baytlardan oluşur.
    3. ipad, 64 baytlık iç dolgudur ve değeri 0x36 olan tekrarlanan baytlardan oluşur.
  5. Data packet'in öneki olarak HMAC-SHA256'dan ilk 8 baytı alın.

Yazma isteği alındığında Hızlı Eşleme Sağlayıcı aşağıdaki işlemleri yapmalıdır:

  1. HMAC-SHA256'nın ilk 8 baytını kontrol ederek verilerin bütünlüğünü doğrulayın.
  2. Şifrelenmiş verilerin şifresini AES-CTR kullanarak çözün. Burada her blok,

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

    burada

    1. encryptedBlock[i], encrypted_data[i * 16] ile başlayan 16 baytlık bir bloktur. Son blok 16 bayttan kısa olabilir.
    2. AES anahtarı, el sıkışma işleminden oluşturulur veya tanımlanır. Örneğin:
      1. Adlandırma akışı 1'de ECDH'den alınır ve bu eşleme için tekrar kullanılmaz. Prosedür yeniden başlatılmadan bu anahtarla şifrelenmiş olarak gelen tüm istekler reddedilmelidir.
      2. Adlandırma akışı 2'de ise hesap anahtarıdır.
  3. Ham verileri oluşturmak için concat(clearBlock[0], clearBlock[1],...) işlevini uygulayın.