セキュアエレメントの追加によるIoT設計へのエッジツークラウドセキュリティの構築

著者 Stephen Evanczuk

DigiKeyの北米担当編集者の提供

サイバーセキュリティは、公共のインターネットにつながるあらゆるシステムの設計、展開にとって普遍的な問題であり続けています。モノのインターネット(IoT)ではセキュリティの問題がとりわけ深刻ですが、その背景にはコネクテッドデバイスがスマートホーム、スマートファクトリー、スマートシティでのアプリケーションに安全に対応するのかどうか、ユーザーが疑念を抱き始めていることもあります。しかし、ますますタイトな納品スケジュールに追われるIoTデバイス開発者は、デバイスリソースを工面する余裕がないと感じることが多く、実効性のあるセキュリティソリューションに必要な各種機能セットの実装に費やす時間に至っては、さらに余裕がありません。

そこで半導体ベンダは、厳しい日程や予算に合わせた、より簡単に展開できるセキュリティソリューションを提供しています。この記事では、セキュリティの問題について検討し、次にNXP Semiconductorsが提供するこのようなソリューションの1種、すなわちEdgeLock SE050セキュアエレメント(SE)を紹介します。次に、このシングルチップデバイスを使用して、IoTデバイスでエッジツークラウドのセキュリティを迅速に実装する方法を開発者向けに説明します。

IoTセキュリティの問題

セキュリティが貧弱なIoTデバイスは、残念ながらサイバー攻撃の恰好の標的になることが実証されています。セキュリティが侵害されると、デバイスはユーザーの機密データを明け渡してしまい、デバイスの偽造コピー作成に必要な貴重な情報を与えてしまう場合もあります。ハッカーはこれらの狙われやすいデバイスを踏み台にして深刻な混乱を巻き起こし、ネットワークにさらに深く侵入して、他のコネクテッドデバイス、システム、さらにはエンタープライズリソースに到達することもできます。結果的に、侵害されたIoTデバイスの影響はIoT階層の複数の層に波及し、ビルオートメーション、産業システム、輸送、医療機器など新たなIoTアプリケーションにおける公的な安全を脅かす原因にもなります。

より効率的なIoT設計をもたらすことが期待される開発者にとって、高性能と低消費電力に対するニーズが主流となっており次々と増えていく要件に、さらにセキュリティの要件が加わることは喜ばしくはありません。実際に、効果的なセキュリティは、エッジからクラウドに及ぶ脅威の緩和に欠かせない要件がどのくらい増えるかに左右されます。

たとえ暗号化や認証など見慣れた手法であっても、それだけ孤立して適用しては効果が不十分です。IoTセキュリティは、セキュリティのメカニズムとプロトコルが侵害から保護されるように設計されたRoot of Trustの上に構築される必要があります。同時に、セキュリティ手法をよりきめ細かく適用する必要性が増しており、IoTデバイス間の接続だけでなく個別のIoT設計における部品間の接続も保護することが求められます。

NXPのEdgeLock SE050 SEは、エッジからクラウドに及ぶセキュリティをIoTデバイスに構築するために必要な、幅広いセキュリティメカニズムとプロトコルを実現できるように設計されています。

堅牢なセキュリティソリューション

NXPのSE050はIoTデバイスのセキュリティに必要なターンキーソリューションとして設計されており、スマートカードのセキュリティ分野でNXPが得た豊富な経験に基づく製品として、ハードウェアのRoot of TrustをIoT設計にもたらします。このデバイスは、専用のマイクロコントローラとセキュアな認証情報を利用したストレージを、Java Card OpenPlatform(JCOP)スマートカードオペレーティングシステム(OS)上に構築されたソフトウェアスタックと組み合わせています。Common Criteria(CC)Evaluation Assurance Level(EAL)Level 6拡張(EAL 6+)でOSレベルまで独立して認証されているSE050の動作プラットフォームは、多くの脅威に晒される状況で比類ないレベルの動作保証を実現します(図1)。

比類ないレベルの保証を可能にするSE050プラットフォームのグラフ(クリックして拡大)図1:認証済み製品の中で、SE050プラットフォームはCC EAL 6+でのOSレベルに至る認証によって、比類ないレベルの保証を提供します。(データ提供:Common Criteria)

専用のNXP IoTセキュリティアプレットは、この堅牢なセキュリティプラットフォームで実行するように最適化されており、内蔵の暗号化ライブラリを使用して、以下のような暗号化アルゴリズムの包括的なセットをサポートします。

  • Advanced Encryption Standard(AES)およびData Encryption Standard(DES)アルゴリズムを使用した対称暗号化
  • Rivest-Shamir-Adleman(RSA)およびElliptic-Curve Cryptography(ECC)アルゴリズムを使用した非対称暗号化、米国国立標準技術研究所(NIST)により指定された標準曲線を含む多くのECC曲線をサポート
  • メッセージ認証コード(MAC)の構築に使用される複数のハッシュ関数
  • パスワードハッシュ、キー共有、およびキー強化などの手法に使用される各種のキー導出関数(KDF)アルゴリズム

性能高速化のために、SE050デバイスは、Advanced Encryption Standard(AES)、Data Encryption Standard(DES)、Fast Attribute-based Message Encryption(FAME)暗号化用のハードウェアアクセラレータを統合しています。

暗号の操作中に使用される資格情報を保護するために、このデバイスは最大50KBの安全なユーザーフラッシュメモリを備えており、標準のIoTトランザクションをサポートするように設計されたルートキーがあらかじめ用意されています。大量の設計を作成する開発者は、NXPまたは認定サードパーティプロバイダにより安全にプロビジョニングされたカスタムキーと資格情報も活用できます。

このデバイスは、内蔵フラッシュメモリに加えて、ランダムアクセスメモリ(RAM)にアクセスして公開キー証明書などを格納できる一方、連携する秘密キーは安全なフラッシュメモリに残ったままになります。さらに、SE050 IoTアプレットには安全なインポート/エクスポート機能が含まれることで、開発者はキーまたは任意のデータを外部メモリに安全に保存できます。しかも、メモリ管理ユニットを使用することで、メモリの各所へのアクセスをIoTアプレットのみに制限し、マイクロコントローラを介した未認証のアクセスを防ぎます。また、不正変更や高度なサイドチャネル攻撃に対する保護をさらに高めるために、不正アクセスに対するさまざまな論理的/物理的なバリアも組み込んでいます。

しかしセキュリティには、未認証アクセスに対してバリアを設けるのと同様に、承認されたデバイスにアクセスを許可する役割もあります。

デバイス認証

IoTデバイスのRoot of Trustとしての役割を果たす上で、SE050の暗号化メカニズムとセキュアストレージ機能は、クラウドサーバなどの承認されたリモートホストとの通信に想定されるセキュアな接続を直接的にサポートします。実際、これらの同じような機能により、開発者は、SE050 SEで作成された各IoTデバイス同士のIoT階層の最低レベルで接続の信頼性を保証できます。

インテリジェントIoTセンサは、従来のインターネット認証と同様の方法を使用し、たとえばIoT制御デバイスに対して自身を認証できます。このプロセスでは、まずセンシングデバイスがそのSE050のセキュアストレージに保存されている証明書を制御デバイスに送信します。すると制御デバイスは、受け取った証明書をSE050の暗号化機能によって検証します。検証に成功すれば、制御デバイスはチャレンジと呼ばれるランダムな値をセンサデバイスに送り返します。次に、センサデバイスはSE050のSEを使用して、制御デバイスに以前送信したものと同じ証明書に関連付けられた秘密キーでチャレンジに署名します。署名されたチャレンジは連動する公開キーによってのみ検証できるので、制御デバイスは、元々センサデバイスから送信された証明書が確かにそのデバイスが所有するものであることを確認できます。これにより、制御デバイスはセンサデバイスを信頼して認証できます。

同じプロセスで役割を切り替えることで、制御デバイスはセンサに対して自身を認証できます。

このような相互認証プロセスは、信頼できるIoTネットワークを構築するために不可欠な要素で、特にエッジコンピューティングデバイスを含むより多くの中間的な階層の出現によりその傾向は高まっています。相互認証プロセスは単純ですが、初歩的な実装の間違いやプロトコルの異なる解釈が、深刻なセキュリティ欠陥の原因にもなり得ます。特に、リソースに制約のあるIoT設計では、安全なストレージと複雑な暗号アルゴリズムの迅速な実行が必要なことで、信頼性の高い実装がさらに複雑化するとも考えられます。SE050をあらゆるIoT設計に加えることで、開発者は全体的な設計パフォーマンスやセキュリティを損なうことなく、相互認証などの重要なセキュリティ機能を実装することができます。

シンプルで安全な統合

SE050の高度な機能を補完してくれるのが、デザインインの容易さです。開発者は、設計の複雑さやフットプリントへの影響を最小限に抑えたまま、このデバイスを各自のIoTハードウェア設計に簡単に統合することができます。アドオンデバイスとして機能するように設計されたこのデバイスは寸法が3mm x 3mmで、シンプルなシリアルインターフェースセットを備えています(図2)。

複数のインターフェースを備えたNXP SE050 SEの図図2:NXPのSE050 SEは複数のインターフェースを備えることで、ホストマイクロコントローラへの接続用のI2Cスレーブとして、デジタルセンサへのISO 7816ベース接続用のI2Cマスターとして、さらにISO 14443近距離無線通信(NFC)非接触インターフェースとして使用できます。(画像提供:NXP)

ホストマイクロコントローラとの通信のために、このデバイスはI2Cスレーブとして機能します。さらにSE050はI2Cマスターとしても機能し、デジタルセンサなど他のシリアルデバイスへのISO 7816ベース接続にも対応します。また、第3のインターフェースとして、ISO 14443 NFC非接触コネクティビティもサポートします。

さまざまな接続に対して、SE050のIoTアプレットは、セキュアキーとアクセス制御ルールを調整し、接続ごとのセッションを設定、管理します。

ホストとの通信用にSE050にはセッションベースの認証がありますが、これは、I2Cコマンドおよびデータの傍受や、マンインザミドル攻撃の使用を防ぐように設計されています。シリアル接続セッション開始のために、開発者はパスワードまたは個人識別番号(PIN)として機能するユーザーIDを使用して認証できます。

マイクロコントローラとSE050間のパスワードに基づく基本的な認証は、アプリケーションによっては必ずしも十分とは限りません。重要なアプリケーションの場合、ホストマイクロコントローラとSE050 SE間の通信で機密性を保ち、セッションを再生したり、異常な機能のセッションフラグメントを送信したり、暗号化アルゴリズムをハッキングされたバージョンに置き換えて機密データの抽出を狙ったりする攻撃を防ぐことが必要になる場合があります。

安全なバストランザクション

SE050 SEでは、各種の認証方法を使用してSE050とホストマイクロコントローラ間に安全な通信チャネルを作成できます。このとき、開発者はSecure Channel Protocol(SCP)SCP03規格に対応したSE050 ICのサポートを利用できます。この規格は、Java Cardデバイスとホスト間の双方向通信を保護するために広く使用されています。

SE050 SEを使って構築するマイクロコントローラベースの設計では、SCP03プロトコルを使用すると、I2Cバスセッション認証中にSE050 SEが基本的にホストマイクロコントローラにバインドされ、これによりセッション中に暗号化メッセージの使用が許可されます。SCP03プロトコル内でのメッセージ暗号化では、まずプレーンテキストメッセージがAESアルゴリズムを使用して暗号化され、暗号化されたメッセージのMACが生成されます。暗号化されたメッセージおよび関連するMACの両方を送信することにより、このメソッド(encrypt-then-MACと呼ばれる)は暗号化されたメッセージを保護し、受信者がメッセージに加えられた改変を検出できるようにします。

またSE050は、保護形式をセンサデータにも拡張します。ここでは、一意識別子、各インスタンスのランダム値形式でのフレッシュネスデータ、タイムスタンプ、および署名などの認証メタデータによって、ホストコマンドへの応答を増強するようにSE050に要求できます。ホストでは、ソフトウェアがSE050から受信した認証データを調べて、SE050 I2マスターインターフェースに接続されたセンサからのデータのソースと適時性を検証できます。

個々のセンサからのデータがIoT階層の上方に流れるストリームで結合されると、アプリケーションはこの認証データを使用して、センサの機能不全、障害、または侵害を示す異常なデータパターンの原因を特定できます。SCP03ホストセッションとセンサデータ認証により、開発者は重要なアプリケーションに不可欠なセンサデータを安全、確実に取得できます。

機能的インターフェース

認証要求と応答は、ホストマイクロコントローラとSE050 SE間のあらゆる対話と同様に、スマートカードデバイス向けのISO 7816機能インターフェース規格で定義されている通信スタックを流れます(図3)。このアプリケーションプロトコルデータ単位(APDU)規格は、ホストデバイス(HD)とSE間におけるメッセージ交換の形式、コンテンツ、プロトコルを定義します。

NXP SE050 SEとHD間の通信の図図3:NXP SE050 SEとHD間の通信はISO 7816スマートカード標準スタックによって進められます。このスタックはISO 7816 APDU規格を使用するアプリケーションレベルの要求と応答で構成されており、ISO 7816-3 T=1半二重プロトコルをI2C上で使用してデータリンクレイヤにより送信されます。(画像提供:NXP)

I2C物理層上に構築されたデータリンクレイヤは、アプリケーション層からの要求と応答を、I2C上でISO 7816-3 T=1半二重通信プロトコルに準じたトランザクションのシーケンスに分解します。このプロトコルでは、HDおよびSE上のデータリンクレイヤは、トランザクションシーケンスにおける送信ごとに確認応答を待ちます。

たとえば、ホストアプリケーションから発行された読み取り要求の場合、まずホストのデータリンクレイヤはSEをポーリングし、SE送信可能な状態を示す確認応答(ACK)を待ちます(図4)。

HDの要求を処理するデータリンクレイヤの図図4:データリンクレイヤは、ここに示される読み取り要求を含むHD要求を、I2C上でT=1プロトコルに準拠した一連のトランザクションとして処理します。ポーリングループから始めて確認応答(ACK)を受信するまで要求を繰り返し、受信したACKはSEがデータ送信可能な状態を示します。(画像提供:NXP)

ACK確認応答に続いて、SEのデータリンクレイヤはデータブロック転送のシーケンスとしてホストにデータを送信し、ブロック転送ごとにホストのデータリンクレイヤからの確認応答を待ちます(図5)。そして、ホストアプリケーションに完全な応答が送付されます。

データ応答をデータブロックのシーケンスとして送信するSEの図図5:データ送信可能な状態を示したら、SEはデータ応答をデータブロックのシーケンスとして送信し、HDからの確認応答を待ってから次のブロックをシーケンスで送信します。(画像提供:NXP)

ソフトウェア実装

アプリケーションレベルでは、ホストマイクロコントローラとSE050 SE間の交信は、ISO 7816 APDU規格を使用して行います。SE050では、コマンドと応答のAPDUはISO 7816-4で定義されたタグ、長さ、値(TLV)形式に基づきます。各APDUは、少なくともクラス(CLA)バイト(すべてのSE050動作の固定値)、命令(INS)バイト、および2つのパラメータ(P1、P2)バイトから構成されます。データ要求および応答には、読み取りバイト数(Le)、データフィールド長(Lc)のフィールド、データフィールドが追加で含まれる場合もあります。

たとえば、ホストアプリケーションによる読み取り要求は、TLVのペアを使用してSE050 I2Cインターフェースを構成し、読み取り要求を実行します(リスト1)。前述のように、ホストデータリンクレイヤは、この要求をT=1プロトコルに従って一連のI2Cバストランザクションに分解します。

コピー
static smStatus_t i2cm_Read(
    ex_sss_boot_ctx_t *pCtx, uint8_t *readbuf, uint32_t readLength)
{
    smStatus_t status;
    TLV[0].type = kSE05x_I2CM_Configure;
    TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS;
    TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz;
 
    TLV[1].type = kSE05x_I2CM_Read;
    TLV[1].cmd.rd.readLength = readLength;
    TLV[1].cmd.rd.rdBuf = readbuf;
 
    status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 3);
    return status;
}

リスト1:NXPのPlug & Trustミドルウェアにはソースコードが含まれており、このようなNXP SE050 SEへの基本的な読み取りコマンドなどのホストコマンドでISO 7816-4 TLV形式を使用する方法を示します。(コード提供:NXP)

リスト1に示すように、このコードは単純なC構造を使用して、構成と読み取り要求のTLVをエンコードします。ここで、各TLVはSE05x_I2CM_cmd_t構造を使用してインスタンス化されます(リスト2)。

コピー
typedef struct _SE05x_I2CM_cmd
{
    SE05x_I2CM_TLV_type_t type;
    SE05x_I2CM_INS_type_t cmd;
} SE05x_I2CM_cmd_t;
 
typedef enum _SE05x_I2CM_TLV_type
{
    kSE05x_I2CM_None = 0,
    kSE05x_I2CM_Configure,
    //kSE05x_I2CM_Security,
    kSE05x_I2CM_Write = 3,
    kSE05x_I2CM_Read,
    kSE05x_I2CM_StructuralIssue = 0xFF
} SE05x_I2CM_TLV_type_t;
 
typedef union _SE05x_I2CM_INS_type {
    SE05x_I2CM_configData_t cfg;
    SE05x_I2CM_securityData_t sec;
    SE05x_I2CM_writeData_t w;
    SE05x_I2CM_readData_t rd;
    SE05x_I2CM_structuralIssue_t issue;
} SE05x_I2CM_INS_type_t;
 
typedef struct _SE05x_I2CM_readData
{
    uint16_t readLength;
    SE05x_I2CM_status_t rdStatus;
    /* Output.rdBuf will point to Host buffer */
    uint8_t *rdBuf;
} SE05x_I2CM_readData_t;

リスト2:NXPのPlug & Trustソフトウェアディストリビューションは、要求タイプ(緑のハイライト)および関連するコマンドパラメータ(青のハイライト)を定義するための構造を実現します。(コード提供:NXP)

このSE05x_I2CM_cmd_t構造内で、typeメンバはC列挙、SE05x_I2CM_TLV_type_tによって定義されます。これは、たとえば読み取り要求APDU(kSE05x_I2CM_Read)の標準値の4など、可能な値をリストします。SE05x_I2CM_cmd_t構造のcmdメンバは、構造のunionで定義されます。この場合、cmdメンバはrd構造です。これは要求されたデータの長さ(readLength)とターゲットバッファポインタ(rdBuf)を指定するメンバによって構成されます。

この定義セットは数行のコードに抽象化され、リスト1のTLV[1]インスタンスtypeメンバを設定することで、読み取り要求(kSE05x_I2CM_Read)を示し、cmdメンバを対象のreadLengthおよびreadBufバッファポインタに設定します。

開発サポート

ソフトウェア開発を簡素化するため、NXPはホストがSE050 SEと行う対話を抽象化できるように、Plug & Trustミドルウェア、および連携するライブラリアプリケーションのプログラミングインターフェース(API)を用意しています(図6)。このNXPによるPlug & Trustミドルウェア配布パッケージは、ミドルウェアとAPIを、mbed TLS、OpenSSLなどのパッケージ上で作成されたサンプルアプリケーションセットと組み合わせています。さらに、Pythonベースのコマンドラインインターフェース(CLI)により、開発者はSE050の機能を対話モードで使用できます。

NXPのPlug & Trustソフトウェアパッケージの図図6:サンプルソフトウェアとともに、NXPのPlug & Trustソフトウェアパッケージにはミドルウェアと関連APIが含まれることで、ISO 7816ベースのスタックによりSE050との対話の詳細を抽象化します。このスタックはAPDUアプリケーション層、I2Cデータリンクレイヤ上のT=1、I2C物理層から構成されます。(画像提供:NXP)

開発者は、NXP Plug & Trustソフトウェアと連携しながら、OM-SE050ARD開発キットを使用してSE050をすばやく評価できます。この開発キットはSE050 SEとシンプルなサポート回路を複数のヘッダと組み合わせたものです。OM-SE050ARDボードには、外部I2CインターフェースとSE050ピンへの直接アクセス用コネクタとともに、Arduino-R3ヘッダも含まれています。開発者はArduino-R3ヘッダを使用することで、OM-SE050ARDボードを、NXPのI.MX 6ULTRALITE評価ボードやNXPのFRDM-K64F評価ボードなどさまざまな開発ボードに簡単に接続できます。

開発者は、サポート対象の評価ボードを使用することで、セキュリティの特定ユースケースをすばやく探索できます。この操作は、Plug & Trustソフトウェア各種サンプルによりプログラムで行うか、またはPythonベースのCLIにより対話的に行うこともできます。Plug & Trustソフトウェアディストリビューションのサンプルアプリケーションの中でも、サンプルソフトウェアからは、SE050 I2Cマスターインターフェース経由によるセンサデータ読み取りの完全なプロセスがわかります。開発者は、このサンプルアプリケーションをすばやく再構築して、従来のI2C読み取りを認証読み取りに置き換えられます。認証読み取りを使うには、リスト1に示されるTLV設定に対する変更は必要ありません。実際、この変更には、リスト1に示されるI2C読み取り関数Se05x_i2c_master_txn()を、認証済み読み取りバージョンSe05x_i2c_master_attst_txn()に、関連の関数パラメータとともに置き換える作業が含まれています。

他のサンプルアプリケーションには、エッジツークラウドのセキュリティの最終ステップとなる、認証およびクラウドサービスとのセキュア通信が示されます。開発者は、Plug & Trustソフトウェアのサンプルの中で、SE050を使用して認証やパブリッククラウドサービス(Microsoft Azure、IBM Watson、Amazon Web Services(AWS)、Google Cloud Platform(GCP)など)への安全な接続を可能にする、段階的な手順を知ることができます。これらのクラウド接続サンプルに含まれる作業の大部分は、それぞれのクラウドサービスでアカウントを作成し、キーと証明書をアップロード(サンプルルーチンでも提供)することにあります。SE050 SEは、通常は開発者が安全なクラウドコネクティビティ維持のために実行しなければならない重労働を処理します。

NXPのPlug & TrustソフトウェアスタックをNXPの開発ボードと組み合わせて使用することで、SE050 SEのIoTデバイス向けエッジツークラウドセキュリティの包括的なサポートを最大限に、しかも迅速に活用できます。

まとめ

セキュリティが貧弱なIoTデバイスは、大量の機密データを外部に露出する恐れがあり、他の接続済みリソースへの侵入ポイントにもなりかねません。開発者は、デバイスからクラウドまでIoTデバイスのライフサイクル全体をサポートするセキュアな基盤の上にIoT設計を構築する必要があります。この記事では、これを実現するために、NXPのSE050を活用して設計を強化することを取り上げました。このセキュアエレメントを利用することで、開発者は、エッジからクラウドまでに及ぶセキュリティ効果を高める新たな要件を満たすことができます。

DigiKey logo

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

著者について

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk氏は、IoTを含むハードウェア、ソフトウェア、システム、アプリケーションなど幅広いトピックについて、20年以上にわたってエレクトロニクス業界および電子業界に関する記事を書いたり経験を積んできました。彼はニューロンネットワークで神経科学のPh.Dを受け、大規模に分散された安全システムとアルゴリズム加速法に関して航空宇宙産業に従事しました。現在、彼は技術や工学に関する記事を書いていないときに、認知と推薦システムへの深い学びの応用に取り組んでいます。

出版者について

DigiKeyの北米担当編集者