注目ブログご紹介

VxWorks上でのTPMを使ったデータ暗号化


投稿者:Ka Kay Achacoso, 5/19/2016

VxWorksがサポートするデータ保護では、セキュリティシステムのRoot of Trustの構築に使われるセキュアな暗号プロセッサ、TPM(Trusted Platform Module)を利用します。TPMを利用できるセキュリティプロセスには、ローカル認証やリモート認証など、いくつかあります。このブログ記事では別の側面に焦点を当てて、ストレージのRoot of TrustとしてのTPMの活用と、VxWorksがTPMを使って保存データをセキュア化する仕組みを紹介します。

仮に、極秘データをVxWorksデバイス上に一組のバイトとして保存しているとしましょう。権限のない部外者にデータを読まれたくはありません。誰かがファイルをデバイスからコピーしたり、VxWorksデバイスをハッキングしてストレージ内のデータにアクセスを試みたりしたときに、データを読むことができては困ります。つまり、不正アクセスからデータを保護したいということです(図1)。


図1 VxWorksデバイスに格納された極秘データファイル

極秘データを不正な目から守るために、データを暗号化します。しかしTPMは、長いデータストリームの暗号化には向いていません。大きなデータについては、VxWorksはOpenSSLを搭載しており、256ビットの暗号鍵を使用するAES暗号化に対応しています。TPMハードウェアには乱数生成器が内蔵されており、暗号論的にセキュアな一意の256ビット鍵を生成できます。OpenSSLと、TPMによって生成された一意の256ビット鍵を使って、極秘データを暗号化できます。これで、データが2個になります。暗号化された極秘データと、極秘データの復号化に必要な256ビットのAES鍵の2つです(図2)。


図2:OpenSSLと256ビットのAES鍵を使って、極秘データを暗号化

ラップされた鍵の階層

暗号化された極秘データの安全性は、AES鍵と同等です。AES鍵があれば誰でも極秘データを読むことができます。AES鍵を保護するために、暗号化された別のファイルに暗号鍵を隠します。そこで、第2の鍵でAES鍵を暗号化します。トラステッド・コンピューティングの専門用語では、AES鍵をもう1つの鍵で「ラップ」したと言います。これで、持っているデータが3個になりました。暗号化された極秘データ、ラップされたAES鍵、そして、AES鍵のラップを解除するための鍵です(図3)。


図3:256ビットのAES鍵をもう1つの鍵でラップ

さて、極秘データの安全性はAES鍵の鍵と同等です。鍵をラップした極秘データの鍵に秘匿します。これをどこまでも繰り返せます。一番新しい鍵を別の鍵でラップして、「その」鍵をまた別の鍵でラップして、「その」鍵をまた別の鍵でラップして・・・。

このように結局、極秘データの安全性は一番新しい鍵と同等で、それがルート鍵です。TPMを活用するには、繰り返しラップされた鍵の最後のルート鍵を、TPMハードウェアの内部に秘匿できます。以下のような仕組みです。

図2に戻りましょう。極秘データと、256ビットのAES鍵があります。256ビットのAES鍵をラップして秘匿することにします。TPMがRSA鍵ペアを生成し、その公開鍵を使ってAES鍵をラップします。ラップされたAES鍵は、TPM内部にあるRSA公開鍵で暗号化されています。AES鍵のラップを解除するには、TPM内部にある秘密鍵が必要です(図4)。


図4:TPMが管理するRSA鍵を使って256ビットのAES鍵をラップ

しかし、TPMはRSA鍵ペアの秘密鍵を渡してくれません。代わりにTPMがくれるのは、TPM内のルート鍵でラップされたRSA鍵ペアです。ラップされたRSA鍵ペアは、バイト列のかたちをしています。ラップされたRSA鍵ペアを表すこのバイト列は、TPM鍵blobと呼ばれます。VxWorksデバイスのシャットダウン時には、RSA鍵ペアはTPMから消去されます。そのため、TPM鍵blobはどこかに保管しなければなりません。また、鍵blobはTPM内部にあるルート鍵でしかアンロックできません(図5)。


図5:TPMの外部から読み出せないストレージルート鍵(SRK)を使って、TPMがRSA鍵ペアをラップ

TPM内部にあるルート鍵は、ストレージルート鍵(SRK: Storage Root Key)と呼ばれる特殊な鍵です。TPM内に永続的に格納される数個の鍵の1つで、電源を切っても保持されます。知っているのはそのTPMだけで、TPMの外部に取り出すことはできません。TPMはSRKを使用して鍵のラップや解除を実行できますが、秘密鍵を読み出すことはできません。

ラップされた鍵のチェーン全体で、ルート鍵はTPM内部に永久にとどまるSRKです。ルート鍵にSRKを使うことで、ストレージのRoot of TrustをTPM内部に構築できます。

これで手元にあるのは、暗号化された極秘データ、ラップされたAES鍵、そしてRSA鍵blobになります。鍵blob内のRSA鍵は、TPMにしかわからないSRKを使ってラップされています。極秘データを復号化するには、RSA鍵blobをTPMにロードして、TPMがSRKを使ってラップを解除できるようにします。次に、ラップされたAES鍵をTPMに渡して、TPMがRSA鍵を使ってラップを解除できるようにします。そして、OpenSSLを使って、極秘データを復号化します。図5を右から左に逆戻りするだけです。

システム状態とパスワードを用いたデータのセキュア化

さらに、鍵のラップを解除できるのは、ラップ解除時のシステムの状態と、ラップ時のシステムの状態が一致する場合だけです。TPMには、プラットフォーム構成レジスタ(PCR: Platform Configuration Registers)と呼ばれる特殊なレジスタが内蔵されています。PCRの詳しい説明はこのブログ記事の範囲外ですが、簡単に説明すると、PCRの値はシステム上で動作するソフトウェアに一意で、複製できません。侵入者が別のソフトウェアを実行してラップされた鍵を読み出そうとしても、ラップは解除できません。


図6:SRKでラップされ、SRKパスワードと複製不可能なPCRで保護されているRSA鍵

SRKはSRKパスワードで保護されています。SRKパスワードを知っているユーザだけが、鍵チェーンの次の鍵のラップを解除できます(図6)。

まとめると、極秘データを読むことができるのは、以下の条件がすべて満たされた場合に限られます。

    • ラップされたAES鍵、ラップされたRSA鍵ペア、暗号化されたデータファイルが用意されている
    • 復号化には元のTPMハードウェアが使用される(暗号化された極秘データとラップされた鍵を別のデバイスに移動して、鍵のラップを解除してデータを読み出すことはできない)
    • VxWorksデバイスが、既知で所定のソフトウェアモジュールを実行している(デバイスを異なるOSでブートアップして、TPMを使用して鍵のラップを解除することはできない)
    • 鍵チェーンのラップ解除を開始するユーザが、SRKパスワードを知っている必要がある

VxWorks上でのTrouSerS

TrouSerS(http://trousers.sourceforge.net/)は、Trusted Computing Group(TCG)によって設計されたオープンソースソフトウェアスタックで、TPMハードウェアと対話するためのAPIを提供します。アプリケーションがTPMを利用できるように、VxWorksにはこのスタックがインテグレーションされています。TrouSerSの基本的な実装に加えて、TrouSerS TPM-Toolsモジュールも搭載されています。

TPM-Toolsモジュールには、VxWorks C-shellからTPMを簡単に制御するシンプルなコマンドが含まれています。ファイルをシーリング(暗号化)するプロセスは、OpenSSLやTPMの複数のコールから構成されます。TPM-Toolsモジュールは、このすべてのステップをtpm_sealdata()という1つのメソッドにラップします。このメソッドへの入力は、暗号化されるデータファイル、ロックされるPCRのリスト、SRKパスワードです。出力は1つの暗号化されたファイルで、3つのセクション(暗号化されたデータ、ラップされたAES鍵、TPMからラップされたRSA鍵blob)から構成されます。このファイルはファイルシステムに保管できます。ファイルを開く(復号化)するときは、TPM-Toolsのtpm_unsealdata()メソッドを利用します。暗号化されたファイルを3つのセクションに分解してから、TPMを使って鍵のラップを解除し、OpenSSLを用いてデータを復号化します。

ファイル暗号化のバリエーション

このブログで説明したファイル暗号化のプロセスは、tpm_sealdata()の実行に従ったもので、ファイル暗号化処理の一例です。各自のニーズに合うように、この処理に手を加えることが可能です。たとえば、鍵ラップを行う回数を増やしたり、ラップされた鍵を他のストレージ領域に保管したりできます。鍵blobごとに異なるパスワードを入力することも可能です。極秘データの暗号化アルゴリズムを変えることもできます。

TPMには、特定の1つのハードウェアに固定されないように、別のTPMに移行可能なルート鍵を定義するオプションがあります。詳細については、TPM Migratable Root Keyを調べてください。

データの暗号化を扱う際は、ルート鍵を永久に失った場合についても理解しておく必要があります。そういった場合、データは永遠に暗号化されたままで、所有者にも読めなくなります。たとえば、大抵のシステムでは、TPMをクリアすることが可能で、そうするとSRKは永久に消えてしまいます。SRKがなくては、鍵のラップを解除してデータを復号化する手段はありません。もしシステム状態が改変されて、鍵のラップ時に動作していたソフトウェアを実行できなくなると、元のPCR値がラップ解除に必要な値と一致しなくなります。

VxWorksチームは、組込みデバイス向けセキュリティソリューションの提供に取り組んでいます。TPMサポートを利用したデータ保護は、VxWorksプラットフォームの数あるセキュリティソリューションの1つです。他のセキュリティソリューションについては、以下をご覧ください。http://www.windriver.com/products/vxworks/technology-profiles/#security