지난 글에서는 암호화의 종류에 대해 간략하게 다루었습니다. 이번 편부터는 각종 암호화 기법의 실제 사용 사례에 대해 다루려 합니다. 오늘의 주제는 대칭키 알고리즘의 사용 사례인 ‘봉투 암호화’입니다.
대칭키 암호화에 대해 키를 잘 보호하지 못하면 평문으로 통신하는 것과 다를 바 없다는 설명을 드린 적이 있습니다. 소중한 재산을 가장 안전하게 보관하는 방법은 무엇일까요? 바로 보관하지 않는 것입니다. 우리는 재산을 금고에 두고 지키는 대신 은행에 맡겨 둡니다. 은행의 경비가 집보다 훨씬 믿음직하기 때문입니다. 봉투 암호화는 은행에 돈을 맡기듯, 보안이 우수한 클라우드 서비스 제공자(CSP)에게 암호화 키의 관리를 맡기는 방식입니다.
봉투 암호화를 한마디로 요약하면 ‘메시지뿐만 아니라 암호화 키도 암호화한다.’ 라고 할 수 있습니다. 이해를 돕기 위해 그림을 통해 일반적인 대칭키 암호화와 비교해 보겠습니다.
과거의 대칭키 암호화에서는 최대한 안전하다고 생각되는 곳에 키를 보관하고 이를 통해 암호화, 복호화를 했습니다.
하지만 이 방식은 악의적인 사용자에게 키를 탈취당하면 메시지를 전부 복호화 당할 수 있는 문제가 있었습니다.
이를 대비해 암호화 키도 메시지처럼 암호화해 둔다면 어떨까요? 악의적인 사용자가 키를 탈취하더라도, ‘암호화 키의 암호화 키’ 가 안전하게 보관되고 있다면 메시지를 복호화할 수 없을 것입니다. 명칭이 혼란스러우므로 앞으로 메시지를 암호화 하는 키는 데이터 키, 데이터 키를 암호화하는 키는 마스터 키라 부르겠습니다.
데이터 키와 마스터 키를 조합한 봉투 암호화의 과정을 살펴보면 다음과 같습니다.
암호화 키가 암복호화 수행 이후 즉시 삭제 되므로 탈취 위험이 크게 낮아집니다. 완벽한 알고리즘을 찾은걸까요? 그러나 여전히 마스터 키를 탈취 당하면 평문이 드러나는 것은 똑같습니다. 마스터 키를 다시 암호화하고 그 키를 다시 암호화하는 과정을 무한 반복할 수도 없는 노릇입니다. 두 개의 키를 따로 관리할 노력으로 데이터 키를 잘 보호하는 것이 차라리 낫겠습니다.
그러나 AWS와 같은 CSP가 마스터 키를 대신 보관해 준다면 이야기가 달라집니다. 이들은 평균적인 IT 서비스 기업보다 훨씬 뛰어난 수준의 보안을 갖추었기 때문입니다. 심지어는 데이터 키의 사용자도 마스터 키가 무엇인지는 알 수 없습니다. API를 통해 데이터 키의 암복호화 결과만 알려줄 뿐입니다. 간단하게 그림으로 표현하면 다음과 같습니다.
봉투 암호화를 사용하기 전보다 키를 탈취하기 훨씬 어려워졌습니다. 복호화된 데이터 키가 메시지의 암복호화를 수행하는 짧은 시간 동안만 존재하기 때문입니다. 이 시간 동안만 데이터 키를 잘 지켜낸다면 나머지는 CSP가 알아서 보호해 줄 것입니다.
앞서 소개한 방법보다 더욱 강력한 키 관리 정책이 있습니다. 키를 아예 복호화하지 않는 것입니다. 암호화 키를 알지 못하는데 어떻게 운영이 가능할까요? 클라우드 환경에서는 복호화를 직접 하지 않아도 되는 경우가 꽤 있습니다.
예를 들어 AWS RDS와 같은 클라우드 DBMS의 데이터를 암호화한다고 생각해 봅시다. 데이터베이스를 구성하는 인프라는 모두 클라우드 프로바이더가 관리합니다. 따라서 사용자가 굳이 암호화 키를 관리하고 있을 필요가 없습니다. CSP가 관리하는 암호형 키는 매우 엄격하게 보호되고 주기적으로 교체됩니다. 디스크, DBMS, 오브젝트 스토리지 등의 암호화에는 CSP가 관리하는 키를 사용하는 것이 편리합니다.
오늘의 포스팅에서는 공개키 암호화의 약점인 암호화 키를 안전하게 보호하는 ‘봉투 암호화’ 기법에 대해 알아보았습니다. 와탭에서도 봉투 암호화를 이용해 일부 정보를 보호하고 있는데요. 와탭과 같은 클라우드 네이티브 애플리케이션을 개발할 때 도입을 고려하시면 좋습니다.