組込み開発 基本のキ:暗号技術の仕組み

組込み開発 基本のキ:暗号技術の仕組み
組込み開発 基本のキ:暗号技術の仕組み

デイビッド・ウォン著、⾼橋 聡 訳、⽇経クロステックの4記事:暗号技術の要旨をまとめました。

組込み開発と暗号技術

暗号技術は、数学が基礎です。暗号を使えば、秘密が守られることを科学的に立証する必要があるからです。しかし、暗号を使う立場の組込み開発者は、数式よりも、暗号の仕組み理解の方が重要です。

仕組み中心の暗号技術解説記事が、下記⽇経クロステック4記事です。組込み開発 基本のキ、暗号仕組み理解に丁度良いと思います。各記事の要旨を抜粋します。

内容 発行日
秘密鍵の仕組み 2022年7月7日
ケルクホフスの原理 2022年7月8日
公開鍵暗号の仕組み 2022年7月12日
RSAデジタル署名 2022年7月13日

秘密鍵の仕組み

誰にでも読める平文を、暗号文へ変換する時に使う鍵が、秘密鍵。暗号文を元の平文へ復号する時も「同じ秘密鍵」を使う。

この送受双方の同じ秘密鍵利用が、対称秘密鍵暗号方式。送受参加者が多いと、鍵が漏洩するなど実用性低下の欠点もあるが、古代より使われてきた。

ケルクホフス原理

暗号/複合時に用いるアルゴリズムは、一般に公開しても良い。例えば、ウェブページ閲覧時のAES(Advanced Encryption Standard:⾼度暗号化標準)など。

公開アルゴリズムのセキュリティを保証する手段が、秘密鍵。

公開鍵暗号の仕組み

送受それぞれ「別の秘密鍵」と、「公開できる鍵」の2種類を使うと、送信側の秘密鍵が受信側で計算可能。これが、「非対称」の公開鍵暗号方式で、対称秘密鍵暗号方式の欠点を解消。

記事の公開図形と秘密鍵の計算例が解りやすい。

但し非対称公開鍵暗号方式は、第3者による公開鍵すり替えが可能なので、信頼性の問題は解決されない。

RSAデジタル署名

信頼性問題を解決するのが、デジタル署名。公開鍵を使って、送信者の署名が本物か偽物が検証可能。RSA以外にもデジタル署名方式あり。

このデジタル署名と非対称公開鍵暗号方式の両方を使うのが、現代の暗号化アルゴリズム全体像。

まとめ:仕組み理解でセキュリティ進化へ順応

暗号技術の仕組み理解でセキュリティ進化へ順応
暗号技術の仕組み理解でセキュリティ進化へ順応

インターネットに接続するIoT MCUには、通信セキュリティ対策は不可欠です。MCU開発側からすれば、当該セキュリティライブラリを、開発ソフトウェア/ハードウェアへ組込めば完了と思いがちです。

しかしながら、セキュリティ対策には、終わりがありません。新攻撃に対し、新たな暗号方式が登場します。MCU開発者が、複雑・高度化する暗号技術へ対応し、セキュリティ進化に追随するには、その仕組み理解は欠かせません。

本稿は、現代暗号化アルゴリズム、非対称公開鍵暗号方式とデジタル署名を説明しました。古代からの暗号技術は、インターネット出現により高度で複雑化しました。要旨の抜粋で判り難い箇所は、元記事も参照してください。

組込み開発 基本のキ:暗号技術の仕組みを理解し、IoT MCUセキュリティ進化へ順応しましょう。

組込み開発 基本のキ 過去投稿

組込み開発 基本のキ:組込み処理
組込み開発 基本のキ:RTOS vs. ベアメタル

組込み開発 基本のキ:RTOS vs. ベアメタル

RTOS vs. BareMetal
RTOS vs. BareMetal

2022年最初の投稿は、RTOSとベアメタルを比較します。RTOSを使わないベアメタルMCU開発者が多いと思いますので、RTOS開発メリット/デメリットをベアメタル側から評価、RTOSデバッグツール紹介とベアメタル開発の意味を考えました。

RTOS目的

Flexible Software Package構成
Flexible Software Package構成

ルネサスRAファミリのFlexible Software Package構成です。左上Azure RTOSやFreeRTOSの中に、ConnectivityやUSBがあります。これらMCU共有資源を管理するシステムソフトウェアがOSで、PCのWindowsやMac、Linuxと機能的には同じです。

Real-Time性が必要な組込み用OSをRTOSと呼び、FreeRTOSやAzure RTOSが代表的です。これは、IoT MCU接続先が、Amazon Web Services(AWS)クラウドならばFreeRTOSライブラリ、Microsoft AzureクラウドならAzure RTOSライブラリ(図のConnectivity)利用が前提だからです。

※2021年のIoTクラウドシェアは、コチラの関連投稿からAWS>Azure>GCPの順です。

RAファミリに限らず、クラウド接続のIoT MCUは、これらRTOSライブラリを使ったRTOS開発になります。

RTOSメリット/デメリット

例えば、ベアメタルでUSB制御を自作する場合は、USB 2.0/3.0などの種類や速度に応じた作り分けが必要です。ライブラリがあるRTOSなら、USBポートへの入出力記述だけで利用可能です。RTOSが共有資源ハードウェア差を吸収し、アプリケーションが使い易いAPIを提供するからです。

RTOSの資源管理とは、MCUコア/Flash/RAM/周辺回路/セキュリティなどの共有資源を、アプリケーション側から隠蔽(≒ブラックボックス化)すること、とも言えます。

RTOSアプリケーションは、複数タスク(スレッドと呼ぶ場合もあり)から構成され、タスク間の優先制御もRTOSが行います。開発者は、単体処理タスクを複数開発し、それらを組み合わせてアプリケーションを構成します。RTOSアプリケーション例が下図、灰色が開発部分、コチラが関連投稿です。

Data flow diagram for a smart thermostat(出展:JACOB'S Blog)
Data flow diagram for a smart thermostat(出展:JACOB’S Blog)

RTOS利用メリット/デメリットをまとめます。

メリットは、

・RTOSライブラリ利用により共有資源活用タスク開発が容易
・移植性の高いタスク、RTOSアプリケーション開発が可能
・多人数開発に向いている

デメリットは、

・複数タスク分割や優先順位設定など、ベアメタルと異なる作り方が必要
・共有資源、特にRAM使用量がタスク数に応じて増える
・RTOS自身にもバグの可能性がある

簡単に言うと、RTOSとベアメタルは、「開発作法が異なり」ます。

ソフトウェア開発者は、RTOS利用と引換えに、自己流ベアメタル作法を、RTOS作法へ変えることが求められます。RTOS作法は、標準的なので多人数での共同開発が可能です。もちろん、ベアメタルよりもオーバーヘッドは増えます。このため、RTOS利用に相応しい十分なMCUコア能力も必要です。

RTOSタスク開発 vs. ベアメタルアプリケーション開発

最も効果的なRTOS作法の習得は、評価ボードを使って実際にRTOSタスク開発をすることです。弊社FreeRTOSアプリケーションテンプレートは、この例です。

それでも、RTOSタスク開発作法を文章で記述すると、以下のようになります。

開発対象がアプリケーションからタスク(スレッド)へ変わることが、ベアメタルとの一番の違いです。Windowsタスクバーにあるフィルダ表示や、ペイントなどと同様、タスクは、単機能の小さいアプリケーションとも言えます。

このタスクを複数開発し、複数タスクを使ってRTOSアプリケーションを開発します。タスクには、それぞれ優先順位があり、他のタスクとの相対順位で実行タスクがRTOSにより決まります。タスクの状態遷移が、RTOSへの備え:第2回、タスク管理で示した下図です。

FreeRTOS Task States
FreeRTOS Task States

ベアメタルアプリケーションとは異なり、優先順位に応じてタスクが実行(Running)され、その実行も、定期的に実行可能状態(Ready)や待ち状態(Suspended)、停止状態(Blocked)へRTOSが変えます。これは、リアルタイムかつマルチタスク処理が、RTOSの役目だからです。遷移間隔などは、RTOS動作パラメタが決めます。

ベアメタル開発は、開発者が記述した通りに処理が実行されますが、RTOS開発のタスク実行は、RTOS任せです。RTOS開発難易度の上がる点が、ここです。

一般的なIoT MCUは、シングルコアですので、実行タスク数は1個、多くの他タスクは、Not Running(super state)状態です。RTOSがタスクを実行/停止/復活させるため、スタックやRAM使用量が急増します。

これら文章を、頭の中だけで理解できる開発者は、天才でしょう。やはり、実際にRTOSタスクを開発し、頭の中と実動作の一致/不一致、タスク優先順位やRTOS動作パラメタ変更結果の評価を繰返すことで、RTOS理解ができると凡人筆者は思います。

ベアメタル開発者が手早くRTOSを理解するには、既にデバッグ済みの複数RTOSタスク活用が便利で、FreeRTOSアプリケーションテンプレートは、この要求を満たしています。概要は、リンク先から無料ダウンロードできます。

文章でまとめたFreeRTOS解説が、コチラの弊社専用ページにあります。また、本ブログ検索窓にFreeRTOSと入力すると、タスク開発例などが参照できます。

RTOSデバッグツール

percepio tracealyzer
percepio tracealyzer

さて、RTOS作法に則ってタスク開発し、RTOS動作パラメタも適切に設定しても、思ったように開発タスクが動作しない時は、ブラックボックスRTOS自身のバグを疑う開発者も多いでしょう。RTOSのバグ可能性もありえます。

この疑問に対して強力にRTOS動作を解析できるFreeRTOSデバッグツールがあります。資料が無料でダウンロードできますので、紹介します。

※このツールを使うまでもなく、弊社FreeRTOSアプリケーションテンプレートは、正常動作を確認済みです。

まとめ:RTOS vs. ベアメタル

IoT MCUのクラウド接続 → 接続クラウド先のRTOSライブラリ必要 → RTOSライブラリ利用のRTOS開発が必要、という関係です。

RTOS開発は、ベアメタルと開発作法が異なる複数タスク開発です。タスクは、優先順位に応じてRTOSがMCU処理を割当てます。また、MCU共有資源がRTOSアプリケーションから隠蔽されるため、移植性が高く多人数での大規模開発にも向いています。

一方で、RTOSオーバーヘッドのため、ベアメタルよりも高いMCU能力が必要です。

シングルコアMCUでは、RTOSとベアメタルのハイブリッド開発は困難です。開発者がRTOSを利用するなら、慣れたベアメタル開発から、RTOSタスク開発への移行が必要です。

ベアメタル開発経験者が、効果的にRTOSタスク開発を習得するには、評価ボードと複数RTOSタスクが実装済みの弊社RTOSアプリケーションテンプレートの活用をお勧めします。

ベアメタル開発意味

RTOSのタスク処理待ち(セマフォ/Queue)を使うと、ベアメタルよりも排他/同期制御が簡単に記述できます。それでも、全てのMCU開発がRTOSへ移行することは無いと思います。様々なセンサデータをAD変換するエッジMCUは、ベアメタル開発、エッジMCUを複数個束ねクラウドへ接続するIoT MCUは、RTOS開発などがその例です。

MCU開発の基本は、やはりRTOS無しの「ベアメタル開発」です。

IoT MCU開発者スキルの階層構造
IoT MCU開発者スキルの階層構造

ベアメタル開発スキルを基にRTOSを利用してこそ、RTOSメリットを活かしたタスクやアプリケーション開発ができます。共有資源ブラックボック化、多人数開発のReal-Time OSは、「ベアメタル開発の補完」が起源です。

PC OSとは全く逆のこの生い立ちを理解していないと、効果的なRTOS利用はできません。近年MCU性能向上は著しいのですが、向上分をRTOSだけに振り分けられる程余裕はなく、IoTセキュリティなどへも配分する必要があります。

この難しい配分やRTOS起因トラブルを解決するのが、ベアメタル開発スキルです。弊社マイコンテンプレートは、主要ベンダのベアメタル開発テンプレートも販売中、概要ダウンロード可能です。

組込み開発 基本のキ:バックナンバー

2022年最初の投稿に、筆者にしては長文すぎる(!?)のRTOS vs. ベアメタルを投稿したのは、今年以降、RTOS開発が急速に普及する可能性があるからです。

クラウド接続からRTOS必要性を示しましたが、セキュリティなど高度化・大規模化するIoT MCU開発には、移植性の高さや多人数開発のRTOSメリットが効いてきます。

また、半導体不足が落ち着けば、RTOS向き高性能MCUの新しいデバイスが、各ベンダから一気に発売される可能性もあります。スマホ → 車載 → IoT MCUが、半導体製造トレンドです。

※現状のMCUコア関連投稿が下記です。
Cortex-M33とCortex-M0+/M4の差分
Cortex-M0からCortex-M0+変化
Cortex-M0/M0+/M3比較とコア選択

IoT MCU開発が複雑化、高度化すればする程、前章のベアメタル開発や、組込み開発の基礎技術:基本のキの把握が、開発者にとって益々重要になります。

組込み開発、基本のキ:バックナンバーを示します。年頭、基本を再確認するのはいかがでしょう?
組込み開発 基本のキ:組込み処理
組込み開発 基本のキ:IoT MCUセキュリティ



組込み開発 基本のキ:組込み処理

IoT MCUソフトウェア/ハードウェア開発者向け基本のキ、今回は、組込み処理の「ポーリング」、「割込み」、「低消費電力動作」とMCU開発の秘訣(コツ)を示します。ベアメタル開発でもRTOS開発でもこれらは同じです。これら基本を知ると、サンプルコードの読み方、利用法も解ります。

ポーリング と 割込み

「ポーリング」とは、無限ループを周る度に例えばSWが押されたかどうかのフラグ相当をポーリング(polling)し、フラグが立ったら、その処理を実行することです。

ポーリング
ポーリング

「割込み」は、割込み発生時に周辺回路が自動で呼出すISR(Interrupt Service Routine)を開発します。

ISRは、出来るだけ軽く(小さく)することが重要です。別周辺回路の割込みもできるだけ取込むためです。そこでISRでは、周辺回路が割込み発生時に立てた割込み発生フラグをリセット、このフラグとは別の割込み処理待ちフラグを立ててコード化するのが常套手段です。

この割込み処理待ちフラグを無限ループでポーリング、ブラグが立っていれば実際の割込み処理を実行します。

つまり、割込み処理の前段階にISRがあり、ポーリングのフラグ相当が割込み処理待ちフラグに変るだけ、結局、ポーリングに帰着します。

割込み
割込み

ベアメタル開発でもRTOS開発でも上記は同じです。RTOS時は、タスク間のセマフォ/Queueによる処理待ちが差分として追加されます(これら以外にも処理待ちはありますが、セマフォ/Queueで当面賄えます)。

低消費電力動作

無限ループをそのまま連続で回し続けると消費電力が増加します。そこで、間欠的にループを回し、ループを回さない時間は、最も電力を消費するMCUを停止するのが「低消費電力動作」です。

低消費電力動作
低消費電力動作

例えば1秒毎に1回ループを回すなど、低電力化を図りつつループ連続回しの時と大差なく処理する、つまり、どの程度間欠動作させるかが開発者の腕の見せ所です。

まとめ:ポーリング、割込み、低消費電力動作の3Tipsと開発秘訣

IoT MCUで開発するのは、MCUを含む周辺回路の初期設定と、無限ループ内の処理です。

初期設定とは、内蔵周辺回路を動作させるための設定です。周辺回路は、初期設定が終わると直に動作を開始します。そこでMCUは、動作中の周辺回路を監視し、必要に応じて処理を行います。このMCU監視が、無限ループ内の処理です。「組込み処理の中身」は、このように初期設定とループ内処理の2種類です。

初期設定の前にRAMクリアなどのスタートアップ処理もありますが、ここはIDEが自動生成し、通常、開発者が手を加えることは殆どありません。

初期設定は、サンプルコードの初期設定をそのまま流用する部分です。サンプルコードに使用例がない特殊(!?)な周辺回路の使い方をする時は、データシートやユーザマニュアルの当該周辺回路部分を熟読すればコード化できます。

次の開発部分が、無限ループ内です。ループ内処理をまとめた本稿の3Tipsが下記です

  1. 無限ループ内は、「ポーリング」か「割込み」のどちらか
  2. 割込みは、ISRで「割込み発生フラグ」を「割込み処理待ちフラグ」へ事前変換しポーリングへ帰着
  3. 無限ループの間欠動作と、間欠中のMCU停止が、「低消費電力動作」
組込み処理の3Tips、ポーリング、割込み、低消費電力動作
組込み処理の3Tips、ポーリング、割込み、低消費電力動作

組込み処理の中身とこれら3Tipsを知らずに組込み開発を始めるは、非効率です。中身と3Tipsを習得するには、紆余曲折、結構な時間と実務(失敗)経験が必要だからです。

例を挙げると、技術背景が少ない初心者にとっては、関連情報が多いため消化不良を起こします。また、初心者でなくても、開発自由度が高い(≒無いに等しい)ので、開発を上手く収束させには、Tipsやコツが必要になるなどです。

全てを網羅的に記述しているデータシートやユーザマニュアルは、既にこれらコツや技術背景を習得済みの中級者以上には役立ちますが、それ以外の人が読んでも実質の理解はできません。いきなり六法全書を読んで弁護士をする様なものです😂。

MCU開発の秘訣(コツ)は、先ず、3Tipsを基にプロトタイプを開発し、次に、実際に動作するプロトタイプを使って、開発自由度の高さを活かし動作チューニングすることです。

実働プロトタイプがあれば、データシート実質理解も進みますし、チューニング結果で変な動作になっても元のプロトタイプへ戻れますので、安心して色々な試行錯誤ができ、開発者スキルアップも容易です。

サンプルコード利用法

主要MCUベンダは、多くのサンプルコードを提供中です。

サンプルコードの目的は、“1つ”の周辺回路の基本動作を解り易く示すことです。基本動作は、初期設定と無限ループ内の2つに分けて読みます。無限ループ内は、Tips1/2から処理内容が理解できます。割込みの時は、ISRがあります。

初期設定は、開発に使う使用例と同じかどうかを添付コメントなどから判断します。使用例が同じ、または、近いなら、そのままコピーして流用します。内容を理解したい時は、”その周辺回路のデータシートのみ”を読めば十分です。

もちろん、サンプルコード無限ループ内のポーリング/割込み処理もそのままコピーして流用可能です。

但し、サンプルコードは、一般的にTips3:低消費電力動作への配慮がありません。また、サンプルコードを、“複数”集めて動作させる作り方ではありません。1周辺回路の動作コードを、シンプルに解り易く示すためです。

弊社マイコンテンプレートは、複数サンプルコードを利用する仕組みを予め持っています。また、無限ループの間欠動作と停止MCUを復帰させる仕組みも、テンプレートへ組込み済みです。

テンプレートのサンプルコード利用法
テンプレートのサンプルコード利用法

つまり、初めから複数サンプルコードの活用・流用が即座に出来るようテンプレート化、主要ベンダの汎用MCUに対応し、適用例と詳しい説明資料付き(一部ダウンロード可)で販売中です(ベアメタル開発用:1000円、RTOS開発用:2000円、テンプレート一覧と価格はコチラ)。

本稿3Tipsを知っていれば、サンプルコードを分析しながら読むことができ、必要に応じて各部分を自分のソフトウェアや弊社テンプレートへ組込むことも可能です。

プロトタイプ開発に最適なのが、弊社テンプレートです。テンプレートを使って早期にプロトタイプ開発を実現すれば、開発者の効率的スキルアップ、要求仕様に対するMCU性能過不足なども明らかとなり、お役に立てると思います。

テンプレートご購入、お待ちしております。

組込み開発 基本のキ:IoT MCUセキュリティ

本稿は、IoT MCUソフトウェア/ハードウェア開発者向けTipsで、「MCU開発基本のキ」シリーズの第1回目です。MCUベンダ横断的に開発ポイント、Tipsなどを不定期に投稿します。

今回は、そもそもIoT MCUに、なぜセキュリティが必要かという最も基本的な点について示します。

幅広い技術がIoT MCU開発者には必要です。しかし、全てを理解し、時々刻々変化する状況に対応するには時間がいくらあっても足りません。情報が多く幅広いからこそ、短時間で効率的なIoT MCU開発のためのポイントやTipsが必要です。

このポイントやTipsについて筆者個人の考え方を示します。これを、たたき台にして、ブログ読者の方々の考え方に発展・貢献できれば幸いです。

接続とセキュリティ

インターネット接続とセキュリティ
インターネット接続とセキュリティ

IoT MCUは、インターネットなどに接続し動作することが前提です。

人がネットに接続する時は、事前にアカウント登録し、IDやパスワードなどの登録情報を接続時に手入力、ネット側で受信データと事前登録情報と比較し接続を許可します。

IoT MCUは、人の手入力の代わりに自動で登録情報をネット送信することで接続します。この時大切なのが、IoT MCU内部に保存済みの登録情報です。登録情報をサイバー攻撃やハッカーから守る手段がIoT MCUセキュリティです。

ハッカー、セキュリティ、OTA

ハッカーとセキュリティは、「いたちごっこ」を繰返します。

例えば、コチラのFirefox 91とWindows 10規定ブラウザー設定、Windows 11で更に複雑化する設定がその例です。この場合、ハッカー役がFirefox、セキュリティ役がWindow設定です。

様々なIoT MCUセキュリティ手段がありますが、ポイントは、守りは攻めに対する対処療法なので守りの追加や更新が必要となる点です。

つまり、個々のセキュリティ手段を知ることよりも、何を(IoT MCUの登録情報や秘密鍵などの重要情報)どのように守るかの方がより重要です。ソフトウェアによる守りよりもより強固な内蔵ハードウェアで重要情報を守るのが、ARM Cortex-M33コアのTrustZoneです。

いたちごっこの終息策として、MCU内蔵TrustZoneとその制御ソフトウェアを採用した訳です。

Windows 11で導入されるTPM 2.0も、TrustZone相当です。しかし、TPM保護PCから情報を抜出す方法という記事もあります。セキュリティには終わりが無いと言っても良いでしょう。

終わりが無いので、OTA(Over The Air)によりセキュリティ手段の追加や制御方法更新が必要になる訳です。OTAは、IoT MCUセキュリティ追加更新が本来の目的で、ソフトウェアバグ修正は副次的だと思います。

接続伝送路エラー訂正

無線であれ有線であれ、ネット接続の伝送路にノイズ混入の可能性があります。ただ、IoT MCUセキィリティが正常か異常かの判断は、受信データにノイズ(誤り)が無いことが前提です。

そこで、受信側に、受信データに混入ノイズを除去する機能があれば便利です。

2021年9月9日、米)MITは、あらゆる種類のデータ誤り検出し訂正するGuessing Random Additive Noise Decoding (GRAND)採用のハードウェアデコーダを開発しました。128ビットまでのコードを約1u秒でデコードでき、高速通信規格5GやIoT分野での利用が期待されています。

まとめ:IoT MCUセキュリティ3Tips

  1. ネット接続が前提のIoT MCUには、サイバー攻撃から内蔵重要情報を守るセキィリティ必須
  2. セキュリティは、対処療法なので機能追加更新OTA必須
  3. より強固に重要情報を守るTrustZone、受信データ誤り検出訂正GRANDデコーダなどのセキュリティ対策ハードウェアが、IoT MCU要件になる可能性あり

IoT MCUセキュリティ用語、関連性、対策ハードウェアがご理解頂けたと思います。
※TrustZoneに似たハードウェアに、ルネサス:Trusted Secure IP(TSIP)、STマイクロ:Secure Memoryなどもあります。

セキュリティは終わりがありません。どの程度のセキュリティをIoT MCUへ実装すれば良いかを検討するには、IoTセキュリティ手引書やPlatform Security Architecture: PSA Certified認証制度などが参考になります。

但し、IoT MCU開発者に解り易いかと言えば、正直疑問も感じます。そこで、IoT MCUセキュリティ関連で、最低限開発者が押さえておくべき3項目をまとめました。

特に項目3は、初めからIoT MCUに実装済みでないと後付けやOTA更新ができません。今後の欧米IoT規格や総務省動向にも注意を払う必要があるでしょう。

補足:IoTセキュリティコスト

筆者利用ネットカフェPCのWindows 11対応チェック結果を抜粋したのが下図です。2PCのみ抜粋しましたが、他PCも同様で、全項目OKのPCは皆無でした。弊社PCも3PC中1台のみ全OKですので、Windows 11無償アップグレード可能PCは、Windows 10 PCの30%以下になりそうです。

ネットカフェのWindows 11対応チェック結果
ネットカフェのWindows 11対応チェック結果

Windows 10サポート終了の2025年10月以降、多くのWindows 10セキュリティが低下し、サイバー攻撃に弱くなります。セキュリティ対サイバー攻撃コストを示すのは大変でしょうが、Microsoftは示す責任があると思います。

同様にIoT MCU顧客もセキュリティ対策コストを望むと思います。ちなみに、Cortex-M4比、Cortex-M33 TrustZone MCUは、2倍工数必要が弊社見解です(関連投稿:Cortex-M33とM0+/M4の差分の3章)。