【Windows】証明書と秘密鍵の保存場所

PKI

Windows OS の端末で利用する証明書は、”証明書ストア” と呼ばれる仕組みで管理されています。
証明書ストアの詳細については、以下の記事で紹介しておりますのでご参照ください。

関連記事

VPN 接続時の認証や無線 LAN 接続時の認証など、様々な機能の認証に証明書が使用されています。 Windows OS の端末で利用する証明書は、"証明書ストア" と呼ばれる仕組みで管理されています。 今回は、証明書の管理場所である証[…]

ただし、証明書ストアはユーザーが証明書を管理できるように用意された管理コンソールです。
今回は、証明書や秘密鍵の物理的な保存場所について紹介します。

 

証明書の保存場所

多くの証明書はレジストリで管理されています。

証明書は論理ストアと物理ストアごとに、物理的に保存されている場所が異なります。
各ストアの証明書の物理的な保存場所は以下の通りです。

■ユーザー アカウントの証明書ストア

論理ストア

物理ストア

物理的な保存場所

個人

レジストリ

%APPDATA%¥Microsoft¥SystemCertificates¥My

 

スマートカード

スマート カードに格納された証明書

信頼されたルート証明機関

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥Root

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

 

スマートカード

スマート カードに格納された証明書

エンタープライズの信頼

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥Trust

 

グループ ポリシー

HKCU¥SOFTWARE¥Policies¥Microsoft¥SystemCertificates¥Trust

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

中間証明機関

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥CA

 

グループ ポリシー

HKCU¥Software¥Policies¥Microsoft¥SystemCertificates¥CA

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

信頼された発行元

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥TrustedPublisher

 

グループ ポリシー

HKCU¥Software¥Policies¥Microsoft¥SystemCertificates¥TrustedPublisher

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

信頼されていない証明書

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥Disallowed

 

グループ ポリシー

HKCU¥SOFTWARE¥Policies¥Microsoft¥SystemCertificates¥Disallowed

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

サードパーティールート証明機関

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥AuthRoot

 

グループ ポリシー

HKCU¥Software¥Policies¥Microsoft¥SystemCertificates¥AuthRoot

 

ローカル コンピューター

“コンピューター” ストアのエイリアス

証明書の登録要求

レジストリ

HKCU¥Software¥Microsoft¥SystemCertificates¥TrustedPublisher

※ “コンピューター” ストアのエイリアスは、コンピューター アカウントの同じ論理ストアの証明書の一覧が参照されます。
※ “スマートカードに登録された証明書” は、スマート カードの IC チップ上に保存されている証明書です。

■コンピューター アカウントの証明書ストア

論理ストア

物理ストア

物理的な保存場所

個人

レジストリ

HKLM¥SOFTWARE¥Microsoft¥SystemCertificates¥My

 

スマートカード

スマート カードに格納された証明書

信頼されたルート証明機関

レジストリ

HKLM¥SOFTWARE¥Microsoft¥SystemCertificates¥ROOT

 

サードパーティ

“サードパーティルート証明機関” のエイリアス

 

グループ ポリシー

HKLM¥SOFTWARE¥Policies¥Microsoft¥SystemCertificates¥Root

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥Root

 

スマートカード

スマート カードに格納された証明書

エンタープライズの信頼

レジストリ

HKLM¥SOFTWARE¥Microsoft¥SystemCertificates¥Trust

 

グループ ポリシー

HKLM¥SOFTWARE¥Policies¥Microsoft¥SystemCertificates¥Trust

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥Trust

中間証明機関

レジストリ

HKLM¥Software¥Microsoft¥SystemCertificates¥CA

 

グループ ポリシー

HKLM¥Software¥Policies¥Microsoft¥SystemCertificates¥CA

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥TrustedPublisher

信頼された発行元

レジストリ

HKLM¥Software¥Microsoft¥SystemCertificates¥TrustedPublisher

 

グループ ポリシー

HKLM¥Software¥Policies¥Microsoft¥SystemCertificates¥TrustedPublisher

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥TrustedPublisher

信頼されていない証明書

レジストリ

HKLM¥SOFTWARE¥Microsoft¥SystemCertificates¥Disallowed

 

グループ ポリシー

HKLM¥SOFTWARE¥Policies¥Microsoft¥SystemCertificates¥Disallowed

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥Disallowed

サードパーティルート証明機関

レジストリ

HKLM¥Software¥Microsoft¥SystemCertificates¥AuthRoot

 

グループ ポリシー

HKLM¥Software¥Policies¥Microsoft¥SystemCertificates¥AuthRoot

 

エンタープライズ

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥AuthRoot

証明書の登録

レジストリ

%APPDATA%¥Microsoft¥SystemCertificates¥Request

NTAuth

 

HKLM¥SOFTWARE¥Microsoft¥EnterpriseCertificates¥NTAuth

※ “サードパーティルート証明機関のエイリアス” は、その論理ストアに登録された証明書の一覧を参照します。
 

秘密鍵の保存場所

“個人” の証明書ストアで管理している証明書は、アカウント自身の証明書となります。
そのため、証明書に紐づく秘密鍵が存在しています。

秘密鍵はキーコンテナと呼ばれる仕組みで管理されており、秘密鍵を利用するには暗号化プロバイダーの API が必要です。
キーコンテナごとに使用される暗号化プロバイダーは異なります。
秘密鍵の保存場所は、キーコンテナの暗号化プロバイダの種類によって異なります。

暗号化プロバイダとは、鍵の操作や暗号化、ハッシュ値の算出などの処理を提供する API です。
暗号化プロバイダの種類は大きく分けて 2 種類のプロバイダが存在します。

 

CryptoAPI / CSP
古いタイプの暗号化プロバイダです。(CSP と呼ばれます)
鍵の操作、暗号化、ハッシュ値算出などの処理を行うインターフェースを提供しています。
CSP に分類される暗号化プロバイダーには、以下のものがあります。

  • Microsoft Base Cryptographic Provider v1.0
  • Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
  • Microsoft Base DSS Cryptographic Provider
  • Microsoft Base Smart Card Crypto Provider
  • Microsoft DH Schannel Cryptographic Provider
  • Microsoft Enhanced Cryptographic Provider v1.0
  • Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
  • Microsoft Enhanced RSA and AES Cryptographic Provider
  • Microsoft RSA Schannel Cryptographic Provider
  • Microsoft Strong Cryptographic Provider

各暗号化プロバイダがサポートしている暗号化方式、ハッシュ アルゴリズムに関する情報は以下の公開情報に記載されています。

マイクロソフト公式情報:
CryptoAPI Cryptographic Service Providers
https://docs.microsoft.com/en-us/windows/win32/seccertenroll/cryptoapi-cryptographic-service-providers

CSP の秘密鍵の保存場所は以下の通りです。

ユーザー

%appdata%\Microsoft\Crypto\RSA\<ユーザーの SID>

コンピューター

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

 

CNG / KSP
新しいタイプの暗号化プロバイダです。(KSP と呼ばれます)
ハッシュ値の処理などの処理と秘密鍵などの操作を行う処理を分けて、セキュリティを向上させた仕組みとなっています。
KSP に分類される暗号化プロバイダには、以下のものがあります。

  • Microsoft Software Key Storage Provider
  • Microsoft Smart Card Key Storage Provider

各暗号化プロバイダがサポートしている暗号化方式、ハッシュ アルゴリズムに関する情報は以下の公開情報に記載されています。

マイクロソフト公式情報:
CNG Key Storage Providers
https://docs.microsoft.com/en-us/windows/win32/seccertenroll/cng-key-storage-providers

KSP の秘密鍵の保存場所は以下の通りです。

ユーザー

%appdata%\Microsoft\Crypto\Keys

コンピューター

C:\ProgramData\Microsoft\Crypto\Keys

 

キー コンテナの暗号化プロバイダーの確認方法

秘密鍵のキーコンテナの暗号化プロバイダの確認方法は以下の通りです。

1) コマンド プロンプトを開きます。
2) 以下のコマンドを実行します。

    certutil -store -user my

3) 証明書ストアの実行結果を確認します。

C:\>certutil -store -user my
my “個人”
================ 証明書 0 ================
シリアル番号: 68007dd820c408c0a086361ac10001007dd820
発行者: CN=test01-TESTDC01-CA
この日以降: 2021/12/13 14:44
この日以前: 2022/03/13 14:44
サブジェクト: CN=User01, OU=Sales, DC=test01, DC=local
非ルート証明書
テンプレート: 1.3.6.1.4.1.311.21.8.16155509.8105089.5391003.2969441.12400096.221.10016230.12095268
Cert ハッシュ(sha1): d1298dab74d8f30e4bc01eed84c148c834bd48a6
キー コンテナー = b7109eb0e753444fef7d2a7b221fd575_c909666d-f4b3-4b25-8528-07f883cdbf41
単純コンテナー名: te-7e0cd67f-d0eb-4826-b845-ab59d40e190c
プロバイダー = Microsoft Strong Cryptographic Provider
秘密キーはエクスポート可能ではありません
暗号化のテストに合格しました

“プロバイダー” の項目が、キーコンテナの暗号化プロバイダーです。
上記の実行結果では、User01 のユーザー証明書の秘密鍵の暗号化プロバイダーが確認できます。
この場合、暗号化プロバイダーは “Microsoft Strong Cryptographic Provider” です。

 

DPAPI(データ保護 API)

DPAPI とは、機密にする必要があるデータを保護するための API です。
Windows OS で機密にする必要があるデータは、DPAPI の機能を利用して自動で保護しています。
秘密鍵も保護する必要があるデータの一つで、DPAPI で保護されています。

DPAPI の仕組みでは、マスター キーという 512 bit という疑似乱数から派生したデータが利用されます。
マスターキーと呼ばれるデータから生成したセッションキーを使用してデータを保護する機能を提供しています。

秘密鍵のデータも DPAPI の仕組みにより、保護されています。
そのため、物理的な保存場所から秘密鍵のデータのファイルが入手しても、DPAPI で保護されているため、他の端末上で秘密鍵として利用することはできません。

また、マスターキー自体も各アカウントのパスワードを元した情報で暗号化して保護されています。
DPAPI のマスター キーの保存場所は以下の通りです。

ユーザー

%appdata%\Microsoft\Protect

コンピューター

C:\Windows\System32\Microsoft\Protect

 
ローカル ユーザーのパスワードを管理者がリセットすると DPAPI マスターキーが利用できなくなります。
秘密鍵など、DPAPI で保護されたデータが利用できなくなります。

ユーザーの DPAPI のマスターキーは、そのユーザーのパスワードのデータをもとに暗号化されています。

Windows 端末にローカル ユーザーでログオンして、自分でパスワードを変更した時のことを想定します。
ユーザー自身がパスワードを変更する時は、変更前のパスワードを入力した後に、新しいパスワードを設定します。
変更の処理の際に、Windows OS は古いパスワードで保護を解除してマスター キーを取得し、新しいパスワードでマスター キーを保護しなおしています。
そのため、ユーザーがパスワードを更新する時は、DPAPI マスターキーが利用できなくなることはありません。

しかし、管理者によりパスワードをリセットすると、古いパスワードがない状態でパスワードが変更されます。
Windows OS は古いパスワードがないため、マスターキーを取得できず、新しいパスワードでの保護をしなおすことができません。

そのため、管理者がローカル ユーザーのパスワードをリセットすると、ユーザーの DPAPI で保護されたデータが利用できなくなります。