암호 기술 개요
IT 전문가를 위한 이 토픽에서는 Windows가 Windows Server 2012 및 Windows 8.1 시작하는 Windows 버전에서 암호를 구현하는 방법을 설명합니다. 또한 강력한 암호, 암호 및 암호 정책에 대해서도 설명합니다.
암호가 Windows에 저장되는 방법
이 문서에서는 "미사용" 암호 스토리지에 대한 정보를 제공합니다.
Windows는 256자 유니코드 문자열의 암호를 나타내지만 로그온 대화 상자는 127자로 제한됩니다. 따라서 가능한 가장 긴 암호는 127자입니다. 서비스와 같은 프로그램은 더 긴 암호를 사용할 수 있지만 프로그래밍 방식으로 설정해야 합니다.
Windows 운영 체제는 다양한 용도로 다양한 방법으로 암호를 저장합니다.
OWF로 저장된 암호
Active Directory 도메인을 비롯한 Windows 네트워킹에서 사용하기 위해 암호는 기본적으로 LAN Manager 단방향 함수(LM OWF)와 NT OWF의 두 가지 방법으로 저장됩니다. "단방향 함수"는 데이터의 단방향 수학 변환을 나타내는 용어입니다. 변환되는 데이터는 암호화를 통해서만 변환할 수 있으며 되돌릴 수 없습니다. 사용 중인 단방향 함수의 가장 일반적인 형식은 암호화 해시입니다. 해시는 해시가 계산되는 일부 더 큰 데이터 집합에 수학적으로 연결된 작은 데이터 집합입니다. 더 큰 데이터 집합이 변경되면 해시도 변경됩니다. 예를 들어 해시는 데이터가 전송에서 수정되지 않은지 확인하는 체크섬으로 유용합니다. 암호화 해시는 특정 속성을 충족하는 해시입니다. 예를 들어 암호화 해시는 해시에서만 더 큰 데이터 집합을 유추하기 위해 합리적인 시간 내에 수학적으로 불가능하도록 만들어야 합니다. 마찬가지로 동일한 해시를 생성하는 두 개의 큰 데이터 집합을 찾는 것은 수학적으로 불가능합니다.
다양한 유형의 단방향 함수가 있습니다. 모든 해시 함수는 정의상 단방향 함수입니다. 그러나 일반적으로 되돌릴 수 있는 일반 암호화 함수를 사용하여 단방향 함수를 만들 수도 있습니다. 암호화 함수에서 데이터와 키를 교환하고 데이터를 키로 사용하여 고정 값(키)을 암호화하여 이 작업을 수행할 수 있습니다. 이것은 LM 해시를 계산하는 방법입니다. LM 해시는 다음과 같이 계산됩니다.
- 암호는 정확히 14자까지 NULL 바이트로 채워집니다. 암호가 14자보다 긴 경우 나머지 작업에 대해 14 NULL 바이트로 바뀝니다.
- 암호가 모든 대문자로 변환됩니다.
- 암호는 두 개의 7-바이트(56비트) 키로 분할됩니다.
- 각 키는 고정 문자열을 암호화하는 데 사용됩니다.
- 4단계의 두 결과는 연결되고 LM 해시로 저장됩니다.
LM OWF 알고리즘은 최신 알고리즘을 사용할 수 없는 소프트웨어 및 하드웨어와의 호환성을 위해 Windows에 포함되어 있습니다.
NT 해시는 단순히 해시입니다. 암호는 MD4 알고리즘을 사용하여 해시되고 저장됩니다. NT OWF는 Windows NT 4.0 및 이전 도메인과 Active Directory 도메인의 도메인 멤버에 의한 인증에 사용됩니다.
NT 해시와 LM 해시는 모두 솔트되지 않습니다. 솔팅은 단방향 함수를 계산하기 전에 암호를 임의의 숫자 값(솔트)과 결합하는 프로세스입니다.
Active Directory에 저장된 암호
미사용 암호는 NTDS(Active Directory 데이터베이스)의 여러 특성에 저장됩니다(NTDS.DIT 파일). 이러한 속성은 다음 표에 나열되어 있습니다.
Azure Active Directory 특성 | 콘텐츠 |
---|---|
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을 사용하여 암호화됩니다(CNG BCRYPT_AES_ALGORITHM 참조). 이전 Windows 버전은 DES + RC4 암호화의 두 계층을 사용하여 NT 해시를 암호화합니다.
추가 자격 증명에 대한 자세한 내용은 MS-SAMR: supplementalCredentials 및 추가 자격 증명 구조를 참조하세요.
로컬 SAM에 저장된 암호
도메인 구성원 및 워크스테이션에서 로컬 사용자 계정 암호 해시는 레지스트리에 있는 SAM(로컬 보안 계정 관리자) 데이터베이스에 저장됩니다. Active Directory와 동일한 암호화 및 해시 알고리즘을 사용하여 암호화됩니다. 로컬 사용자 계정에 대한 supplementalCredentials 특성의 암호도 Windows Server 2016 이후 로컬 SAM Database에 저장됩니다.
캐시된 자격 증명
또한 Windows는 도메인 사용자가 해당 도메인 멤버에 로그온할 때 도메인 멤버에 암호 검증 도구를 저장합니다. 컴퓨터가 도메인 컨트롤러에 액세스할 수 없는 경우 이 검증 도구를 사용하여 도메인 사용자를 인증할 수 있습니다. 암호 검증 도구는 일반적으로 캐시된 자격 증명이라고도 합니다. NT 해시를 가져와서 사용자 이름을 연결한 다음 MD4 해시 함수를 사용하여 결과를 해시하여 계산됩니다.
Windows에서 암호 작동 방식
Windows 및 기타 여러 운영 체제에서 사용자의 ID를 인증하는 한 가지 방법은 비밀 암호 또는 암호를 사용하는 것입니다.
스마트 카드, FIDO 및 비즈니스용 Windows Hello 같은 보안 다단계 인증을 사용하는 것이 좋습니다. 그러나 일부 시나리오에서는 암호 인증이 여전히 필요합니다.
네트워크 환경을 보호하려면 모든 사용자가 강력한 암호를 사용해야 합니다. 이렇게 하면 악의적인 사용자가 수동 메서드를 통해 또는 도구를 사용하여 손상된 사용자 계정의 자격 증명을 획득하는 등 취약한 암호를 추측하는 위협을 방지할 수 있습니다. 관리 계정의 경우 특히 그렇습니다. 복잡한 암호를 정기적으로 변경하면 암호 공격 성공 가능성이 줄어듭니다.
암호 정책 설정은 암호의 복잡성과 수명을 제어합니다. 암호 정책은 반드시 기능 암호가 아닌 Windows 암호에 영향을 줍니다.
사용자의 암호 수정 기능은 암호 정책 및 사용 가능한 인터페이스에 의해 제어됩니다. 예를 들어 보안 데스크톱을 통해 사용자는 시스템 관리자 또는 도메인 관리자가 관리하는 암호 정책에 따라 언제든지 암호를 변경할 수 있습니다. Windows 자격 증명 모음, BitLocker 및 파일 시스템 암호화와 같은 기능을 사용하면 사용자가 해당 기능과 관련된 암호를 수정할 수 있습니다.
Windows에서 암호 사용 방법
사용자가 로그온하면 사용자가 입력하는 암호가 두 가지 유형의 단방향 함수로 변환되고 LSASS(로컬 보안 기관 하위 시스템 서비스) 프로세스에 의해 메모리에 보관됩니다. 인증에 로컬 계정을 사용하는 경우 NT OWF는 로컬로 저장된 NT 해시와 비교되며, 두 해시가 일치하면 사용자가 로그온됩니다. 사용자가 호스트 이름을 사용하여 리소스에 액세스하여 Active Directory 도메인에 대해 인증하는 경우 NT 해시는 일반적으로 도메인 컨트롤러인 KDC(키 배포 센터)에 대한 Kerberos 로그온에서 사용됩니다.
다음과 같은 상황에서는 Kerberos를 사용할 수 없습니다.
- Windows NT 4.0 이하만 실행하는 도메인에 대해 인증
- 호스트 이름이 아닌 IP 주소를 사용하여 Active Directory 도메인 멤버의 리소스에 액세스
- Active Directory 도메인의 구성원이 아닌 컴퓨터의 리소스에 액세스
- Active Directory 도메인의 구성원이지만 도메인에서 신뢰할 수 없는 컴퓨터의 리소스에 액세스
- Kerberos를 지원하지 않는 컴퓨터에서 리소스 액세스
이러한 경우 인증 프로세스는 LAN 관리자와 NTLM이라는 두 가지 프로토콜을 사용합니다. 프로세스는 클라이언트가 인증 서버에서 챌린지를 요청하는 것으로 시작합니다. 챌린지가 수신되면 클라이언트는 이 챌린지에 대한 응답을 계산합니다. 이 작업은 먼저 암호의 두 해시를 null 값으로 168비트로 패딩하여 수행됩니다. 각 해시의 168비트는 세 개의 56비트 DES 키로 분할됩니다. 그런 다음 6개의 DES 키를 사용하여 챌린지를 암호화합니다. LM 해시를 사용하여 생성된 세 개의 암호화 텍스트가 연결되고 LAN 관리자 응답이 됩니다. NT 해시를 사용하여 생성된 세 개의 암호화 텍스트가 연결되고 NTLM 응답이 됩니다.
응답을 계산하는 데 사용되는 함수는 네트워크 보안: LAN Manager 인증 수준 그룹 정책 설정의 LM 호환성 수준 설정에 의해 수정될 수 있습니다. 해당 값이 1 이하로 설정된 경우 클라이언트는 원래 LAN 관리자 및 NTLM 응답을 보냅니다. 2로 설정된 경우 NTLM 응답만 전송됩니다. 3 이상으로 설정된 경우 두 프로토콜의 새 버전이 사용됩니다. NTLM 버전을 NTLMv2라고합니다. LAN 관리자 버전을 LMv2라고도 합니다. 두 프로토콜 모두 NT 해시를 사용하여 응답을 계산하고 둘 다 서버 챌린지 대신 또는 서버 챌린지 외에 클라이언트 쪽 챌린지를 사용합니다. 또한 LM 호환성 수준 설정이 1 이상으로 설정된 경우 재생 공격을 방지하기 위해 NTLM 응답에 타임스탬프가 지정됩니다. LM 호환성 수준 설정에 대한 자세한 내용은 네트워크 보안: LAN Manager 인증 수준을 참조하세요.
강력한 암호
암호는 조직에 대한 무단 액세스에 대한 첫 번째 방어선을 제공합니다. Windows Server 2003부터 Windows는 운영 체제를 설정하는 동안 관리자 계정에 대한 암호의 복잡성을 확인합니다. 암호가 비어 있거나 복잡성 요구 사항을 충족하지 않는 경우 Windows 설치 대화 상자에서 관리자 계정에 대한 강력한 암호를 만들라는 메시지가 표시됩니다. 이 암호를 비워 두면 네트워크를 통해 이 계정에 액세스할 수 없습니다.
취약한 암호는 공격자가 컴퓨터와 네트워크에 쉽게 액세스할 수 있도록 하는 반면, 강력한 암호는 해독하기가 훨씬 더 어렵습니다. 다음 표에서는 약한 암호와 강력한 암호를 비교합니다.
취약한 암호 | 강력한 암호 |
---|---|
Blank | 길이는 7자 이상이어야 함 |
사용자 이름 또는 도메인 이름과 같이 쉽게 검색할 수 있거나 알려진 정보를 포함합니다. | "비밀" 또는 임의 정보를 포함합니다. |
이전 암호와 유사합니다. | 이전 암호와 크게 다릅니다. |
전체 사전 단어를 포함합니다. | 다음 문자가 혼합되어 있습니다. - 대문자 - 소문자 - 숫자 - 공백을 포함한 기호 |
강력한 암호의 예는 J*p2leO4>F입니다.
암호는 강력한 암호의 대부분의 조건을 충족할 수 있지만 여전히 약합니다. 예: Hello2U! 는 강력한 암호에 대한 대부분의 기준을 충족하고 암호 정책의 복잡성 요구 사항을 충족하더라도 상대적으로 약한 암호입니다. H!elZl2o는 사전 단어가 기호, 숫자 및 기타 문자로 산재되어 있기 때문에 강력한 암호입니다. 강력한 암호를 사용하는 이점에 대해 사용자에게 교육하고 실제로 강력한 암호를 만드는 방법을 가르치는 것이 중요합니다.
확장된 ANSI 문자 집합의 문자가 포함된 암호를 만들 수 있습니다. 확장된 ANSI 문자를 사용하면 암호를 만들 때 선택할 수 있는 문자 수가 증가합니다. 따라서 암호 해독 소프트웨어가 다른 암호를 해독하는 것보다 이러한 확장된 ANSI 문자를 포함하는 암호를 해독하는 데 더 많은 시간이 걸릴 수 있습니다. 암호에 확장된 ANSI 문자를 사용하기 전에 이를 철저히 테스트하여 확장된 ANSI 문자를 포함하는 암호가 조직에서 사용하는 애플리케이션과 호환되는지 확인합니다. 조직에서 여러 운영 체제를 사용하는 경우 암호에 확장된 ANSI 문자를 사용하는 것에 특히 주의해야 합니다. 예를 들어 이러한 시스템은 ISO-8859-15에서 표준화할 수 있습니다. Windows의 실제 프로토콜 구현에서는 실제 ANSI 인코딩 대신 유니코드 또는 UTF8을 사용하는 경우가 많습니다.
확장된 ANSI 문자 집합의 문자가 포함된 암호의 예로는 kUµ!¶0o 및 Wf©$0k#»g¤5ªrd가 있습니다.
Windows의 암호
암호는 토큰이 문자 집합의 기호 대신 단어인 다른 형태의 토큰 기반 암호입니다. 암호의 예로 특수 문자, 숫자, 대문자 및 소문자가 들어 있는 문장이 있습니다. 암호 구문과 암호의 주요 차이점은 다음과 같습니다.
- 암호 구문에는 일반적으로 공백이 있습니다. 암호는 그렇지 않습니다.
- 암호 구문은 대부분의 단어보다 훨씬 길고, 더 중요한 것은 평범한 사람이 기억할 수 있는 임의의 문자 문자열보다 더 깁니다.
정책에서 설정한 문자 제한을 준수하는 암호 구문은 일반적으로 암호보다 더 많은 문자를 포함하므로 크래킹하기가 더 어렵습니다. 암호 또는 암호 구문을 저장하는 LM 및 NT 해시이며 LM 해시는 둘 중 약한 해시입니다.
LM 해시가 저장되지 않도록 하는 방법에는 여러 가지가 있습니다. 그 중 하나는 암호 또는 14자보다 긴 암호 구문을 사용하는 것입니다. 네트워크 보안: 다음 암호 변경에 LAN Manager 해시 값을 저장하지 마세요 그룹 정책 설정도 사용할 수 있습니다. 이 정책 설정을 전역적으로 사용하면 모든 계정에 대한 스토리지 LM 해시가 해제됩니다. 변경 내용은 다음에 암호가 변경될 때 적용됩니다. 정책의 효과는 즉각적이지 않으므로 LM 해시를 저장하지 않아 발생할 수 있는 상호 운용성 문제를 즉시 알 수 없습니다.
Windows에서 사용할 수 있는 로컬 암호 정책
암호 복잡성 요구 사항을 적용하는 암호 정책 설정을 구현할 수 있습니다. 이 정책 설정에 대한 자세한 내용은 암호는 복잡성 요구 사항을 충족해야 함을 참조하세요. 암호 정책을 적용하는 방법에 대한 자세한 내용은 암호 정책 적용 또는 수정을 참조하세요. 사용 가능한 모든 암호 정책 설정에 대한 자세한 내용은 암호 정책을 참조하세요.
AD DS(Active Directory 도메인 Services)를 통해 사용할 수 있는 세분화된 암호 정책
Windows Server 2008부터 세분화된 암호 정책을 사용하여 단일 도메인 내 여러 암호 정책을 지정하고 도메인의 각 사용자 집합에 서로 다른 암호 및 계정 잠금 정책 제한을 적용할 수 있습니다. 예를 들어 권한 있는 계정의 보안을 강화하기 위해 권한 있는 계정에 더 엄격한 설정을 적용한 다음 다른 사용자의 계정에 더 낮은 엄격한 설정을 적용할 수 있습니다. 또는 경우에 따라 암호가 다른 데이터 원본과 동기화되는 계정에 대해 특별한 암호 정책을 적용할 수도 있습니다.
세분화된 암호 정책을 저장하기 위해 AD DS 스키마에 두 개의 새 개체 클래스가 있습니다.
- 암호 설정 컨테이너
- 암호 설정
이러한 정책에 대한 자세한 내용은 AD DS: 세분화된 암호 정책을 참조하세요.