MacOS에서 Edukit을 사용해보십시오.

edukit을 시도했으므로 궁금한 점을 기록해 둡니다.

EduKit 정보
htps : // 아 ws. 아마존. 이 m / jp / 아보 t-a ws / u ts- w / 2020/12 / nt t 로즈신 g

핸즈온
htps : // 에즈키 t. rk 쇼 p. 아ws/엔/
이쪽의 핸즈온을 시험해 갑니다.

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 를 넣을 필요가 없어집니다… 그래서 그대로 둡니다.


  • esp_hs.generate_manifest_file(esp, args, init_mfg)
  • 미리 기입해진 디바이스 증명서를 취득해, device_cert.pem로서 보존하고 있는 것 같습니다.
  • 디바이스를 등록하기 위한 Manifest를 작성해, 그 안에는, 상기의 디바이스 증명서도 포함되어 있습니다.
  • 이 코드를 호출합니다. htps : // 기주 b. 이 m / e sp ret f / e sp-cryp와 맞는 th ぃ b / b ぉ b / 마s r / e sp_cryp와 맞는 th_ 우치 ty / 헬퍼_sc pts / 마니후 st. 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


  • 실제로 AWS IoT의 매니콘이 위의 설정을 반영하는지 확인할 수 있습니다.



    3. Smart Thermostat



    이 섹션에 한정되지 않습니다만, 다양한 드라이버가 실장이 끝났으므로, 여러가지 놀 수 있을 것 같습니다. License는 Apache2.0이므로, 이 부품 그대로 사용할 수 있는 경우는 소프트 가게는 편할지도…


    xTaskCreatePinnedToCore라는 함수로 Task를 만들고 있습니다. FreeRTOS의 xTaskCreate와 비슷하지만 인수로 코어를 지정할 수 있습니다. 태스크마다 다른 Core를 사용해 처리를 효율화할 수도 있을 것 같습니다.
    htps : // / cs. 예 sp. f. 이 m/p로지ぇcts/에 sp-이 df/엔/ㄴ테 st/에 sp32/아피구이로 s/f레에 r과 s-smp. HTML

    Trust&Go 인증서는 여기에 설정된 것 같습니다. Porting 레이어에서 처리되므로 앱 개발 시 신경 쓰는 일이 적습니다.

    port/network_mbedtls_wrapper.c
                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
    

    이후는 나중에…

    좋은 웹페이지 즐겨찾기