2016-10-19 5 views
0

インテルSGXのエンクレーブ測定に関する質問があります。 SignTool source code(およびマニュアルの高水準の説明)によって判断すると、エンクレーブファイル(ELFまたはPE)のロードが必要になると考えられます。しかし、ロードの結果はプラットフォームによって異なります。私は、エンクレーブバイナリから一貫性のあるエンクレーブ測定値を再現できるかどうか疑問です。インテルSGX:エンクレーブバイナリからのエンクレーブ測定の再現

特に、次のシナリオを検討しています。enclave.signed.soをユーザーに配布したいとし、その特定のエンクレーブからのリクエストのみを処理したいとします。私は、自分のプラットフォーム上のローカル測定値をユーザーのものと簡単に比較することはできないと思います(彼らの証明に含めることができます)。代わりに私は何をすべきですか?

本質的には、バイナリと測定を暗号的にリンクする方法に問題がありますか?逆説があるようです。私は、エンクレーブバイナリを持っていると仮定します。私がその測定値をロードする唯一の方法は、ロードすることです。ただし、ローディングプロセスはで、は信頼できません(OSによって完了)!私が得た測定値が確かに特定のバイナリであることを保証するにはどうすればいいですか? SGXの有効性全体にとって非常に重要と思われるので、私は何か誤解していたはずです。私を修正してください。

ありがとうございます!

答えて

0

"本当の"エンクレーブ測定を確立するには、信頼できるシステムが必要です。

エンクレーブの測定は、プロセッサによって行われます。各エンクレーブ作成ステップ/命令で測定値を置換します。 specificationは、この順列についてかなり詳細に説明しています。例えばECREATEの擬似コードは、測定フィールドについては、この声明が含まれています

(* Initialize hash updates etc*) 
Initialize enclave’s MRENCLAVE update counter; 
(* Add “ECREATE” string and SECS fields to MRENCLAVE *) 
TMPUPDATEFIELD[63:0] = 0045544145524345H; // “ECREATE” 
TMPUPDATEFIELD[95:64] = DS:TMP_SECS.SSAFRAMESIZE; 
TMPUPDATEFIELD[159:96] = DS:TMP_SECS.SIZE; 
TMPUPDATEFIELD[511:160] = 0; 
SHA256UPDATE(DS:TMP_SECS.MRENCLAVE, TMPUPDATEFIELD) 
INC enclave’s MRENCLAVE update counter; 

は、論文の記述が網羅されていると1つの作成手順は、ドライバによって実行される順序を知っている、1は計算することができるはずと仮定すると、エンクレーブの測定をロードせずに。したがって、エンクレーブ内の値を計算することができます。しかし、このエンクレーブの測定はどのように計算されますか?

関連する問題