6

TPM チップを搭載した x86_64 アプライアンスに TPM を使用して、ライセンス ドングルに相当するものを実装するように依頼されました。基本的に、アプライアンス用にリリースされたソフトウェアがアプライアンス自体でのみ実行できるようにすることが望まれます。これにより、ソフトウェアが仮想マシンまたは別のハードウェアに移行された場合に機能しなくなります。

私はこのソリューションがリバース エンジニアリングに耐性があるとは考えていませんが、通常のユーザーを妨害し、企業の顧客を正直に保つ典型的な「ドングル」タイプのソリューションだと思います。

TPM モジュール、TrouSerS、および openssl-tpm-engine コードを正常にビルドしてインクルードしました - TPM の所有権を正常に取得できますが、それ以上の利用可能なドキュメントではこのユースケースを完全にカバーしていません - またはこれまでのところ、わかりやすい英語の解決策を見つけることができませんでした。

可能であれば、プラットフォーム コンポーネントのハッシュを利用するよりも、TPM に格納されている秘密鍵の秘密の性質に依存することをお勧めします (ハード ドライブが故障したり、CPU が交換されたりする可能性があります。.定期的なハードウェアのアップグレード後にシステムが使用できなくなることはありません。

同様に、理想的には、このソリューションは、製造時に各アプライアンスの公開鍵を収集して署名キーチェーンに追加し、各アプライアンスが TPM に格納できた単一のキーに対してソフトウェアを署名できるように設計できるのではないかと考えています。 、ソフトウェアに複数回署名することを要求するのではなく? ここで間違っている可能性がありますが、プラットフォーム認証方法を満たすためのバルク方法が必要です。そうしないと、スケーリングが非常に困難に思えます。

4

1 に答える 1

5

アプライアンスを自分でセットアップする場合は、次のスキームに従うことができます。

A.出荷前:

  1. 所有権を取得 - ストレージ ルート キー (SRK) も作成します
  2. 移行不可能な署名キーを作成する
  3. ラップされたキーをプラットフォームの信頼できるキーストアに保存します
  4. 作成した鍵の公開鍵を DB/file-system/what-so-ever のどこかに保存します

B. アプリケーションの準備:

  1. アプリケーションのバイナリと一緒に公開鍵を出荷する必要があります
  2. 公開鍵をバイナリにコンパイルするのではなく、ルート CA 公開鍵のみがコンパイルされる CA システムのようなものを使用することを好みます。TPM 署名キーの公開部分は、証明書ファイルとして出荷できます。これにより、各アプライアンスのバイナリを個別にコンパイルできなくなります。

C. アプリケーションの起動時:

  1. ノンスを作成する
  2. TPM に NONCE に署名させる
  3. 証明書を読んで確認する
  4. 検証済みの証明書から公開鍵を抽出する
  5. 取得した公開鍵を使用して TPM から返された署名を検証します (もちろん、署名されたデータが NONCE と等しいかどうかを確認します)
  6. 署名が有効な場合 =>あなたは幸せです

注 1:理論的な観点からは、バイナリにパッチを適用できるため、このソリューションは安全ではありません。あなたはそれを知っているので、これはうまくいくはずです。

注 2:アプライアンスが自分でセットアップされていない場合、顧客が提供する可能性のある公開キーは信頼できません。


編集 1:特定の点をより正確に説明する

@A.2: TrouSerS の代わりに jtt と jTSS を使用いるため、TrouSerS パッケージにキーを作成するためのコマンド ライン ツールが含まれているかどうかはわかりません。しかし、それを行うための適切な API が提供されていることは確かです。とにかく、たとえばjttにcreate_keyはこれを行うコマンドがあります。このツールを使用すると、jTSS と TrouSerS のキー ストアが互換性がないという問題が発生します。

@A.3: いいえ、ストレージ ルート キー (SRk) と承認キー (EK) 以外に TPM 内に保存されるキーはありません。ただし、TPM は、TPM に属するキーの非公開部分が暗号化されていない形式で TPM の外部に存在しないことを保証します。したがって、暗号化された鍵素材を含む Trusted Software Stack (TSS -> jTSS、TrouSerS) によって何らかの方法で管理される鍵ストアがあります。TSS は、署名操作などに使用する前に、適切なキーを TPM にロードする役割も果たします。

@C*: アプリケーション側の暗号部分は非常に標準的です。その分野でのあなたの知識がどの程度かはわかりません。TPM 部分についても、TSS は高レベルの API を提供します。TPM で署名するための既存のコマンド ライン ツールがあるかどうかはわかりません。

于 2012-02-03T18:35:11.807 に答える