Я предполагаю, что существует неограниченное количество авторизованных пользователей (нет краткого, фиксированного списка устройств, которые вы могли бы связать).
Типичным решением проблемы такого рода является вызов-ответ на общий секрет. В качестве одного примера проекта (этот дизайн имеет некоторый fl aws, о котором я расскажу позже):
- Клиент и устройство совместно используют предварительно организованный 128-битный случайный ключ
- Клиент устанавливает неаутентифицированное, зашифрованное («Just Works») соединение
- Устройство генерирует случайный 128-битный вызов, который клиент читает
- Клиент шифрует запрос ключом и возвращает it
- Устройство проверяет правильность шифрования и проверяет подлинность соединения
В ситуациях с низким уровнем безопасности это прилично, очень просто реализовать и не требует много вычислительной мощности для устройства или любого дополнительного оборудования. Однако у него действительно есть проблемы.
Во-первых, шифрование Just Works не так сложно перехитрить и с помощью MiTM. Если к устройству часто обращаются работники, и у злоумышленника есть какая-то преданность делу, это не удастся.
Если у устройства есть дисплей, который можно экранировать от обзора, то улучшенный дизайн будет использовать Passkey Entry для выполнения начальное сопряжение, а затем используйте запрос-ответ для аутентификации:
- Устройство генерирует 6-ди git контакт
- Рабочий вводит 6 ди git контакт в клиент
- Клиент подключается к устройству, используя Passkey Entry w / pin
- Продолжите, как описано выше, со случайным запросом / ответом для аутентификации
Если устройство имеет чип NF C, это может быть упрощено для пользователя с помощью NF C для распространения ключа сопряжения, а затем с помощью shared-secret для аутентификации. (Это называется OOB или спаривание вне полосы.)
Ключевым моментом во всем этом является то, что вы сначала создаете максимально безопасное соединение, чтобы предотвратить подслушивание и MiTM. Затем, в качестве отдельной проблемы, вы аутентифицируете клиента с использованием общего секрета.
Одним из возможных недостатков этой системы является то, что любой пользователь с общим секретом может претендовать на устройство. Из вашего описания это не кажется серьезной проблемой, но если бы это было так, вы можете избежать этого, используя частные ключи publi c, чтобы на устройстве был личный ключ, а на всех клиентах - publi * 1044. * ключ Однако ключ c в этой ситуации является секретом. (Вы можете go продолжить работу, выдавать клиентские ключи и выполнять взаимную аутентификацию, но это, вероятно, излишне, если ваше устройство не достаточно мощное и не подключено к сети.)