外部暗号化EEPROMを使用して組み込みシステムのデータを保護する

著者 Bill Giovino

Digi-Keyの北米担当編集者 の提供

一部のマイクロコントローラでは、EEPROMがオンチップ化されています。これによって、基板スペースを節約しながら不揮発性データメモリを搭載できます。ただし、データのセキュリティがより重要な案件になるにつれ、最近の多くの組み込みシステムは、データを不揮発性メモリを使用して安全に格納し、それが外部のハッカー攻撃にも耐えられる、という実用的な方法を求めています。

この記事では、シングルチップのセキュアEEPROMが、ハッカーに強い、不揮発性データのセキュアストレージをどのように提供するかについて説明します。ただし、暗号化のコアな話には立ち入りません。代わりに、よく知られたサプライヤのセキュアEEPROMの好例を取り上げ、それがどのように動作し、どのように応用できるかについて説明します。

セキュアEEPROMの必要性

多くの組み込みシステムは、不揮発性データメモリ(通常はEEPROM)の恩恵を受けています。EEPROMは、ファームウェアの制御下で読み書きすることができ、システムの電源が落ちるとメモリ内容を失うRAMと比べ、電源が切断されてもメモリ内容の状態を保持します。

マイクロコントローラ内のEEPROMは、パワーダウン時にも保持されるべきプログラムデータを保存するのには常に有用ですが、通常はRAMと同様のセキュリティ上の脆弱性を持っています。最近の8ビット、16ビット、32ビットのマイクロコントローラの中には、ファームウェア制御下でデータメモリ領域が読み取られるのを防いだり、デバッガなどの外部インターフェースによってデータが読み取られるのをブロックできるセキュリティ機能を持つものがあります。過去には、このセキュリティ方法で十分と言われましたが、今では、資金、時間、動機、リソースを持ったハッカー達なら、かつて十分だったこのセキュリティを回避して重要なシステムにアクセスできる状況です。

最近の組み込みシステムは、多くのアプリケーションが必要とする、より堅牢なデータ保護のレベルまで進化しました。これは特に、一部のIoTノード、セキュリティシステム、車車間通信、最新の医療機器、自律走行車両に当てはまります。システムのクローン作成を防止するためだけでも、データのセキュリティが必要になる場合があります。これはつまり、悪意あるハッカーの攻撃が成功した場合、EEPROMのデータが侵害され、物的損害を発生させたり、それ以上の悪さをするアプリケーションがあるということです。

このような状況では、大量のリソースを持つハッカーに対して高い防御性能を持つEEPROMが必要です。そのために、パスワード、ハッシュクローン、指紋データ、センサ較正情報、生体認証データなどの機密データを、簡単に暗号化できる高セキュリティEEPROMが利用できます。

Microchip Technologyでは、この設計問題をCryptoAuthentication™デバイスの製品ラインで解決しました。この名に聞き覚えがあるとしたら、それはMicrochipがAtmel買収の一環としてそのラインを受け継いだからです。このラインのそのようなデバイスの1つは、ATAES132Aセキュア32キロバイトEEPROMです(図1)。

AtmelのATAES132A 32KバイトシリアルEEPROMの画像

図1:ATAES132A 32KバイトシリアルEEPROMの設計上の特長は、データと内部レジスタを保護するためのセキュリティ機能を備えていることです。(画像提供:Digi-Key Electronics)

ATAES132Aは、標準の32KバイトシリアルEEPROMと同じように使用できます。このデバイスは、標準のSPIとI2Cピン配列を使用しているので、ハードウェアを変更することなく既存設計の標準シリアルEEPROMと置き換えることができます。これにより、アプリケーションのファームウェアを変更するだけで、既存の設計を簡単にアップグレードできます。

それでいて、重要な物理的保護、暗号化、および設計に組み込まれたその他のセキュリティ機能を備えており、イネーブルされるとEEPROMデータと内部レジスタを、最も必死なハッカー以外のハッカー攻撃から保護します。データは、最大16個の128ビットキーを使う軍用グレードのAES暗号化を使用して保護されます。

物理的な保護

まずATAES132Aには、デバイスが物理的にリバースエンジニアリングされるのを防ぐための、多くの機械的セキュリティメカニズムがあります。このデバイスは、メモリの内容を維持するために、デバイスを「急速フリーズ」しようとする試みなど、周囲温度の特定の変化に敏感です。また、ダイを露出させるためのキャップ解除の試みも検出することができます。ダイを覆っている金属シールドが取り除かれた場合、ダイは露光を検出し、それによってメモリ内容を破壊するメカニズムを開始する能力も持っています。

最後に、内部メモリの内容は暗号化されています。Microchip社ではこれらのセキュリティメカニズムの詳細を秘密にしているため、このデバイスにはMicrochipのエンジニアだけが知っている未公開のセキュリティメカニズムも含まれています。このデバイスは、セキュアメモリに強大な物理的セキュリティを提供し、開発者が、EEPROMにバリアを備えた複雑なエンクロージャを作る労力を省いてくれます。

起動時にATAES132Aは、SPIまたはI2Cインターフェースを使ってほとんどのマイクロコントローラとインターフェース接続するように設定できます。I2Cモードで使用する場合、チップセレクトピンは使用されず、電源またはグランドに接続する必要があります。SPIモードに設定される場合は、通常どおりチップセレクトが使用されます。

AESデータ暗号化

暗号化は、128ビットキーのAES-CCMを使用してATAES132Aに実装されています。簡単に言うと、暗号化されるデータは、ファームウェア開発者によってプログラムされた128ビットの数値と組み合わされた一連の複雑な数学関数に渡されます。AES暗号化および復号化操作中に実行される複雑な計算は、すべてATAES132Aによって行われ、いくつかの変数の設定と128ビットキーの選択を除いて、このプロセスはファームウェア開発者にとって透過的であり、製品開発を非常に容易にします。

ATAES132Aのメモリマップ

このデバイスは、標準的な暗号化機能なしシリアルEEPROMのように簡単に使用できます。ただし、開発者が高度なセキュリティ機能を使用しようとすると、デバイスの構造と使用方法は大きく変わってきます。ATAES132Aを理解する手っ取り早い方法は、メモリマップを調べることです。これは、表1に示すように、標準のEEPROMよりも深くなっています。

ATAES132Aのアドレス範囲 説明
0000h〜0FFFh 32Kバイトユーザー(データ)EEPROMメモリ
1000h〜EFFFh 予約済み
F000h〜F05Fh デバイス設定レジスタ
F060h〜F07Fh cpimter設定レジスタ
F080h〜F0BFh キー設定レジスタ
F0C0h〜F0FFh ゾーンセキュリティ設定レジスタ
F100h〜F17Fh ゾーンカウンタレジスタ
F180h〜F1DFh 96バイトFreeSpaceの暗号化されていないメモリ
F1E0h〜F1FFh 32バイトSmallZoneの暗号化されていないメモリ
F200h〜F2FFh キー保管
F300h〜FDFFh 予約済み
FE00h コマンド&レスポンス メモリバッファ
FE01h〜FFDFh 予約済み
FFE0h I/Oアドレスリセットレジスタ(書き込み専用)
FFE1h〜FFEFh 予約済み
FFF0h ステータスレジスタ(読み取り専用)
FFF1h〜FFFFh 予約済み

表1:ATAES132Aのメモリマップは、標準的なシリアルEEPROMのそれよりも深い。(データ提供:Microchip Technology)

メモリマップ内の大半のロケーションは、標準のI2CまたはSPIコマンドを使用して読み書きされます。

EEPROMとゾーンセキュリティ設定レジスタ

32KバイトのEEPROMデータメモリは、16個の2Kバイトゾーンに分割されています。各メモリゾーンは、セキュリティの有無にかかわらず個別に設定できます。16個の各メモリゾーンのセキュリティ設定は、ゾーンセキュリティ設定レジスタ領域で設定します。以下は、16個の2Kバイトゾーンに個別に設定できる基本セキュリティ設定です。

  • データ読み取りの暗号化をイネーブル/ディスエーブル
  • データ書き込みの暗号化をイネーブル/ディスエーブル
  • データ読み取りの認証をイネーブル/ディスエーブル
  • データ書き込みの認証をイネーブル/ディスエーブル
  • ゾーンを読み取り専用に恒久設定

これらの設定は、アプリケーションのセキュリティを設定するときに大きな柔軟性を与えます。1つのゾーンは、暗号化や読み取り/書き込みアクセスによる認証を使用しないように設定でき、標準のEEPROMと同様の読み取り/書き込みが可能です。別のゾーンは完全な暗号化と承認を必要とし、機密データに対して高いセキュリティを提供します。

デバイス設定レジスタ

デバイスの一般的な動作は、デバイス設定レジスタ領域で設定されます。この領域には、デバイスに関する読み取り専用の情報も含まれています。これには、デバイスの識別に使用される一意の32ビットデバイスシリアル番号が含まれます。他のレジスタはメモリゾーンとしたり、読み取り専用に設定できます。ちなみにこれを、「メモリのロック」と呼びます。レジスタまたはメモリゾーンがロックされると、それは恒久設定となり、ロック解除することはできません。

この領域には、デバイスをI2CモードまたはSPIモードのどちらで使用するかを設定するために使用されるI2CAddrレジスタもあります。デバイスの電源投入時に、1バイトのI2CAddrレジスタが書き込まれます。I2CAddrのビット0は、シリアルインターフェースモードを決定します。ファームウェアが0を書き込むと、デバイスはSPIモードに設定されます。1が書き込まれると、I2Cモードが選択されます。I2Cモードが選択されている場合、7ビットのデバイスアドレスは50hです。

コマンド&レスポンス メモリバッファ

デバイス内のメモリロケーションは、標準のSPIまたはI2Cアドレス指定を使用してアクセスできますが、デバイスはマイクロコントローラと同様のコマンドも受け付けます。コマンドブロックと呼ばれるコマンドとそのオペランドは、サイズが1バイト以上の場合があり、常にアドレスFE00hのコマンド&レスポンス メモリバッファに直接書き込まれます。コマンドブロックは、1バイトの命令、1バイト以上のオペランド、そして2バイトのチェックサムで構成されます。

使用可能なコマンドには、データ認証、EEPROMゾーンからのブロック読み取り、カウンタの増分、および認証が必要な保護メモリまたはレジスタの直接読み取りがあります。コマンドに対するレスポンスは、同じ場所FE00hから読み返されます。FE00hへの書き込みはすべて、コマンドメモリバッファに送信されるコマンドです。FE00hからの読み取りはすべて、レスポンスメモリバッファからの読み取りです。

FFE0hのI/Oアドレスリセットレジスタは、コマンド&レスポンス メモリバッファのリセットに使用される書き込み専用レジスタです。FFE0hに任意の値を書き込むには、2つの操作が実行されます。まず、コマンドメモリバッファは、新しいコマンドブロックを受け入れるためにクリアされ、レスポンスメモリバッファは、内容が最初から読み取れるようにゼロにリセットされます。

レスポンスメモリバッファがリセットされると、ファームウェアはレスポンス全体を再読み取りできるようになります。これは、ホストマイクロコントローラがレスポンスメモリバッファの読み出し中に、割り込みが発生した可能性がある場合、割り込みから戻った時点でデータを最初から読み直す必要があるコードに有用です。

EEPROMの読み書きに、AES暗号化/復号化を実行するコマンドもあります。これらの計算は非常に複雑なので、ここでは説明しません。しかし、Microchipでは、これらすべての機能を簡単に実行するマイクロコントローラドライバとファームウェアを提供しているので、AES暗号化に関しては最低限の知識しか必要ありません。

ゾーンカウンタレジスタ

このレジスタ領域には、各ゾーンに関連付けられている16個の読み取り専用カウンタがあります。各メモリゾーンは、128ビットのゾーンキーを使用して、暗号化または復号化されます。ゾーンキーが使用されるたびに、関連する32ビットゾーンカウンタは、その関連するゾーンカウンタ設定レジスタの設定に応じてインクリメントされる場合とされない場合があります。セキュリティ上の理由から、カウンタをデクリメントしたり、リセットすることはできません。

ファームウェアは、ゾーンカウンタに直接書き込んで、カウンタを初期値までインクリメントすることはできますが、すでに存在するカウンタの内容より低い値には決してできません。カウント数を制限するために、製造時にゾーンカウンタに書き込んでロックすることができます。そのカウンタが最大値2,097,151に達すると、関連付けられているキーは、それ以降の暗号化または復号化操作に使用されないように、恒久的に無効にされます。これは、マイクロコントローラのファームウェアの書き換えを限られた回数だけ許可するなど、使用制限のあるキーの場合に有用です。

セキュリティを強化するために、各32ビットゾーンカウンタは複製されます。これは、ゾーンカウンタの増分中に電源障害が発生した場合に、ゾーンカウンタの破損を検出するためです。アプリケーションの電源投入時に、ファームウェアはすべてのゾーンカウンタの両方のカウンタ値を読み取る必要があります。堅牢なアプリケーションで値が異なる場合、これは不正な電源切断イベントの証拠になりえます。異なる値は、動作中にアプリケーションのセキュリティを無効にしようとする不正な試みがあった可能性を示します。

ステータスレジスタ

ATAES132Aのステータスレジスタは、不正なチェックサムやコマンドエラーを含むエラーコードを示す読み取り専用レジスタです。また、ATAES132Aが、I2Cモードにあるか、SPIモードにあるかを示すほか、コマンドの進行状況やレスポンスの有効性も示します。ステータスレジスタは、すべての読み取り、書き込み、コマンド、およびレスポンスの前後に読み取られます。エラーの場合は、ホストマイクロコントローラとATAES132A間のI2CまたはSPI接続に対する、外部からの干渉試行を示している可能性があります。オペレータへの警告やアラーム音の起動など、適切な処置を取るのはホストのファームウェア次第です。

製造時のATAES132Aのセットアップ

ATAES132Aデバイスのセキュリティは、最終製品の製造時に設定する必要があります。設定エラーの可能性を減らすために、ATAES132Aはシステム内で設定する必要があります。最初にすべての初期カウンタ値とカウンタ構成を設定する必要があります。次に、キー(鍵)と暗号化パラメータをプログラムする必要があります。最後に、すべての初期EEPROM値をプログラムする必要があります。ATAES132Aから一意の32ビットのデバイスシリアル番号を読み取ることができるので、これをホストマイクロコントローラのファームウェアに取り込むことができます。

ATAES132Aを確実に正しく設定するために、プログラムされたすべてのEEPROMの値を読み戻すことを推奨します。値が正しく読み返されなかった場合、またはステータスレジスタがチェックサムエラーないしコマンドエラーを示した場合は、最終製品にフラグを立てて実働環境から除外すべきです。オプションとして、十分な予備EEPROMがある場合は、暗号化と復号化のテストを実行するとよいでしょう。

ATAES132Aの開発

Microchipでは、開発を支援するためにDM320109 Xplained-Pro CryptoAuthenticationスターターキットを提供しています(図2)。ATAES132Aは、MicrochipのATSAMD21J18A Arm® Cortex®-M0+マイクロコントローラとインターフェース接続できます。

MicrochipのDM320109 Xplained CryptoAuthenticationスターター&開発キットの画像

図2:MicrochipのDM320109 Xplained CryptoAuthenticationスターター&開発キットは、ATAES132A用コードの評価および開発を簡単に行う方法を提供します。豊富なサンプルコードが付属しており、Windows、Linux、MacOSをサポートするほとんどのPCとのインターフェース接続があります。(画像提供:Microchip Technology)

MicrochipのATSAMD21J18Aマイクロコントローラは、PC開発環境に接続するためのUSBインターフェースを備えています。I2CとSPIの両方のインターフェースをサポートしており、どちらもATAES132Aとのインターフェース接続に使用できます。付属のUSBケーブルを使用してターゲットPCに接続したら、このキットを使用してATAES132Aのすべての機能を設定し、モニタすることができます。

ATAES132AとATSAMD21J18A間のデータパケットを監視および記録するために、2本目のUSBケーブルが提供されています。このケーブルは、XplainedボードとPCの空いているUSBポートの接続に使用できます。開発者はマイクロコントローラとEEPROM間の信号をモニタして、2つのデバイス間での暗号化データの移動を観察できます。

Xplainedキットには、すべてのファームウェアライブラリとATAES132A用のサンプルコードが同梱されています。ここで述べたATAES132Aのメモリマップとレジスタを理解していれば、開発者は最小限のデバイス暗号化の知識で、対象のアプリケーションに合うようにサンプルコードを簡単にカスタマイズできます。

まとめ

AES 128ビット暗号化は面倒な問題ですが、開発者には、その目的のために特別に設計されたEEPROMで機密データを保護する選択肢があります。機械的保護、強力な暗号化、特別なゾーニングとメモリマッピング、そして会社やエンドユーザーだけが知るカスタム機能や機密機能を探してください。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、Digi-Key Electronicsの意見、信念および視点またはDigi-Key Electronicsの公式な方針を必ずしも反映するものではありません。

著者について

Bill Giovino

Bill Giovino氏は、シラキュース大学のBSEEを持つエレクトロニクスエンジニアであり、設計エンジニアからフィールドアプリケーションエンジニア、そしてテクノロジマーケティングへの飛躍に成功した数少ない人の1人です。

Billは25年以上にわたり、STMicroelectronics、Intel、Maxim Integratedなどの多くの企業のために技術的および非技術的な聴衆の前で新技術の普及を楽しんできました。STMicroelectronicsでは、マイクロコントローラ業界での初期の成功を支えました。InfineonでBillは、同社初のマイクロコントローラ設計が米国の自動車業界で勝利するように周到に準備しました。Billは、CPU Technologiesのマーケティングコンサルタントとして、多くの企業が成果の低い製品を成功事例に変えるのを手助けしてきました。

Billは、最初のフルTCP/IPスタックをマイクロコントローラに搭載するなど、モノのインターネットの早期採用者でした。Billは「教育を通じての販売」というメッセージと、オンラインで製品を宣伝するための明確でよく書かれたコミュニケーションの重要性の高まりに専心しています。彼は人気のあるLinkedIn Semiconductorのセールスアンドマーケティンググループのモデレータであり、B2Eに対する知識が豊富です。

出版者について

Digi-Keyの北米担当編集者