How to implementit
■証明書の構造:
tbsCertificate
シリアル番号
証明書発行日、有効期限
公開鍵
CN コモンネーム
など…
signatureAlgorithm
ecdsa-with-SHA256(一例)
signatureValue
署名データ
SHA256で
ハッシュ化署名対象
CA
署名
12.
How to implementit
ATECC608が対応できる楕円曲線暗号を選択
secp256r1 別名 prime256v1 または NIST P-256(RFC4492)
256bitの秘密鍵と256bit(X)+256bit(Y)の公開鍵で構成される。
それぞれ、32バイト、64バイトとなる。
また、署名は256bit(r)+256bit(s)だが、ASN.1という形式で保存されており、
数バイトの変動がある。
ASN.1のヘッダー(オフセット計算)を付加して72~73ビット程度。
13.
How to implementit
■デバイスの内部概要:合計約1.1KBのEEPROMメモリを持つ。
スロ
ット
ブロッ
ク
バイト ビット 名前 説明
0-7 2 36 288 Private or Secret Key Can also be used for data.
8 13 416 3328 Data 読み取りと書き込みは、他のすべてのスロットと同じ方
法で制限されるように設定できます。このスロットが鍵
として使用されている場合は、秘密鍵または秘密鍵の格
納に不要な残りのバイトは無視されます。
9-
14
3 72 576 Public Key,
Signature or
Certificate
このデバイスでサポートされている曲線の場合、これら
のスロットは、ECDSA公開鍵のX成分とY成分、または
ECDSA署名のR成分とS成分の両方を入れるのに十分な大
きさです。
15 3 72 576 Private Data,
Secret Key,
Signature, or
Certificate
これが128カウント制限使用機能(セクション限定使用
キー(スロット15のみ))をサポートする唯一のスロッ
トです。この機能が必要ない場合は、スロット9~14と
同じ目的で使用できます。
14.
How to implementit
■Step by stepの検証
1、ESP-IDFへのcryptoauthlib(ATECC608のライブラリ)組み込みとコンパイル
2、証明書のチップへの書き込みと読み出し、検証
3、MbedTLS上への実装とTLS1.2ハンドシェイクの確認
4、MQTTの実装と疎通(サーバー側Mosquitto+Node-REDの準備)
15.
How to implementit
■証明書の格納:
用意した証明書テンプレートに対して、
1、シリアル番号
2、公開鍵、署名
3、証明書発行日、有効期限
をデバイス内に保存する。
4、デバイス公開鍵は、アクセス禁止に設定された秘密鍵スロットから
計算して抽出
5、Subject/Auth Key IDは、それぞれの公開鍵から計算されて抽出
16.
How to implementit
■MbedTLSの設定:
重要な設定
mbedtls_ssl_conf_authmode(&ssl->conf, MBEDTLS_SSL_VERIFY_REQUIRED);
MBEDTLS_SSL_VERIFY_REQUIREDにし、証明書のベリファイが必須の状態に
しておく。
17.
How to implementit
■TLS1.2通信のパケットキャプチャ
ESP32:192.168.1.93 Mosquittoブローカー:192.168.1.84