Использование микросхемы криптозащиты ATECC508A от Microchip совместно с ОС Mongoose + ESP8266 + Google IoT Core
C помощью операционной системы Mongoose, заточенной на работу с Интернетом вещей, возможно использовать криптографический сопроцессор ATECC508A от Microchip совместно с модулем беспроводной связи на базе популярного чипсета ESP8266 для безопасного взаимодействия с облачной средой Google IoT Core.

Необходимые компоненты платформы
  • Отладочная плата NodeMCU ESP8266 development board
  • Криптографическая микросхема ATECC508A, либо плата ATCRYPTOAUTH-XPRO
  • Аккаунт Google IoT core
Установленный паке программного обеспечения mos tool

Соединение компонентов
Для сборки тестового макета удобнее использовать платы ESP8266 NodeMCU и ATCRYPTOAUTH-XPRO с микросхемой ATECC508A.
Порядок соединения разъемов плат и выводов микросхем в тестовом макете показан в таблице 1.

Иллюстрация подключения к отладочной плате ATCRYPTOAUTH-XPRO:
Иллюстрация подключения предварительно распаянной микросхемы ATECC508A:
Настройка макета
Далее следует установить Google IoT Core, следуя инструкциям в руководстве.
В этом же руководстве описан процесс создания проектов и реестров устройств (device registry). На данном этапе настройки пока не следует генерировать ключи или создавать проект устройства.

Инициализация устройства

Запускаем команду «mos flash esp8266» для установки Mongoose OS на плату NodeMCU.
Запускаем команду «mos wifi SSID PASS» для включения WiFi.

Настройка
ECC508A
Запускаем команду «mos config-set sys.atca.enable=true»
Убеждаемся, что криптографическая микросхема успешно обнаружена:
$ mos -X atca-get-config
Using port /dev/ttyUSB0
AECC508A rev 0x5000 S/N 0x012352aad1bbf378ee, config is locked, data is locked
0x01, 0x23, 0x52, 0xaa,
...
Если разделы памяти устройства с настройками и данными автоматически не перешли в защищенное состояние «locked», то следует выполнить настройку криптографического чипа перед продолжением дальнейших операций. В дальнейшем примере будем считать, что slot 0 задействован для хранения приватных ключей ECC, а генерация ключей активирована.

Генерируем ключ:
$ mos -X atca-gen-key 0 ec_public.pem --dry-run=false
Using port /dev/ttyUSB0
AECC508A rev 0x5000 S/N 0x012352aad1bbf378ee, config is locked, data is locked
Generated new ECC key on slot 0
Wrote ec_public.pem

Создаем объект GCP-устройства (GCP - Google Cloud Platform):
$ gcloud beta iot devices create $DEVICE_ID --project=$PROJECT --region=$REGION --registry=$REGISTRY --public-key path=ec_public.pem,type=es256

Конфигурируем настройки GCP-устройства:
mos config-set mqtt.enable=true mqtt.server=mqtt.googleapis.com:8883 mqtt.ssl_ca_cert=ca.pem sntp.enable=true gcp.enable=true gcp.project=$PROJECT gcp.region=$REGION gcp.registry=$REGISTRY gcp.device=$DEVICE_ID device.id=$DEVICE_ID gcp.key=ATCA:0 sys.atca.enable=true debug.stderr_topic=/devices/$DEVICE_ID/events/log debug.stdout_topic=/devices/$DEVICE_ID/events/log

Тестирование
Запускаем команду «mos ui» для получения доступа к пользовательскому Web-интерфейсу. Указываем адрес устройства (последовательный порт) для подключения и выполняем перезагрузку устройства. В окне пользовательского интерфейса должны появиться сообщения:
...
mgos_wifi_setup_sta WiFi STA: Connecting to SSID
mgos_i2c_create I2C GPIO init ok (SDA: 12, SCL: 14)
mgos_atca_init ATECC508 @ 0x60: rev 0x5000 S/N 0x12352aad1bbf378ee, zone lock status: yes, yes; ECDH slots: 0x0c
...
mgos_gcp_init GCP client for my-project/us-central1/my-registry/my-es256-device, EC(ATCA) key in ATCA:0
...
mgos_mqtt_ev MQTT Connect (1)
ATCA:0 ECDSA sign ok
mgos_mqtt_ev MQTT CONNACK 0
mgos_mqtt_ev Subscribing to 'my-es256-device/rpc'
mgos_mqtt_ev Subscribing to 'my-es256-device/rpc/#'
...
Здесь «EC(ATCA) key in ATCA:0 part» означает, что slot 0 криптографического чипа ATECC508A задействован.
«ATCA:0 ECDSA sign ok» означает ,что ATCA:0 используется для авторизации доступа в ходе рукопожатия в протоколе MQTT.
Далее, прошивка, загруженная в устройство по умолчанию, каждый раз при нажатии пользователем кнопки «Flash» будет выводить в пользовательский интерфейс MQTT-сообщение:
Published: yes topic: /devices/my-es256-device/events message: {"free_ram":30080,"total_ram":51912}