Özellikleri
Hızlı Eşleme Hizmeti
Hızlı Eşleme Sağlayıcısı 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 |
Anahtara Dayalı Eşleme | Hayır | Yaz ve bildirim gönder | FE2C1234-8366-4814-8EB0-01DE32100BEA |
Geçiş anahtarı | Hayır | Yaz ve bildirim gönder | 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 | Okuma | 0x2A26 |
Özellik: Model kimliği
Bu özellik, arayanın Cihaz bulunabilir modda reklam verdiğinde. Her zaman döndürülmelidir. aşağıdaki veriler:
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 - 2 | uint24 |
Model Kimliği | değişiklik gösterir |
Özellik: Anahtara Dayalı Eşleme
Bu özellik, Anahtara Dayalı Eşleme prosedürünü kontrol eder. Bu prosedürde, Arayanın ve reklamverenin geçerliliğini doğrulayarak, belirli bir Her iki sağlayıcı da önceden paylaşılan bir anahtara sahip. Temel proje yönetiminin her durumda:
1. durum: Önceden paylaşılan anahtar, adres sahteciliğine karşı koruma genel/özel anahtarına dayalıdır ve arayanın kendi ortak/özel anahtar çiftinin anahtarı bulunur. Bunlar her kullanıcı için eşleme denemesi.
- Sağlayıcı, eşleme modunda.
- Arayan, Sağlayıcı'nın adres sahteciliğini önleme özel anahtarı.
Eşleme modundayken Sağlayıcı'nın aynı zamanda özelliklerini desteklemeyen bir cihazla eşlenir. Eşlemenin Anahtara Dayalı Eşlemesi.
2. örnek: Önceden paylaşılan anahtar, hesap anahtarlarından biridir.
- Sağlayıcı genellikle eşleme modunda değil. (Ancak bu bir gereksinimi; Sağlayıcı, eşleme moduna geç'i tıklayın.)
- Arayan ve Sağlayıcı, diğerlerinin hesap anahtarı.
Önceden paylaşılan anahtar hariç olmak üzere her iki durum da son derece benzer olduğundan, prosedürde birleştirilir.
Veri Biçimi
Her biçimin nasıl kullanıldığıyla ilgili prosedüre bakın.
Sekiz | 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'ın özelliğine göre yazılan Şifrelenmiş İstek.
Sekiz | 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
|
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 Brezilya/EDR Adresi | değişiklik gösterir | Yalnızca İşaretler Bit 1 veya 3 ayarlanmışsa gösterilir |
n - 15 | Rastgele değer (salt) | değişiklik gösterir | Zorunlu |
Tablo 1.2.1: Ham İstek (tür: 0x00). Şifrelenmiş cihazdaki şifre çözüldü Tablo 1.1'deki talep.
Sekiz | 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 zorunlu |
9 | uint8 |
Mesaj kodu | değişiklik gösterir | İşaretler Bit 0 ayarlanmışsa zorunlu |
10 | uint8 |
İşaretlere bağlıdır:
|
değişiklik gösterir | İşaretler Bit 0 veya 1 ayarlanmışsa zorunlu |
11 - n | Ek veriler | değişiklik gösterir | İsteğe bağlı | |
n - 15 | Rastgele değer (salt) | değişiklik gösterir | Zorunlu |
Tablo 1.2.2: Ham İstek (tür: 0x10). Şifrelenmiş cihazdaki şifre çözüldü Tablo 1.1'deki talep.
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Mesaj türü | 0x01 = Anahtara Dayalı 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 (salt) | değişiklik gösterir |
Tablo 1.3: Ham Yanıt. Şifrelenmiş Yanıtı şurada oluşturmak için şifrelenir: Tablo 1.4.
Sekiz | 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 bildir.
Özellik: Geçiş anahtarı
Bu özellik, anahtar tabanlı eşleme sırasında kullanılır. gerekir.
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 - 15 | uint128 |
Şifrelenmiş geçiş anahtarı engelleme | değişiklik gösterir |
Tablo 2.1: Şifrelenmiş Geçiş Anahtarı Bloğu. Görüntüleyin Kullanım için Anahtara Dayalı Eşleme prosedürü.
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Mesaj türü | Şunlardan biri:
|
1 - 3 | unit32 |
6 basamaklı geçiş anahtarı | değişiklik gösterir |
4 - 15 | Rastgele değer (salt) | 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ı
Hızlı Eşleme Arayan, eşlemeden sonra Hızlı Eşleme'ye bir Hesap Anahtarı yazar Sağlayıcı.
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 - 15 | uint128 |
Hesap anahtarı (şifrelenmiş) | değişiklik gösterir |
Yazma isteği alındığında Hızlı Eşleme Sağlayıcısı aşağıdakileri yapacaktır:
- Belgenin 4. adımında oluşturulan paylaşılan gizli anahtarı kullanarak hesap anahtarının şifresini çözün.
prosedüre göz atın.
- Bağ kurma gerektiren sağlayıcılar için (yaygın):
- Şifre çözmeden önce, paylaşılan gizli anahtarın geçiş anahtarı isteğinde bulunun. Bu adım, gizli, bu yazma işlemini yoksayın ve çıkın.
- Bu noktada, paylaşılan gizli anahtar (prosedürde K) kullanılmaz işlemi tekrarlamanız gerekir. Bu anahtarla şifrelenmiş olarak gelen tüm istekler yeniden başlatmadığınız sürece reddedilmelidir.
- Bağ kurma gerektiren sağlayıcılar için (yaygın):
- Şifresi çözülmüş değerin
0x04
ile başladığını doğrulayın. Uymuyorsa yoksayın işlemi tekrarlamanız gerekir. - Kalıcı Hesap Anahtarı listesinde yeni değer.
- Değilse listeden en son 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ı. Her zaman aşağıdaki verileri döndürmelidir:
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 - var | utf8s |
Donanım yazılımı düzeltme kodu | değişiklik gösterir |
Birden fazla olsa bile tek bir utf8 dizesine kapsül alınmalıdır. (ör. sol kulaklık, sağ kulaklık ve kılıf için 3 donanım yazılımı). 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ı olarak kullanılan donanım yazılımı sürümünü iade edebilir.
status-abnormal: Sağlayıcı anormal bir durumdaysa. Örneğin, donanım yazılımı güncellemesi başarısız olduğundan bozuldu. Bu değer, ve kullanıcının şimdi güncellenmesi gerektiğini bildiren bir mesaj göstermesini sağlar.
Sağlayıcı, Donanım Yazılımı Düzeltmesi özelliğine olan erişimi cihaz takibini engelleyin. Önerilen kısıtlamalar:
- bağlı cihazlar her zaman erişebilmelidir
- Sağlayıcı bulunabilir olduğunda tüm cihazlar erişebilir
Özellik: Ek Veriler
Bu hizmet, aşağıdaki özelliklere sahip olmalıdır.
Hızlı Eşleme Hizmeti özelliği | Şifrelenmiş | İzinler | UUID |
---|---|---|---|
Veriler | Hayır | Yaz ve bildirim gönder | FE2C1237-8366-4814-8EB0-01DE32100BEA |
Eski Hızlı Eşleme Hizmeti özelliği (1.1.2021'de desteği sonlandırılacak hedef) | Şifrelenmiş | İzinler | UUID |
---|---|---|---|
Veriler | Hayır | Yaz ve bildirim gönder | 0x1237 |
Bu özellikle ilgili yazma veya bildirmeden önce,
sahip olmak için FE2C1234-8366-4814-8EB0-01DE32100BEA
özelliğini kullanarak el sıkışma
sır olarak paylaşmasıdır. Bu ağdan geçen verileri şifrelemek için AES-CTR kullanılır.
karakteristiktir. Bu mod
. HMAC-SHA256
aşağıda da tanımlanmış veri bütünlüğünü sağlamak için kullanılmalıdır.
Sekiz | 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ş veri. | değişiklik gösterir |
Tablo 3.1: Veri Paketi, Sağlayıcı tarafından Arayan'a tarafından Sağlayıcı'ya yazılı olarak bildirildiği veya gönderildiğinden.
Sekiz | Veri türü | Açıklama | Değer |
---|---|---|---|
0 - var | byte array |
Veriler | değişiklik gösterir; Tablo 1.2.2'deki Veri Kimliğine göre kodu çözün:
|
Tablo 3.2: Ham veriler. Şu cihazdaki şifrelenmiş verilerin şifresi çözüldü: Tablo 3.1.
Bildirim istendiğinde (ör.Bit 2 üzerinden kişiselleştirilmiş bir ad isteyin.) Tablo 1.2.1) ile birlikte, Hızlı Eşleme Sağlayıcısı aşağıdakileri yapacaktır:
- Nonce için kriptografik olarak rastgele 8 bayt oluşturun.
Verileri AES-CTR kullanarak şifreleyin. Her 16 baytlık blok,
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
burada
- AES anahtarı, prosedürün 4. adımında paylaşılan gizli anahtardır.
- clearBlock[i], verilerden[i * 16] başlayan 16 baytlık bir bloktur. Son bloğu 16 bayttan küçük olabilir.
Aşağıdaki kodu oluşturmak için concat(encryptedBlock[0], encryptedBlock[1],...) Şifrelenmiş Veri.
HMAC-SHA256 oluşturma ölçütü
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
burada
- K, concat(shared_secret, 48 baytlık ZEROs) ile oluşturulur. shared_secret prosedürün 4. adımından itibarendir.
- opad, 64 bayt dış dolgudur ve değerli tekrarlanan baytlardan oluşur
0x5C
- ipad 64 bayt iç dolgudur ve değerli tekrarlanan baytlardan oluşur
0x36
Yazma isteği alındığında Hızlı Eşleme Sağlayıcısı aşağıdakileri yapacaktır:
- Dosyanın ilk 8 baytını kontrol ederek verilerin bütünlüğünü doğrulayın HMAC-SHA256 olmalıdır.
Şifrelenmiş Verilerin şifresini AES-CTR kullanarak çözün. Her blok,
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
burada
- şifrelenmişBlock[i], şifrelenmiş_veriler[i * 16] ile başlayan 16 baytlık bir bloktur. Son blok 16 bayttan kısa olabilir.
- AES anahtarı, el sıkışma sırasında oluşturulur veya tanımlanır (ör.
- adlandırma akışı 1'de, ECDH'den gelir ve bu eşleme için tekrar kullanılır. Şifrelenmiş olarak gelen tüm istekler bu tuşa basmadan, işlemi yeniden başlatmadan reddedildi.
- adlandırma akışı 2'de hesap anahtarıdır.
Ham verileri oluşturmak için concat(clearBlock[0], clearBlock[1],...) komutunu uygulayın.