Özellikleri

Hızlı Eşleme Hizmeti

Hızlı Eşleme Sağlayıcısı aşağıdaki GATT hizmetini içerecektir.

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 Okundu FE2C1233-8366-4814-8EB0-01DE32100BEA
Anahtar Tabanlı Eşleme Hayır Yaz ve bildir FE2C1234-8366-4814-8EB0-01DE32100BEA
Geçiş anahtarı Hayır Yaz ve bildir 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ısı, Cihaz Bilgileri Hizmeti'ni de desteklemelidir.

Hizmet UUID
Cihaz Bilgileri Hizmeti 0x180A

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

Ad Şifrelenmiş İzinler UUID
Donanım Yazılımı Düzeltmesi Hayır Okundu 0x2A26

Özellik: Model kimliği

Bu özellik, Arayan'ın, cihazın keşfedilebilir modda reklam yayınlamadığı zamanlar dışında, model kimliğini gerektiğinde 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şiklik gösterir

Özellik: Anahtar Tabanlı Eşleme

Bu özellik, Anahtar Tabanlı Eşleme prosedürünü denetler. Bu prosedürde, hem Arayan'ın hem de Sağlayıcı'nın önceden paylaşılan bir anahtara sahip olduğu doğrulanarak belirli bir güven düzeyi sağlanır. Bu iki durumda anahtar farklıdır:

  • 1. Durum: Önceden paylaşılan anahtar, adres sahteciliğini önleme herkese açık/özel anahtar çiftine ve Arayan'ın her eşleme girişiminde değişecek olan kendi genel/özel anahtar çiftine dayanır.

    • Sağlayıcı, eşleme modunda.
    • Arama kişi, Sağlayıcı'nın adres sahteciliğine karşı koruma sağlayan özel anahtara sahip olduğunu doğrular.

    Eşleme modundayken, Sağlayıcının elbette her zamanki yöntemle de eşleyebileceğini, örneğin Hızlı Eşleme'nin Anahtar Tabanlı Eşleme özelliğini desteklemeyen bir cihazla eşlemek için de eşleyebileceğ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 gereklilik değildir. Sağlayıcı, eşleme modunda bile hesap anahtarı kullanımını desteklemelidir.)
    • Arayan ve Sağlayıcı, diğerinin hesap anahtarına sahip olduğunu doğrular.

Önceden paylaşılan anahtarın kullanıldığı durumlar dışında her iki durum da son derece benzer olduğundan, bunlar prosedürde birleştirilir.

Veri Biçimi

Her biçimin nasıl kullanıldığıyla ilgili prosedüre bakın.

Sekizli Veri türü Açıklama Değer Zorunlu mu?
0 - 15 uint128 Şifrelenmiş İstek değişiklik gösterir Zorunlu
16 - 79 Ortak Anahtar değişiklik gösterir İ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 = Anahtar Tabanlı Eşleme İsteği Zorunlu
1 uint8 İşaretler
  • Bit 0 (MSB): Seeker tarafından desteği sonlandırıldı ve yoksayıldı.
  • Bit 1: 1. Arayan, Sağlayıcı'nın bağ kurmayı başlatmasını istiyorsa ve bu istek, Arayanın BR/EDR adresini içeriyorsa. Aksi takdirde 0 değerini alır.
  • Bit 2: 1 Arayan, Sağlayıcı'nın mevcut adı bildirmesini isterse. Aksi takdirde 0 değerini alır.
  • Bu, Hesap anahtarını geriye dönük olarak yazma ile ilgiliyse Bit 3: 1'dir. Aksi takdirde 0 değerini alır.
  • 4-7 arasındaki bitler gelecekte kullanılmak üzere ayrılmıştır ve yoksayılacaktır.
değişiklik gösterir Zorunlu
2 - 7 uint48 Şu ikisinden birini yapın:
  • Sağlayıcının geçerli BDE adresi
  • Sağlayıcının genel adresi
değişiklik gösterir Zorunlu
8 - 13 uint48 Arayanın BR/EDR Adresi değişiklik gösterir Yalnızca İşaretler Bit 1 veya 3 ayarlanmışsa sunun
n - 15 Rastgele değer (tuz) değişiklik gösterir Zorunlu

Tablo 1.2.1: Ham İstek (0x00 türü). Şifrelenmiş istekteki şifre çözülmüştür Tablo 1.1'de verilmiştir.

Sekizli 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: 1'in ardından Ek Veri özelliği gelecekse 0, aksi takdirde 0 gelir.
  • Bit 2 - 7 gelecekte kullanılmak üzere ayrılmıştır ve yoksayılacaktır.
değişiklik gösterir Zorunlu
2 - 7 uint48 Şu ikisinden birini yapın:
  • Sağlayıcının geçerli BDE adresi
  • Sağlayıcının genel adresi
değişiklik gösterir Zorunlu
8 uint8 Mesaj grubu değişiklik gösterir İşaretler Bit 0 ayarlanmışsa zorunludur
9 uint8 Mesaj kodu değişiklik gösterir İşaretler Bit 0 ayarlanmışsa zorunludur
10 uint8 İşaretlere bağlıdır:
  • Bit 0 ayarlandı: Ek veri uzunluğu (6'dan küçük)
  • Bit 1 ayarlandı: Veri kimliği
değişiklik gösterir İşaretler Biti 0 veya 1 ayarlanmışsa zorunludur
11 - n Ek veriler değişiklik gösterir İsteğe bağlı
n - 15 Rastgele değer (tuz) değişiklik gösterir Zorunlu

Tablo 1.2.2: Ham İstek (0x10 türü). Şifrelenmiş istekteki şifre çözülmüştür Tablo 1.1'de verilmiştir.

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şiklik gösterir
7 - 15 Rastgele değer (tuz) değişiklik gösterir

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

Sekizli Veri türü Açıklama Değer
0 -15 uint128 Şifrelenmiş Yanıt değişiklik gösterir

Tablo 1.4: Sağlayıcı tarafından Arayan'a bildirim aracılığıyla gönderilen Şifrelenmiş Yanıt.

Özellik: Geçiş anahtarı

Bu özellik, Anahtar Tabanlı Eşleme prosedürü sırasında kullanılır.

Sekizli Veri türü Açıklama Değer
0 - 15 uint128 Şifreli geçiş anahtarı engelleme değişiklik gösterir

Tablo 2.1: Şifrelenmiş Geçiş Anahtarı Bloğu. Kullanımla ilgili Anahtar Tabanlı Eşleme prosedürünü inceleyin.

Sekizli 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 şifre anahtarı değişiklik gösterir
4 - 15 Rastgele değer (tuz) değişiklik gösterir

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

Sekizli Veri türü Açıklama Değer
0 - 15 uint128 Hesap anahtarı (şifreli) değişiklik gösterir

Hızlı Eşleme Sağlayıcısı, yazma isteği aldıktan sonra şunları yapar:

  1. Prosedürdeki 4. adımda oluşturulan paylaşılan gizli anahtarı kullanarak hesap anahtarının şifresini çözün.
    • Tahsilat gerektiren Sağlayıcılar için (yaygın):
      • Şifre çözmeden önce, 12. adımda belirtilen geçiş anahtarı isteğinin şifresini çözmek için paylaşılan gizli anahtarın kullanıldığını doğrulayın. Bu gizli anahtar kullanılarak bu adım geçmezse bu yazma işlemini yoksayın ve kapatın.
    • Bu noktada, paylaşılan gizli anahtar (yordamdaki K) bu eşleme için tekrar kullanılmaz. Prosedürü yeniden başlatmadan bu anahtarla şifrelenmiş olarak gelen tüm istekler reddedilmelidir.
  2. Şifresi çözülen değerin 0x04 ile başladığını doğrulayın. Yoksa bu komutu yok sayın ve yazın.
  3. Kalıcı Hesap Anahtarı listesinde yeni değer için alan olup olmadığını kontrol edin.
  4. Aksi takdirde, listeden en az kullanılan değeri silin.
  5. Yeni değeri listeye ekleyin.

Listedeki Hesap Anahtarları Anahtar Tabanlı Eşleme sırasında kullanılır.

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

Bu özellik, Arayan'ın gerektiğinde Sağlayıcı'nın donanım yazılımı düzeltmesini okumasına olanak sağlar. 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şiklik gösterir

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 utf8 dizesine dahil edilmelidir. 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 bir durumdaysa. Örneğin, donanım yazılımı güncellemesi başarısız olduğu için cihazınız arızalanmış olabilir. Bu değer, Seeker'ın kullanıcıya hemen güncellenmesi gerektiğini bildiren bir mesaj göstermesini sağlar.

Sağlayıcı, cihaz takibini önlemek için Donanım Yazılımı Düzeltmesi özelliğine erişimi sınırlamalıdır. Önerilen kısıtlamalar:

  • bağlı cihazların her zaman erişimi olmalıdır
  • Sağlayıcı bulunabilir olduğunda tüm cihazların erişimi olmalıdır

Özellik: Ek Veriler

Bu hizmet aşağıdaki özelliklere sahip olacaktı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 (01.01.2021 tarihinde kullanımdan kaldırılacak) Şifrelenmiş İzinler UUID
Veriler Hayır Yaz ve bildir 0x1237

Bu özelliğe yazmadan veya bildirim göndermeden önce, paylaşılan bir sırrın olması için FE2C1234-8366-4814-8EB0-01DE32100BEA özelliği üzerinden el sıkışma olması gerekir. AES-TO, algoritması aşağıda tanımlanan bu özellik üzerinden akışı şifrelemek için kullanılır. Bu mod, 16 baytlık tek bir blokun ötesine geçen verilerde daha güvenlidir. Aşağıda da tanımlanan veri bütünlüğünü sağlamak için HMAC-SHA256 kullanılır.

Sekizli Açıklama Değer
0 - 7 HMAC-SHA256'nın ilk 8 baytı. değişiklik gösterir
8 - 15 Nonce, AES-TO şifrelemesi tarafından kullanılır. değişiklik gösterir
16 - var Şifrelenmiş veriler. değişiklik gösterir

Tablo 3.1: Sağlayıcı tarafından Arayan'a bildirim yoluyla gönderilen veya Arayan tarafından yazma ile Sağlayıcı'ya gönderilen Veri Paketi.

Sekizli Veri türü Açıklama Değer
0 - var byte array Veriler değişken verilerin kodunu Tablo 1.2.2'nin Veri Kimliği'ne göre çözün:
  • 0x01(kişiselleştirilmiş ad): utf8s

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

Bir bildirim istendiğinde (ör. Tablo 1.2.1'deki Bit 2 üzerinden kişiselleştirilmiş ad isteme) Hızlı Eşleme Sağlayıcısı aşağıdakileri yapmalıdır:

  1. Nonce için kriptografik olarak rastgele 8 bayt oluşturun.
  2. Verileri AES-TO ile şifreleyin. Bu yöntemde her 16 baytlık blok şurada 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], veriden[i * 16] başlayan 16 baytlık bir bloktur. Son blok 16 bayttan küçük olabilir.
  3. Şifrelenmiş Veriler'i oluşturmak için concat(encryptedBlock[0], encryptedBlock[1],...)] işlemi gerçekleştirin.

  4. HMAC-SHA256 oluşturma yöntemi:

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

    burada:

    1. K, concat(shared_secret, 48 bayt ZEROs) tarafından oluşturulur, shared_secret ise prosedürdeki 4. adımdır.
    2. opad, 0x5C değerli tekrarlanan baytlardan oluşan 64 baytlık dış dolgudur.
    3. ipad, 0x36 değerli tekrarlanan baytlardan oluşan 64 baytlık iç dolgudur.
  5. HMAC-SHA256'nın ilk 8 baytını Veri paketi'nin öneki olarak alın.

Hızlı Eşleme Sağlayıcısı, yazma isteği aldıktan sonra şunları yapar:

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

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

    burada:

    1. şifrelenmiş[i], şifreli_veriler[i * 16] değerinden 16 baytlık bir blok başlangıcıdır. Son blok 16 bayttan küçük olabilir.
    2. AES anahtarı el sıkışmayla oluşturulur veya tanımlanır, ör.
      1. adlandırma akışı 1'de, ECDH'den gelir ve bu eşleme için tekrar kullanılmayacaktır. Prosedürü yeniden başlatmadan bu anahtarla şifrelenmiş olarak gelen tüm istekler reddedilmelidir.
      2. adlandırma akışı 2'de hesap anahtarıdır.
  3. Ham verileri oluşturmak için concat(clearBlock[0], clearBlock[1],...) işlemi yapın.