암호는 구시대 방식입니다. Windows 10의 로그인에서 사용하는 PIN, 그 정체는 무엇일까? Microsoft Passport

image

Windows 10에서 Microsoft Account를 이용하여 로그인을 하게 설정하면, 나타나는 화면입니다. 암호는 구시대 방식이기에, PIN을 이용하면 더 빠르고 안전하다고 합니다. 왜 PIN이 더 안전할까? 라는 생각을 하실 수도 있고, 실제 PIN을 구현해보면, 복잡한 형태의 PIN(Personal Identity Number) 구성도 가능하지만, 4자리 정도의 숫자로 PIN을 입력하기에, 보안상 더 안좋다라고 생각하실 수 있습니다.

우리는 실생활에서 정말 많은 암호를 기억하고, 사용하며 살아가고 있습니다. 집의 출입문부터 사용하는 PC/스마트폰까지 다양한 형태의 암호가 있는데, 해당 암호는 노출되었을 경우, 치명적이며, 피싱이나 여러 번 암호를 입력하여 맞추는 형태의 공격에 취약할 수 밖에 없습니다.

Windows 10 보안 기술 중 하나는 바로 사용자의 암호를 네트워크 상에 다니지 않도록 하는 것이었습니다. 대부분의 보안 기술에서 암호는 다시 암호화된 상태(이를 Hash라고 하죠)로 네트워크를 다니게 되는데, 암호화가 되어 있더라도, 암호 자체가 네트워크를 떠돌아다니는 것은 문제의 소지로 발전할 가능성을 언제나 내포하고 있습니다. 이러한 암호에 대한 보안을 높히기 위해, 추가적인 방법론들을 많이 사용하죠. 암호 자체를 복잡하게 하는 형태, 주기적으로 암호를 변경하게 하는 형태, 나아가 OTP(One Time Password), MFA(Multi-Factor Authentication) 형태까지 사용하고 있습니다. 후자 중 2가지인 OTP나 MFA는 추가적인 비용과 노력이 든다는 것이 문제점으로 지적되고 있습니다.

Windows 2000부터 지원하기 시작한 스마트 카드 로그온은 네트워크 상에 사용자의 암호가 다니지 않도록 하는 점에서는 매우 보안이 높은 형태입니다. (PKI 인증서를 사용하죠. 자세한 스마트 카드 로그온에 관련된 기술은 여기를 살펴보세요.) 그러나 스마트 카드를 직원들에게 배포해야 하며, 스마트 카드내 인증서를 등록해주는 형태의 작업이 필요하기에, 앞선 다단계 인증 방식과 같이 비용과 노력이 들어갑니다.

전 세계적으로 IDentity에 대한 여러 문제를 기술적으로 해결하기 위한 Alliance로 FIDO(Fast Identity Online) Alliance가 있습니다. 현재 FIDO 2.0과 관련된 논의가 활발히 진행되고 있는데, 오늘 소개하는 Microsoft Passport 기술도 FIDO 2.0 표준을 기반으로 Windows 10, Microsoft Account, Azure Active Directory, 차후 출시될 Windows Server 2016 Active Directory에 구현되어 있습니다.

Microsoft Passport의 시작은 PIN을 생성하는 것으로 시작합니다. 제어판의 계정, 로그인 옵션을 찾아갑니다.

PIN-02

PIN 항목에서 추가를 누르면..

PIN-01

PIN에 대한 기본 구성은 간단한 조합으로도 가능하게 되어 있습니다만, 역시나 그룹 정책, 또는 MDM 정책으로 제한이 가능합니다.

Pin-04

단순히 PIN을 설정하는 단계라고 생각할 수 있지만, 내부적으로는 몇가지 단계가 Microsoft, 또는 Azure AD, 그리고 앞으로 출시될 Windows Server 2016 AD와 일어나게 됩니다.

image

최초 PIN 생성시, Windows는 공개키(Public Key)와 개인키(Private Key)를 생성하여, 공개키는 Microsoft 서비스측에 등록하고, 개인키는 디바이스내 TPM(Trusted Platform Module)에 저장합니다. TPM이 없는 디바이스의 경우에는 그룹 정책 또는 MDM 정책에 따라 소프트웨어 암호화를 이용한 안전하게 저장(C:\Windows\ServiceProfiles 밑에 Administrator 조차 권한이 없는 상태로 암호화되어 저장됩니다.), 혹은 사용 불가로 결정할 수 있습니다.

PIN-03

PIN이 그러면 어떠한 역할을 할까요? 바로 TPM에 저장된 개인키에 대한 암호화를 해제할 때, PIN을 사용하게 됩니다. PIN의 경우에는 네트워크로 전송되지 않고, 일정 횟수 이상을 틀리게 되면 잠기게 됩니다.

공개키와 개인키를 이용하는 최초 등록 절차에 대해 조금만 더 자세히 알아보면 아래의 그림과 같습니다.

image

사용자와 더불어 등록시, TPM에 대한 확인을 위해 사용할 Attestation Blob을 등록합니다. Microsoft Passport에 대한 요청을 진행하면, 앞서 언급한 바와 같이 공개키/개인키를 생성하고, TPM 확인을 위해 사용할 Attestation Blob도 만들어내게 됩니다. 개인키는 별도로 전송해줄 필요가 없기에 로컬(TPM 혹은 별도의 위치)에 저장합니다. 그 후, 서명된 Attestation Blob, 사용자의 공개키, 그리고 PIN을 잊어버렸을 때, 리셋을 위한 Admin Key를 전송합니다. 이를 받은 서버는 Attestation Blob을 확인하고, 공개키를 저장합니다. 그리고 Key ID를 전송합니다. 이 모든 단계는 공개키/개인키를 사용하는 형태로 암호화되어 처리됩니다.

사용자가 Microsoft Passport로 로그인할 경우에는 어떤 단계가 진행될까요?

image

우선 디바이스에서 PIN을 입력하여, Microsoft Passport 로그온을 시도하면, Microsoft 서비스에서는 Nonce(Number used once, 말 그대로 한번 쓰기 위해서 만든, 넌스라고 읽습니다.)를 생성하여 디바이스로 전달합니다. 디바이스에서는 사용자의 개인키(TPM 혹은 별도의 위치에 저장)로 해당 Nonce를 서명합니다. 이 후, Nonce, 서명된 Nonce, 그리고 등록시 받은 Key ID를 전송합니다. Microsoft에서는 사용자의 공개키를 가지고 있기에, Key ID를 통해 공개키를 찾아, 서명을 확인하고, Nonce와 비교하여 같은 지를 확인합니다. 같다면, 해당 사용자가 맞는 것이죠.

이후, 사용자의 공개키를 이용하여 암호화를 위한 대칭키(Symmetric Key)를 암호화합니다. 마지막으로 인증에 대한 토큰(TGT)를 해당 대칭키로 암호화해서 전송하죠.

디바이스의 사용자는 개인키를 가지고 있기에, 대칭키를 복호화할 수 있고, 이를 이용하여 인증에 대한 토큰까지 복호화할 수 있습니다. 일반적인 암호화 방식에서 효율적인 처리를 위해 대칭키를 비대칭키로 암호화해서 전송하여, 이후 암호화는 대칭키로 처리하게 되죠.

로그인 단계에서 어떠한 형태로도 사용자의 ID와 암호는 전송되지 않았습니다. 등록시 사용한 키, 그리고 Microsoft Passport 로그온 시도시 생성된 Nonce만을 이용해서 인증을 처리하게 되는 것이죠.

FIDO 2.0 표준을 따르고 있는 Microsoft Passport는 Windows 10에서 사용자의 ID/암호가 노출시키지 않는 안전함을 편리함과 함께 제공하고 있습니다. 또한 Microsoft Passport는 PIN 형태로만 사용하는 것이 아니라, 차후 소개해드릴 Windows Hello와 같은 생체 인식 기술과 결합하여, 사용자의 개인 키를 보호/사용하는 형태로 발전할 수 있게 됩니다.