Q. 방대한 DB를 다루는 웹서비스의 경우, DB 암호화를 했을 때 가용성에 문제가 없는 것인가? DB 암호화 가운데서도 가용성을 최대한 보장할 수 있는 방법이 있는지 궁금하다.
A-1. DB를 암호화한 경우, 가용성에 관한 이슈는 첫 번째로는 암·복호 제품의 장애가 발생하는 경우와 두 번째로는 암호키를 망실한 경우로 나눌 수 있다. 이 문제는 49번 답변에서 따로 상세히 설명하고 있다. 장애 상황을 제외한 가용성 이슈로는 성능 저하와 그 보전방안이 있으며 상세한 내용은 다음과 같다.
컬럼길이가 증가하며 저장공간, I/O 증가 등 Full Table Scan에 영향을 미치게 된다. 또한 개발된 코딩에 문제에서도 성능문제를 발생시킬 수 있으며, API, Plug-In 방식들 또한 대량의 데이터를 처리할시에는 암복호화 부하가 발생되기도 한다.
이러한 성능 문제들을 방지하기 위해서는 SQL의 최적화가 필요하며, 현 시스템에 최적화된 상태에서 암호화를 진행해야 한다. 그러기 위해서는 사용하고 있는 DB와 서버 등 환경이나 버전을 파악하고 있어야 하며, 내부에 어떤 데이터들이 저장되어 있는지, 데이터들 중에서는 어떤 데이터를 암호화해야 하는지와 같은 정보가 사전에 파악이 된 상태에서 진행해야 한다.
DB암호화 성능 보전 방법에 있어서 고려할 사항은 효과 대비 비용(라이선스 및 개발 인건비)이 저렴한 방안으로 만족할만한 결과를 도출하는 것이 관건이며, 1단계 방안으로는 비용 효과가 좋은 SQL을 수정하여 View를 우회하는 방안을 적용하고 결과가 만족스럽지 못한 경우, 2단계 방안으로 API를 병용하는 Hybrid 구성을 고려하는 것이 올바른 방법이다.
또한 암호화 적용된 컬럼에 대 한 색인검색(Index Searching) 즉 일치검색, 전방, 범위(LIKE,BETWEEN, >, <, >=, <=등 모든 전방 일치 검색) 기능들을 활용해야만 암호화 적용 후 성능에 대한 감소를 최소화 할 수 있다.
(조돈섭 이글로벌시스템 이사/alex@eglobalsys.co.kr)
A-2. DB암호화 방식에 따라 가용성이 떨어지는 문제가 발생할 수 있으므로 벤치마킹 테스트(BMT) 등을 수행하여, 최적의 솔루션을 선택하는 것이 바람직하다. DB암호화 방식에는 5가지 방식이 있다.
첫 번째, 응용프로그램 자체 암호화는 암·복호화 모듈이 API라이브러리 형태로 어플리케이션 서버에 설치되고 응용프로그램에서 암·복호화 모듈을 호출하는 방식이다. 어플리케이션 서버에 암·복호화를 위한 추가적인 부하가 발생한다.
두 번째, DB서버 암호화 방식은 암·복호화 모듈이 DB서버에 설치되고 DBMS에서 플러그인(Plug-In)으로 연결된 암·복호화 모듈을 호출하는 방식이다. DBMS에서 DB서버의 암·복호화 모듈을 플러그인으로 호출할 때 추가적인 부하가 발생해 성능이 저하될 수 있다.
세 번째, DBMS 자체 암호화방식은 DBMS에 내장되어 있는 암호화 기능(TDE : Transparent DataEncryption)을 이용하여 암·복호화 하는 방식이다. DBMS 엔진에 최적화된 성능을 제공할 수 있다.
네 번째, DBMS암호화 기능 호출 방식은 DBMS 자체적으로 암·복호화 기능을 수행하는 API를 제공하고 해당 함수를 사용하기 위해 응용프로그램에서 호출하는 방식이다. DB서버에 추가적인 부하가 발생할 수 있다.
다섯 번째, 운영체제 암호화 방식은 IS에서 발생하는 입출력 시스템 호출을 이용한 암·복호화 방식으로 DB파일 자체를 암호화 하는것이다. DB파일 전체를 암호화하는데 따른 파일 서버 및 DB서버에 추가적인 부하가 발생할 수 있다.
(홍준석 한국산업기술보호협회 관제운영팀 팀장/jun0817@kaits.or.kr)
[김경애 기자(boan3@boannews.com)]
<저작권자: 보안뉴스(http://www.boannews.com/) 무단전재-재배포금지>