Ö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
|
değişiklik gösterir | Zorunlu |
2 - 7 | uint48 |
Şu ikisinden birini yapın:
|
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
|
değişiklik gösterir | Zorunlu |
2 - 7 | uint48 |
Şu ikisinden birini yapın:
|
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:
|
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:
|
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:
- 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.
- Tahsilat gerektiren Sağlayıcılar için (yaygın):
- Şifresi çözülen değerin
0x04
ile başladığını doğrulayın. Yoksa bu komutu yok sayın ve yazın. - Kalıcı Hesap Anahtarı listesinde yeni değer için alan olup olmadığını kontrol edin.
- Aksi takdirde, listeden en az kullanılan değeri silin.
- 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:
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.
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:
|
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:
- Nonce için kriptografik olarak rastgele 8 bayt oluşturun.
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:
- AES anahtarı, prosedürdeki 4. adımda paylaşılan gizli anahtardır.
- clearBlock[i], veriden[i * 16] başlayan 16 baytlık bir bloktur. Son blok 16 bayttan küçük olabilir.
Şifrelenmiş Veriler'i oluşturmak için concat(encryptedBlock[0], encryptedBlock[1],...)] işlemi gerçekleştirin.
HMAC-SHA256 oluşturma yöntemi:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
burada:
- K, concat(shared_secret, 48 bayt ZEROs) tarafından oluşturulur, shared_secret ise prosedürdeki 4. adımdır.
- opad,
0x5C
değerli tekrarlanan baytlardan oluşan 64 baytlık dış dolgudur. - ipad,
0x36
değerli tekrarlanan baytlardan oluşan 64 baytlık iç dolgudur.
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:
- HMAC-SHA256'nın ilk 8 baytını kontrol ederek verilerin bütünlüğünü doğrulayın.
Şifrelenmiş Verilerin şifresini AES-TO ile çözün. Burada her blok,
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
burada:
- ş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.
- AES anahtarı el sıkışmayla oluşturulur veya tanımlanır, ör.
- 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.
- adlandırma akışı 2'de hesap anahtarıdır.
Ham verileri oluşturmak için concat(clearBlock[0], clearBlock[1],...) işlemi yapın.