Edukit を MacOS で試す
edukit を試したので、気になったところをメモしておきます。
EduKitについて
https://aws.amazon.com/jp/about-aws/whats-new/2020/12/introducing-aws-iot-edukit/
ハンズオン
https://edukit.workshop.aws/en/
こちらのハンズオンを試していきます。
1. getting started
特に気になるところは無し PlatformIOは便利。
2. Blinky Hello World
ここではesp-idf のインストールを行うが、すでにv3の環境がインストール済みだったため、変な依存関係が生まれないように念のため退避しておきます。
cd ~/esp/
mv xtensa-esp32-elf ../(退避場所)
install.sh の実行で dirname: illegal option -- b
のエラーが出たため、install.shを修正。
こちらを参考に、以下のように --
を $0の前に追加。
export IDF_PATH=$(cd $(dirname -- $0); pwd)
#(中略)
basedir="$(dirname -- $0)"
ターミナルを再起動する必要が出た場合は、再度、
conda activate edukit
する必要があります。
python registration_helper.py -p <<DEVICE_PORT>>
これを実行すると、output_filesの下に {Serial Number}_manifest.jsonが作成されます。
このPayloadはBase64でエンコードされているので、デコードしてみると以下のようになっています。
{
"version":1,
"model":"ATECC608A",
"partNumber":"ATECC608A-TNGTLS",
"manufacturer":{
"organizationName":"Microchip Technology Inc",
"organizationalUnitName":"Secure Products Group"
},
"provisioner":{
"organizationName":"Microchip Technology Inc",
"organizationalUnitName":"Secure Products Group"
},
"distributor":{
"organizationName":"Microchip Technology Inc",
"organizationalUnitName":"Microchip Direct"
},
"provisioningTimestamp":"2020-11-18T05:00:00.000Z",
"uniqueId":"0123b36c6270c2ad01",
"publicKeySet":{
"keys":[
{
"kid":"0",
"kty":"EC",
"crv":"P-256",
"x":"6XU4nnOjw_vAS478YCCekvG0Lr-fwP86_ZA6NrG4mzI",
"y":"D1W-rzC2iiFulsNhCF0c2n6HNcjnXgnenj7cXrY_j1A",
"x5c":[
"MIICIDCC...",
"MIICBDCCAaqgAw..."
]
},
{
"kid":"1",
"kty":"EC",
"crv":"P-256",
"x":"r-9TSFq6DgCcxD1SXsCgW7YTax69RFo8zyaeiQEmfUA",
"y":"nSjvVe50HKFkCVJJug5JN1BBkopzda1YCaUL0k4LykI"
},
{
"kid":"2",
"kty":"EC",
"crv":"P-256",
"x":"SaPyWQrM5T87ckFDZ1cn2iudiKdu5CAIBBh9a8BlVYY",
"y":"awQz8k_GQ9RxizwyETo96UOz0Jnw9YmSIU7jlv-Q8pk"
},
{
"kid":"3",
"kty":"EC",
"crv":"P-256",
"x":"51JgkAj1O786jXR7pd2El8Vj08MIZENLdRqtCgRU4Vo",
"y":"a0TsFt5VPoTCar59jr0hYNgZJb9S8lVEZepuUrG7EBk"
},
{
"kid":"4",
"kty":"EC",
"crv":"P-256",
"x":"5ujWNIjY7alftW-k-DrXPl-e2ZKFkuu9H2l9sVwHmk4",
"y":"d0OhNeik3XLy-hd0LByWAfg97rnf6rFsQSCbFiPDHGA"
}
]
}
}
実際に何が行われているかを確認したいので、 registration_helper.py
の中を覗いてみます。
-
generate_signer_certificate()
- ここでは、ECDSAの鍵を作成し、それを使って、 x.509の自己署名証明書を作成しています。Common NameとしてAWS IoT から取得した、registration code を入れています。(Edukitが採用している Microchip ATECC608 Trust&GO の仕組みでは、必ずしも Common Name に registration code を入れる必要が無いきがします… 量産時にはMicrochipから各ATECC608のManifestを取得可能です)とはいえ変える必要も無いのでそのままにしておきます。
-
esp_hs.generate_manifest_file(esp, args, init_mfg)
- 予め書き込まれているデバイス証明書を取得して、device_cert.pemとして保存しているようです。
- デバイスを登録するためのManifestを作成し、その中に、上記のデバイス証明書も含まれています。
- このコードが呼ばれています。 https://github.com/espressif/esp-cryptoauthlib/blob/master/esp_cryptoauth_utility/helper_scripts/manifest.py#L108
-
upload_manifest()
- 上記で作成したManifestの情報をもとに、AWS IoTに証明書の登録およびPolicyのアタッチ、Thingの作成とアタッチあたりを行っています。
- このコードが呼ばれています:
- https://github.com/MicrochipTech/cryptoauth_trustplatform_designsuite/blob/ab3ac33d0d69373b2cf4f89211e2df56e9071407/TrustnGO/05_cloud_connect/notebook/aws/Microchip_manifest_handler.py#L220
実際に、AWS IoTのマネコンで上記の設定が反映されていることを確認できます。
3. Smart Thermostat
このセクションに限りませんが、様々なドライバーが実装済みなので、色々遊べそうです。LicenseはApache2.0なので、この部品そのまま使える場合はソフト屋さんは楽かも…
xTaskCreatePinnedToCore
という関数でTaskを作っています。FreeRTOSのxTaskCreateと似ていますが、引数でコアが指定できるようになっています。タスクごとに異なるCoreを使って処理を効率化することもできそうです。
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html
Trust&Goの証明書は、ここでセットされているようです。Portingレイヤーで処理されているので、アプリ開発時に気にすることが少なくなっています。
ESP_LOGI(TAG, "Attempting to use device certificate from ATECC608");
ret = atca_mbedtls_cert_add(&(tlsDataParams->clicert), cert_def);
その他のHSMを使用した場合の差分は、このDefineをGrepして見ていくと分かりそうです。
#ifdef CONFIG_AWS_IOT_USE_HARDWARE_SECURE_ELEMENT
以降は後ほど…
Author And Source
この問題について(Edukit を MacOS で試す), 我々は、より多くの情報をここで見つけました https://qiita.com/tatsuhiroiida/items/ec9afa04d70788dadad3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .