web-dev-qa-db-ja.com

秘密を飛び地に入れる

クライアントマシンがsgx対応のサーバーにシークレットを配置してサーバーosを悪意のあるものと見なし、途中で人から保護する方法と、インターネット上のどこかでシークレットをエンクレーブに作成するべきではなく、クライアントから直接シークレットをエンクレーブに入れることを検討しましたクライアントは悪意のあるものではありません。

私がMIMと言うとき、私はOSを中間者として意味します。

TLS接続の使い方を知っています。

リモート認証について読みましたが、クライアントもsgx対応のマシンである必要がありますか?クライアントがsgx以外のマシンである場合、mim攻撃から保護しながら、シークレットを直接エンクレーブに入れるにはどうすればよいですか?

2
Roshan Mehta

クライアントは、SGXを使用するサービスとインターフェースするためにSGXをサポートする必要はありません。実際、リモート認証を使用する予定がない限り、サーバーがクライアントがSGXをサポートしているかどうかを知る方法はありません。

SGXでは、プロセッサの「セキュアエンクレーブ」内で特殊なコードを実行できます。プロセスの状態をデバッガーで調べることはできません。セキュアエンクレーブで使用されるメモリは、オペレーティングシステムからのアクセスからも保護されます。

エンクレーブにデータを配置する一般的な方法は、エンクレーブ内で公開/秘密鍵ペアを生成し、公開鍵をエンクレーブの外部にエクスポートしてから、クライアントに公開鍵でデータを暗号化させることです。 (現在暗号化されている)データはエンクレーブにコピーされ(必要に応じてネットワーク経由を含む)、SGXエンクレーブ内で復号化されます。この時点で、エンクレーブはデータに対して必要な操作をすべて実行できます。

SGXはハードウェアシーリングキーを使用して、同じホスト上でのみ回復できるデータを保持することもできます。

SGX at Black Hat USA 2016 に関する優れたプレゼンテーションがあり、これらの側面のいくつかの実装の詳細が提供されています。

1
David