LTK - это долгосрочный ключ, хранящийся в устройстве, который заменяется после соединения.При сопряжении Legacy подчиненное устройство просто выбирает случайный LTK и отправляет его мастеру.В LE Secure Connections LTK получен из обмена diffie hellman.
Пакеты LL_ENC_REQ и LL_ENC_RSP содержат «диверсификаторы ключа сеанса», а не LTK (так как это может разрушить безопасность, если ключ был отправлен воткрытый текст перед включением шифрования).Чтобы сделать каждое новое соединение безопасным, новый ключ сеанса используется для каждого соединения.Чтобы создать этот ключ сеанса, каждое устройство генерирует случайные данные размером 8 + 4 байта.Значения SKDm и SKD объединяются в 16-байтовый SKD.Ключ сеанса генерируется AES-шифрованием LTK в качестве значения и SKD в качестве ключа.Обратите внимание, что после объединения SKDm и SKD полностью измените все целые 16 байтов перед тем, как вводить их в стандартную функцию AES, поскольку в Bluetooth используется мало порядковый номер, а в стандарте AES используется порядковый номер с прямым порядком.
Так что 487E4174426ACC34A83103763D2D95BE - это ваш SKD в форматеожидается всеми библиотеками AES.
Поля Rand и EDIV в LL_ENC_REQ отправляются ведомому устройству в качестве идентификатора ключа, чтобы он мог искать LTK в своей базе данных.
IVm иЗначение IV следует объединить, чтобы получить IV (не обратное).Этот IV используется как часть одноразового номера в шифровании AES-CCM.См. Спецификацию ядра Bluetooth 5.0, том 6, часть E, глава 2.1.