Добрый день, у меня достаточно короткий вопрос, как на заводе настраивается чип 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.