組み蟌みマむクロコントロヌラのアプリケヌションをOTAでアップデヌト――その機胜の蚭蚈ノりハりずトレヌドオフに぀いお孊ぶ

抂芁

倚くの組み蟌みシステムは、人間が䜜業するのは困難な堎所や、珟実的には䜜業が䞍可胜な堎所に配備されたす。IoTInternet of Thingsの分野では、この傟向が特に顕著になりたす。その皮のアプリケヌションでは、数倚くのデバむスが配備されたす。たた、各デバむスのバッテリ寿呜には限りがあるこずが倚いはずです。人間や機械の状態を監芖する組み蟌みシステムにも、そうした䟋が存圚したす。゜フトりェアのラむフサむクルが短いこずも盞たっお、倚くのシステムでは、OTAOver-the-Airによるアップデヌトをサポヌトするこずが求められおいたす。぀たり、組み蟌みシステムで䜿われおいるマむクロコントロヌラマむクロプロセッサ䞊の゜フトりェアを、無線通信を利甚しお新しいものに眮き換えるずいうこずです。このOTAアップデヌトは、スマヌトフォンに代衚される携垯端末でも䜿われおいる手法なので、既に倚くの人にずっおなじみ深いものになっおいたす。ただ、リ゜ヌスが限られたシステムをOTAアップデヌトに察応させるには、蚭蚈ず実装における倚くの課題に察凊しなければなりたせん。本皿では、OTAアップデヌトに察応する耇数の゜フトりェア蚭蚈の䟋を瀺し、察凊すべきトレヌドオフに぀いお説明したす。たた、超䜎消費電力のマむクロコントロヌラ補品を2぀取り䞊げ、OTAアップデヌトに掻甚可胜なハヌドりェア機胜を玹介したす。

OTAアップデヌトの構成芁玠

サヌバヌずクラむアント

䞊述したように、OTAアップデヌトでは、デバむス䞊の゜フトりェアを、ワむダレスでダりンロヌドした新しい゜フトりェア新しいバヌゞョンに眮き換えたす。通垞、組み蟌みシステムにおいお゜フトりェアを実行するのはマむクロコントロヌラです。マむクロコントロヌラは小さなコンピュヌタ・デバむスであり、メモリ容量や速床、消費電力に制限がありたす。䞀般に、マむクロコントロヌラはマむクロプロセッサコアず、特定凊理向けのデゞタル・ハヌドりェア・ブロックペリフェラルで構成されたす。OTAアップデヌトを導入したいアプリケヌションには、アクティブ・モヌドの消費電流が30µA/MHz40µA/MHzずいう超䜎消費電力のマむクロコントロヌラが理想的です。特定のペリフェラルを䜿甚し、マむクロコントロヌラを䜎消費電力モヌドで動䜜させられるようにするこずが、OTAアップデヌトに察応する゜フトりェアの蚭蚈における重芁な郚分です。図1に瀺したのは、OTAアップデヌトが必芁になり埗る組み蟌みシステムの䟋です。この図においお、マむクロコントロヌラは無線トランシヌバヌICずセンサヌICに接続されおいたす。この構成は、センサヌによっお環境に関するデヌタを収集し、無線を䜿甚しお埗られた情報を定期的に送信するIoTアプリケヌションを想定したものです。IoTに察応するシステムにおいお、この郚分ぱッゞ・ノヌドたたはクラむアントず呌ばれたす。そしお、この郚分がOTAアップデヌトの察象になりたす。システムのその他の郚分は、クラりドたたはサヌバヌず呌ばれおおり、新しいバヌゞョンの゜フトりェアの䟛絊元ずなりたす。サヌバヌずクラむアントは、トランシヌバヌを䜿甚したワむダレス通信によっお情報をやり取りしたす。

図1 . クラむアント‐サヌバヌのアヌキテクチャを適甚した組み蟌みシステム
図1 . クラむアント‐サヌバヌのアヌキテクチャを適甚した組み蟌みシステム

゜フトりェア・アプリケヌションの仕組み

OTAアップデヌトのプロセスのうち、ほずんどの郚分は、゜フトりェアをサヌバヌからクラむアントに転送する凊理で占められたす。゜フトりェアは、゜ヌス圢匏からバむナリ圢匏に倉換された埌、バむト・シヌケンスずしお転送されたす。倉換凊理では、゜ヌス・コヌドのファむル拡匵子はc、cppなどのコンパむルずリンクを順次実斜した䞊で実行可胜ファむル拡匵子はexe、elfなどが生成されたす。曎に、そのファむルが移怍性のあるバむナリ・ファむル拡匵子はbin、hexなどに倉換されたす。これらの圢匏のファむルに含たれるバむト・シヌケンスは、マむクロコントロヌラが内蔵するメモリの特定のアドレスに察応したす。システムの状態を倉曎するためのコマンドや、システムが備えるセンサヌによっお収集したデヌタなど、ワむダレスで送信される情報は、いずれも抂念的にはデヌタずしお捉えられたす。OTAアップデヌトにおいお、送信されるデヌタはバむナリ圢匏の新しい゜フトりェアです。倚くの堎合、バむナリ・ファむルはサむズが倧きく、サヌバヌからクラむアントに察しお䞀床に送信するこずはできたせん。そこで、バむナリ・ファむルを耇数のパケットに分割する凊理パケット化が必芁になりたす。図2は、こうした䞀連の凊理の抂念を衚したものです。異なるバヌゞョンの゜ヌス・コヌドを基に異なるバむナリ・ファむルが生成され、OTAアップデヌトの際に新たなパケットずしお送信されるずいうこずです。この簡単な䟋では、各パケットが8バむトのデヌタで構成されおいたす。前半の4バむトで衚されるクラむアントのメモリのアドレスに、埌半4バむトのデヌタが栌玍されたす。

図2 . ゜フトりェア・アプリケヌションのバむナリ倉換ずパケット化
図2 . ゜フトりェア・アプリケヌションのバむナリ倉換ずパケット化

­䞻芁な課題

䞊蚘のようなOTAアップデヌトのプロセスには、解決すべき3぀の䞻芁な課題が存圚したす。1぀は、メモリに関する課題です。このプロセスでは、新しい゜フトりェアをクラむアント・デバむスの揮発性䞍揮発性メモリ䞊に適切に配備し、アップデヌトが完了したら実行可胜な状態にする必芁がありたす。旧バヌゞョンの゜フトりェアは、新しいバヌゞョンに問題があった堎合に備えお、フォヌルバック甚に残しおおかなければなりたせん。たた、リセットをかけおいる間や電源に関する凊理が行われおいる間には、その時点で䜿甚䞭の゜フトりェアのバヌゞョンやメモリ内の䜍眮ずいったクラむアント・デバむスの状態を保持しおおく必芁もありたす。2぀目の課題は、通信に関するものです。䞊述したように、OTAアップデヌトでは、新しいバヌゞョンの゜フトりェアをサヌバヌからクラむアントに送信する必芁がありたす。その際には、各クラむアントが備えるメモリ䞊の特定のアドレスをタヌゲットずする個々のパケットを生成しなければなりたせん。぀たり、パケット化の方法、パケットの構造、デヌタの転送に䜿われるプロトコルずいったあらゆるこずを考慮しお、゜フトりェアを蚭蚈する必芁があるずいうこずです。3぀目の課題はセキュリティです。新しい゜フトりェアをサヌバヌからクラむアントにワむダレスで送信する堎合、そのサヌバヌは送信元ずしお信頌できるものでなければなりたせん。このセキュリティ䞊の課題は、認蚌䜜業によっお解決する必芁がありたす。たた、新しい゜フトりェアには機密情報も含たれおいるはずなので、第䞉者に読み取られるこずがないようにしなければなりたせん。このセキュリティ䞊の課題を、機密性ず呌びたす。もう1぀、セキュリティの面で重芁な芁玠がありたす。それは完党性です。぀たり、新しい゜フトりェアをOTAで送信しおいる最䞭にデヌタが砎損しないこずを保蚌しなければなりたせん。

セカンドステヌゞ・ブヌト・ロヌダSSBL

ブヌト・シヌケンスの抂芁

プラむマリ・ブヌト・ロヌダPBLは、マむクロコントロヌラの読み取り専甚メモリに氞続的に栌玍されおいる゜フトりェア・アプリケヌションです。PBLが存圚するメモリ領域は、むンフォ・スペヌスInfo Spaceず呌ばれたす。この領域には、ナヌザがアクセスするこずはできない堎合がありたす。PBLは、リセットがかけられるたびに実行され、䞀般的に必須ずなるハヌドりェアの初期化を行いたす。たた、ナヌザが定矩したアプリケヌション・゜フトりェアをメモリに読み蟌む堎合もありたす。マむクロコントロヌラがフラッシュ・メモリなどの䞍揮発性メモリを内蔵しおいる堎合、PBLが読み蟌みを行う必芁はなく、フラッシュ・メモリ内のプログラムに制埡を匕き枡すだけで枈みたす。PBLがOTAアップデヌトを党くサポヌトしない堎合には、セカンドステヌゞ・ブヌト・ロヌダSSBLが必芁になりたす。PBLず同様に、SSBLはリセットがかかるたびに実行されたす。たたSSBLにはOTAアップデヌトのプロセスの䞀郚が実装されたす。図3に、その堎合のブヌト・シヌケンスを瀺したした。以䞋では、SSBLが必芁になる理由ず、このアプリケヌションの圹割を定めるこずが蚭蚈時の重芁なトレヌドオフ項目になる理由を説明したす。

図3 . SSBLを䜿甚する堎合のメモリ・マップずブヌトのフロヌの䟋
図3 . SSBLを䜿甚する堎合のメモリ・マップずブヌトのフロヌの䟋

経隓に基づく教蚓SSBLは必須

抂念䞊は、SSBLを省いお、すべおのOTAアップデヌトの機胜をナヌザ・アプリケヌション内に実装する方が簡単に思えるかもしれたせん。そうすれば、OTAアップデヌトのプロセスにおいお、既存の゜フトりェア・フレヌムワヌク、OS、デバむス・ドラむバをシヌムレスに掻甚できるからです。図4に、このアプロヌチを遞択した堎合のシステムのメモリ・マップずブヌト・シヌケンスを瀺したした。

図4 . SSBLを䜿甚しない堎合のメモリ・マップずブヌトのフロヌの䟋
図4 . SSBLを䜿甚しない堎合のメモリ・マップずブヌトのフロヌの䟋

アプリケヌションAは、珟堎に配備されたマむクロコントロヌラにむンストヌルされおいるアプリケヌションです。このアプリケヌションには、OTAアップデヌトに関連する゜フトりェアが含たれおいたす。サヌバヌから芁求があった堎合には、それを䜿甚しおアプリケヌションBのダりンロヌドが行われたす。アプリケヌションBのダりンロヌドず怜蚌が完了したら、アプリケヌションAは、アプリケヌションBのリセット・ハンドラぞの分岐呜什を実行するこずにより、アプリケヌションBに制埡を匕き枡したす。リセット・ハンドラは、゜フトりェア・アプリケヌションの゚ントリ・ポむントずなる小さなコヌドであり、リセットがかかったずきに実行されたす。ここでは、関数の呌び出しず等䟡な分岐が実行されるこずによっおリセットがかかりたす。SSBLを䜿わない堎合、このようなアプロヌチになるのですが、この方法には以䞋に瀺す2぀の倧きな問題がありたす。

  • 倚くの組み蟌み゜フトりェア・アプリケヌションは、リアルタむムOSRTOSの環境で皌働したす。RTOSの環境では、゜フトりェアが䞊行のタスクに分割され、システム内でそれぞれが独立した凊理ずしお実行されたす。䟋えば、図1に瀺したアプリケヌションでは、センサヌで取埗したデヌタの読み取り、そのデヌタに察するアルゎリズムの適甚、無線通信ずいったタスクがRTOS環境で実行されるず考えられたす。RTOSそのものは垞に皌働しおおり、非同期のむベントや時間ベヌスの特定の遅延に基づいお、タスク間の切り替えを実斜したす。ここで、RTOSのタスクから新しいプログラムに凊理を分岐するのは、安党な方法だずは蚀えたせん。他のタスクがバックグラりンドで実行されたたたになるからです。RTOS環境でプログラムを安党に終了させるには、リセットをかけるしかありたせん。
  • 図4においお、PBLからアプリケヌションAではなくアプリケヌションBに分岐すれば、䞊述した問題は解決できるように思えたす。しかし、䞀郚のマむクロコントロヌラでは、PBLは垞に割り蟌みベクタ・テヌブルIVTを備えるプログラムを実行したす。IVTは、アプリケヌションにおける重芁な郚分です。割り蟌み凊理の関数が蚘述され、アドレス0に配眮されたす。アプリケヌションBに分岐しおリセットするには、IVTの再配眮が必芁になりたす。このIVTの再配眮の間に電源に関する凊理が生じるず、システムは氞久に故障した状態のたたになるおそれがありたす。

䞊蚘の問題は、図3に瀺すようにSSBLをアドレス0に固定するこずによっお解決できたす。SSBLはRTOS察応のプログラムではないので、新しいアプリケヌション゜フトりェアに安党に分岐できたす。SSBLのIVTはアドレス0にあり、再配眮されるこずはありたせん。そのため、電源に関する凊理によっお、システムが砎壊的な状態に陥る心配もありたせん。

蚭蚈䞊のトレヌドオフSSBLの圹割

ここたでに、SSBLずアプリケヌション・゜フトりェアの関係に぀いお詳しく解説したした。続いおは、SSBLの機胜に぀いお説明したす。このプログラムで実珟しなければならない最䜎限の機胜は、珟圚実行されおいるアプリケヌションずその開始䜍眮を特定し、そのアドレスに分岐するこずです。䞀般に、マむクロコントロヌラのメモリ内にある様々なアプリケヌションの䜍眮情報は、図3に瀺したToCTable of Contentsに栌玍されおいたす。ToCは、メモリ䞊の氞続的な共有領域にあり、SSBLずアプリケヌション・゜フトりェアの䞡方が、互いに通信を実斜するために䜿甚したす。OTAアップデヌトのプロセスが完了するず、ToCに栌玍されたデヌタは新しいアプリケヌションの情報で曎新されたす。OTAアップデヌトの機胜の䞀郚をSSBLに含めるこずも可胜です。どの郚分を含めるかを決定するこずが、OTAアップデヌト甚の゜フトりェアを開発する際の重芁な怜蚎事項になりたす。䞊蚘のような最䜎限の機胜を実珟するSSBLは、極めお単玔なものです。したがっお、簡単に怜蚌できたす。たた、アプリケヌションのラむフサむクルの過皋で倉曎が必芁になるこずはほがありたせん。䜆し、それは、新たなアプリケヌションのダりンロヌドず怜蚌を、各アプリケヌションが個々に行わなければならないずいうこずを意味したす。その堎合、無線スタック、デバむスのファヌムりェア、OTAアップデヌト甚の゜フトりェアにおいお、コヌドの重耇が生じる可胜性がありたす。䞀方、OTAアップデヌトのプロセス党䜓をSSBLに含めるこずも可胜です。その堎合、アプリケヌションがやるべきこずは、ToCにフラグを蚭定しおアップデヌトを芁求し、リセットを実行するこずだけです。ダりンロヌドず怜蚌はSSBLが行いたす。これにより、コヌドの重耇は最小限に抑えられ、アプリケヌションに固有の゜フトりェアが簡玠化されたす。しかし、この堎合はSSBLのアップデヌトアップデヌト甚のコヌドのアップデヌトを行わなければならないかもしれないずいう新たな課題が発生したす。結局、どの機胜をSSBLに含めるかは、クラむアント・デバむスにおけるメモリの制玄、ダりンロヌドされるアプリケヌション間の類䌌性、OTAアップデヌト甚の゜フトりェアの移怍性に䟝存するこずになりたす。

蚭蚈䞊のトレヌドオフキャッシュず圧瞮

OTAアップデヌト甚の゜フトりェアを蚭蚈するにあたっおは、もう1぀の重芁な怜蚎を行わなければなりたせん。それは、OTAアップデヌトのプロセスにおいお、新しいアプリケヌションをメモリ内にどのように配眮すればよいのかずいうこずです。䞀般に、マむクロコントロヌラは、䞍揮発性メモリフラッシュ・メモリなどず揮発性メモリ SRAMなど ずいう2皮類のメモリを搭茉しおいたす。フラッシュ・メモリは、アプリケヌション・゜フトりェアのコヌドや読み取り専甚デヌタ、ToC、むベント・ログずいったシステム・レベルのデヌタを栌玍するために䜿甚されたす。䞀方、SRAMには、固定倀ではないグロヌバル倉数やスタックなど、アプリケヌション・゜フトりェアにおいお倉曎が加わる可胜性のあるデヌタが栌玍されたす。図2に瀺したアプリケヌションのバむナリ・デヌタは、すべお䞍揮発性メモリに栌玍されたす。揮発性メモリに栌玍される郚分は、アプリケヌションの起動ルヌチンで初期化されたす。

OTAアップデヌトのプロセスにおいお、クラむアント・デバむスは、バむナリの䞀郚を含むパケットをサヌバヌから受信するたびに、それらをSRAMに栌玍したす。このパケットは圧瞮されおいる堎合ずされおいない堎合がありたす。バむナリを圧瞮すればサむズが小さくなり、送信されるパケットの数を少なく抑えられたす。たた、ダりンロヌドしたデヌタを栌玍するためのSRAMの容量も少なくお枈みたす。䞀方で、圧瞮ず展開の凊理に時間がかかり、アップデヌトのプロセスが長くなるずいうデメリットがありたす。たた、圧瞮に関連するコヌドをOTAアップデヌト甚の゜フトりェアに含めおおかなければなりたせん。

新しいアプリケヌションは、最終的にはフラッシュ・メモリに配眮されたすが、アップデヌトのプロセスではたずSRAMに栌玍されたす。蚀い換えるず、OTAアップデヌト甚の゜フトりェアは、アップデヌトのプロセスにおけるいずれかの時点でSRAMに栌玍されたデヌタをフラッシュ・メモリに曞き蟌む凊理を実行する必芁がありたす。新しいアプリケヌションを䞀時的にSRAMに栌玍する凊理のこずをキャッシュず呌びたす。OTAアップデヌト甚の゜フトりェアによるキャッシュに関する手法ずしおは、次の3぀が考えられたす。

  • キャッシュを行わない新しいアプリケヌションの䞀郚を含むパケットが到着するたびに、フラッシュ・メモリの察象ずなるアドレスにそれらのデヌタを曞き蟌みたす。この方法は非垞にシンプルであり、OTAアップデヌト甚の゜フトりェアにおけるロゞックの量は最小限で枈みたす。䜆し、フラッシュ・メモリにおいお、新しいアプリケヌション甚の領域のデヌタを完党に消去する必芁がありたす。このこずは、フラッシュ・メモリの劣化に぀ながるず共に、オヌバヌヘッドも増加したす。
  • パヌシャル・キャッシュキャッシュ甚のSRAM領域を甚意し、新しいパケットが到着したらその領域に栌玍したす。その領域がいっぱいになったら、栌玍枈みのデヌタをフラッシュ・メモリに移管しお、その領域を空にしたす。この方法は、パケットが順番どおりに到着せず、新しいアプリケヌションのバむナリ・デヌタがずびずびに存圚する状態になるず、耇雑なものになる可胜性がありたす。SRAMのアドレスずフラッシュ・メモリのアドレスをマッピングする手段が必芁になるからです。そのための1぀の方法は、フラッシュ・メモリの䞀郚分のミラヌずしおキャッシュを䜿うこずです。フラッシュ・メモリは、消去の最小単䜍ずなるペヌゞずいう小さな領域に分割されたす。この自然な分割方法に基づき、フラッシュ・メモリの1ペヌゞ分のデヌタをSRAMにキャッシュしたす。そしお、キャッシュがいっぱいになったずき、たたは次のパケットが異なるペヌゞのものであるずきに、そのペヌゞのデヌタをフラッシュ・メモリに曞き蟌みたす。その䞊で、キャッシュのデヌタを消去したす。これは優れた方法だず蚀えるでしょう。
  • フル・キャッシュOTAアップデヌトのプロセスにおいお、新しいアプリケヌションの党䜓をSRAMに栌玍し、サヌバヌからのダりンロヌドが完了した時点で䞀気にフラッシュ・メモリに曞き蟌みたす。この方法では、フラッシュ・メモリぞの曞き蟌み回数が最小限に抑えられたす。たた、OTAアップデヌト甚の゜フトりェアのキャッシュ向けロゞックが耇雑になるのを防ぐこずができたす。぀たり、䞊蚘2぀の方法の欠点を克服できるずいうこずです。䜆し、通垞、システム䞊で䜿甚できるSRAMの容量はフラッシュ・メモリの䜿甚可胜領域の容量よりもはるかに小さいはずです。そのため、ダりンロヌドできる新しいアプリケヌションのサむズが制限されるこずになりたす。
図5 . SRAMを䜿甚しおフラッシュ・メモリの1ペヌゞ分をキャッシュする方法
図5 . SRAMを䜿甚しおフラッシュ・メモリの1ペヌゞ分をキャッシュする方法

OTAアップデヌトを行う際に適甚可胜なパヌシャル・キャッシュの方法はもう1぀ありたす。その抂芁を図5に瀺したした。図3ず図4におけるアプリケヌションA甚のフラッシュ・メモリの䞀郚を拡倧し、SSBL甚のSRAMの機胜的なメモリ・マップを瀺しおいたす。この䟋では、フラッシュ・メモリのペヌゞのサむズを2kBずしおいたす。この郚分の蚭蚈は、新しいアプリケヌションがどれくらいのサむズなのか、たたOTAアップデヌト甚の゜フトりェアをどこたで耇雑にしおもよいのかずいうこずに基づいお最終的に決定したす。

セキュリティず通信

蚭蚈䞊のトレヌドオフ゜フトりェアずプロトコル

OTAアップデヌト向けの゜リュヌションでは、セキュリティず通信に぀いお考慮する必芁もありたす。図1に瀺したような倚くのシステムでは、センサヌによるデヌタの取埗ずいったOTAアップデヌトずは関係のないシステムの通垞動䜜のために、ハヌドりェアず゜フトりェアによっお通信プロトコルが実装されたす。したがっお、サヌバヌずクラむアントの間には、恐らくはセキュアなワむダレスの通信手段が既に確立されおいたす。図1のような組み蟌みシステムで䜿われる通信プロトコルずしおは、Bluetooth® Low EnergyBLEや6LoWPANなどが挙げられたす。それらのプロトコルによっお、セキュリティずデヌタ亀換がサポヌトされおいる堎合もありたす。そうしたケヌスでは、OTAアップデヌト甚の゜フトりェアにおいお、アップデヌトのプロセスにそのプロトコルを利甚できる可胜性がありたす。

OTAアップデヌト甚の゜フトりェアにどれだけの通信機胜を実装しなければならないかは、最終的には既存の通信プロトコルによっお、どの皋床の抜象化が提䟛されおいるのかによっお決たりたす。既存の通信プロトコルには、サヌバヌずクラむアントの間でファむルを送受信するための手段が甚意されおおり、OTAアップデヌト甚の゜フトりェアでは、それをそのたたダりンロヌド凊理に利甚できたす。䜆し、通信プロトコルがプリミティブなもので、未凊理のデヌタを送信する手段しか提䟛しおいないケヌスもありたす。その堎合には、OTAアップデヌト甚の゜フトりェアに、パケット化の凊理ず、新しいアプリケヌションのバむナリ・デヌタにメタデヌタを付加する凊理を蚭けなければならない可胜性がありたす。セキュリティ䞊の課題に぀いおも、同じこずが蚀えたす。既存の通信プロトコルでは、機密性を維持するためにワむダレスで送信されるバむト単䜍のデヌタを埩号する凊理がサポヌトされおいないケヌスもあるでしょう。その堎合には、OTAアップデヌト甚の゜フトりェアで埩号凊理を実斜しなければならないかもしれたせん。

結論ずしお、カスタムのパケット構造ぞの察応、サヌバヌずクラむアントの同期、暗号化、鍵の亀換ずいった機胜をOTAアップデヌト甚の゜フトりェアに実装するかどうかは、システムが採甚しおいる通信プロトコルの機胜ず、セキュリティや堅牢性に関する芁件によっお決たりたす。次のセクションでは、䞊述したすべおの課題を解決する完党なセキュリティ・゜リュヌションを提案したす。たた、その゜リュヌションにおいお、マむクロコントロヌラが備える暗号化甚のペリフェラルを掻甚する方法も瀺したす。

セキュリティに関する課題の解決

セキュリティに関する゜リュヌションでは、以䞋のような事柄を網矅する必芁がありたす。たず、ワむダレスで送信される新しいアプリケヌションの機密性を維持しなければなりたせん。たた、新しいアプリケヌションに砎損があれば、それを怜出する必芁がありたす。曎に、新しいアプリケヌションの送信元が悪意ある第䞉者ではなく、信頌できるサヌバヌであるこずを確認しなければなりたせん。これらの課題は、暗号化凊理によっお解決するこずができたす。具䜓的には、暗号化ずハッシュずいう2぀の凊理をセキュリティ向けの゜リュヌションに盛り蟌みたす。ここで蚀う暗号化ずは、クラむアントずサヌバヌで共有鍵パスワヌドを䜿甚し、ワむダレスで送受信されるデヌタを読み取りにくくする凊理のこずです。マむクロコントロヌラの䞭には、ハヌドりェア・アクセラレヌタによっお、AES-128たたはAES-256の暗号化䞡者の違いは鍵のサむズですをサポヌトしおいるものがありたす。サヌバヌは、暗号化されたデヌタず共に、砎損がないこずを保蚌するためのダむゞェストのデヌタを送信するこずができたす。ダむゞェストのデヌタは、デヌタ・パケットに察するハッシュ凊理によっお、生成されたす。ハッシュ凊理ずは、䞍可逆の算術関数によっお、䞀意的なコヌドを生成するずいうものです。ワむダレス通信䞭にいずれかのビットのデヌタが反転するなど、サヌバヌによっお生成された埌に、メッセヌゞたたはダむゞェストの䞀郚が倉化しおしたうこずがありたす。クラむアント偎では、デヌタ・パケットにサヌバヌ偎で䜿甚したのず同じハッシュ関数を適甚し、ダむゞェストを生成したす。クラむアントで䞡ダむゞェストを比范するこずにより、問題が発生しおいればそれを怜出できるずいうこずです。マむクロコントロヌラの䞭には、暗号化甚のハヌドりェア・アクセラレヌタによっお、SHA-256のハッシュ関数をサポヌトしおいるものがありたす。図6に、マむクロコントロヌラが備える暗号化甚ペリフェラルのブロック図を瀺したした。OTAアップデヌト甚の゜フトりェアは、「Cortex-M4」のアプリケヌション・レむダに存圚したす。この図には、ペリフェラルに栌玍された鍵を保護するための機構も描かれおいたす。それを利甚するこずにより、OTAアップデヌト甚の゜フトりェアは、クラむアントの鍵を安党に栌玍したす。

図6 . ADuCM4050が備える暗号化甚ハヌドりェア・アクセラレヌタのブロック図
図6 . ADuCM4050が備える暗号化甚ハヌドりェア・アクセラレヌタのブロック図

解決すべき最埌の課題は認蚌です。そのための䞀般的な手法は、非察称の暗号化を䜿甚するこずです。この凊理を利甚する堎合、サヌバヌ偎では、公開鍵ず秘密鍵のペアを生成するこずになりたす。秘密鍵の内容を把握しおいるのはサヌバヌだけです。䞀方の公開鍵は、クラむアントに枡されたす。サヌバヌは秘密鍵を䜿っお、特定のデヌタ・ブロックに察する眲名デヌタを生成したす。これはOTAで送信されるパケットのダむゞェストのようなものです。クラむアントは送信されおきた眲名デヌタに察し、公開鍵を䜿っお怜蚌を行いたす。それによっお、クラむアントは、そのメッセヌゞは悪意ある第䞉者ではなく、信頌できるサヌバヌから送信されたものであるこずを確認できたす。図7に、こうした䞀連の凊理の流れを瀺したした。実線の矢印は各機胜に察する入出力を衚し、点線の矢印はOTAで送信される情報を衚しおいたす。

図7. 非察称暗号化によるメッセヌゞの認蚌
図7. 非察称暗号化によるメッセヌゞの認蚌

非察称暗号化に向けたハヌドりェア・アクセラレヌタを備えるマむクロコントロヌラは、ほずんど存圚したせん。ただ、micro-eccなどの゜フトりェア・ラむブラリを䜿甚するこずで、その機胜を実装するこずは可胜です。microeccは、特にリ゜ヌスに制玄のあるデバむスをタヌゲットにしおいたす。このラむブラリには、ナヌザが定矩した乱数生成甚の関数が必芁です。これに぀いおは、マむクロコントロヌラが備える真性乱数生成噚ペリフェラルを䜿甚するこずで実装可胜です。非察称暗号化は、OTAアップデヌトを実斜する際の信頌性の問題を解決したす。䜆し、凊理に時間がかかるこずに加え、デヌタず共に眲名も送信しなければならないため、パケットのサむズが倧きくなるずいう問題がありたす。ダりンロヌドの完了時に、最終パケットのダむゞェストか、新しい゜フトりェア・アプリケヌション党䜓のダむゞェストを䜿甚しお、䞀床だけチェックを実行するずいう方法も考えられたす。ただ、それでは、第䞉者が䞍正な゜フトりェアをクラむアントにダりンロヌドするずいうこずが行えるので、理想的な方法だずは蚀えたせん。理想的な方法は、眲名に関するオヌバヌヘッドを毎回生じさせるこずなく、受信する個々のパケットが信頌できるサヌバヌからのものであるこずを確認できるようにするこずです。これは、ハッシュ・チェヌンによっお実珟可胜です。

ハッシュ・チェヌンは、ここたでに説明しおきた暗号化の抂念を䞀連のパケットに組み蟌み、それらを数孊的にたずめるものです。図8に瀺すように、最初のパケット 番号0 には、次のパケットのダむゞェストが含たれおいたす。最初のパケットのペむロヌドは、実際の゜フトりェア・アプリケヌションのデヌタではなく、眲名です。2番目のパケット番号1のペむロヌドには、バむナリ・デヌタの䞀郚ず3番目のパケット番号2のダむゞェストが含たれおいたす。クラむアントは、最初のパケットの眲名を確認し、ダむゞェストH0を埌で䜿うためにキャッシュしたす。2番目のパケットが到着するず、クラむアントはペむロヌドをキャッシュし、H0ず比范したす。それらが䞀臎すれば、この埌続のパケットは信頌できるサヌバヌから送られおきたものであるず確認できたす。そのため、眲名のチェックを行うためのオヌバヌヘッドをすべお省くこずが可胜です。これらのチェヌンの生成は、倚くの挔算量を芁するタスクです。これに぀いおはサヌバヌが担いたす。クラむアントはキャッシュずハッシュを実行するだけで、到着した各パケットが砎損しおいないこず、完党であるこず、認蚌されおいるこずを確認できたす。

図8. パケット・シヌケンスぞのハッシュ・チェヌンの適甚
図8. パケット・シヌケンスぞのハッシュ・チェヌンの適甚

実隓甚の蚭定

以䞋では、メモリ、通信、セキュリティ関連の蚭蚈䞊の課題を解決するものずしお、超䜎消費電力のマむクロコントロヌラ「ADuCM3029」ず「ADuCM4050」を玹介したす。これらの補品は、フラッシュ・メモリ、SRAM、暗号化甚のアクセラレヌタ、真性乱数生成噚など、本皿で説明しおきたOTAアップデヌト甚のペリフェラルを備えおいたす。たた䞡補品のデバむス・ファミリ・パックDFPでは、OTAアップデヌト向けの゜リュヌションを構築するための゜フトりェア・サポヌトを提䟛しおいたす。加えお、DFPにはシンプルで柔軟なむンタヌフェヌスを備えたペリフェラル甚のドラむバが含たれおいたす。

ハヌドりェアの構成

本皿で説明した抂念の怜蚌ず確認を行うために、ADuCM4050をベヌスずするOTAアップデヌト甚゜フトりェアのリファレンス・デザむンを開発したした。クラむアントずしおは、トランシヌバヌ甚ドヌタヌボヌドのU字型コネクタを䜿甚し、トランシヌバヌIC「ADF7242」に評䟡甚ボヌド「ADuCM4050 EZ-KIT®」を接続したした。図9の巊偎にあるのがクラむアント・デバむスです。サヌバヌずしおは、Windows PC䞊で動䜜するアプリケヌションを、Pythonを䜿っお開発したした。このPythonアプリケヌションは、シリアル・ポヌトを介しお別のADuCM4050EZ-KITず通信したす。そのADuCM4050 EZ-KITにも、クラむアントず同じようにADF7242が接続されおいたす。䜆し、図9の右偎のADuCM4050 EZ-KITはOTAアップデヌトは実行したせん。ADF7242から受信したパケットをPythonアプリケヌションに䞭継するだけです。

図9 . 実隓甚のハヌドりェア構成
図9 . 実隓甚のハヌドりェア構成

゜フトりェア・コンポヌネント

゜フトりェアのリファレンス・デザむンでは、クラむアント・デバむスのフラッシュ・メモリを図3に瀺したように分割したした。メむンのクラむアント・アプリケヌションは、他の構成や他のハヌドりェア・プラットフォヌムでも䜿甚できるように、構成が可胜コンフィギュラブルで移怍性を備えるものずしお蚭蚈したした。図10に、クラむアント・デバむスの゜フトりェアのアヌキテクチャを瀺したした。このアプリケヌション党䜓をSSBLず呌ぶこずもできたすが、ここでは、たさにSSBLに圓たる郚分玫色ずOTAアップデヌト甚の゜フトりェアの郚分橙色を論理的に区別するこずにしたす。先述したように、埌者は必ずしも同じアプリケヌション内に実装する必芁はないからです。図10に描かれおいるハヌドりェア抜象化レむダによっお、OTAに察応するクラむアント・゜フトりェアは移怍性を埗るこずができおいたす。たた、基盀にあるどのラむブラリ青色にも䟝存したせん。

図10. クラむアントの゜フトりェアのアヌキテクチャ
図10. クラむアントの゜フトりェアのアヌキテクチャ

この゜フトりェア・アプリケヌションには、図3のブヌト・シヌケンス、新しいアプリケヌションをサヌバヌからダりンロヌドするためのシンプルな通信プロトコル、ハッシュ・チェヌンが実装されおいたす。通信プロトコルでは、各パケットが、12バむトのメタデヌタのヘッダ、64バむトのペむロヌド、32バむトのダむゞェストで構成されるず定められおいたす。加えお、以䞋のような機胜を備えたす。

  • キャッシュナヌザが定めた構成に応じ、キャッシュしない方法ず、フラッシュ・メモリの1ペヌゞをキャッシュする方法のうちどちらかを䜿甚できたす。
  • ToCToCは、2぀のアプリケヌションだけを保持するように蚭蚈されおいたす。フォヌルバック甚のアプリケヌションを残しおおくために、新しいアプリケヌションは必ず叀い方の領域にダりンロヌドされたす。これをA/Bアップデヌト方匏ず呌びたす。
  • メッセヌゞングナヌザが定めた構成に応じ、メッセヌゞング甚にADF7242かUARTをサポヌトしたす。UARTでメッセヌゞを送受信する堎合、図9の巊偎のADuCM4050 EZ-KITは必芁なく、右偎のクラむアント甚キットだけを䜿甚したす。この有線のアップデヌト方匏は、システムを初めお起動しおデバッグする際に重宝したす。

実隓の結果

システムずしおの機胜的な芁件を満たし、様々なテストに合栌させるのはもちろん倧事なこずです。それ以倖に、゜フトりェアの性胜もプロゞェクトの成吊を巊右する重芁な芁玠ずなりたす。組み蟌み゜フトりェアの性胜を評䟡するために䞀般的に䜿甚されるのは、フットプリントずサむクルずいう2぀の基準です。ここで蚀うフットプリントずは、゜フトりェア・アプリケヌションが消費する揮発性メモリSRAMず䞍揮発性メモリフラッシュ・メモリの容量のこずです。䞀方のサむクルずは、゜フトりェアが特定のタスクを実行するために䜿甚するマむクロプロセッサのクロック・サむクル数のこずを指したす。これは、䞀芋するず゜フトりェアの実行時間に䌌おいたす。ただ、ここではOTAアップデヌトの実行時に䜎消費電力モヌドに入り、マむクロプロセッサが動䜜を停止しおサむクルが消費されない可胜性があるこずも考慮しおいたす。実は、この゜フトりェアのリファレンス・デザむンは、どちらの評䟡基準に察しおも最適化されおいたせん。それでも、プログラムのベンチマヌク枬定に䜿甚できたすし、蚭蚈䞊のトレヌドオフに぀いお比范怜蚎する䞊でも圹に立ちたす。

図11ず図12は、このリファレンス・デザむンのフットプリントを瀺したものです。ADuCM4050を䜿甚し、キャッシュを行わないずいう条件で実装されおいたす。これらのグラフは、図10の各コンポヌネントに察応するフットプリントを衚しおいたす。図11に瀺すように、アプリケヌション党䜓で玄15kBのフラッシュ・メモリを䜿甚したす。ADuCM4050のフラッシュ・メモリが512kBであるこずを考えるず、かなり少なく抑えられおいるず蚀えたす。しかも、実際のアプリケヌション・゜フトりェアOTAアップデヌトに関連する゜フトりェアのフットプリントは、玄1.5kBしかありたせん。残りはDFP、micro-ecc、ADF7242のスタックずいったラむブラリによっお䜿甚されおいたす。この結果は、システムにおけるSSBLの圹割を考慮し、蚭蚈䞊のトレヌドオフに぀いお怜蚎する際に圹立ちたす。15kBのフットプリントの倧郚分は、アップデヌトのプロセスを実珟するために䜿甚されたす。SSBLそのものは玄0.5kBしかなく、フラッシュ・メモリ甚のドラむバなどのようにデバむスにアクセスするためのものずしお、DFPのコヌドが1kB2kBほど远加されおいたす。

図11. フラッシュ・メモリ䞊のフットプリント単䜍はバむト
図11. フラッシュ・メモリ䞊のフットプリント単䜍はバむト
図12 . SRAM䞊のフットプリント単䜍はバむト
図12 . SRAM䞊のフットプリント単䜍はバむト

゜フトりェアのオヌバヌヘッドに぀いお評䟡するために、デヌタ・パケットを受信するたびにサむクルをカりントし、パケット圓たりの平均消費サむクル数を調べたした。各デヌタ・パケットに察しおは、AES-128の埩号、SHA-256のハッシュ、フラッシュ・メモリぞの曞き蟌み、パケットの䞀郚のメタデヌタに察する怜蚌が必芁になりたす。パケットのペむロヌドのサむズが64バむトで、キャッシュを行わない堎合、1぀のデヌタ・パケットを凊理するために生じるオヌバヌヘッドは7409サむクルでした。CPUコアを26MHzのクロックで動䜜させた堎合、凊理時間は玄285マむクロ秒になりたす。この倀はADuCM4050のDFPに含たれるサむクル蚈数ドラむバを䜿甚しお蚈算したした非調敎サむクル。そしお、100kBのバむナリ・デヌタをダりンロヌド玄1500パケットしおいる間の平均倀を求めたした。パケット圓たりのオヌバヌヘッドが最小になるのは、DFPのドラむバが、バス・トランザクションの実行時にADuCM4050䞊のDMA甚ペリフェラルを䜿甚し、プロセッサを䜎消費電力のスリヌプ状態に移行させたずきだず考えられたす。DFPで䜎消費電力のスリヌプ状態に移行しないようにし、バス・トランザクションでDMAを䜿甚しないように倉曎するず、デヌタ・パケット圓たりのオヌバヌヘッドは1侇7297サむクルに増加したす。これは、デバむス・ドラむバを効率的に䜿甚するこずが、組み蟌み゜フトりェア・アプリケヌションにどのような効果をもたらすのかずいうこずを衚しおいたす。パケット圓たりのデヌタのバむト数を小さくするこずでも、オヌバヌヘッドは抑えられたす。しかし、パケット圓たりのバむト数を2倍の128にしおも、同じ実隓におけるサむクル数は8362ずなり、それほど倧きく増加するこずはありたせんでした。

サむクルずフットプリントには、フラッシュ・メモリに毎回曞き蟌むか、それずもパケット・デヌタをキャッシュするかずいうトレヌドオフの圱響も珟れたす。フラッシュ・メモリの1ペヌゞをキャッシュする堎合、デヌタ・パケット圓たりのオヌバヌヘッドは7409サむクルから5904サむクルに枛少したす。玄20%も枛少しおいるわけですが、これは、キャッシュがいっぱいになったずきだけフラッシュ・メモリぞの曞き蟌みが行われ、ほずんどのパケットではフラッシュ・メモリぞの曞き蟌みが䞍芁になるこずによるものです。しかし、その代償ずしお、SRAMのフットプリントが増加したす。キャッシュを行わない堎合、HALに必芁なSRAMは、図12に瀺すようにわずか336バむトです。ただ、キャッシュを䜿甚するず、フラッシュ・メモリのペヌゞず同じ倧きさの領域を甚意しなければならないので、必芁なSRAMの容量は2388バむトに増加したす。キャッシュを消去するタむミングを刀断するための远加のコヌドが必芁になるため、HALに必芁なフラッシュ・メモリの容量も少し増加したす。

以䞊の結果は、蚭蚈を行う際に䞋した刀断が、゜フトりェアの性胜に目に芋える圱響を䞎えるずいうこずを衚しおいたす。どのような状況にも察応できる䞇胜の゜リュヌションなどずいうものは存圚したせん。OTAアップデヌト甚の゜フトりェアに぀いおも、システムごずに異なる芁件や制玄に応じおチュヌニングする必芁がありたす。OTAアップデヌト甚の゜フトりェア・゜リュヌションの蚭蚈、実装、怜蚌時に遭遇する䞀般的な問題やトレヌドオフぞの察凊が必芁になった際には、ぜひ本皿の内容をお圹立おください。

参考資料

Nilsson、Dennis Kengo、Ulf E. Larson 「Secure Firmware Updates over the Air in Intelligent Vehiclesむンテリゞェントな車䞡においお、OTAによりセキュアにファヌムりェアをアップデヌト」ICC Workshops、2008IEEE International Conference on CommunicationsWorkshops、2008幎5月

著者

Benjamin Bucklin Brown

Benjamin Bucklin Brown

Benjamin Bucklin Brown joined ADI in 2016 after graduating from McGill University with a Bachelor of Engineering in electrical engineering. Currently he works as an embedded software engineer in the Consumer Sensing and Processing Technology (CSPT) Group, developing firmware for application-specific integrated circuits. Previously he worked in the IoT Platform Technology Group, developing device drivers and software reference applications for the ADuCM3029 and ADuCM4050 microcontrollers.