Security WatchBitLocker와 신뢰의 복잡성

Justin Troutman

필자는 지금까지 기사에서 Windows Vista라는 두 단어를 언급한 적이 없습니다. 때문에 이 기사를 시작하는 지금 마치 백지수표를 들고 장난감 가게에 들어서는 5살 꼬마처럼 마음이 들뜹니다. 설명할 기능이나 다루고 싶은 부분이 너무 많고 이야기도 수많은 방향으로 풀어갈 수 있을 것 같습니다.

얼마 전 필자는 Bruce Schneier라는 보안 전문가의 블로그를 읽다가 당시 모르고 있었던 BitLocker™에 대해 처음으로 알게 되었습니다. 그리고 Windows Vista®에서 암호화 기능을 제공하기 위한 구성 요소라는 것을 곧바로 알 수 있었습니다. "Windows Vista가 암호화까지? 굉장한걸! 하지만 아무리 뛰어난 기능을 제공하더라도 어딘가에 백도어가 있을거야"라는 의심을 가지게 되었습니다.

지금까지는 그 진위 여부에 관계없이 사용자가 Windows®에서 기본 제공되는 보안 기능을 신뢰하지 않는 이유에 대해서 의견이 분분했습니다. 그러나 그것이 이 칼럼을 쓰게 된 동기는 아닙니다. 오히려 BitLocker가 유용할 수도 있는 타당한 이유가 무엇인지를 실증적으로 보여 주고 싶었습니다. 또한 암호화 소프트웨어와 하드웨어에 생명을 불어넣을 수 있는 이론에 대해서도 간단히 소개하고자 합니다.

그렇다고 BitLocker가 모든 보안 문제를 해결할 수 있는 만능 해결사라는 의미는 아닙니다. BitLocker는 말하자면 전체 보안 퍼즐을 이루는 한 조각이라고 할 수 있습니다. BitLocker는 특정 위협 모델에서 복원 기능을 제공하는 것을 주 목적으로 합니다.

BitLocker는 특히 분실 또는 도난된 랩톱에서 위력을 발휘하도록 개발되었습니다. 이동이 잦은 근로자는 갖가지 기밀 정보를 휴대한 채로 기차, 항공기, 식당, 호텔, 집, 지사 등 곳곳을 누비게 됩니다. 이러한 정보는 보통 신뢰할만한 보안 기능이 부족한 랩톱이나 기타 모바일 장치에 저장되어 있기 때문에 데이터가 매우 취약한 환경에 노출되기 쉽습니다. 사용자가 랩톱을 분실한다면 이러한 데이터는 어떻게 될까요?

부주의한 것은 인간의 본성이므로 어찌할 도리가 없지만, 다행히 그에 따른 문제는 어느 정도 방지할 수 있습니다. 회사에 있어서 기밀 데이터 유출에 따른 손실에 비하면 랩톱을 교체하는 비용은 아무것도 아닙니다. BitLocker는 이러한 점에 착안한 소프트웨어입니다.

전문가의 참여

여기서는 흥미로운 시각에서 BitLocker를 조명해 보도록 하겠습니다. 아직 본론을 시작하지도 않았지만 의구심을 가지는 독자도 있을 겁니다. BitLocker를 사용해 본 적도 없는 사람이 어떻게 BitLocker에 대해 의견을 가질 수 있으며, 더군다나 이 주제에 대해 기사까지 쓸 수 있느냐는 것이죠. 의구심을 접고 조금만 참아 주시기 바랍니다. 이 기사에서 정말로 다루고자 하는 것은 BitLocker에 대한 내용이 아니라 높은 수준의 암호화와 성공적인 솔루션을 개발하는 데 중요한 디자인 이론입니다.

이러한 생각은 Bruce Schneier의 블로그를 읽은 때부터 시작되었습니다. 보고 싶은 신작 영화가 있다고 가정해 보십시오. 예고편과 캐스팅된 주연 배우를 보고 영화가 어떨지 대충 짐작하게 됩니다. 주연 배우가 영화의 완성도를 보장해 주지는 않지만 영화에서 큰 비중을 차지하고 기대를 가지게 하는 것은 사실입니다. Chris Rock이나 Ben Stiller가 출연하는 영화, 아니면 Kate Winslet이나 Johnny Depp이 주연한 영화라는 사실만으로도 기대를 가지기에 충분하죠.

마찬가지로 국제적인 명성을 얻고 있는 보안 전문가가 개인 블로그에서 BitLocker에 대해 언급했다는 사실만으로도 필자는 몇 가지 기대를 가지게 되었습니다. 먼저 이 신기술이 전문가도 주목할 만큼 뛰어나거나, 공개적으로 언급해야 할 만큼 형편없거나, 두 가지 중 하나라는 사실을 알 수 있었습니다. 놀랍게도 Bruce Schneier의 최종 평가는 긍정적이었습니다.

그의 글에서 "경찰을 위한 백도어가 없다"는 문장이 제일 먼저 눈에 들어왔습니다. 이 짧은 문장이 많은 것을 말해 줍니다. 매우 자신 있는 어조였고 Microsoft® System Integrity 팀 블로그에 대한 링크까지 포함되어 있었습니다. 이 링크를 통해 Microsoft의 보안 전문 개발자인 Niels Ferguson의 게시물을 발견했는데, Microsoft에서 법적 용도로 BitLocker에 백도어를 일부러 포함했다는 소문을 강하게 부정하는 내용이었습니다. 이 글에서 Ferguson은 백도어를 받아들일 수 없으며 백도어를 지원하는 프로젝트에는 참여한 적이 없다고 솔직하게 밝히고 있습니다. 또한 Microsoft가 법 때문에 백도어를 추가해야 했다면 백도어가 포함된 사실을 공개하거나 BitLocker 기능을 완전히 빼버렸을 것이라고 설명했습니다.

이 게시물에 적힌 Niels Ferguson이라는 이름 만으로도 Schneier가 얼마나 자신감을 가지고 글을 적었는지 알 수 있었고, 그러한 자신감은 필자에게로 다시 이어졌습니다. Ferguson은 확실한 전문가일 뿐 아니라 그의 말을 무조건 믿어도 좋을 만큼 화려한 경력을 가지고 있기 때문입니다. Bruce Schneier와 Niels Ferguson은 Practical Cryptography(암호를 간단하고 정확하고 안전하게 적용하는 방법에 대한 입문서)를 공동으로 집필하고 Twofish라는 블록 암호화 기술을 함께 설계했습니다. Twofish는 AES(Advanced Encryption Standard) 선정 과정에서 최종 선정됨으로써 암호화 기술로서 명성을 얻은 128비트 Feistel 네트워크입니다.

물론 베테랑 암호 전문가가 프로젝트에 참여한다고 해서 최종 제품의 보안이 보장되는 것은 아닙니다. 암호화 기술의 대가라 해도 한두 가지 문제를 놓칠 수 있으니까요. 장기적으로 BitLocker가 어떻게 변화할지 모르지만 믿을 수 있는 디자인 전략을 바탕으로 개발된 것만은 확실합니다.

프로젝트에서 발생할 수 있는 문제로, 암호화에 대해서는 전혀 개의치 않고 제품 개발에만 열심히 몰두하는 개발자와 제품 출시에만 관심이 있는 사람들이 생겨날 수 있습니다. 그 의도에 관계없이 이러한 사람들은 모두 개발 과정에서부터 보안에 실패하는 결과를 초래합니다. 그러나 BitLocker의 경우 이러한 문제는 없었던 듯합니다. 적어도 유력한 보안 전문가가 한 명은 참여했고, 그를 지원하는 리소스도 충분했으니까요.

신뢰에 관해

얼마 전 필자는 PGP 암호화를 개발한 Phil Zimmerman으로부터 몇 가지 노하우를 전수 받았습니다. "개발자를 위한 보안 강령"이라는 책이 출판된다면 그의 조언이 가장 먼저 실려야 할 것입니다. 구체적으로 BitLocker를 지적해 말한 것은 아니지만 이 디자인 이론은 대부분의 암호화 솔루션에 적용될 수 있습니다. 아마 여러분도 이러한 사실은 쉽게 알 수 있을 것입니다. 하지만 오늘날 보안의 중요성을 감안한다면 한번 더 확실히 짚어볼 필요가 있습니다.

암호화 인프라를 설계할 때 개발자는 단순성, 정확성 및 안전성을 확보해야 합니다. 실수를 완벽하게 피할 수는 없다 하더라도 당연히 발생하는 것으로 받아들이거나 무시해서는 안 됩니다. 개발자는 다소 지나치다 싶을 만큼 완벽주의자가 되어야 합니다. "한 번 실수할 때마다 누군가의 목숨이 끊기는 것처럼 설계하라"는 Zimmerman의 말처럼 말입니다. 과장이 너무 심하다고요? 2005 Annual Computer Security Applications Conference에서 NSA의 암호 전문가 Brian Snow(이후 은퇴)는 "보안 장치는 반드시 제대로 작동해야 하고 그에 대한 보장이 필요합니다. 고객을 상대로 베타 테스트를 할 수는 없는 노릇이니까요. 제품에서 오류가 발생하면 누군가가 죽을 수도 있습니다"라고 말했습니다. 따라서 실수는 금전적인 비용 이상의 대가를 초래할 수 있다는 점을 명심하십시오.

사용자는 안전을 보장 받을 자격이 있습니다. 그리고 사용자의 신뢰를 얻고 유지하는 것은 매우 중요합니다. Zimmerman은 "사용자의 신뢰를 얻어야 합니다. 그리고 신뢰를 얻은 후에는 그 부담을 끝까지 짊어지고 가야 합니다"라는 말로 이를 명확히 하고 있습니다. 사용자의 신뢰를 얻고 유지함으로써 회사는 보안이 철저하다는 명성과 믿음을 얻을 수 있습니다. 이러한 명성은 한번 잃으면 회복하기가 어렵습니다.

Microsoft도 BitLocker(또는 다른 제품)를 설계할 때 이러한 점을 염두에 두었다고 생각합니다. 이와 관련해 Microsoft가 실제로 이 문제에 올바르게 접근하여 사용자들이 진지하게 고려해 볼만한 암호화 기술을 만들어냈다는 믿음의 근거를 밝혀 보겠습니다.

가난한 사람의 인증과 Elephant 구성 요소

BitLocker의 핵심 기능은 Windows Vista(특히 Enterprise 및 Ultimate 버전)에서 모든 시스템 볼륨 데이터를 암호화하는 것입니다. 용도가 매우 단순한 것 같지만 제약 조건을 고려해 보십시오. BitLocker는 섹터 수준에서 데이터를 암호화하며 암호 텍스트가 일반 텍스트의 길이를 초과할 수 없기 때문에 임시 데이터(인증을 위해 한 번만 사용되는 번호 또는 문자열), IV(Initialization Vector), MAC(메시지 인증 코드) 등에 사용할 여유가 없습니다. 이러한 까다로운 제약 조건과 그에 따른 상황을 예상하기는 했지만 메시지 인증 문제가 어떤 방식으로든 해결되리라는 것도 알고 있었습니다.

BitLocker는 가난한 사람의 인증이라고 불리는 방식을 사용합니다. 이 절충안은 생각보다 보수적이지 않으며, 암호 텍스트를 조작하더라도 의미 있는 일반 텍스트를 얻을 수는 없다는 가정하에 작동합니다. 즉, 암호 텍스트가 조작되면 다른 기능을 수행할 수 있도록 허용하는 것이 아니라 시스템이 중단되어야 합니다.

BitLocker를 개발한 Microsoft 팀은 완전히 새로운 차단 암호를 개발하려면 분석에 시간이 너무 오래 걸리고, 기존 디자인의 경우에도 제대로 분석되지 않았거나 효율성이 떨어진다는 사실을 잘 알고 있었습니다. 때문에 암호화에 CBC(Cipher Block Chaining) 모드의 AES를 사용하기로 결정했습니다. 앞으로 이 방식은 AES-CBC라고 지칭하겠습니다. 이 모드는 특정 일반 텍스트 공격 모델(단축 IND-CPA)하에서 파악되지 않지만 무결성이 보장되지는 않습니다. 그리고 MAC를 사용할 수 없으며 CBC는 기밀성을 위한 모드이므로 무결성이 전혀 보장되지 않습니다. 여기서 바로 Elephant가 그 역할을 수행합니다.

새로운 Elephant 구성 요소는 평범한 AES-CBC보다 가난한 사람의 인증을 효과적으로 렌더링하는 두 가지 디퓨저를 제공합니다. 그러나 엄격한 표준 준수 정책을 따라야 하는 사용자의 경우 Elephant를 사용하지 않고 AES-CBC를 실행할 수도 있습니다. 항상 이상적이라고는 할 수 없지만 가난한 사람의 인증은 여기서 설명하는 상황에서 가장 적합한 솔루션이며 Elephant는 상황을 최대한 바람직하게 만드는 데 초점을 맞추고 있습니다. 그렇다면 이 구성 요소는 어떻게 작동하는 것일까요?

그림 1에서는 이해를 돕기 위해 작동의 흐름을 보여 줍니다. 암호화가 실행되면 XOR을 통해 일반 텍스트가 섹터 키와 결합됩니다. 이 텍스트는 키가 적용되지 않은 두 가지 디퓨저를 통과합니다. 이 두 디퓨저에서는 AES-CBC를 사용하여 텍스트를 암호화합니다. 섹터 키와 AES-CBC에는 키 자료가 필요하기 때문에 독립적으로 키가 적용됩니다. 이러한 방식은 AES-CBC 및 Elephant의 보안 구성을 AES-CBC의 보안 구성으로 축소할 수 있도록 보증의 표준화를 단순화합니다. Elephant는 새로운 기본 기술이며, 이러한 신기술은 보통 엄격히 분석되기 전까지는 꺼려지기 마련입니다. 그러나 BitLocker는 Elephant를 사용하는 AES-CBC는 AES-CBC만 사용할 때보다 공격하기 어렵다는 사실을 잘 보여 주므로 장단점이 있습니다.

그림 1 Elephant를 사용한 가난한 사람의 인증

그림 1** Elephant를 사용한 가난한 사람의 인증 **

섹터 키와 AES-CBC 구성 요소는 256비트의 키 자료를 받으므로 전체 키 길이는 512비트가 됩니다. 하지만 기본적으로 이 두 구성 요소는 각각 128비트의 키 자료밖에 사용하지 않으므로 키 자료 중 일부가 사용되지 않습니다. 이렇게 구현하는 이유는 키 길이가 달라질 때마다 키 관리 인프라를 변경하는 것보다 불필요한 비트를 버리는 것이 더 간단하기 때문입니다.

블록 길이는 512 ~ 8192바이트 사이의 2의 배수가 될 수 있습니다. 암호 텍스트를 변경하면 섹터의 모든 일반 텍스트가 무작위로 수정되도록 하기 위해 차단 암호는 다양한 블록 크기로 동작하도록 설계되었습니다. 게다가 Liskov, Rivest 및 Wagner가 설명한 것처럼 섹터별로 조금씩 다른 알고리즘을 통해 조작 가능한 차단 암호처럼 작동한다면 악의적인 사용자가 섹터의 암호 텍스트에서 다른 섹터로 쉽게 이동할 수 없습니다.

향후 전망

BitLocker의 암호화 보안에 대한 갖가지 예측에서는 전체적인 그림을 보지 못하고 있습니다. BitLocker의 경우 보안을 보장하는 것만으로는 제 역할을 수행할 수 없습니다. BitLocker는 홀로 사용되는 솔루션이 아니라 Windows Vista의 다양한 기능 중 하나이기 때문입니다. Microsoft에서는 BitLocker가 Windows Vista에 완전히 통합된 솔루션이라고 밝히고 있습니다. 그러나 OS와 완벽하게 통합되었다면 다른 구성 요소에서 오류가 발생할 경우 BitLocker에서도 오류가 발생하거나 공격을 당할 수도 있지 않을까요?

개인적으로 필자는 모듈화와 오류 격리가 효과적이라고 믿고 있습니다. 모듈화하지 않은 채로 완전히 통합할 경우 복잡한 결과가 발생합니다. Windows Vista와 BitLocker에서는 이러한 문제가 발생하지 않을 수도 있지만, 이는 시간이 지나고 충분한 분석이 이루어진 후에야 증명될 것입니다.

BitLocker에 대한 필자의 최종 평가는? 암호 전문가의 의무를 충실히 이행한 Microsoft System Integrity 팀에게 경의를 표하는 바입니다. 이 기능이 단순히 마케팅을 위한 수단으로서가 아니라 진정으로 암호화를 구현하도록 설계된 것만은 확실합니다. 따라서 필자는 BitLocker의 유용성에 큰 점수를 매기고 싶습니다. 단, 이 기능을 통한 보안 효과가 뛰어난지에 대한 평가는 별개의 문제입니다. 다시 한번 말하지만 그 효과에 대해서는 시간이 지나고 실질적인 평가가 이루어진 후에만 확실히 말할 수 있을 것입니다. 지금까지 수많은 암호화 기술과 프로토콜이 공격에 무너지고 말았습니다. 그러나 적어도 Microsoft System Integrity 팀은 더 효과적인 솔루션을 개발하는 데 필요한 이해와 기반을 제공했다고 할 수 있습니다.

Justin Troutman은 암호 전문가를 꿈꾸며 수학을 전공하고 있는 학생입니다. 대칭적 암호화에 관심이 많은 Justin은 암호화 연구와 컨설팅을 전문으로 하는 Extorque를 설립하기도 했습니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..