====== Специфікація LoRaWAN. Активація кінцевих пристроїв ====== Щоб приєднатися до мережі LoRaWAN, кінцевий пристрій повинен пройти процедуру активації (End-Device Activation). Специфікація передбачає два варіанти активації пристроїв: * **OTAA, Over-The-Air Activation** (необхідно пройти процедуру приєднання (join procedure), під час якої генеруються сесійні ключі шифрування та адреса DevAddr). * **ABP, Activation By Personalization** (немає потреби проходити процедуру приєднання, ключі шифрування та адреса DevAddr записуються в пристрій заздалегідь (персоналізація пристрою)). Після активації пристрій повинен містити наступні значення: * **Адреса кінцевого пристрою (DevAddr)** — локальна адреса пристрою в даній мережі [32 біти]. DevAddr складається з двох полів: NwkID (ідентифікатор мережі, біти 31...25) та NwkAddr (мережева адреса, біти 24...0). * **Мережевий сесійний ключ (NwkSKey)** — сесійний ключ мережі [128 біт], що використовується для розрахунку та перевірки поля MIC (код цілісності повідомлення) у повідомленнях під час обміну між кінцевим пристроєм та мережевим сервером (Network Server), а також для шифрування повідомлень рівня MAC. * **Сесійний ключ застосунку (AppSKey)** — сесійний ключ [128 біт], що використовується для шифрування даних на рівні застосунку (між кінцевим пристроєм та сервером застосунків). * Також пристрій повинен мати заздалегідь записаний ID застосунку [64 біти] — **Ідентифікатор застосунку (AppEUI)**. ===== OTAA - Процедура приєднання Over-The-Air Activation ===== Процедура приєднання завжди ініціюється кінцевим пристроєм і складається з двох повідомлень, якими обмінюються кінцевий пристрій та мережевий сервер: **join request** (пристрій → сервер) та **join accept** (сервер → пристрій). {{ :6a0556e3015842bf9241275dccb80a52.jpg?nolink&600 |}} Повідомлення join request містить AppEUI, DevEUI та випадкове число DevNonce: ^ Join Request ^^^^^^ | 3 байти | 3 байти | 4 байти | 1 байт | 1 байт | 16 байтів | | AppNonce | NetID | DevAddr | DLSettings | RxDelay | CFList | Для кожного кінцевого пристрою мережевий сервер запам'ятовує значення DevNonce, які використовувалися раніше, і ігнорує запити, що містять дублікати DevNonce. У відповідь на join request сервер надсилає повідомлення join accept. ^ Join Accept ^^^^^^ | 3 байти | 3 байти | 4 байти | 1 байт | 1 байт | 16 байтів | | AppNonce | NetID | DevAddr | DLSettings | RxDelay | CFList | де: * **AppNonce** — випадкове число. * **NetID** — ідентифікатор мережі. * **DevAddr** — адреса пристрою в мережі. * **DLSettings** — параметри, що використовуються для вихідних повідомлень (сервер -> пристрій). * **RxDelay** — затримка між закінченням передачі кінцевого пристрою та початком вікна прийому Rx1 (що таке вікна прийому — [[uk:lorawan_spec_devices_clas|Специфікація LoRaWAN. Вступ. Основні поняття та класи кінцевих пристроїв]]). * **CFList** — список додаткових частотних каналів, які можуть використовуватися кінцевим пристроєм. Поле **DLSettings** [8 біт] має наступний формат: ^ DLSettings ^^^ | 7-й байт | 6...4 байти | 3...0 байти | | RFU | RX1DRoffset | RX2 Data rate | де: * **RFU** — Reserved for Future Use (зарезервовано для майбутнього використання), не використовується. * **RX1DRoffset** — різниця між швидкостями передачі даних uplink та downlink, що використовується для першого вікна прийому Rx1. За замовчуванням дорівнює 0. * **RX2 Data rate** — швидкість, що використовується для другого вікна прийому Rx2. Випадкові числа **DevNonce** та **AppNonce** використовуються для розрахунку сесійних ключів **NwkSKey** та **AppSKey**. ===== ABP - Activation By Personalization ===== «Активація через персоналізацію» означає, що значення **DevAddr**, **NwkSKey** та **AppSKey** записуються безпосередньо в пристрій (пристрій персоналізується). Згідно зі специфікацією, кожен пристрій повинен містити унікальні значення сесійних ключів NwkSKey та AppSKey, щоб компрометація цих значень в одному пристрої не призвела до компрометації інших пристроїв мережі. При такому методі активації кінцевому пристрою не потрібно проходити процедуру приєднання до мережі, пристрій готовий до передачі даних одразу після ввімкнення.