トップページ

セキュリティの落とし穴 「外付けフラッシュメモリ」は組み込み認証で守る

近年、マイクロコントローラ(MCU)やシステムオンチップ(SoC)メーカは、セキュリティの必要性を感じ始めたユーザの要望に応えて、様々なセキュリティ機能を実装した製品群をリリースし始めています。今日では、金融系以外のアプリケーション向けにも、業界標準の32ビットCPUコアにハードウェア暗号アクセラレータや乱数発生器(RNG)、セキュアストレージを実装することがトレンドとなっています。

MCUやSoCに外付けされたフラッシュメモリには、ユーザが開発した貴重なアプリケーションコードやデータ(知的財産、Intellctual Property)が格納されていますが、オンチップメモリ(SoCのマスクROMやMCUの内蔵フラッシュメモリ)に比べて、ハッキングされやすいという脆弱性を持っています。 

このように、MCUやSoCにつながっている「コンパニオンチップ」であるフラッシュメモリは、セキュリティ上の脆弱性により、IPの盗難による商業的損害や、悪質なエレクトロニクスシステムアセンブラによるプリント基板(PCB)のリバースエンジニアリングによる模造品の製造等の危機にさらされています。

この記事では、フラッシュメモリを正当なホストコントローラとユニーク且つ安全にペア接続させる方法について概説します。

 

今日のフラッシュメモリ上のセキュリティホール

ユーザにとって最も重要なセキュリティ要件は、外付けされているフラッシュメモリに格納されているアプリケーションコードを含むIPの盗難や複製を防ぐことでしょう。 

ご存知の通り、電化製品に組み込まれた「価値」の多くは、保護されているわけではありません。例えば、スマートホームIoTのサーモスタットを例に挙げてみましょう。PCBを細かく解析することで、すべてのコンポーネントを正確に識別することが可能で、製品を複製しようとすれば、誰でもPCBレイアウトを忠実に再現することができます。 ハードウェア設計そのものに秘匿性はありません。

一方、ソフトウェア(顧客が開発したアプリケーションコードやIP)は秘匿性を求められる場合があります。今日、セキュアなMCUや SoCは、ハードウェアとソフトウェアの組み合わせにより暗号化や耐タンパ性、セキュアストレージ機能を実装しているため、直接攻撃することは困難です。そこで攻撃者は起動プログラムやアプリケーションコードを格納している外付けのフラッシュメモリを侵入ポイントとして考えます。外付けフラッシュメモリは取り外せば、中身を読み出すことができます。つまり全体としてのシステムの強さは、一部でセキュリティ強度が高くなっていても、脆弱な部分に引っ張られることになります。

このため、多くのユーザは、主にソフトウェアを保護するため、フラッシュメモリのパーティション空間にあるユニークID(UID)を利用しています。しかし、このUIDは攻撃に対抗するには、あまりにも低い障壁です。多少のセキュリティに関する知識を持つエンジニアなら、このUID見つければ、MCUとコードストレージハードウェアの間のペアリングを容易に解除することができます。つまり、一旦UIDが分かってしまうと、OEM顧客が設定した”Root of Trust”(=当該製品の固有性)と、プログラムコードからなされる信頼の大元が失われることになるのです。後はフラッシュメモリの内容を丸ごとコピーし、UIDの処理を対応すれば、模造品が本当に出来てしまいます。

このセキュリティシステムの弱点は、UID自体がセキュアでないことです。 つまりUIDは固定値であるため、一度読み取られると権限のないホストであっても再利用されてしまうのです。

 

解決策:セキュアでダイナミックな認証

理論上、この問題の救済策は簡単です。つまり、ホストであるMCUやSoCがメモリにアクセスするたびにUIDを動的に変更すれば良いのです。そして実装がしやすい固定値のUIDをフラッシュメモリ側とホストコントローラ側に用意し、利用します。ホストがフラッシュメモリにアクセスする際に動的なUIDを比較することで、フラッシュメモリを認証することができます。この認証プロセスが「チャンレンジ&レスポンス」です。

それでは、動的なUIDを生成して、認証プロセス「チャレンジ&レスポンス」を行うにはどのようにすればよいでしょうか。

 

UIDに対称暗号方式を適用

UIDのみによる認証問題を解決するために、ウィンボンドはセキュア認証フラッシュメモリ W74Mファミリを開発しました (図1参照)。ウィンボンドはシリアルNORやNANDフラッシュメモリICの幅広いポートフォリオを持ち、シリアルフラッシュの市場シェア約30%を占める世界的トップメモリメーカーです。2016年は21億個ものシリアルフラッシュを出荷した実績があります。 

現在、フラッシュメモリのセキュリティ脆弱性が、設計時の大きな課題となっています。ここにW74Mファミリの紹介をしている理由があります。 ウィンボンドはメモリの固有性(アイデンティティ)確保に対称暗号化を使い、それはまず、ホストとメモリの両方が同じ秘密を「ルートキー」として認識することから始まります。

1W74Mのアーキテクチャ

 

当然のことながらホストがメモリと“チャレンジ&レスポンス”を行う際に相互の秘密であるルートキーを直接伝送することはありません。その代わりに「チャレンジ&レスポンス」で出力されるデータは、本メッセージデータに加え、HMAC(Hash-based Message Authentication Code)と呼ばれるチェックサムを送ります。本チェックサムはダイジェストやフィンガープリントとも呼ばれ、ルートキーと乱数などのダイナミック要素から生成されたセッションキーと本メッセージを一方向関数(逆算が困難な計算アルゴリズム)に入力して生成されます。W74Mファミリでは一方向関数にSHA-256を採用しています。SHA-256とは、計算結果のチェックサム(ダイジェスト)のサイズが256ビット長になるものです。SHAとは、Secure Hash Algorithmの略で、SHA-256は、連邦情報処理標準(FIPS)として米国立標準技術研究所(NIST)によって発行された暗号ハッシュ関数です。これは、金融取引等の処理に使用される認証技術であり、現在のところ解読は不可能と言われています。 

W74Mメモリは受信した「チャレンジ」メッセージと内部で生成した共通鍵(セッションキー;ルートキーと事前に受け取った乱数から生成)をSHA-256エンジンに入力し、256ビット長のダイジェストを計算します。そして受信したダイジェストと比較します。比較が一致すればメモリ側は、正当なホストコントローラからのメッセージを受信したと判断(認証)します(この認証できたという根拠は、一方向関数の計算結果であるダイジェストは、入力データが1ビットでも変更されると変化する、という特性からきています)。そしてW74Mメモリは同様に受信したメッセージから「レスポンス」メッセージを作成し返信します(このとき生成するダイジェストについては後述します)。

次にホストコントローラは同様にW74Mから受信した「レスポンス」を検証します。つまり先に生成したセッションキーと受け取ったレスポンスメッセージを入力にSHA-256にてダイジェストを計算します。そして受信したダイジェストと比較します。相互の値が一致するとホストコントローラは接続されているメモリを認証できたことになり、以降、通常のメモリ動作(コードやデータの実行、読出し/書出し等)が続行されます。

このように前述したUIDによる認証方式とは異なり、W74Mでは、セッションキーというルートキーとは異なる鍵(一種のUID)が利用されること、またSHA-256のような一方向関数でメッセージ内容の改ざんを検出できます。

さらに、定期的にセッションキーを変更することで、万が一、メッセージやレスポンスが盗み取られたとしても次のメッセージ/レスポンスではダイジェスト値が異なるのでホストあるいはW74M側のロジックは異常を検出できます。つまり、前述の固定値によるUIDで成功していた「なりすまし」攻撃は、W74Mメモリでは失敗します。逆算をして同じダイジェスト値を持つメッセージと鍵の組み合わせを求める(衝突耐性といいます)という攻撃も考えられますが、SHA-256関数は現状ではそれが非常に難しいとされています。但し、ルートキーは守られる必要があります。W74Mメモリではルートキーは一度設定されると変更や読み出しが出来ない仕組みになっています。

 

W74Mファミリの特徴

図1はW74Mのその他二つの特徴を示しています。一つめは、不揮発性モノトニックカウンタを内蔵し、タイムスタンプ情報として動的に変更できることです。W74Mメモリはレスポンスメッセージを作成するときに、このカウンタもダイジェスト計算の入力とすることで再生攻撃(リプレイアタック)に対処できるようにしています。再生攻撃とは、盗聴者がある瞬間のメッセージを盗み取り保存しておき、時間経過した後に保存しておいたメッセージをあたかも正当な送信者に成りすまして再送し、受信者を混乱させる攻撃をいいます。

本カウンタはルートキーが作られる際にゼロに初期化され、その後ホストコントローラはアプリケーション上で定期的あるいはランダムにカウンタをインクリメントするコマンドをW74Mに送信します。つまりホストコントローラとW74Mメモリ間でカウンタ値を変更し同期を取るわけです。ホストがW74Mに対して”チャレンジ&レスポンス“を実行する際には、W74Mは最新のカウンタ値をダイジェスト計算の入力に加えレスポンスするため、ホスト側が持っているセッションキーだけでなく最新のカウンタ値が同じでない限りダイジェスト値は一致せず、結果認証が成功しないことになります。

こうしてホストコントローラは、「チャレンジ&レスポンス」を実行することでコードやデータなどのシステムリソースを保存しているフラッシュメモリが正当な部品であるかどうかを認証できます。たとえ攻撃者が、顧客の製品を分解し、PCB上に実装されたW74Mから内容をコピーしただけでは、その盗み出したコード/データは再利用できないため、模造品製造は容易にはできなくなるのです。

図1で示されているW74Mの2つ目の特徴は、認証のための鍵セット(インスタンス)が4チャネルあることです。W74Mメモリは、ルートキーおよびHMACキー(前述のセッションキーに相当)、モノトニックカウンタを1セットとするインスタンスが4チャネルあります。W74Mは1個でありながら、認証チャネルは、例えば1つはホストデバイスコントローラ用にその他3つの認証チャネルはゲートウェイ用、クラウド/ネットワーク環境用、他のホストコントローラ用と独立に認証チャネルを割り当てることができます(マルチレイヤ認証;図2参照)。

2W74Mによるマルチレイヤ認証

 

このマルチレイヤ認証のその他の応用例としては、複数のエレメントで構成されるドローンのような複雑なシステムなどがあります。これらエレメントの中で、W74Mは下記の認証に用いられます。

W74Mに内蔵されているHMAC-SHA-256認証エンジンと4チャネルの鍵/カウンタセットを利用することにより、ドローンメーカは周辺装置であるブランドメーカーのカメラや交換用バッテリのみでしか機能しないように製品のプロパティを制御できます。これにより、模造部品交換による不正行為を抑止することができます。

 

安全でセキュアな実装

前述の通り、W74Mの認証機能は業界標準のSHA-256を一方向関数に利用し、固定の鍵ではなく、動的に変更するセッションキー(HMACキー)と不揮発性モノトニックカウンタを導入して再生攻撃にも対応できるように設計されています。セキュリティ上、一番大切な鍵(ルートキー)は、一度W74M に設定すると変更や読み出しは出来ず、内部のOTPメモリに保存されます。

W74Mメモリ自体は認証に必要な機能を内蔵していますが、ルートキーを設定するなどプロビジョニングする際には注意が必要です。顧客の製造工程時にW74Mメモリと対になるホストコントローラに、セキュアかつ確実に意図されたルートキーを設定する必要があります。ウィンボンドはお客様の代わりにルートキーのプロビジョニングを行うサービスを請け負うことも可能です。

認証フラッシュメモリW74Mファミリは、標準パッケージに32Mbitから1Gbitまでの幅広いメモリ容量帯を取り揃えております。ブートコードストレージ用にNOR/NANDフラッシュ、また認証ICの2つの機能が求められる場合に、W74Mファミリは1チップパッケージで実現できます。その外形パッケージはフラッシュメモリの業界標準パッケージであるため、既存のPCBのフットプリントにそのまま載せ買えることも可能です。セキュリティ業界標準のSHA-256アルゴリズムを搭載しつつ、顧客のBOMコストやコンポーネント数の削減に貢献します。

この度W74Mファミリに、NORフラッシュのメモリ機能を持たず、認証機能だけを持つ製品(型番W74M00AVSSIGやW74M00AVSNIG)をラインアップしました。1チップでマルチレイヤ認証デバイスとしての利用が可能です。

Winbond アメリカ、CS. Lin、マーケティングエグゼクティブ

テクニカル記事

お問い合わせ

Copyright © Winbond All Rights Reserved.

This website uses cookies to ensure you get the best experience on our website. Learn more
OK