パスワードの技術概要
適用先: Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10、Windows Server 2012 R2、Windows 8.1、Windows Server 2012、Windows 8、Windows 7、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Vista
この IT 専門家向けのトピックでは、Windows Server 2012 および Windows 8.1 以降のバージョンの Windows で、Windows にパスワードを実装する方法について説明します。 強力なパスワード、パスフレーズ、パスワード ポリシーについても説明します。
パスワードが Windows に保存されるしくみ
この記事では、「保存中」のパスワードの保管に関する情報を提供します。
Windows では 256 文字の Unicode 文字列でパスワードを表しますが、ログオン ダイアログ ボックスでは 127 文字に制限されます。 そのため、設定可能な最長のパスワードは 127 文字です。 サービスなどのプログラムでは、より長いパスワードを使用できますが、それはプログラムで設定する必要があります。
Windows オペレーティング システムでは、さまざまな目的のためにさまざまな方法でパスワードが保存されます。
OWF として格納されるパスワード
Active Directory ドメインなど、Windows ネットワークで使用するために、パスワードは既定で、LAN Manager の一方向性関数 (LM OWF) と NT OWF という 2 つの異なる様式で格納されます。 「一方向性関数」は、データの一方向性の数学的変換を表す用語です。 変換されるデータは、暗号化によって一方向にのみ変換でき、元に戻すことはできません。 使用されている一方向性関数の最も一般的な種類は、暗号化ハッシュです。 ハッシュは、ハッシュの計算に使用される大きなデータ セットに数学的に関連付けられた小さなデータ セットです。 大きい方のデータ セットが変更された場合、ハッシュも変更されます。 ハッシュは、たとえば、転送時にデータが変更されていないことを検証するためのチェックサムとして役立ちます。 暗号化ハッシュは、特定のプロパティを満たすハッシュです。 たとえば暗号化ハッシュは、ハッシュのみから大きい方のデータ セットを推測することが、妥当な時間内には数学的に不可能であるような方法で作成する必要があります。 同様に、同じハッシュを生成する 2 つの大きなデータ セットを見つけることは数学的には不可能です。
一方向性関数にはさまざまな種類があります。 ハッシュ関数は、定義上はすべて一方向性関数です。 ただし、一般的には元に戻せる通常の暗号化関数を使用して、一方向性関数を作成することもできます。 これを行うには、暗号化関数内のデータとキーをスワップし、データをキーとして使用して固定値 (キー) を暗号化します。 これが LM ハッシュの計算方法です。 LM ハッシュは次のように計算されます。
- パスワードは、ちょうど 14 文字まで NULL バイトで埋め込まれます。 パスワードが 14 文字を超える場合は、残りの操作のために 14 の NULL バイトで置き換えられます。
- パスワードは、すべて大文字に変換されます。
- パスワードは 2 つの 7 バイト (56 ビット) キーに分割されます。
- 各キーは、固定文字列の暗号化に使用されます。
- 手順 4 の 2 つの結果が連結され、LM ハッシュとして格納されます。
LM OWF アルゴリズムは、新しいアルゴリズムを使用できないソフトウェアやハードウェアとの下位互換性を維持するために、Windows に含まれています。
NT ハッシュは単なるハッシュです。 パスワードは MD4 アルゴリズムを使用してハッシュ化され、格納されます。 NT OWF は、Windows NT 4.0 以前のドメインと Active Directory ドメインの両方のドメイン メンバーによる認証に使用されます。
NT ハッシュも LM ハッシュもソルト化されません。 ソルト化は、一方向性関数を算出する前に、パスワードとランダムな数値 (ソルト) を組み合わせるプロセスです。
Active Directory に格納されるパスワード
保存されるパスワードは、Active Directory データベース (NTDS.DIT ファイル) のいくつかの属性に格納されます。 これらの属性を、次の表に示します。
Active Directory 属性 | コンテンツ |
---|---|
unicodePwd | 暗号化された NT ハッシュ |
dbcsPwd | 暗号化された LM ハッシュ |
ntPwdHistory | 暗号化された NT ハッシュ - パスワード履歴 |
lmPwdHistory | 暗号化された LM ハッシュ - パスワード履歴 |
supplementalCredentials | Kerberos キー、WDigest など |
注意
Windows Vista および Windows Server 2008 以降は、LM ハッシュの格納は既定で無効になっています。
DIT ファイルに格納される場合、NT ハッシュは 2 つの暗号化レイヤーによって保護されます。 Windows Server 2016/Windows 10 以降のバージョンでは、最初に DES を使用して暗号化し、次に CNG BCrypt AES-256 で暗号化します ( CNG BCRYPT_AES_ALGORITHMを参照)。 以前の Windows バージョンでは、DES と RC4 の 2 つの暗号化レイヤーを使用して NT ハッシュが暗号化されます。
補足の資格情報の詳細については、「MS-SAMR: supplementalCredentials」と補足の資格情報の構造に関するページを参照してください。
ローカル SAM に格納されるパスワード
ドメイン メンバーとワークステーションでは、ローカル ユーザー アカウントのパスワード ハッシュは、レジストリにあるローカルのセキュリティ アカウント マネージャー (SAM) データベースに格納されます。 これらは、Active Directory と同じ暗号化アルゴリズムとハッシュ アルゴリズムを使用して暗号化されます。 Windows Server 2016 以降は、ローカル ユーザー アカウントの supplementalCredentials 属性のパスワードも、ローカル SAM データベースに格納されています。
キャッシュされた資格情報
Windows では、ドメイン ユーザーがそのドメイン メンバーにログオンするときのドメイン メンバーのパスワード検証ツールも保存します。 コンピューターがドメイン コントローラーにアクセスできない場合は、この検証ツールを使用してドメイン ユーザーを認証できます。 パスワード検証ツールは、一般にキャッシュされた資格情報とも呼ばれます。 これは、NT ハッシュを取得し、ユーザー名を連結し、MD4 ハッシュ関数を使用して結果をハッシュすることで算出されます。
パスワードが Windows で機能するしくみ
Windows や他の多くのオペレーティング システムで、ユーザーの ID を認証する方法の 1 つは、シークレット パスフレーズまたはパスワードを使用することです。
スマート カード、FIDO、Windows Hello for Business などのセキュリティで保護された多要素認証を使用することをお勧めします。 ただし、一部のシナリオでは引き続きパスワード認証が必要です。
ネットワーク環境をセキュリティで保護するには、すべてのユーザーが強力なパスワードを使用する必要があります。 これにより、悪意のあるユーザーが、手動による方法またはツールを使用して脆弱なパスワードを推測し、侵害したユーザー アカウントの資格情報を入手するという脅威を回避できます。 これは特に、管理者アカウントに当てはまります。 複雑なパスワードを定期的に変更すると、パスワード攻撃が成功する可能性が減少します。
パスワード ポリシーの設定で、パスワードの複雑さと有効期間を制御します。 パスワード ポリシーは Windows パスワードに影響しますが、必ずしもパスワードを含むわけではありません。
ユーザーがパスワードを変更できるかどうかは、パスワード ポリシーと使用可能なインターフェイスによって決定します。 たとえば、セキュリティで保護されたデスクトップを使用すると、ユーザーは、システム管理者またはドメイン管理者によって管理されるパスワード ポリシーに基づいて、いつでもパスワードを変更できます。 Windows Vault、BitLocker、暗号化ファイル システムなどの機能を使用すると、ユーザーは、その機能に固有のパスワードを変更できます。
パスワードが Windows で使用されるしくみ
ユーザーがログオンするとき、ユーザーが入力したパスワードは両方の種類の一方向性関数に変換され、ローカル セキュリティ機関サブシステム サービス (LSASS) プロセスによってメモリに保持されます。 ユーザーが認証にローカル アカウントを使用している場合、NT OWF はローカルに格納されている NT ハッシュと比較され、2 つが一致していればユーザーはログオンします。 ユーザーがホスト名を使用してリソースにアクセスすることによって Active Directory ドメインに対して認証している場合、NT ハッシュは、通常はドメイン コントローラーである キー配布センター (KDC) に対する Kerberos ログオンで使用されます。
Kerberos は次の状況では使用できません。
- Windows NT 4.0 以前のみを実行しているドメインに対して認証する
- ホスト名ではなく IP アドレスを使用して Active Directory ドメイン メンバーのリソースにアクセスする
- Active Directory ドメインのメンバーではないコンピューターのリソースにアクセスする
- Active Directory ドメインのメンバーであるが、自分のドメインに信頼されていないコンピューターのリソースにアクセスする
- Kerberos をサポートしていない実行中のコンピューターのリソースにアクセスする
このような場合、認証プロセスでは、LAN Manager と NTLM という 2 つの異なるプロトコルが使用されます。 このプロセスは、クライアントが認証サーバーにチャレンジを要求することから始まります。 チャレンジが受信された後、クライアントでは、このチャレンジに対する応答が算出されます。 これは、最初にパスワードの 2 つのハッシュを null 値で 168 ビットまで埋め込むことによって行われます。 各ハッシュの 168 ビットは、3 つの 56 ビットの DES キーに分割されます。 次に、6 つの DES キーを使用してチャレンジが暗号化されます。 LM ハッシュを使用して生成された 3 つの暗号テキストが連結され、LAN Manager の応答になります。 NT ハッシュを使用して生成された 3 つの暗号テキストが連結され、NTLM の応答になります。
応答の算出に使用される関数は、[ネットワーク セキュリティ: LAN Manager の認証レベル] のグループ ポリシー設定の [LM 互換性レベル] の設定によって変更される可能性があります。 この値が 1 以下に設定されている場合、クライアントは元の LAN Manager と NTLM の応答を送信します。 2 に設定されている場合、NTLM の応答のみが送信されます。 3 以上に設定されている場合は、両方のプロトコルの新しいバージョンが使用されます。 NTLM のバージョンは NTLMv2 と呼ばれます。 LAN Manager のバージョンは、よく LMv2 と呼ばれます。 どちらのプロトコルでも NT ハッシュを使用して応答を算出し、両方とも、サーバーのチャレンジの代わりに、またはサーバーのチャレンジに加えて、クライアント側のチャレンジを使用します。 また、[LM 互換性レベル] の設定が 1 以上に設定されている場合、NTLM の応答には、リプレイ攻撃を防ぐためにタイムスタンプが付けられます。 [LM 互換性レベル] の設定については、「ネットワーク セキュリティ: LAN Manager の認証レベル」を参照してください。
強力なパスワード
パスワードは組織への不正アクセスに対する最も重要な防御手段です。 Windows Server 2003 以降の Windows では、オペレーティング システムのセットアップ中に、Administrator アカウントのパスワードの複雑さが確認されます。 パスワードが空白であったり、複雑さの要件を満たしていなかったりした場合は、[Windows セットアップ] ダイアログ ボックスで、Administrator アカウントの強力なパスワードを作成するよう求められます。 このパスワードを空白のままにすると、ネットワーク経由でこのアカウントにアクセスできなくなります。
脆弱なパスワードを使用すると、攻撃者はコンピューターやネットワークに簡単にアクセスできるようになりますが、強力なパスワードを使用すると、解読が非常に困難になります。 次の表では、脆弱なパスワードと強力なパスワードの比較を示しています。
脆弱なパスワード | 強力なパスワード |
---|---|
空白 | 7 文字以上である |
ユーザー名やドメイン名など、簡単に発見できる情報または既知の情報が含まれる | 「シークレット」またはランダムな情報が含まれる |
以前のパスワードと似ている | 以前のパスワードと明らかに異なる |
辞書の単語がそのまま含まれる | 以下の文字が混在している。 ‐ 大文字 - 小文字 - 数字 - スペースを含む記号 |
強力なパスワードの例としては、J*p2leO4>F があります。
パスワードは、強力なパスワードのほとんどの条件を満たすことができますが、それでも脆弱です。 たとえば、Hello2U! は、強力なパスワードの条件の大部分を満たし、パスワード ポリシーの複雑さの要件も満たしていますが、比較的脆弱なパスワードです。 H!elZl2o は、辞書の単語に記号、数字、その他の文字が混在しているため、強力なパスワードです。 強力なパスワードを使用する利点についてユーザーを教育し、実際に強力なパスワードを作成する方法を説明することが重要です。
拡張 ANSI 文字セットの文字を含むパスワードを作成できます。 拡張 ANSI 文字を使用すると、パスワードを作成するときに選択できる文字数が増えます。 その結果パスワード解読ソフトウェアは、こうした拡張 ANSI 文字を含むパスワードを解読するのに、他のパスワードを解読する場合より時間がかかることがあります。 パスワードに拡張 ANSI 文字を使用する前に、それらを十分にテストして、拡張 ANSI 文字を含むパスワードが組織が使用しているアプリケーションと互換性があることを確認してください。 組織が複数の異なるオペレーティング システムを使用している場合、パスワードに拡張 ANSI 文字を使用する際は特に注意が必要です。 たとえば、これらのシステムは ISO-8859-15 で標準化されている可能性があります。 Windows での実際のプロトコルの実装では、実際の ANSI エンコーディングではなく、Unicode または UTF8 が使用されることがよくあります。
拡張 ANSI 文字セットの文字を含むパスワードの例としては、kUµ!¶0o や Wf©$0k#»g¤5ªrd があります。
Windows でのパスフレーズ
パスフレーズは、トークンベースのパスワードとは異なる形式であり、トークンが文字セットの記号ではなく単語です。 パスフレーズの例としては、特殊文字、数字、大文字、小文字を含む文などがあります。 パスフレーズとパスワードの主な違いは次のとおりです。
- 通常、パスフレーズにはスペースが含まれますが、パスワードにはありません。
- パスフレーズは、大部分の単語よりもはるかに長く、さらに重要なことには、普通の人が覚えられるようなランダムな文字列よりも長いです。
ポリシーで設定されている文字制限に準拠したパスフレーズは、一般に、より多くの文字が含まれているため、パスワードよりも解読が困難です。 パスワードまたはパスフレーズを格納するのが LM および NT ハッシュであり、LM ハッシュはその 2 つのうち脆弱な方です。
LM ハッシュが保存されないようにするには、いくつかの方法があります。そのうちの 1 つは、14 文字を超えるパスワードやパスフレーズを使用することです。 [ネットワーク セキュリティ: 次のパスワードの変更で LAN Manager のハッシュの値を保存しない] グループ ポリシー設定を使用することもできます。 このポリシー設定を使用すると、すべてのアカウントのストレージ LM ハッシュがグローバルにオフになります。 変更は、次回パスワードが変更されたときに有効になります。 ポリシーの効果はすぐには表れないため、LM ハッシュを格納していないことが原因で発生する潜在的な相互運用性の問題についてすぐに気付くことはありません。
Windows で使用可能なローカル パスワード ポリシー
パスワードの複雑さの要件を強制するパスワード ポリシー設定を実装できます。 このポリシー設定の詳細については、「複雑さの要件を満たす必要があるパスワード」を参照してください。 パスワード ポリシーを適用する方法の詳細については、パスワード ポリシーの適用または変更に関するページを参照してください。 使用可能なすべてのパスワード ポリシー設定の詳細については、「パスワード ポリシー」を参照してください。
Active Directory Domain Services (AD DS) を介して使用できる細かい設定が可能なパスワード ポリシー
Windows Server 2008 以降は、細かい設定が可能なパスワード ポリシーを使用して、1 つのドメイン内で複数のパスワード ポリシーを指定したり、異なるユーザー セットに対してパスワード制限やアカウント ロックアウト ポリシーを個別に適用したりできます。 たとえば、特権アカウントのセキュリティを強化するために、特権アカウントに厳密性の高い設定を適用してから、他のユーザーのアカウントに厳密性の低い設定を適用できます。 または、他のデータ ソースと同期するパスワードを持つアカウントに特別なパスワード ポリシーを適用する必要がある場合もあります。
細かい設定が可能なパスワード ポリシーを保存するために、AD DS スキーマには次の 2 つの新しいオブジェクト クラスが存在します。
- パスワード設定コンテナー
- [パスワードの設定]
これらのポリシーの詳細については、AD DS: 細かい設定が可能なパスワード ポリシーに関するページを参照してください。