Заводская конфигурация и назначение слотов чипа ATECC608A в контроллерах Wiren Board

Добрый день, у меня достаточно короткий вопрос, как на заводе настраивается чип ATECC608A ?

И ряд уточнений:

  • Как выглядит настройка которая сейчас заблокирована ? Я сделал дамп atecc -b 2 -c 'dump-config /tmp/config.bin' и он мне показал только два слота 14 и 15.
usionDisable bit: 0
X509id: 0
=========================  Slot: 14   ================== 
Decoding SlotConfig value = 0x7A81
Read key (except ECC private keys): 1
 If slot contains ECC private keys:
  External signatures of arbitrary messages are enabled: 1
  Internal signatures are enabled: 0
  ECDH operation is permitted for this key: 0
   ECDH master secret output mode: 0
NoMac bit: 0
LimitedUse bit: 0
EncryptRead bit: 0
IsSecret bit: 1
Write key: 10
Write config: 0x7 (hex) = 0111 (bin)
  Write cmd: Encrypt
  DeriveKey cmd: Create without MAC
  GenKey cmd: may be used 
  PrivWrite cmd: Encrypt 
-------------
Decoding KeyConfig value = 0x003C
Private bit: 0
PubInfo bit: 0
KeyType: 7 [SHA or other]
Lockable bit: 1
ReqRandom bit: 0
ReqAuth bit: 0
AuthKey: 0
IntrusionDisable bit: 0
X509id: 0
=========================  Slot: 15   ================== 
Decoding SlotConfig value = 0x4AD9
Read key (except ECC private keys): 9
 If slot contains ECC private keys:
  External signatures of arbitrary messages are enabled: 1
  Internal signatures are enabled: 0
  ECDH operation is permitted for this key: 0
   ECDH master secret output mode: 1
NoMac bit: 1
LimitedUse bit: 0
EncryptRead bit: 1
IsSecret bit: 1
Write key: 10
Write config: 0x4 (hex) = 0100 (bin)
  Write cmd: Encrypt
  DeriveKey cmd: Can't be used
  GenKey cmd: may NOT be used 
  PrivWrite cmd: Encrypt 
-------------
Decoding KeyConfig value = 0x003C
Private bit: 0
PubInfo bit: 0
KeyType: 7 [SHA or other]
Lockable bit: 1
ReqRandom bit: 0
ReqAuth bit: 0
AuthKey: 0
IntrusionDisable bit: 0
X509id: 0
  • В каком слоте, какие ключи, и с какими сроками жизни записаны ?
  • Как задумывается использование остальных слотов ?
  • В какие слоты я могу класть публичные ключи ?
  • Какие слоты с приватными ключами я могу использовать для подписи сообщений исходящих из контроллера в свой облачный сервис, чтобы приватный ключ неожиданно не закончил срок действия ?

Предистория.

Я начал работать с ATECC608A, и atecc -b 2 -c ‘config-is-locked’ возвращает Config zone is locked, и в нулевом слоте уже есть приватный ключ atecc -b 2 -c 'ecc-gen-pub 0 ./public-key-form-zero-slot.bin', который позволяет подписать файл atecc -b 2 -c 'ecc-sign 0 ./test.bin ./test-signature.bin', а потом проверить его подпись atecc -b 2 -c 'ecc-verify 0 ./test.bin ./test-signature.bin ./public-key-form-zero-slot.bin' и получить Verification OK.

Я прочитал документацию CryptodevATECCx08 Auth — Wiren Board и статью Аутентификация устройств на Linux по аппаратному ключу в системах верхнего уровня / Хабр и понял, что в каком то слоте есть приватный ключ на 200 лет, в каком-то на год и его можно обновлять, и все они произошли от вашего корневого сертификата, а так же понял, что я могу взять публичную часть корневого сертификата и проверять ей подписи которые делает любой из приватный ключей в ATECC608A.

Но для меня это пока сложновато.

Я реализовал регистрацию контроллера, через TOTP + fingerprint + отправку публичного ключа в облако (хотя видимо можно это заменить на публичную часть root ключа) + подпись atecc -b 2 -c 'ecc-sign 0, и обратную проверку на контроллере ответа с сохранением публичного ключа облака, из пары которая специально сделана под регистрацию каждого контроллера, и пока для MVP я оставлю так.

Самое главное, я хочу понять, из какого слота мне использовать приватный ключ, или в какой слот я могу сложить создать свой вариант приватного ключа, и пользоваться им для своих целей ?

Большое спасибо, за огромную работу, проделанную, чтобы в ваших устройствах появился чип ATECC608A, и библиотека GitHub - wirenboard/atecc-util: Linux command-line tool for ATECC608A and ATECC508A · GitHub.

Добрый день.
Посмотрел, документация к самому чипу по прежнему не публичная, к сожалению.
Спрошу у коллег - сам не обладаю компетенциями в работе с чипом.

Спасибо, на сколько я понял, там документация на чип не поможет, так как у вас на производстве его настроили и заблокировали, это делается только один раз за его жизнь, если бы ваши коллеги опубликовали то как они его настроили, и написали какие слоты они и для чего занимают, а какими можно пользоваться сторонним разработчикам, было бы замечательно.

@BrainRoot Добрый день, стоит ждать информации, или ее уже не найти ?

Добрый день. Разработчики обещали написать, напомню.

Еще интересует вопрос, возможно ли вложить в чип публичный сертификат, и без раскрытия публичного сертификата проверять подписи полученные выполненные приватным ключом облака ?

По аналогии с подписью приватным ключом на устройстве, без раскрытия приватного ключа.

Как я понял, такая защита, сведет к нулю возможность взлома способом “Человек по середине”, и оставит только один вариант, заменить в коде проверку на ответ от облачного сервиса, а это сложнее чем заменить публичный ключ облака, на публичный ключ прокси.

Это все вытекает из-задачи защиты кода от не санкционированного использования.

Добрый день.
Обещали завтра написать.

Попробуйте atecc -b 2 -c 'dump-config - /tmp/config.bin', так должен показать настройки всех слотов. Или atecc -b 2 -c 'dump-config -'.

atecc -hdump-config
dump-config: dump ATECC config in human-readable format
Usage: dump-config output.txt|- [config.bin]
If optional third argument is set, dumps config from binary file.
1 Like

Используемые слоты:
0: Device private key (locked, ~200 years)
2: Device HMAC write guard (locked)
3: Device HMAC
4: Device private key (open authentification)
5: Factory HMAC