BitLocker 回復ガイド

適用対象:

  • Windows 10
  • Windows 11
  • Windows Server 2016 以上

この記事では、AD DS から BitLocker キーを回復する方法について説明します。

組織は、Active Directory Domain Services (AD DS) に保存されている BitLocker 回復情報を使用して、BitLocker で保護されたデータにアクセスできます。 BitLocker の展開を計画するときに、BitLocker の復旧モデルを作成することをお勧めします。

この記事では、BitLocker 回復情報を自動的にバックアップするように AD DS を設定する方法と、AD DS に保存される回復情報の種類が理解されていることを前提としています。

この記事では、BitLocker 回復情報を格納するように AD DS を構成する方法について詳しく説明しません。

BitLocker 回復とは

BitLocker 回復は、ドライブのロックを正常に解除できない場合に、BitLocker で保護されたドライブにアクセスを復元できるプロセスです。 復旧シナリオでは、ドライブへのアクセスを復元するための次のオプションを使用できます。

  • ユーザーは回復パスワードを指定できます。 組織で回復パスワードを印刷または保存できる場合、ユーザーは、USB ドライブに印刷または保存した 48 桁の回復パスワード、またはオンラインのMicrosoft アカウントを使用して入力できます。 Microsoft アカウントを使用して回復パスワードをオンラインで保存することは、ドメインのメンバーではない PC で BitLocker を使用する場合にのみ許可されます。

  • データ復旧エージェントは、資格情報を使用してドライブのロックを解除できます。 ドライブがオペレーティング システム ドライブの場合、データ回復エージェントがロックを解除するには、ドライブを別のコンピューターにデータ ドライブとしてマウントする必要があります。

  • ドメイン管理者は、AD DS から回復パスワードを取得し、それを使用してドライブのロックを解除できます。 AD DS に回復パスワードを格納することは、IT プロフェッショナルが必要に応じて組織内のドライブの回復パスワードを取得できるようにする方法を提供することをお勧めします。 この方法では、BitLocker グループ ポリシー設定でこの回復方法を有効にすることが必須になります。ローカル グループ ポリシー エディターの [コンピューター構成>管理用テンプレート>] Windows コンポーネント>BitLocker ドライブ暗号化>オペレーティング システム ドライブにある BitLocker で保護されたオペレーティング システム ドライブを回復する方法を選択します。 詳しくは、「BitLocker グループ ポリシー設定」をご覧ください。

BitLocker 回復の原因

次の一覧では、オペレーティング システム ドライブを起動しようとしたときに BitLocker が回復モードになる特定のイベントの例を示します。

  • BitLocker ドライブ暗号化を使用する PC、または BitLocker デバイス暗号化 のみを使用するタブレットやスマートフォンなどのデバイスでは、攻撃が検出されると、デバイスはすぐに再起動して BitLocker 回復モードになります。 この機能を利用するために、管理者は、ローカル グループ ポリシー エディターの [コンピューターの構成>] [Windows 設定] [セキュリティ設定>] [ローカル ポリシー>] [セキュリティ オプション] > にある [対話型ログオン: コンピューター アカウントロックアウトしきい値] グループ ポリシー設定を設定できます。 または、Exchange ActiveSyncMaxFailedPasswordAttempts ポリシー (Microsoft Intuneでも構成可能) を使用して、デバイスがデバイス ロックアウトに入る前に失敗したパスワード試行の数を制限することもできます。

  • TPM 1.2 のデバイスでは、BIOS またはファームウェアのブート デバイスの順序を変更すると、BitLocker の回復が発生します。 ただし、TPM 2.0 を使用するデバイスでは、この場合、BitLocker の回復は開始されません。 TPM 2.0 では、OS ブート ローダーが侵害されていないため、ブート デバイスの順序のファームウェア変更はセキュリティ上の脅威とは見なされません。

  • BIOS の起動順序でハード ドライブの前に CD または DVD ドライブを持ってから、CD または DVD を挿入または削除します。

  • ハード ドライブから起動する前に、ネットワーク ドライブから起動できない。

  • ポータブル コンピューターのドッキングまたはドッキング解除。 場合によっては (コンピューターの製造元と BIOS に応じて)、ポータブル コンピューターのドッキング状態はシステム測定の一部であり、システムの状態を検証し、BitLocker のロックを解除するために一貫性が必要です。 そのため、BitLocker がオンのときにポータブル コンピューターがドッキング ステーションに接続されている場合は、ロックが解除されたときにドッキング ステーションに接続する必要もあります。 逆に、BitLocker がオンのときにポータブル コンピューターがドッキング ステーションに接続されていない場合は、ロックが解除されたときにドッキング ステーションから切断する必要がある場合があります。

  • プライマリ パーティションの作成、削除、サイズ変更など、ディスク上の NTFS パーティション テーブルに対する変更。

  • TPM のハンマリング防止ロジックがアクティブになるように、ID 番号 (PIN) を間違って入力する回数が多すぎます。 アンチハンマリング ロジックは、一定の時間が経過するまで PIN エントリを受け入れないようにすることで、PIN に対するブルート フォース攻撃の難易度とコストを増加させるソフトウェアまたはハードウェアの方法です。

  • TPM ではなく USB ベースのキーを使用している場合は、BIOS または UEFI ファームウェアからプレブート環境で USB デバイスを読み取るためのサポートをオフにします。

  • TPM のオフ、無効化、非アクティブ化、またはクリア。

  • BIOS や UEFI ファームウェアのアップグレードなど、重要な初期スタートアップ コンポーネントをアップグレードすると、関連するブート測定値が変更されます。

  • PIN 認証が有効になっている場合に PIN を忘れる。

  • オプション ROM ファームウェアの更新。

  • TPM ファームウェアのアップグレード。

  • ハードウェアの追加または削除。たとえば、一部の PCMIA ワイヤレス カードを含む新しいカードをコンピューターに挿入します。

  • ポータブル コンピューターのスマート バッテリを取り外した、装着した、または充電残量を完全に使い果たした。

  • ディスク上のマスター ブート レコードに対する変更。

  • ディスク上のブート マネージャーに対する変更。

  • オペレーティング システムから TPM を非表示にします。 一部の BIOS または UEFI 設定を使用して、オペレーティング システムへの TPM の列挙を防ぐことができます。 このオプションを実装すると、オペレーティング システムから TPM を非表示にすることができます。 TPM が非表示の場合、BIOS と UEFI のセキュリティで保護されたスタートアップは無効になり、TPM はどのソフトウェアからのコマンドにも応答しません。

  • PIN を正しく入力しない、またはキーボード マップが起動前環境で想定されているキーボード マップと一致しない別のキーボードを使用する。 この問題により、拡張 PIN が入力できなくなる可能性があります。

  • TPM 検証プロファイルで使用されるプラットフォーム構成レジスタ (PCR) の変更。 たとえば、 PCR[1] を 含めると、BitLocker は BIOS 設定に対するほとんどの変更を測定し、ブート以外の重要な BIOS 設定が変更された場合でも BitLocker が回復モードに入ります。

    一部のコンピューターには、 PCR[2] などの特定の PCR への測定値をスキップする BIOS 設定があります。 BIOS でこの設定を変更すると、PCR 測定が異なるため、BitLocker が回復モードになります。

  • BitLocker で保護されたドライブを新しいコンピューターに移動する。

  • 新しい TPM を使用してマザーボードを新しいマザーボードにアップグレードする。

  • スタートアップ キー認証が有効になっているときに、スタートアップ キーを含む USB フラッシュ ドライブが失われます。

  • TPM 自己テストに失敗しました。

  • BIOS、UEFI ファームウェア、またはオプション ROM コンポーネントが、クライアント コンピューターの関連するトラステッド コンピューティング グループ標準に準拠していない。 たとえば、非準拠の実装では、TPM 測定値に揮発性データ (時間など) が記録され、スタートアップごとに異なる測定値が発生し、BitLocker が回復モードで起動する可能性があります。

  • TPM のストレージ ルート キーの使用承認を 0 以外の値に変更する。

    BitLocker TPM 初期化プロセスでは、使用状況の承認値が 0 に設定されるため、別のユーザーまたはプロセスがこの値を明示的に変更している必要があります。

  • コード整合性チェックを無効にするか、Windows ブート マネージャー (Bootmgr) でテスト署名を有効にします。

  • ブート プロセス中に F8 キーまたは F10 キーを押します。

  • アドイン カード (ビデオカードやネットワーク カードなど) の追加または削除、またはアドイン カードのファームウェアのアップグレード。

  • ブート プロセス中に BIOS ホット キーを使用して、ブート順序をハード ドライブ以外のものに変更します。

復旧を開始する前に、復旧の原因を特定することをお勧めします。 これは、問題が将来再び発生するのを防ぐのに役立つ可能性があります。 たとえば、攻撃者が物理アクセスを取得してコンピューターを変更したと判断された場合、物理的なプレゼンスを持つユーザーを追跡するための新しいセキュリティ ポリシーを作成できます。 回復パスワードを使用して PC へのアクセスを回復した後、BitLocker は暗号化キーを測定されたコンポーネントの現在の値に再シールします。

既知のハードウェアやファームウェアのアップグレードなどの計画的なシナリオでは、BitLocker 保護を一時的に中断することで回復を開始しないようにすることができます。 BitLocker を一時停止するとドライブは完全に暗号化されたままになりますので、管理者は、計画されたタスクが完了した後に BitLocker 保護をすばやく再開できます。 一時停止と再開を使用すると、回復キーのエントリを必要とせずに暗号化キーも再シールされます。

中断された BitLocker は、manage-bde コマンド ライン ツールを使用して再起動回数が指定されていない限り、PC の再起動時に保護を自動的に再開します。

ソフトウェアのメンテナンスでコンピューターを再起動する必要があり、2 要素認証が使用されている場合、BitLocker ネットワーク ロック解除機能を有効にして、追加の認証方法を提供するオンプレミス ユーザーがコンピューターにいない場合に、セカンダリ認証要素を提供できます。

復旧は、計画外または望ましくない動作のコンテキスト内で記述されています。 ただし、復旧は、たとえば、アクセス制御を管理するために、意図した運用シナリオとして発生する可能性もあります。 デスクトップ コンピューターまたはラップトップ コンピューターを社内の他の部門または従業員に再展開すると、コンピューターが新しいユーザーに提供される前に、BitLocker を強制的に復旧させることができます。

回復のテスト

BitLocker の完全な回復プロセスを作成する前に、回復プロセスが両方のエンド ユーザー (回復パスワードのヘルプデスクを呼び出すユーザー) と管理者 (エンド ユーザーが回復パスワードを取得するのに役立つユーザー) にどのように動作するかをテストすることをお勧めします。 のコマンドmanage-bde.exe-forcerecovery、ユーザーが回復状況に遭遇する前に回復プロセスをステップ実行する簡単な方法です。

ローカル コンピューターの回復を強制するには:

  1. [ スタート ] ボタンを選択し、cmd と入力 します

  2. cmd.exeまたはコマンド プロンプトを右選択し、[管理者として実行] を選択します。

  3. コマンド プロンプトで、次のコマンドを入力します。

    manage-bde.exe -forcerecovery <BitLockerVolume>
    

リモート コンピューターの回復を強制するには:

  1. [ スタート ] ボタンを選択し、cmd と入力 します

  2. cmd.exeまたはコマンド プロンプトを右選択し、[管理者として実行] を選択します。

  3. コマンド プロンプトで、次のコマンドを入力します。

    manage-bde.exe -ComputerName <RemoteComputerName> -forcerecovery <BitLockerVolume>
    

    によって -forcerecovery トリガーされた回復は、TPM 保護機能が追加されるか、ユーザーによって保護が中断されるまで、複数の再起動に対して永続化されます。 モダン スタンバイ デバイス (Surface デバイスなど) を -forcerecovery 使用する場合は、OS を再度起動する前に、BitLocker を WinRE 環境から手動でロック解除して無効にする必要があるため、このオプションはお勧めしません。 詳細については、「 BitLocker トラブルシューティング: スレート デバイスでの BitLocker 回復を使用した継続的な再起動ループ」を参照してください。

復旧プロセスの計画

BitLocker 回復プロセスを計画するときは、まず、機密情報を回復するための組織の現在のベスト プラクティスを参照してください。 たとえば、企業は失われた Windows パスワードをどのように処理しますか? 組織でスマート カード PIN のリセットはどのように実行されますか? これらのベスト プラクティスと関連リソース (人とツール) を使用して、BitLocker 回復モデルを作成できます。

BitLocker ドライブ暗号化と BitLocker To Go に依存する組織は、Windows 11、Windows 10、Windows 8、または Windows 7 オペレーティング システムと Windows to Go を実行している多数のコンピューターとリムーバブル ドライブ上のデータを保護するために、Microsoftの使用を検討する必要があります。 BitLocker 管理および監視 (MBAM) ツール バージョン 2.0。これは、Microsoft ソフトウェア アシュアランス用の Microsoft デスクトップ最適化パック (MDOP) に含まれています。 MBAM を使用すると、BitLocker の実装の展開と管理が容易になり、管理者はオペレーティング システムと固定ドライブの暗号化をプロビジョニングおよび監視できます。 MBAM は、固定ドライブを暗号化する前にユーザーにメッセージを表示します。 MBAM では、固定ドライブとリムーバブル ドライブの回復キーも管理されるため、復旧の管理が容易になります。 MBAM は、Microsoft System Center の展開の一部として、またはスタンドアロン ソリューションとして使用できます。 詳細については、「BitLocker の管理と監視Microsoft」を参照してください。

BitLocker の回復が開始された後、ユーザーは回復パスワードを使用して、暗号化されたデータへのアクセスのロックを解除できます。 組織の自己回復と回復の両方のパスワード取得方法を検討してください。

復旧プロセスが決定された場合:

自己回復

場合によっては、ユーザーはプリントアウトまたは USB フラッシュ ドライブに回復パスワードを持ち、自己回復を実行できます。 組織では、自己回復のためのポリシーを作成することをお勧めします。 USB フラッシュ ドライブに保存されているパスワードまたは回復キーの使用が自己回復に含まれている場合は、特に旅行中に、PC と同じ場所に USB フラッシュ ドライブを保存しないように警告する必要があります。 たとえば、PC と回復項目の両方が同じバッグに入っている場合、承認されていないユーザーが PC に簡単にアクセスできます。 もう 1 つのポリシーは、根本原因を特定できるように、自己回復を実行する前または実行後にユーザーがヘルプデスクに連絡できるようにすることです。

回復パスワードの取得

ユーザーが回復パスワードを印刷していない場合、または USB フラッシュ ドライブ上に存在する場合、ユーザーはオンライン ソースから回復パスワードを取得できる必要があります。 PC がドメインのメンバーである場合は、回復パスワードを AD DS にバックアップできます。 ただし、AD DS への回復パスワードのバックアップは既定では行われません。 AD DS への回復パスワードのバックアップは、PC で BitLocker が有効になる 前に 、適切なグループ ポリシー設定を使用して構成する必要があります。 BitLocker グループ ポリシー設定は、ローカル グループ ポリシー エディターまたは グループ ポリシー 管理コンソール (GPMC) の [コンピューターの構成>] [管理用テンプレート>] [Windows コンポーネント>] [BitLocker ドライブの暗号化] にあります。 次のポリシー設定では、認証方法が失敗した場合、または使用できない場合に BitLocker で保護されたドライブへのアクセスを復元するために使用できる回復方法を定義します。

  • BitLocker で保護されたオペレーティング システム ドライブを回復する方法を選択する

  • BitLocker で保護された固定ドライブを回復する方法を選択する

  • BitLocker で保護されたリムーバブル ドライブを回復する方法を選択する

これらの各ポリシーで、[BitLocker 回復情報の保存] を選択してActive Directory Domain Servicesし、AD DS に格納する BitLocker 回復情報を選択します。 コンピューターがドメインに接続されていて 、ドライブの BitLocker 回復情報の AD DS へのバックアップが成功しない限り、ユーザーが BitLocker を有効にできないようにする場合は、[回復情報が AD DS に格納されるまで BitLocker を有効にしない] チェック ボックスをオンにします。

PC がワークグループの一部である場合、ユーザーは、Microsoft アカウントで BitLocker 回復パスワードをオンラインで保存することをお勧めします。 回復が必要な場合にデータへのアクセスが失われないように、BitLocker 回復パスワードのオンライン コピーを用意することをお勧めします。

Active Directory ユーザーとコンピューターツールの BitLocker 回復パスワード ビューアーを使用すると、ドメイン管理者は Active Directory 内の特定のコンピューター オブジェクトの BitLocker 回復パスワードを表示できます。

次の一覧は、回復パスワード取得のための回復プロセスを作成するためのテンプレートとして使用できます。 このサンプル プロセスでは、Active Directory ユーザーとコンピューター ツールに BitLocker 回復パスワード ビューアーを使用します。

ユーザーのコンピューターの名前を記録する

ユーザーのコンピューターの名前を使用して、AD DS で回復パスワードを見つけることができます。 ユーザーがコンピューターの名前がわからない場合は、BitLocker ドライブ暗号化パスワード 入力ユーザー インターフェイスのドライブ ラベルの最初の単語を読み取るようにユーザーに依頼します。 この単語は、BitLocker が有効な場合のコンピューター名であり、おそらくコンピューターの現在の名前です。

ユーザーの ID を確認する

回復パスワードを要求しているユーザーは、そのコンピューターの承認されたユーザーとして確認する必要があります。 また、ユーザーが名前を指定したコンピューターがユーザーに属しているかどうかを確認する必要もあります。

AD DS で回復パスワードを見つける

AD DS で一致する名前のコンピューター オブジェクトを見つけます。 コンピューター オブジェクト名は AD DS グローバル カタログに一覧表示されるため、オブジェクトはマルチドメイン フォレストであっても配置できる必要があります。

複数の回復パスワード

AD DS のコンピューター オブジェクトの下に複数の回復パスワードが格納されている場合、BitLocker 回復情報オブジェクトの名前には、パスワードが作成された日付が含まれます。

正しいパスワードが指定されていることを確認したり、正しくないパスワードを指定しないようにするには、回復コンソールに表示される 8 文字のパスワード ID をユーザーに読み取るように依頼します。

パスワード ID は AD DS に格納されている各回復パスワードに関連付けられている一意の値であるため、この ID を使用してクエリを実行すると、暗号化されたボリュームのロックを解除するための正しいパスワードが検索されます。

回復が発生した理由を特定するための情報を収集する

ユーザーに回復パスワードを与える前に、回復が必要な理由を判断するのに役立つ情報を収集する必要があります。 この情報は、復旧後の分析中に根本原因を分析するために使用できます。 復旧後の分析の詳細については、「復旧 後の分析」を参照してください。

ユーザーに回復パスワードを付与する

回復パスワードの長さは 48 桁であるため、ユーザーはパスワードを書き留めたり、別のコンピューターに入力したりして記録する必要がある場合があります。 MBAM または BitLocker Management Configuration Managerを使用している場合、管理されていないパスワードに関連するセキュリティ リスクを回避するために、MBAM または Configuration Manager データベースから回復された後に回復パスワードが再生成されます。

48 桁の回復パスワードは長く、数字の組み合わせが含まれているため、ユーザーはパスワードの誤った読み取りや入力ミスを行う可能性があります。 ブート時回復コンソールでは、組み込みのチェックサム番号を使用して、48 桁の回復パスワードの各 6 桁のブロックの入力エラーを検出し、ユーザーにそのようなエラーを修正する機会を提供します。

復旧後の分析

回復パスワードを使用してボリュームのロックが解除されると、イベントがイベント ログに書き込まれ、プラットフォーム検証の測定値が TPM でリセットされ、現在の構成に一致します。 ボリュームのロックを解除すると、暗号化キーが解放され、データがボリュームに書き込まれるときにその場で暗号化する準備が整い、ボリュームからデータを読み取るときにその場で暗号化解除する準備が整います。 ボリュームのロックが解除されると、BitLocker は、アクセス権の付与方法に関係なく、同じ方法で動作します。

コンピューターで回復パスワードのロック解除が繰り返されていることに気付いた場合、管理者は回復後の分析を実行して回復の根本原因を特定し、BitLocker プラットフォームの検証を更新して、ユーザーがコンピューターを起動するたびに回復パスワードを入力する必要がなくなったようにすることができます。 詳細については、以下を参照してください。

回復の根本原因を特定する

ユーザーがドライブを回復する必要がある場合は、できるだけ早く復旧を開始した根本原因を特定することが重要です。 コンピューターの状態を適切に分析し、改ざんを検出すると、企業のセキュリティに広範な影響を与える脅威が発生する可能性があります。

管理者は、場合によっては復旧の原因をリモートで調査できますが、エンド ユーザーは、回復されたドライブを含むコンピューターをサイトに持ち込み、根本原因をさらに分析する必要がある場合があります。

組織に関する次の質問を確認して回答します。

  1. 有効な BitLocker 保護モード (TPM、TPM + PIN、TPM + スタートアップ キー、スタートアップ キーのみ) PC で使用されている PCR プロファイルはどれですか?

  2. ユーザーは単に PIN を忘れたか、スタートアップ キーを失いましたか? トークンが失われた場合、トークンはどこにありますか?

  3. TPM モードが有効であった場合、回復はブート ファイルの変更によって引き起こされましたか?

  4. ブート ファイルの変更によって回復が発生した場合、目的のユーザー アクション (BIOS アップグレードなど) や悪意のあるソフトウェアが原因でブート ファイルが変更されたかどうか。

  5. ユーザーが最後にコンピューターを正常に起動できたのはいつですか。

  6. ユーザーが悪意のあるソフトウェアを見つけたか、最後に正常に起動してからコンピューターを無人のままにした可能性がありますか?

これらの質問に回答するには、BitLocker コマンド ライン ツールを使用して、現在の構成と保護モードを表示します。

manage-bde.exe -status

イベント ログをスキャンして、回復が開始された理由を示すのに役立つイベントを見つけます (たとえば、ブート ファイルの変更が発生した場合)。 これらの両方の機能をリモートで実行できます。

根本原因を解決する

回復の原因が特定された後、BitLocker 保護をリセットして、すべての起動時に回復を回避できます。

このリセットの詳細は、回復の根本原因によって異なる場合があります。 根本原因を特定できない場合、または悪意のあるソフトウェアまたはルートキットがコンピューターに感染している可能性がある場合は、適切に対応するためにベスト プラクティスのウイルス ポリシーを適用する必要があります。

BitLocker 検証プロファイルのリセットは、BitLocker を中断して再開することで実行できます。

不明な PIN

ユーザーが PIN を忘れた場合は、コンピューターが再起動されるたびに BitLocker が回復を開始しないようにするために、コンピューターへのサインオン中に PIN をリセットする必要があります。

不明な PIN による継続的な回復を防ぐために

  1. 回復パスワードを使用してコンピューターのロックを解除します。

  2. PIN をリセットします。

    1. ドライブを選択して長押しし、[PIN の変更] を選択します

    2. [BitLocker ドライブ暗号化] ダイアログで、[ 忘れた PIN をリセットする] を選択します。 サインインしているアカウントが管理者アカウントでない場合は、現時点で管理者資格情報を指定する必要があります。

    3. [PIN リセット] ダイアログで、使用する新しい PIN を指定して確認し、[ 完了] を選択します。

  3. 新しい PIN は、次回ドライブのロックを解除する必要がある場合に使用できます。

スタートアップ キーが失われました

スタートアップ キーを含む USB フラッシュ ドライブが失われた場合は、回復キーを使用してドライブのロックを解除する必要があります。 その後、新しいスタートアップを作成できます。

スタートアップ キーが失われたことによる継続的な回復を防ぐため

  1. スタートアップ キーが失われたコンピューターに管理者としてサインインします。

  2. [BitLocker の管理] を開きます。

  3. [ 起動キーの複製] を選択し、キーが書き込まれるクリーン USB ドライブを挿入し、[保存] を選択 します

ブート ファイルの変更

このエラーは、ファームウェアが更新された場合に発生します。 ベスト プラクティスとして、ファームウェアを変更する前に BitLocker を中断する必要があります。 その後、ファームウェアの更新が完了した後に保護を再開する必要があります。 BitLocker を一時停止すると、コンピューターが回復モードに移行できなくなります。 ただし、BitLocker 保護がオンのときに変更が行われた場合は、回復パスワードを使用してドライブのロックを解除できます。プラットフォーム検証プロファイルが更新され、次回回復が行われないようにします。

Windows REと BitLocker デバイスの暗号化

Windows Recovery Environment (RE) を使用して、 BitLocker デバイス暗号化によって保護されたドライブへのアクセスを回復できます。 2 つの障害が発生した後に PC を起動できない場合は、スタートアップ修復が自動的に開始されます。 起動エラーが原因でスタートアップ修復が自動的に起動されると、ブート ログまたは使用可能なクラッシュ ダンプが特定の破損したファイルを指している場合、オペレーティング システムとドライバー ファイルの修復のみが実行されます。 Windows 8.1以降のバージョンでは、PCR の特定の TPM 測定をサポートするファームウェアを含むデバイス [7] TPM は、Windows REが信頼できる動作環境であることを検証し、Windows REが変更されていない場合は BitLocker で保護されたドライブのロックを解除できます。 たとえば、WINDOWS RE環境が変更されている場合 (たとえば、TPM が無効になっている場合)、BitLocker 回復キーが提供されるまでドライブはロックされた状態を維持します。 スタートアップ修復を PC から自動的に実行できず、代わりに修復ディスクから手動で開始Windows RE場合は、BitLocker で保護されたドライブのロックを解除するために BitLocker 回復キーを指定する必要があります。

Windows REは、OS ドライブ 保護機能に TPM + PIN またはパスワードを使用するデバイスで [すべて削除] Windows REからリセットが開始されたときにも、BitLocker 回復キーを要求します。 TPM のみの保護を備えたキーボードレス デバイスで BitLocker 回復が開始された場合、ブート マネージャーではなくWindows REは BitLocker 回復キーを要求します。 キーを入力すると、Windows REトラブルシューティング ツールにアクセスしたり、Windows を正常に起動したりできます。

Windows REに表示される BitLocker 回復画面には、BitLocker 回復キーの入力に役立つナレーターやスクリーン キーボードなどのアクセシビリティ ツールがあります。 Windows ブート マネージャーによって BitLocker 回復キーが要求された場合、これらのツールが使用できない可能性があります。

Windows REで BitLocker 回復中にナレーターをアクティブにするには、Windows + Ctrl Enter キーを押します + 。 スクリーン キーボードをアクティブにするには、テキスト入力コントロールをタップします。

ナレーターがアクティブ化されていることを示す BitLocker 回復画面のスクリーンショット。

BitLocker 回復画面

BitLocker の回復中に、Windows にはカスタム回復メッセージと、キーを取得できる場所を識別するいくつかのヒントが表示されます。 これらの機能強化は、BitLocker 回復中のユーザーに役立ちます。

カスタム回復メッセージ

バージョン 1511 Windows 10以降の BitLocker グループ ポリシー設定を使用すると、BitLocker 回復画面でカスタム回復メッセージと URL を構成できます。 カスタム回復メッセージと URL には、BitLocker セルフサービス回復ポータルのアドレス、IT 内部 Web サイト、またはサポート用の電話番号を含めることができます。

このポリシーは、[コンピューターの構成>] [管理用テンプレート>] の [Windows コンポーネント>] [BitLocker ドライブ暗号化>オペレーティング システム ドライブ>] の [ブート前の回復メッセージと URL の構成] で GPO を使用して構成できます。

また、Intuneを含むモバイル デバイス管理 (MDM) を使用して、BitLocker CSP を使用して構成することもできます。

<LocURI>./Device/Vendor/MSFT/BitLocker/SystemDrivesRecoveryMessage</LocURI>

カスタム URL。

カスタマイズされた回復画面の例:

BitLocker 回復画面をカスタマイズしました。

BitLocker 回復キーのヒント

BitLocker のメタデータは、バージョン 1903 Windows 10以降、BitLocker 回復キーがバックアップされたタイミングと場所に関する情報を含むように強化されました。 この情報は、UI またはパブリック API を介して公開されません。 これは、ユーザーがボリュームの回復キーを見つけるのに役立つヒントの形式で BitLocker 回復画面でのみ使用されます。 ヒントは回復画面に表示され、キーが保存されている場所を参照します。 ヒントは、モダン (青) とレガシ (黒) の両方の回復画面に表示されます。 ヒントは、ブート マネージャーの回復画面と WinRE のロック解除画面の両方に適用されます。

BitLocker の回復画面をカスタマイズしました。

重要

回復キーを印刷したり、ファイルに保存したりすることはお勧めしません。 代わりに、Active Directory バックアップまたはクラウドベースのバックアップを使用します。 クラウドベースのバックアップには、Azure Active Directory (Azure AD) とMicrosoft アカウントが含まれます。

(処理の順序で) 復旧中に表示されるヒントを制御する規則があります。

  1. (GPO または MDM を使用して) 構成されている場合は、カスタム回復メッセージを常に表示します。

  2. 常に汎用ヒントを表示します。 For more information, go to https://aka.ms/recoverykeyfaq.

  3. ボリュームに複数の回復キーが存在する場合は、最後に作成された (正常にバックアップされた) 回復キーに優先順位を付ける。

  4. バックアップされていないキーよりも、バックアップに成功したキーに優先順位を付けます。

  5. リモート バックアップの場所に対して、次の順序でバックアップ ヒントの優先順位を付けます。 Microsoftアカウント > Azure AD > Active Directory

  6. キーが印刷され、ファイルに保存されている場合は、2 つの個別のヒントの代わりに、組み合わされたヒント 「印刷またはキーを含むテキスト ファイルを探す」を表示します。

  7. 同じ種類の複数のバックアップ (削除とローカル) が同じ回復キーに対して実行されている場合は、最新のバックアップ日でバックアップ情報を優先します。

  8. オンプレミスの Active Directoryに保存されたキーに関する特定のヒントはありません。 この場合、カスタム メッセージ (構成されている場合) または汎用メッセージ "組織のヘルプ デスクに問い合わせる" が表示されます。

  9. ディスクに 2 つの回復キーが存在し、1 つだけが正常にバックアップされている場合、システムは、別のキーが新しい場合でも、バックアップされたキーを要求します。

例 1 (単一バックアップを使用した単一の回復キー)

カスタム URL はい
Microsoft アカウントに保存 はい
Azure AD に保存 なし
Active Directory に保存 なし
印刷 なし
ファイルに保存 なし

結果:Microsoft アカウントとカスタム URL のヒントが表示されます。

カスタマイズされた BitLocker 回復画面の例 1。

例 2 (単一バックアップを使用した単一の回復キー)

カスタム URL はい
Microsoft アカウントに保存 なし
Azure AD に保存 なし
Active Directory に保存 はい
印刷 なし
ファイルに保存 なし

結果: カスタム URL のみが表示されます。

カスタマイズされた BitLocker 回復画面の例 2。

例 3 (複数のバックアップを含む単一の回復キー)

カスタム URL なし
Microsoft アカウントに保存 はい
Azure AD に保存 はい
Active Directory に保存 なし
印刷 はい
ファイルに保存 はい

結果:Microsoft アカウント ヒントのみが表示されます。

カスタマイズされた BitLocker 回復画面の例 3。

例 4 (複数の回復パスワード)

カスタム URL なし
Microsoft アカウントに保存 なし
Azure AD に保存 なし
Active Directory に保存 なし
印刷 なし
ファイルに保存 はい
作成日時 午後 1 時
キー ID A564F193


カスタム URL なし
Microsoft アカウントに保存 なし
Azure AD に保存 なし
Active Directory に保存 なし
印刷 なし
ファイルに保存 なし
作成日時 午後 3 時
キー ID T4521ER5

結果: 最新のキーではない場合でも、正常にバックアップされたキーのヒントのみが表示されます。

カスタマイズされた BitLocker 回復画面の例 4。

例 5 (複数の回復パスワード)

カスタム URL なし
Microsoft アカウントに保存 はい
Azure AD に保存 はい
Active Directory に保存 なし
印刷 なし
ファイルに保存 なし
作成日時 午後 1 時
キー ID 99631A34
カスタム URL なし
Microsoft アカウントに保存 なし
Azure AD に保存 はい
Active Directory に保存 なし
印刷 なし
ファイルに保存 なし
作成日時 午後 3 時
キー ID 9DF70931

結果: 最新のキーのヒントが表示されます。

カスタマイズされた BitLocker 回復画面の例 5。

追加の回復情報の使用

48 桁の BitLocker 回復パスワードに加えて、他の種類の回復情報が Active Directory に格納されます。 このセクションでは、この追加情報を使用する方法について説明します。

BitLocker キー パッケージ

このドキュメントで前述した回復方法でボリュームのロックが解除されない場合は、BitLocker 修復ツールを使用してブロック レベルでボリュームの暗号化を解除できます。 このツールは、BitLocker キー パッケージを使用して、重大な損傷を受けたドライブから暗号化されたデータを回復するのに役立ちます。 回復されたデータは、正しい回復パスワードが破損したボリュームのロックを解除できなかった後でも、暗号化されたデータをサルベージするために使用できます。 回復パスワードは引き続き保存することをお勧めします。 キー パッケージは、対応する回復パスワードなしでは使用できません。

BitLocker キー パッケージを使用するには、BitLocker 修復ツール repair-bde.exe を使用する必要があります。

BitLocker キー パッケージは既定では保存されません。 AD DS で回復パスワードと共にパッケージを保存するには、回復方法を制御するグループ ポリシー設定で [ バックアップ回復パスワードとキー パッケージ ] オプションを選択する必要があります。 キー パッケージは、作業ボリュームからエクスポートすることもできます。 キー パッケージをエクスポートする方法の詳細については、「 BitLocker キー パッケージの取得」を参照してください。

回復パスワードのリセット

回復パスワードは、指定されて使用された後で無効にすることをお勧めします。 回復パスワードは、指定および使用された場合、またはその他の正当な理由により無効になる可能性があります。

回復パスワードを無効にし、次の 2 つの方法でリセットします。

  • manage-bde.exe使用manage-bde.exeして、古い回復パスワードを削除し、新しい回復パスワードを追加できます。 プロシージャは、このメソッドのコマンドと構文を識別します。

  • スクリプトを実行する: スクリプトを実行して、ボリュームの暗号化を解除せずにパスワードをリセットできます。 この手順のサンプル スクリプトは、この機能を示しています。 サンプル スクリプトでは、新しい回復パスワードを作成し、他のすべてのパスワードを無効にします。

を使用して回復パスワードをリセットする manage-bde.exe

  1. 以前の回復パスワードを削除します。

    `manage-bde.exe` -protectors -delete C: -type RecoveryPassword
    
  2. 新しい回復パスワードを追加します。

    `manage-bde.exe` -protectors -add C: -RecoveryPassword
    
  3. 新しい回復パスワードの ID を取得します。 画面から、回復パスワードの ID をコピーします。

    `manage-bde.exe` -protectors -get C: -Type RecoveryPassword
    
  4. 新しい回復パスワードを AD DS にバックアップします。

    `manage-bde.exe` -protectors -adbackup C: -id {EXAMPLE6-5507-4924-AA9E-AFB2EB003692}
    

    Warning

    中かっこ {} は ID 文字列に含める必要があります。

サンプルの回復パスワード スクリプトを実行して回復パスワードをリセットする

  1. 次のサンプル スクリプトを VBScript ファイルに保存します。 次に、例を示します。

    ResetPassword.vbs.

  2. コマンド プロンプトで、次のコマンドを入力します。

    cscript.exe ResetPassword.vbs
    

    重要

    このサンプル スクリプトは、C ボリュームに対してのみ機能するように構成されています。 必要に応じて、パスワード リセットをテストする必要があるボリュームに合わせてスクリプトをカスタマイズします。

リモート コンピューターを管理するには、ローカル コンピューター名ではなくリモート コンピューター名を指定します。

次のサンプル VBScript を使用して、回復パスワードをリセットできます。


展開して、回復パスワードのサンプル VBscript を表示して回復パスワードをリセットします
' Target drive letter
strDriveLetter = "c:"
' Target computer name
' Use "." to connect to the local computer
strComputerName = "."
' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------
strConnectionStr = "winmgmts:" _
                 & "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
                 & strComputerName _
                 & "\root\cimv2\Security\MicrosoftVolumeEncryption"


On Error Resume Next 'handle permission errors
Set objWMIService = GetObject(strConnectionStr)
If Err.Number <> 0 Then
     WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
     Wscript.Echo "Ensure that you are running with administrative privileges."
     WScript.Quit -1
End If
On Error GoTo 0
strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)
If colTargetVolumes.Count = 0 Then
    WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " &  strDriveLetter & " on computer " & strComputerName & "."
    WScript.Quit -1
End If
' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
    set objVolume = objFoundVolume
Next
' objVolume is now our found BitLocker-capable disk volume
' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------
' Add a new recovery password, keeping the ID around so it doesn't get deleted later
' ----------------------------------------------------------------------------------
nRC = objVolume.ProtectKeyWithNumericalPassword("Recovery Password Refreshed By Script", , sNewKeyProtectorID)
If nRC <> 0 Then
WScript.Echo "FAILURE: ProtectKeyWithNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Removes the other, "stale", recovery passwords
' ----------------------------------------------------------------------------------
nKeyProtectorTypeIn = 3 ' type associated with "Numerical Password" protector
nRC = objVolume.GetKeyProtectors(nKeyProtectorTypeIn, aKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Delete those key protectors other than the one we just added.
For Each sKeyProtectorID In aKeyProtectorIDs
If sKeyProtectorID <> sNewKeyProtectorID Then
nRC = objVolume.DeleteKeyProtector(sKeyProtectorID)
If nRC <> 0 Then
WScript.Echo "FAILURE: DeleteKeyProtector on ID " & sKeyProtectorID & " failed with return code 0x" & Hex(nRC)
WScript.Quit -1
Else
' no output
'WScript.Echo "SUCCESS: Key protector with ID " & sKeyProtectorID & " deleted"
End If
End If
Next
WScript.Echo "A new recovery password has been added. Old passwords have been removed."
' - some advanced output (hidden)
'WScript.Echo ""
'WScript.Echo "Type ""manage-bde.exe -protectors -get " & strDriveLetter & " -type recoverypassword"" to view existing passwords."

BitLocker キー パッケージの取得

追加の回復情報の使用」の説明に従って、キー パッケージを取得するには、次の 2 つのメソッドを使用できます。

  • 以前に保存したキー パッケージを AD DS からエクスポートします。 AD DS に格納されている BitLocker 回復パスワードには、読み取りアクセス権が必要です。

  • ロック解除された BitLocker で保護されたボリュームから新しいキー パッケージをエクスポートします。 ボリュームに損傷が発生する前に、作業ボリュームへのローカル管理者アクセス権が必要です。

以前に保存したすべてのキー パッケージを AD DS からエクスポートするサンプル キー パッケージ取得スクリプトを実行する

次の手順とサンプル スクリプトは、以前に保存したすべてのキー パッケージを AD DS からエクスポートします。

  1. 次のサンプル スクリプトを VBScript ファイルに保存します。 たとえば、GetBitLockerKeyPackageADDS.vbs のように指定します。

  2. コマンド プロンプトで、次のサンプル スクリプトのようなコマンドを入力します。

    cscript.exe GetBitLockerKeyPackageADDS.vbs -?
    

次のサンプル スクリプトを使用して VBScript ファイルを作成し、AD DS から BitLocker キー パッケージを取得できます。


展開して、以前に保存したすべてのキー パッケージを AD DS からエクスポートするサンプル キー パッケージ取得 VBscript を表示します
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
   Wscript.Echo "USAGE: GetBitLockerKeyPackageADDS [Path To Save Key Package] [Optional Computer Name]"
   Wscript.Echo "If no computer name is specified, the local computer is assumed."
   Wscript.Echo
   Wscript.Echo "Example: GetBitLockerKeyPackageADDS E:\bitlocker-ad-key-package mycomputer"
   WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
  Case 1
    If args(0) = "/?" Or args(0) = "-?" Then
    ShowUsage
    Else
      strFilePath = args(0)
      ' Get the name of the local computer
      Set objNetwork = CreateObject("WScript.Network")
      strComputerName = objNetwork.ComputerName
    End If

  Case 2
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else
      strFilePath = args(0)
      strComputerName = args(1)
    End If
  Case Else
    ShowUsage
End Select
' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the computer name
' --------------------------------------------------------------------------------
Function GetStrPathToComputer(strComputerName)
    ' Uses the global catalog to find the computer in the forest
    ' Search also includes deleted computers in the tombstone
    Set objRootLDAP = GetObject("LDAP://rootDSE")
    namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com
    strBase = "<GC://" & namingContext & ">"

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOOBject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    strFilter = "(&(objectCategory=Computer)(cn=" &  strComputerName & "))"
    strQuery = strBase & ";" & strFilter  & ";distinguishedName;subtree"
    objCommand.CommandText = strQuery
    objCommand.Properties("Page Size") = 100
    objCommand.Properties("Timeout") = 100
    objCommand.Properties("Cache Results") = False
    ' Enumerate all objects found.
    Set objRecordSet = objCommand.Execute
    If objRecordSet.EOF Then
      WScript.echo "The computer name '" &  strComputerName & "' cannot be found."
      WScript.Quit 1
    End If
    ' Found object matching name
    Do Until objRecordSet.EOF
      dnFound = objRecordSet.Fields("distinguishedName")
      GetStrPathToComputer = "LDAP://" & dnFound
      objRecordSet.MoveNext
    Loop
    ' Clean up.
    Set objConnection = Nothing
    Set objCommand = Nothing
    Set objRecordSet = Nothing
End Function
' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------
Set objDSO = GetObject("LDAP:")
strPathToComputer = GetStrPathToComputer(strComputerName)
WScript.Echo "Accessing object: " + strPathToComputer
Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80
' --------------------------------------------------------------------------------
' Get all BitLocker recovery information from the Active Directory computer object
' --------------------------------------------------------------------------------
' Get all the recovery information child objects of the computer object
Set objFveInfos = objDSO.OpenDSObject(strPathToComputer, vbNullString, vbNullString, _
                                   ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)
objFveInfos.Filter = Array("msFVE-RecoveryInformation")
' Iterate through each recovery information object and saves any existing key packages
nCount = 1
strFilePathCurrent = strFilePath & nCount
For Each objFveInfo in objFveInfos
   strName = objFveInfo.Get("name")
   strRecoveryPassword = objFveInfo.Get("msFVE-RecoveryPassword")
   strKeyPackage = objFveInfo.Get("msFVE-KeyPackage")
   WScript.echo
   WScript.echo "Recovery Object Name: " + strName
   WScript.echo "Recovery Password: " + strRecoveryPassword
   ' Validate file path
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(strFilePathCurrent)) Then
 WScript.Echo "The file " & strFilePathCurrent & " already exists. Please use a different path."
WScript.Quit -1
   End If
   ' Save binary data to the file
   SaveBinaryDataText strFilePathCurrent, strKeyPackage

   WScript.echo "Related key package successfully saved to " + strFilePathCurrent
   ' Update next file path using base name
   nCount = nCount + 1
   strFilePathCurrent = strFilePath & nCount
Next
'----------------------------------------------------------------------------------------
' Utility functions to save binary data
'----------------------------------------------------------------------------------------
Function SaveBinaryDataText(FileName, ByteArray)
  'Create FileSystemObject object
  Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")

  'Create text stream object
  Dim TextStream
  Set TextStream = FS.CreateTextFile(FileName)

  'Convert binary data To text And write them To the file
  TextStream.Write BinaryToString(ByteArray)
End Function
Function BinaryToString(Binary)
  Dim I, S
  For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
  Next
  BinaryToString = S
End Function
WScript.Quit

ロック解除された暗号化されたボリュームから新しいキー パッケージをエクスポートするサンプル キー パッケージ取得スクリプトの実行

次の手順とサンプル スクリプトは、ロック解除された暗号化されたボリュームから新しいキー パッケージをエクスポートします。

  1. 次のサンプル スクリプトを VBScript ファイルに保存します。 例えば: GetBitLockerKeyPackage.vbs

  2. 管理者コマンド プロンプトを開き、次のサンプル スクリプトのようなコマンドを入力します。

    cscript.exe GetBitLockerKeyPackage.vbs  -?
    

展開して、ロック解除された暗号化されたボリュームから新しいキー パッケージをエクスポートするサンプル VBscript を表示します
' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------
Sub ShowUsage
   Wscript.Echo "USAGE: GetBitLockerKeyPackage [VolumeLetter/DriveLetter:] [Path To Save Key Package]"
   Wscript.Echo
   Wscript.Echo "Example: GetBitLockerKeyPackage C: E:\bitlocker-backup-key-package"
   WScript.Quit
End Sub
' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------
Set args = WScript.Arguments
Select Case args.Count
  Case 2
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else
      strDriveLetter = args(0)
      strFilePath = args(1)
    End If
  Case Else
    ShowUsage
End Select
' --------------------------------------------------------------------------------
' Other Inputs
' --------------------------------------------------------------------------------
' Target computer name
' Use "." to connect to the local computer
strComputerName = "."
' Default key protector ID to use. Specify "" to let the script choose.
strDefaultKeyProtectorID = ""
' strDefaultKeyProtectorID = "{001298E0-870E-4BA0-A2FF-FC74758D5720}"  ' sample
' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------
strConnectionStr = "winmgmts:" _
                 & "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
                 & strComputerName _
                 & "\root\cimv2\Security\MicrosoftVolumeEncryption"


On Error Resume Next 'handle permission errors
Set objWMIService = GetObject(strConnectionStr)
If Err.Number <> 0 Then
     WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
     Wscript.Echo "Ensure that you are running with administrative privileges."
     WScript.Quit -1
End If
On Error GoTo 0
strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)
If colTargetVolumes.Count = 0 Then
    WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " &  strDriveLetter & " on computer " & strComputerName & "."
    WScript.Quit -1
End If
' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
    set objVolume = objFoundVolume
Next
' objVolume is now our found BitLocker-capable disk volume
' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------
' Collect all possible valid key protector ID's that can be used to get the package
' ----------------------------------------------------------------------------------
nNumericalKeyProtectorType = 3 ' type associated with "Numerical Password" protector
nRC = objVolume.GetKeyProtectors(nNumericalKeyProtectorType, aNumericalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
nExternalKeyProtectorType = 2 ' type associated with "External Key" protector
nRC = objVolume.GetKeyProtectors(nExternalKeyProtectorType, aExternalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Get first key protector of the type "Numerical Password" or "External Key", if any
' ----------------------------------------------------------------------------------
if strDefaultKeyProtectorID = "" Then
' Save first numerical password, if exists
If UBound(aNumericalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aNumericalKeyProtectorIDs(0)
End If
' No numerical passwords exist, save the first external key
If strDefaultKeyProtectorID = "" and UBound(aExternalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aExternalKeyProtectorIDs(0)
End If
' Fail case: no recovery key protectors exist.
If strDefaultKeyProtectorID = "" Then
WScript.Echo "FAILURE: Cannot create backup key package because no recovery passwords or recovery keys exist. Check that BitLocker protection is on for this drive."
WScript.Echo "For help adding recovery passwords or recovery keys, enter ""manage-bde.exe -protectors -add -?""."
WScript.Quit -1
End If
End If
' Get some information about the chosen key protector ID
' ----------------------------------------------------------------------------------
' is the type valid?
nRC = objVolume.GetKeyProtectorType(strDefaultKeyProtectorID, nDefaultKeyProtectorType)
If Hex(nRC) = "80070057" Then
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " is not valid."
WScript.Echo "This ID value may have been provided by the script writer."
ElseIf nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorType failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' what's a string that can be used to describe it?
strDefaultKeyProtectorType = ""
Select Case nDefaultKeyProtectorType
  Case nNumericalKeyProtectorType
      strDefaultKeyProtectorType = "recovery password"
  Case nExternalKeyProtectorType
      strDefaultKeyProtectorType = "recovery key"
  Case Else
      WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " does not refer to a valid recovery password or recovery key."
      WScript.Echo "This ID value may have been provided by the script writer."
End Select
' Save the backup key package using the chosen key protector ID
' ----------------------------------------------------------------------------------
nRC = objVolume.GetKeyPackage(strDefaultKeyProtectorID, oKeyPackage)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyPackage failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strFilePath)) Then
WScript.Echo "The file " & strFilePath & " already exists. Please use a different path."
WScript.Quit -1
End If
Dim oKeyPackageByte, bKeyPackage
For Each oKeyPackageByte in oKeyPackage
  'WScript.echo "key package byte: " & oKeyPackageByte
  bKeyPackage = bKeyPackage & ChrB(oKeyPackageByte)
Next
' Save binary data to the file
SaveBinaryDataText strFilePath, bKeyPackage
' Display helpful information
' ----------------------------------------------------------------------------------
WScript.Echo "The backup key package has been saved to " & strFilePath & "."
WScript.Echo "IMPORTANT: To use this key package, the " & strDefaultKeyProtectorType & " must also be saved."
' Display the recovery password or a note about saving the recovery key file
If nDefaultKeyProtectorType = nNumericalKeyProtectorType Then
nRC = objVolume.GetKeyProtectorNumericalPassword(strDefaultKeyProtectorID, sNumericalPassword)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
WScript.Echo "Save this recovery password: " & sNumericalPassword
ElseIf nDefaultKeyProtectorType = nExternalKeyProtectorType Then
WScript.Echo "The saved key file is named " & strDefaultKeyProtectorID & ".BEK"
WScript.Echo "For help re-saving this external key file, enter ""manage-bde.exe -protectors -get -?"""
End If
'----------------------------------------------------------------------------------------
' Utility functions to save binary data
'----------------------------------------------------------------------------------------
Function SaveBinaryDataText(FileName, ByteArray)
  'Create FileSystemObject object
  Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")

  'Create text stream object
  Dim TextStream
  Set TextStream = FS.CreateTextFile(FileName)

  'Convert binary data To text And write them To the file
  TextStream.Write BinaryToString(ByteArray)
End Function
Function BinaryToString(Binary)
  Dim I, S
  For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
  Next
  BinaryToString = S
End Function