密碼技術概觀

適用於: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 如何在從 Windows Server 2012 和 Windows 8.1 開始的 Windows 版本中實作密碼。 它也會討論強式密碼、複雜密碼和密碼原則。

密碼儲存在 Windows 中的方式

本文提供「待用」密碼儲存的相關資訊。

Windows 代表 256 個字元 UNICODE 字串中的密碼,但登入對話方塊限制為 127 個字元。 因此,最長的密碼有 127 個字元。 服務之類的程式可以使用較長的密碼,但必須以程式設計方式進行設定。

Windows 作業系統會針對不同用途儲存許多不同方式的密碼。

儲存為 OWF 的密碼

為了在 Windows 網路中使用,包括 Active Directory 網域,密碼預設會以兩種不同的方式儲存:作為 LAN Manager 單向函式 (LM OWF) 和 NT OWF。 「單向函式」是一個詞彙,表示資料的單向數學轉換。 正在轉換的資料只能透過加密一種方式進行轉換,而且無法反轉。 最常使用的單向函式類型是密碼編譯雜湊。 雜湊是一組以數學方式繫結至一組較大型資料集的小資料集,該雜湊是從大資料集計算而來。 如果較大的資料集有變更,雜湊也會變更。 雜湊相當實用,例如可作為總和檢查碼,以驗證傳輸中尚未修改的資料。 密碼編譯雜湊是滿足特定屬性的雜湊。 例如,密碼編譯雜湊必須以此方式建立,使其在合理時間內無法僅從雜湊推斷較大的資料集。 同樣地,在數學上是無法找到產生相同雜湊的兩組大型資料。

有許多不同的單向函式類型。 根據定義,所有雜湊函式都是單向函式。 不過,通常可逆的一般密碼編譯函式也可以用來建立單向函式。 這可以藉由交換密碼編譯函式中的資料和金鑰,並使用資料做為金鑰來加密固定值 (金鑰)。 這就是計算 LM 雜湊的方式。 LM 雜湊的計算方式如下:

  1. 密碼會以 NULL 位元組填補到 14 個字元。 如果密碼超過 14 個字元,則會以剩餘作業的 14 個 NULL 位元組取代。
  2. 密碼會轉換成全大寫。
  3. 密碼會分割成兩個 7 位元組 (56 位元) 金鑰。
  4. 每個金鑰都會用來加密固定字串。
  5. 步驟 4 的兩個結果都會串連並儲存為 LM 雜湊。

LM OWF 演算法包含在 Windows 中,以便回溯相容無法使用較新演算法的軟體和硬體。

NT 雜湊單純只是雜湊。 密碼會使用 MD4 演算法雜湊並儲存。 NT OWF 用於在 Windows NT 4.0 和舊版網域與 Active Directory 網域中的網域成員進行驗證。

NT 雜湊和 LM 雜湊都沒有加入亂數值 (salted)。 Salting 是在計算單向函式之前,將密碼與亂數值 (salt) 結合的程式。

儲存在 Active Directory 中的密碼

待用密碼會儲存在 Active Directory 資料庫的數個屬性中 (NTDS.DIT 檔案)。 下表列出了這些屬性:

Active Directory 屬性 Content
unicodePwd 加密的 NT 雜湊
dbcsPwd 加密的 LM 雜湊
ntPwdHistory 加密的 NT 雜湊 - 密碼歷程記錄
lmPwdHistory 加密的 LM 雜湊 - 密碼歷程記錄
supplementalCredentials Kerberos 金鑰、WDigest 等

注意

自 Windows Vista 和 Windows Server 2008 起,LM 雜湊的儲存會預設停用。

儲存在 DIT 檔案中時,NT 雜湊會受到兩層加密的保護。 在 Windows Server 2016/Windows 10 和更新版本中,它會先使用 DES 加密以提供回溯相容性,然後使用 CNG BCrypt AES-256 加密 (請參閱 CNGBCRYPT_AES_ALGORITHM)。 舊版 Windows 會使用兩層 DES + RC4 加密來加密 NT 雜湊。

如需補充認證的詳細資訊,請參閱 MS-SAMR:supplementalCredentials補充認證結構

儲存在本機 SAM 中的密碼

在網域成員和工作站上,本機使用者帳戶密碼雜湊會儲存在登錄中的本機安全性帳戶管理員 (SAM) 資料庫中。 它們會使用與 Active Directory 相同的加密和雜湊演算法來進行加密。 自 Windows Server 2016 以來,本機使用者帳戶 supplementalCredentials 屬性中的密碼也會儲存在本機 SAM 資料庫中。

快取的認證

當網域使用者登入該網域成員時,Windows 也會將密碼驗證器儲存在網域成員上。 如果電腦無法存取網域控制站,此驗證器可用來驗證網域使用者。 密碼驗證器通常也稱為快取認證。 其計算方式是取得 NT 雜湊、串連使用者名稱,然後使用 MD4 雜湊函式來雜湊結果。

密碼在 Windows 中的運作方式

在 Windows 和許多其他作業系統中,驗證使用者身分識別的一種方法是使用複雜密碼或密碼。

我們建議使用安全多重要素驗證,例如智慧卡、FIDO 和 Windows Hello 企業版。 不過,在某些情況下,仍然需要密碼驗證。

保護您的網路環境需要所有使用者都使用強式密碼。 這有助於避免以下威脅:惡意使用者猜測弱式密碼 (無論是透過手動方法或使用工具) 以取得遭入侵使用者帳戶的認證。 這特別適合於系統管理帳戶。 當您定期變更複雜密碼時,可降低成功密碼攻擊的可能性。

密碼原則設定可控制密碼的複雜度和存留期。 密碼原則會影響 Windows 密碼,不一定是功能密碼。

使用者修改其密碼的能力受密碼原則和可用介面所控管。 例如,透過安全桌面,使用者可以隨時根據系統管理員或網域系統管理員所管理的密碼原則來變更其密碼。 如 Windows 保存庫、BitLocker 和加密檔案系統等功能,可讓使用者修改該功能特有的密碼。

如何在 Windows 中使用密碼

當使用者登入時,使用者類型的密碼會轉換成這兩種類型的單向函式,並由本機安全性授權子系統服務 (LSASS) 處理序保留在記憶體中。 如果使用者使用本機帳戶進行驗證,則 NT OWF 會與本機儲存的 NT 雜湊進行比較,如果兩者相符,則會登入該使用者。 如果使用者使用主機名稱來存取資源以對 Active Directory 網域進行驗證,則 NT 雜湊會在 Kerberos 登入中用於金鑰發佈中心 (KDC),而這通常是網域控制站。

Kerberos 在下列情況下無法使用:

  • 針對僅執行 Windows NT 4.0 或更早版本的網域進行驗證
  • 使用 IP 位址而非主機名稱存取 Active Directory 網域成員上的資源
  • 存取非 Active Directory 網域成員之電腦上的資源
  • 存取屬於 Active Directory 網域成員但不受網域信任之電腦上的資源
  • 存取執行不支援 Kerberos 之電腦上的任何資源

在這些情況下,驗證程序會使用兩種不同的通訊協定,稱為 LAN Manager 和 NTLM。 該程序會從用戶端向驗證伺服器要求查問開始。 收到查問之後,用戶端會計算此查問的回應。 這是透過先用 NULL 值將密碼的兩個雜湊值填入 168 位元來完成的。 然後,每個雜湊的 168 位元會被分成三個 56 位元 DES 金鑰。 接著會使用六個 DES 金鑰來加密查問。 使用 LM 雜湊所產生的三個加密文字會串連並成為 LAN 管理員回應。 使用 NT 雜湊所產生的三個加密文字會串連並成為 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 會在安裝作業系統期間檢查系統管理員帳戶的密碼複雜度。 如果密碼空白或不符合複雜度需求,[Windows 安裝程式] 對話方塊會提示您為系統管理員帳戶建立強式密碼。 如果您將此密碼保留空白,您將無法透過網路存取此帳戶。

弱式密碼可讓攻擊者輕鬆存取您的電腦和網路,而強式密碼則難以破解。 下表為弱式和強式密碼的比較。

弱式密碼 強式密碼
Blank 長度至少為七個字元
包含容易探索或已知資訊,例如使用者名稱或網域名稱 包含「秘密」或隨機資訊
類似於先前的密碼 與先前的密碼明顯不同
包含完整的字典字詞 包含下列字元的混合:

- 大寫字母

- 小寫字母

- 數字

- 包含空格的符號

強式密碼的一個範例是 J*p2leO4>F。

密碼可以符合強式密碼的大部分準則,但仍相當弱。 例如,Hello2U! 雖然符合強式密碼的大部分準則,也符合密碼原則的複雜度需求,但是相對弱式的密碼。 H!elZl2o 是強式密碼,因為字典字詞會插入符號、數位和其他字母。 請務必教育使用者使用強式密碼的優點,並教導他們如何建立實際強式密碼。

您可以建立包含擴充 ANSI 字元集字元的密碼。 使用擴充 ANSI 字元會增加您在建立密碼時可以選擇的字元數。 因此,密碼破解軟體可能需要比破解其他密碼更多的時間來破解包含這些擴充 ANSI 字元的密碼。 在密碼中使用擴充 ANSI 字元之前,請先徹底測試這些字元,以確定包含擴充 ANSI 字元的密碼與貴組織所使用的應用程式相容。 如果您的組織使用數種不同的作業系統,則在密碼中使用延伸的 ANSI 字元時要特別注意。 例如,這些系統可能會依據 ISO-8859-15 標準化。 Windows 上的實際通訊協定實作通常會使用 UNICODE 或 UTF8,而不是實際的 ANSI 編碼。

包含擴充 ANSI 字元集字元的密碼範例包括 kUµ!¶0o and Wf©$0k#»g¤5ªrd。

Windows 中的複雜密碼

複雜密碼是一種不同類型的權杖型密碼,其中權杖是字詞,而不是字元集的符號。 複雜密碼的一個範例是包含特殊字元、數位、大寫字母和小寫字母的句子。 複雜密碼與密碼之間的主要差異如下:

  • 複雜密碼通常有空格;但密碼不會。
  • 複雜密碼比絕大多數字詞長得多,更重要的是,比普通人可以記住的任何隨機字母字串還要長。

符合原則中設定字元限制的複雜密碼通常比密碼更難破解,因為它們包含更多的字元。 這是儲存密碼或複雜密碼的 LM 和 NT 雜湊,而 LM 雜湊是兩者較弱的雜湊。

有數種方式可確保 LM 雜湊不會被儲存;其中一個是使用超過 14 個字元的密碼或複雜密碼。 您也可以使用網路安全性:下次密碼變更時不儲存 LAN Manager 雜湊數值群組原則設定。 使用此原則設定會全域關閉所有帳戶的儲存體 LM 雜湊。 變更將在下次變更密碼時生效。 因為原則的效果不是立即性的,因此您不會立即注意到任何因未儲存 LM 雜湊而造成的潛在互通性問題。

Windows 中可用的本機密碼原則

您可以實作密碼原則設定,以強制執行密碼複雜性需求。 如需此原則設定的詳細資訊,請參閱密碼必須符合複雜度需求。 如需如何套用密碼原則的資訊,請參閱套用或修改密碼原則。 如需所有可用密碼原則設定的相關資訊,請參閱密碼原則

透過 Active Directory Domain Services (AD DS) 提供更細緻的密碼原則

從 Windows Server 2008 起,您可以使用更細緻密碼原則以指定多個密碼原則,並套用不同密碼限制與帳戶鎖定原則到單一網域中的不同使用者集合。 例如,若要提高特殊權限帳戶的安全性,您可以套用更嚴格的限制到特殊權限帳戶,然後套用較不嚴格的設定到其他使用者帳戶。 或是在某些情況,針對密碼與其他資料來源同步的帳戶,您可以套用特殊密碼原則。

若要儲存更細緻的密碼原則,AD DS 架構中有兩個新的物件類別:

  • 密碼設定容器
  • 密碼設定

如需這些原則的詳細資訊,請參閱 AD DS:更細緻的密碼原則