ロック解除フロー
ネットワークロック解除機能のエミュレートに先立ち、まずはメッセージフローを理解するところから始めます。一通りのロック解除の流れは、以下のようになります。 なお、文中の用語は下部にまとめておきます。
クライアントは、以下の情報を含むNKPU要求パケットをブロードキャストします。 ・キープロテクター(KP) ・KPの暗号化に使用したX.509証明書の拇印
サーバは、当該要求を処理してよいか、以下の観点で確認します。 ・(オプション)クライアントIPが、許可IPリストに掲載されているものと一致するか ・要求で使用された公開鍵に対応する秘密鍵にアクセス可能か(証明書の拇印を用いる)
サーバは、解除要求を許可する場合、以下のようにNKPU応答パケットを生成し、クライアント向けにユニキャストします。 ・保有する秘密鍵を用いて、KPを復号する ・KPに含まれるクライアント鍵(CK), セッション鍵(SK)を用いてキープロテクターレスポンス(KPR)を生成する ・DHCPパケットのオプションにKPRを含める
フローを図示すると、以下のようになります。(公式ドキュメントより引用)
出典:[MS-NKPU]: Network Key Protector Unlock Protocol 1.3.1 Message Flow Figure 1: Network key protector unlock process
用語集
・キープロテクター (KP) : CK並びにSKを、X.509公開鍵(PK)にてPKCS#1 v1.5を用いて暗号化したもの。復号すると64 bytesのデータとなり、前半の32 bytesがCK, 後半の32bytesがSKである。
・クライアント鍵 (CK) : クライアントがKPを用いてサーバに送り、サーバからKPRにて返送されることを期待している鍵。サイズは32 bytes
・セッション鍵 (SK) : KPR生成時に使用する、ランダムに生成された32 bytesの鍵。
・キープロテクターレスポンス (KPR) : CKヘッダ(12 bytes固定値, 0x2C 00 00 00 01 00 00 00 06 20 00 00)並びにCKを、SKにてAES-CCMを用いて暗号化し、得られたMAC(16 bytes)と暗号化データをこの順で並べたもの
パケット仕様
では本題の、NKPUで使用されるパケットの仕様を確認していきます。 仕様書上はIPv6, IPv4双方の定義が掲載されていますが、IPv4のみを紹介・実装することにします。
パケット仕様 (1) ― 共通事項
NKPUパケットは、要求/応答共に RFC2131 で規定されるDHCPパケット仕様に準拠します。NKPUに必要な情報は、すべてオプション領域に格納されます。 以下にDHCPパケット並びにそのオプション部のデータ構造を示します。表には参考まで、NKPU応答時に各フィールドにセットする値を記載しますが、独自研究であることに留意してください。
図1 DHCPパケット構造
フィールド名 サイズ [byte] 説明 応答時の値 op 1 opコード 0x02 htype 1 ハードウェアアドレス種別 0x01 hlen 1 ハードウェアアドレス長 0x06 hops 1 ホップ数 0x00 xid 4 トランザクションID 要求時と同一 secs 2 経過秒数 0x00 00 flags 2 フラグ 0x00 00 ciaddr 4 クライアントIPアドレス 0x00 00 00 00 yiaddr 4 “あなたの”IPアドレス 要求時と同一 siaddr 4 起動処理に使用されるIPアドレス 要求時と同一 giaddr 4 リレーエージェントのIPアドレス 要求時と同一 chaddr 16 クライアントのHWアドレス 要求時と同一 sname 64 サーバーホスト名 要求時と同一 file 128 ブートファイル名 要求時と同一 option variable オプションパラメータ 別途詳細解説
表1 DHCPパケットの各フィールド説明
図2 DHCPオプション領域構造
フィールド名 サイズ [byte] 説明 値 Magic Cookie 4 オプション部の開始を表す 0x63 82 53 63 Option Code 1 オプションコード 可変 Option Len 1 Option Data の長さ 可変 Option Data variable オプションデータ本体 可変 End Code 1 オプション部の終了を表す 0xFF
表2 DHCPオプション領域の各フィールド説明
なお、NKPUで使用されるDHCPオプションは、以下の通りです。
Option Code 要求時 応答時 含まれる情報 43 (0x2B) 〇 〇 NKPUデータ 60 (0x3C) 〇 〇 固定文字列(ASCII) “BITLOCKER” 125 (0x7D) 〇 ― NKPUデータ
表3 NKPUで使用されるDHCPオプション
パケット仕様 (2) ― NKPU要求時のオプション
(2) ― 1 オプション43仕様
本オプションの第1サブオプションには使用される証明書のフィンガープリントが、第2サブオプションにはキープロテクター(KP)の前半部分が含まれます。データ構造並びに各値(独自研究)は以下のとおりです。
図3 オプション43(要求時)構造
フィールド名 サイズ [byte] 説明 値 1st Suboption Code 1 サブオプション番号 0x01 1st Suboption Len 1 第1サブオプションの長さ 0x14 1st Suboption Data 20 証明書フィンガープリント 可変 2nd Suboption Code 1 サブオプション番号 0x02 2nd Suboption Len 1 第2サブオプションの長さ 0x80 2nd Suboption Data 128 KPの前半128byte 可変
表4 オプション43(要求時)の各フィールド説明
(2) ― 2 オプション125仕様
本オプションには、企業識別番号並びにKPの後半部分が含まれます。データ構造並びに各値(独自研究)は以下のとおりです。
図4 オプション125構造
フィールド名 サイズ [byte] 説明 値 Enteerprise Number 4 企業識別番号 0x00 00 01 37 Data Len 1 本フィールド以降の長さ 0x82 Suboption Code 1 サブオプション番号 0x01 Suboption Len 1 サブオプションの長さ 0x80 Suboption Data 128 KPの後半128byte 可変
表5 オプション125の各フィールド説明
パケット仕様 (3) ― NKPU応答時のオプション
NKPU応答時は、オプション43(とオプション60)が必要となります。オプション43にはキープロテクターレスポンス(KPR)が含まれ、そのデータ構造並びに各値(独自研究)は以下のとおりです。
図5 オプション43(応答時)構造
フィールド名 サイズ [byte] 説明 値 Suboption Code 1 サブオプション番号 0x02 Suboption Len 1 サブオプションの長さ 0x3C Suboption Data 60 KPR 可変
表6 オプション43(応答時)の各フィールド説明
ここまでで、サーバ側のエミュレートに必要な情報は揃いました。次回はクライアント側の設定について確認していきます。