Özellikleri

Hızlı Eşleme Hizmeti

Hızlı Eşleme Sağlayıcı aşağıdaki GATT hizmetine sahip olmalıdır.

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

Bu hizmet aşağıdaki özelliklere sahip olacaktı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 Yaz ve bildir 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 Bilgileri 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ı Sürümü 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:

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

Özellik: Anahtar Tabanlı Eşleme

Bu özellik, anahtar tabanlı eşleme prosedürünü kontrol eder. Bu prosedürde, Arayan ve Sağlayıcı'nın ö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. durum: Önceden paylaşılmış anahtar, sahteciliğe karşı koruma için kullanılan ortak/özel anahtar çiftine ve her eşleştirme denemesinde değişecek olan Seeker'ın kendi ortak/özel anahtar çiftine dayanır.

    • Sağlayıcı, eşleme modundadır.
    • Arayan, Sağlayıcı'nın adres sahteciliğini önleme özel anahtarına sahip olduğunu doğrular.

    Eşleme modundayken Sağlayıcı'nın, örneğin Hızlı Eşleme'nin anahtar tabanlı eşleme özelliğini desteklemeyen bir cihazla eşlemek için normal şekilde de eşlenebileceğ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.)
    • Arayan 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ş İstek.

Sekizli 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 bağlanma işlemini başlatmasını isterse ve bu istekte Arayan'ın BR/EDR adresi varsa 1. Aksi takdirde 0.
  • Bit 2: Arayan, Sağlayıcı'nın mevcut adı bildirmesini isterse 1. Aksi takdirde 0 değerini döndürür.
  • 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 Şu yöntemlerden birini kullanın:
  • Sağlayıcının mevcut BLE adresi
  • Sağlayıcının herkese açık adresi
değişir Zorunlu
8 - 13 uint48 Arayıcının BR/EDR Adresi değişir Yalnızca İşaretler Bit 1 veya 3 ayarlanmışsa gösterilir
n - 15 Rastgele değer (salt) değişir Zorunlu

Tablo 1.2.1: Ham İstek (tür 0x00). Tablo 1.1'deki Şifrelenmiş İstek'ten şifresi çözülmüştür.

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 tarafından takip edilecekse 1, aksi takdirde 0.
  • Bit 2 - 7, ileride kullanılmak üzere ayrılmıştır ve yoksayılmalıdır.
değişir Zorunlu
2 - 7 uint48 Şu yöntemlerden birini kullanın:
  • 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 İşaretler Bit 0 ayarlanmışsa zorunludur.
10 uint8 İşaretlere bağlıdır:
  • Bit 0 ayarlandı: Ek veri uzunluğu, 6'dan az
  • 1. bit ayarlandı: Veri kimliği
değişir İşaretler Bit 0 veya 1 ayarlanmışsa zorunludur.
11 - n Ek veriler değişir İsteğe bağlı
n - 15 Rastgele değer (salt) değişir Zorunlu

Tablo 1.2.2: Ham İstek (0x10 türü). Tablo 1.1'deki Şifrelenmiş İstek'ten şifresi çözülmüştür.

Sekizli Veri türü Açıklama Değer
0 uint8 Mesaj türü 0x01 = Anahtar Tabanlı Eşleme 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'teki Şifrelenmiş Yanıt'ı oluşturmak için şifrelenir.

Sekizli 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üne bakın.

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 haneli 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ısı, Hızlı Eşleme Sağlayıcısı'na bir hesap anahtarı yazar.

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

Yazma isteği alan Hızlı Eşleme Sağlayıcı aşağıdakileri 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 anahtarın 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ürde 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 işlemi, özelliğe özel bir etkinlik veya zaman aşımı ile tetiklenir. LE Ses Paylaşımı için geçici oturumun bağlantısı kesildikten 10 dakika sonra BDE 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ı Sürümü

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:

Sekizli 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 donanım yazılımı (ör. sol kulaklık, sağ kulaklık ve kılıf için 3 donanım yazılımı) olsa bile tek bir UTF-8 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 kullanılır. Alternatif olarak, Sağlayıcı, hazırlanan 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ğu için arızalanmış olabilir. Bu değer, Seeker'ın kullanıcıya uygulamanın güncellenmesi 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ı bulunabildiğinde herhangi bir cihaz erişebilir.

Sağlayıcı, Cihaz Takip Merkezi'ni destekliyorsa ek uygulama gerekir. Ayrıntılar için Cihaz Takip Merkezi donanım yazılımı güncellemeleri başlıklı makaleyi inceleyin.

Ö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 Yaz ve bildir 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 özelliğe yazmadan veya bildirim göndermeden önce, paylaşılan gizli bilgiye sahip olmak için FE2C1234-8366-4814-8EB0-01DE32100BEA özelliği aracılığıyla el sıkışma yapılmalıdır. Bu özellik üzerinden akan verileri şifrelemek için AES-CTR kullanılır. Algoritması 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ılır. Bu da aşağıda tanımlanmıştır.

Sekizli 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 tek seferlik rastgele sayı. değişir
16 - var Şifrelenmiş veriler. değişir

Tablo 3.1: Sağlayıcı tarafından bildirim yoluyla Arayıcı'ya gönderilen veya Arayıcı tarafından yazma yoluyla Sağlayıcı'ya gönderilen veri paketi.

Sekizli 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(kişiselleştirilmiş ad): 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ği) Hızlı Eşleme Sağlayıcı aşağıdakileri yapmalıdır:

  1. Nonce için kriptografik olarak rastgele 8 bayt oluşturun.
  2. Verileri AES-CTR kullanarak şifreleyin. Her 16 baytlık blok, şu kullanılarak oluşturulur:

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

    burada

    1. AES anahtarı, prosedürdeki 4. adımda paylaşılan gizli anahtardır.
    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şlemini gerçekleştirin.

  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) tarafından oluşturulur. shared_secret, prosedürdeki 4. adımdan alınır.
    2. opad, 0x5C değerine sahip yinelenen baytlardan oluşan 64 baytlık dış dolgudur.
    3. ipad, 0x36 değerine sahip yinelenen baytlardan oluşan 64 baytlık iç dolgudur.
  5. HMAC-SHA256'dan ilk 8 baytı veri paketinin ön eki olarak alın.

Yazma isteği alan Hızlı Eşleme Sağlayıcı aşağıdakileri 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üçük olabilir.
    2. AES anahtarı, el sıkışmadan 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.