본문 바로가기

nCipher HSM (Thales-HSM )

DB암호화 - 설계

DB암호화 - 설계


DB 암호화를 구축하기 위해서는 복호화 권한통제, 암호 키 정의, 그리고 암호화 키 사용 로깅 등 많은 사항을 고려하여야 한다. 

암호화 규칙은 DB를 암호화하기 위한 기본적인 전 제 조건과 고려사항을 언급한 것이며, 암호화를 규칙대로 적용하고 암호화 후 정상적인 DB 서비스를 지속시키기 위한 몇 가지 지표를 다음과 같이 정리할 수 있다.

1. DB에 접속할 수 있는 사용자에 대한 정의가 되어 있는가?

2. DB에 접속하는 사용자 식별에 대한 방법이 정의 되었는가?

3. 암호화 대상 컬럼의 범위는 정의하였는가?

4. 암호화 컬럼에 대한 복호화 권한 통제를 수행 하는가?

5. 암호화 키를 위한 알고리즘과 대상을 정의하였는가?

6. 암호화 키 사용에 대한 로깅을 수행하는가?


가. 복호화 권한 통제

DB 컬럼(Column) 암호화가 수행되면 데이터 보호를 위해 인가된 사용자에게 복호화 된 평문 데이터(Plain Data)를 전송한다. 

하지만 비인가 사용자에게는 암호화된 데이터나 일 부 암호화(마스킹-Masking)된 데이터를 전송하게 된다.

1) 사용자 식별

DB에 접근하는 경우는 다음과 같이 정의할 수 있다.

1. 웹(Web)이나 애플리케이션 서버(Application Server)의 정형적인 접근

2. DB 관리자에 의한 비정형 접근

3. 프로그램 개발자나 유지보수 지원 엔지니어에 의한 비정형 접근


정형적인 접근(Bulletin Job)이란 기업내의 특정 업무 수행을 위해 정기적으로 DB에 접 속하여 반복적인 SQL 작업을 수행하는 것을 의미하며, 변하지 않는 정해진 SQL을 DB에 요청하는 경우를 의미한다. 대체로, 웹 서버나 애플리케이션 서버가 이러한 경우에 해당 하며 때로는 성능관리나 장애관리용 모니터링(Monitoring) 솔루션도 이에 해당한다. 물 론, 웹 서버나 애플리케이션 서버내의 DB 접속 도구(DB Tool - 예를 들어, Oracle의 SQLPLUS)에 의한 DB 접속은 정형적인 접근이라 할 수 없으며 비정형 접근(Non- Bulletin Job)에 해당한다.

비정형 접근(Non-Bulletin Job)이란 시스템 유지보수나 애플리케이션의 개발을 위해 DB에 접속하여 데이터를 변경, 삭제 및 조회하는 작업을 의미한다. DB 관리자(DBA)라 하더라도 DB 내의 데이터를 조작할 권한은 없기 때문에 DB 관리자에 의한 DB 접속도 비 정형 작업에 해당하므로, 정확한 권한 분리(Separation of Duty)를 진행하여야 한다.



암호화된 DB 측면에서 볼 때, 민감한 데이터 보호를 위해 복호화 된 평문 데이터를 전송할 대상을 식별(사용자 식별)하기 위하여 상기의 DB 접속 정보를 구분할 수 있는 경우는 다음 과 같다.

1. DB 접속 날짜 및 시간

2. IP Address 및 호스트 네임(Host Name)

3. DB 계정 (DB User)

4. 애플리케이션 이름 (Application Name)


플러그인(Plug-In) 방식의 컬럼 암호화(Column Level Encryption)의 경우, DB에 접속 하는 DB 클라이언트(Client)의 위와 같은 접속 정보 조합을 통해서 복호화의 대상을 식별 할 수 있다. 반면 API 방식 컬럼 암호화의 경우 데이터의 암복호화 작업이 애플리케이션 서버 상에서 수행되기 때문에 상기의 DB 접속정보를 통한 사용자 식별은 해당되지 않는 다. 즉, API방식 컬럼 암호화는 애플리케이션 서버에 접속하는 애플리케이션 서비스 접속 자의 식별만 가능하므로 DB 서버에 직접 접속하는 DB 사용자의 식별은 불가능하다. 따라 서, API방식의 경우 DB 관리자에 의한 암호화된 데이터 변경 및 관리에 어려움이 따른다.


2) 암호화 대상 컬럼

DB 컬럼 암호화의 주요 목적은 개인정보나 민감한 정보가 담겨 있는 테이블의 컬럼 정보 를 비인가자로부터 보호하는 것이다. 암호화 대상의 컬럼의 경우 DBMS에서 지원하는 다 양한 종류의 데이터 타입을 가지게 되는데, 일반적으로 개인정보의 이름, 주소, 생년월일, 카드번호, Email 주소 등 스트링(String) 타입이 컬럼 암호화 대상이 되는 경우가 많고, 도면이나 음성, 이미지, 바이오 정보 등의 바이너리(Binary) 타입의 경우와 그 외 숫자 타 입을 가지는 경우도 있다.

DB 컬럼의 경우 성능향상을 위해 인덱스(Index)를 자주 사용하게 되는데, 암호화 컬럼의 데이터 타입에 따라서 인덱스에 컬럼 값이 그대로 노출되는 경우가 있기 때문에 컬럼을 암 호화 할 경우 관련 인덱스도 암호화의 대상이 되어야 한다. 즉, 인가된 사용에게 복호화 권 한을 통제하기 위해서는 컬럼뿐만 아니라 인덱스도 복호화 권한 관리 대상에 포함되어야 한다.


3) 암호화 컬럼에 대한 복호화 권한통제

암호화의 대상은 다수의 테이블에 존재하는 다수의 컬럼이다. 하나의 테이블에 존재하는 서로 다른 컬럼이라 하더라도 사용자를 식별하여 복호화를 할 필요가 있다. 대체로, 테이블과 컬럼은 하나의 DB 계정(DB User)에 의해 소유되지만, DB 계정은 여러 사용자에 의해 공유될 수 있고, 이에 따라 테이블에 각기 다른 정보를 담고 있는 컬럼들의 경우 복호화의 권한 제한을 설정할 필요가 있다.


4) 비인가 사용자에 대한 통제

암호화된 데이터는 인가된 사용자나 시스템에게는 정상적인 복호화 데이터를 전송하지만, 비인가 사용자에게는 암호화된 데이터나 일부 암호화(사용자 입장에서는 Masking으로 보일 수 있음) 데이터를 전송하게 된다. 다음은 이러한 비인가 사용자에게 적용할 수 있는 보안의 적용 사례를 살펴보고자 한다.




■ Encrypt Null

“Yes”을선택하면, NULL 값도 암호화하며,“ No”을 선택하면 암호화 후에도 NULL로 값이 유지 된다.


■ If access denied

암호화된 컬럼에 접근사용 권한이 없는 경우

?Return Null : 비인가 사용자에게 암호화된 컬럼 값으로“NULL”을 반환

?Return user value : 비인가 사용자에게 사용자 정의된 값을 반환. 만일 “NULL” 스트링을 입력하면 실제 NULL값을 반환하고, BLOB 타입은 지원하지 않음

?Character 타입column 경우→임의의Character를사용“( ”제외)

Number 타입 column 경우 → 숫자대신“.”혹은 다른 (숫)문자 사용

Date 타입 column 경우 → TO_TIMESTAMP 함수로 변환 예

?Return mask : 비인가 사용자에게 마스킹(* 혹은 다른 글자) 된 스트링 값을 반환.

설정 값에 따라 앞의 몇 글자 혹은 뒤의 몇 글자가 마스킹. 이 옵션은 Character 타 입의 컬럼만 지원

?Return encrypted : 비인가 사용자에게 암호화된 스트링을 그대로 반환하며,

Character 타입의 컬럼일 경우만 지원. BLOB이상의 큰 사이즈는 지원하지 않음


나. 암호화 키 및 알고리즘 정의

암호화 키는 암호화 알고리즘(Encryption Algorithm)과 파라미터 키(Parameter Key) 의 조합이라 할 수 있다. 암호화 방식은 대칭형(Symmetric)과 비대칭형(Asymmetric) 방식으로 나뉘는데, 대칭형은 암호화 키와 복호화 키가 동일하고, 비대칭형은 암호화 키 와 복호화 키가 상이하다.



대표적인 암호화 알고리즘으로 대칭형 알고리즘은 DES, 3-DES, AES, SEED, ARIA, MASK가 있고, 비대칭형 알고리즘은 RSA, DSA가 있다.



암호화 키는 컬럼 별로 독립적으로 적용될 수 있다. 즉, 하나의 테이블 내에 존재하는 컬럼 일지라도 컬럼 별로 암호화 키를 독립적으로 정의할 수 있다. 암호화 키에 사용되는 암호 화 알고리즘의 특성에 따라 성능과 보안성의 차이가 존재하므로 암호화 대상 DB의 성격과 주위 연계 시스템과의 관계를 고려하여 적용한다.


1) 대칭형 알고리즘

대칭형 암호에는 크게 두가지 유형이 있는데 블록 암호(Block Chiper)방식과 스트림 암호 (Stream Chiper)방식이 있다. 스트림 암호 방식은 블록 암호방식보다 2배 정도 빠르지만 고유키(Unique Key)를 사용해야 한다. 블록 암호 방식은 키의 재사용(Reuse)이 가능하 고 DB 암호화의 대부분은 블록암호 방식을 사용하는 경향이 있다. 대칭형 암호 방식의 경우 키길이를 최소 128bit로 할 것을 권장하는데, 키 길이는 암호화 된 데이터에 대한 공격(주로 2가지 방법이 이용됨)으로 부터 보호하기 위한 매우 중요한 요소로 자리잡고 있다.

첫번째 공격방법은 추측과 확인(Guess and Check)형태의 공격으로서 알고리즘이 잘못 구현되었거나 잘못된 랜덤(Random) 변수에 의해 적용되었을 경우, 해커들은 임의의 키 를 적용하고 데이터를 확인하는 작업을 반복함으로써 암호화된 데이터를 복호화한다. 두번째 방법은 브루포싱(Brute Forcing) 기법을 통해 무작위로 키를 대입하여 확인하는 작업이다. 예를 들면, DES 알고리즘의 짧은 56bit 키길이의 경우 24시간내에 해독이 가 능하다. 따라서 대칭키 암호방식을 택한 경우 최소 128bit의 키 길이를 권장한다. DB 암호화를 위하여 자주 사용되는 대칭키 암호 방식에는 AES, DES, 3DES, RC5 등 블록 암호방식이 있다. RC4 알고리즘의 경우 스트림 암호방식도 사용 가능하나 매번 암호 화할 때마다 고유키가 필요하므로 매우 복잡해진다. 블록암호방식의 가장 큰 장점 중의 하 나는 기존키의 재사용이 가능하고 작은 크기의 데이터 암호화 수행이 매우 뛰어나다는 것 이다. DES, 3DES, AES의 알고리즘이 대칭형 방식에서 가장 널리 사용된다.


2) 비대칭형 알고리즘

비대칭형 알고리즘의 경우 한쌍의 키조합이 필요한데, 암호화에 사용된 키와 복호화에 사 용된는 키가 다름에도 수학적 원리에 의해 해독이 가능하도록 한 방식이다. 이 알고리즘은 공개키로 매우 유명하며, PKI(Public Key Infrastructure)가 바로 이에 해당한다. PKI는 기본적으로 인터넷과 같이 안전이 보장되지 않은 공중망 사용자들이 신뢰할 수 있 는 기관에서 부여된 한 쌍의 공개키와 개인키를 사용함으로써, 안전하고 은밀하게 데이터 나 자금을 교환할 수 있게 해준다. PKI는 한 개인이나 기관을 식별할 수 있는 디지털 인증 서와 인증서를 저장했다가 필요할 때 쓸 수 있는 디렉토리 서비스를 제공한다. 비록 PKI 의 구성 요소들이 일반적으로 알려져 있지만, 공급자 별로 많은 수의 서로 다른 접근방식 이나 서비스들이 생겨나고 있으며, 그 동안에도 PKI를 위한 인터넷 표준은 계속해서 진행 되어 왔다.

PKI는 인터넷 상에서 메시지 송신자를 인증하거나 메시지를 암호화하는데 있어 가장 보 편적인 방법인 공개키 암호문을 사용한다. 전통적인 암호문은 대개 메시지를 암호화하고 해독하는데 사용되는 비밀키를 만들고, 또 공유하는 일들이 관여된다. 이러한 비밀키나 개인키 시스템은 해당 키가 의도하지 않은 사용자에게 습득될 경우, 메시지가 쉽게 해독될 수 있다는 치명적인 약점을 가지고 있다. 이러한 이유 때문에 인터넷 상에서는 공개키 암 호화와 PKI 방식이 선호되고 있는 것이다. 이러한 방식은 DB 암호화에 다소 적용하기에 까다로운 절차가 요구된다.


3) 해싱 알고리즘

해싱 알고리즘(Hashing Algorithm)의 경우 데이터를 암호화하는 것이 아니라 단방향의 데이터를 안전하게 저장하고 무결성을 보장하는데 사용한다. 지문인식을 생각하면 매우 간단한데, 지문인식의 경우 고정길이의 해시값을 두고 원본데이터의 블록을 해싱하면 고 유값이 나오게된다. 즉, 원래 데이터 값을 복원하는 것이 아니라 새로운 데이터가 입력이 되면 해싱 알고리즘을 이용하여 동일한가를 판단하는 것이다.

해싱 알고리즘은 패스워드를 저장할 때 흔히 사용되는데 패스워드를 저장할 때 해싱알고리 즘을 적용하면 원본 패스워드는 복원이 불가능하지만 새로운 패스워드 입력이 도달 했을 때 일치하는가를 판단하는 것이다. 보편적인 해싱 알고리즘으로는 MD5와 SHA-1이 널리 사용되고 있으며, 해싱 알고리즘은 키가 필요하지 않고 키 길이 역시 고려 대상이 아니다.


출처 : http://www.dbguide.net/db.db?cmd=view&boardUid=152809&boardConfigUid=9&categoryUid=216&boardIdx=147&boardStep=1