Oracle Advanced Security의 Transparent Data Encryption (TDE)은 운영체제의 해킹 또는 하드웨어, 백업 미디어의 도난으로 인한 데이터 유출을 방지하기 위한 강력한 암호화 솔루션임.
TDE를 이용하여 주민등록번호, 신용카드번호와 같은 민감한 개인 정보들을 보호하고 regulation을 준수할 수 있음.
그림 1 Transparent Data Encryption 개요
11g에서 TDE에 새롭게 도입된 기능들을 간단하게 정리
11g부터 소개된 테이블스페이스 암호화는 테이블스페이스 전체를 암호화할 수 있게 해주는 기능임
암호화된 테이블스페이스 내에 생성되는 모든 객체들은 자동으로 암호화되어 저장함
테이블스페이스 암호화 기능을 이용하면 각 테이블의 어떤 칼럼을 암호화해서 저장할지 결정할 필요가 없어짐
하나의 테이블에 여러 행에 걸쳐서 민감한 데이터들이 저장되는 경우나 일부 행이 아닌 전체 테이블을다 보호하고자 하는 경우 테이블스페이스 암호화 기능을 이용하면 유용함
테이블스페이스 암호화 기능은 암호화된 테이블스페이스에 저장되는 모든 데이터를 암호화하며, BLOB이나 CLOB같은 Large Object(LOBs) 타입도 마찬가지임
암호화된 테이블스페이스 외부의 데이터에 대해서는 암호화를 지원하지 않으므로
BFILE 데이터가 데이터베이스 외부에 위치하는 경우에는 암호화된 테이블스페이스에 BFILE칼럼을 포함한 테이블을 생성했다고 해도 이 칼럼은 암호화되지 않음
테이블스페이스 암호화에 이용될 마스터 키도 TDE 마스터 키가 저장되는 오라클 wallet에 저장됨
이 마스터 키는 테이블스페이스를 암호화/복호화 하는데 사용되는 테이블스페이스 암호화 키를 암호화하는데 사용됨.
암호화된 데이터는 JOIN이나 SORT 작업 시에도 보호됨.
테이블스페이스 암호화를 지원하기 위해서 테이블스페이스를 생성하는 CRAETE TABLESPACE 명령어 뒤에 ENCRYPTION 절이 추가되었음.
Temporary 테이블스페이스와 Undo 테이블스페이스는 암호화할 수 없으며, 테이블스페이스 암호화의 경우는 암호화 키를 변경할 수 없으므로 키를 변경하고자 하는 경우에는 새로운 테이블스페이스를 생성한 후 객체들을 이동시켜야 함.
테이블스페이스 암호화 기능은 기존의 어떤 테이블의 특정 칼럼만을 암호화하는 기능(TDE)과는 달리 블록 전체를 암호화하는 블록 레벨 암호화로서 디스크에 기록되는 시점에 암호화되고 읽히는 시점에 복호화되는 방식임.
그러므로 칼럼 레벨 암호화는 SGA 메모리 상의 데이터도 암호화된 상태로 남아있었던 데 반해 테이블스페이스 암호화는 SGA 메모리 상의 데이터는 clear text 상태로 남아있게 되며, 암호화로 인한 오버헤드는 I/O 작업 시에만 발생함
TDE는 transportable tablespace를 지원하지 않지만 테이블스페이스 암호화에서는 지원됨
Note
TDE는 미디어에 저장된 데이터에 대한 보호 솔루션이므로 SGA 메모리 상에 clear text가 남는 것이 보안 정책에 위배된다고 볼 수는 없으며, temporary 테이블스페이스에 기록되는 데이터 또한 보호되는 특징을 통해 이를 정확하게 준수하고 있음을 확인할 수 있음
모든 데이터타입을 지원한다.
Temporary와 Undo 테이블스페이스는 암호화할 수 없음.
Bfile와 External 테이블은 암호화할 수 없음.
서로 다른 endian을 사용하는 플랫폼간에는 Transportable Tablespace을 통해서 암호화된 테이블스페이스를 이동시킬 수 없음.
11g TDE의 가장 큰 특징 중의 하나는 Enterprise Manager를 통해 설정 및 관리를 할 수 있게 되었다는
점이다.
11g부터는 좀 더 다양한 데이터베이스 기능들에 TDE를 적용할 수 있게 되었다.
TDE를 이용해서 암호화 칼럼의 데이터는 Data File, Undo Segment, Redo Log File에 모두 암호화된 상태로 저장.
10g까지는 LogMiner를 이용해서 Redo log를 확인해보면 암호화된 칼럼의데이터는 확인할 수 없음
10g LogMiner 예
SQL> select * from user_encrypted_columns;
TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SAL
------------------------------ ------------------------------ ----------------------------- ---
CUST_PAYMENT_INFO CREDIT_CARD_NUMBER AES 192 bits key NO
SQL> select sql_redo from v$logmnr_contents where table_name = 'CUST_PAYMENT_INFO' and
operation='INSERT';
SQL_REDO
--------------------------------------------------------------------------------
insert into "OE"."CUST_PAYMENT_INFO"("FIRST_NAME","LAST_NAME","ORDER_NUMBER","CR
EDIT_CARD_NUMBER","ACTIVE_CARD") values ('Jon','Oldfield','10001',Unsupported Ty
pe,'YES');
11g LogMiner 예
SQL> select * from user_encrypted_columns;
TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SAL
------------------------------ ------------------------------ ----------------------------- ---
CUST_PAYMENT_INFO CREDIT_CARD_NUMBER AES 192 bits key NO
SQL> select sql_redo from v$logmnr_contents where table_name = 'CUST_PAYMENT_INFO' and
operation='INSERT';
SQL_REDO
--------------------------------------------------------------------------------
insert into "OE"."CUST_PAYMENT_INFO"("FIRST_NAME","LAST_NAME","ORDER_NUMBER","CR
EDIT_CARD_NUMBER","ACTIVE_CARD") values ('Jon','Oldfield','10001','5446959708812
985','YES');
11g에서 LogMiner가 데이터를 복호화해서 V$LOGMNR_CONTENTS에 저장하기 위해서는 물론 대상 테이블의 마스터키가 들어있는 wallet이 오픈되어 있는 상태이어야만 함.
Logical Standby는 LogMiner를 이용해서 Redo Log를 SQL문장으로 변환해서 Standby 데이터베이스에 적용하는 SQL Apply를 구현하므로, 11g부터 LogMiner가 TDE 지원하게 되면서
자동적으로 Logical Standby도 TDE를 지원함
TDE로 암호화된 칼럼의 데이터는 투명하게 복호화되어 Streams의 Filtering과 기타 과정을 거침
Apply 데이터베이스가 TDE를 사용한다면, 적용될 데이터는 로컬의 암호화 키를 사용하여 투명하게 다시 암호화되어 적용
Source 데이터베이스의 일부 칼럼이 암호화되어 있는데 apply 데이터베이스의 해당 칼럼들은 암호화되어 있지 않다면 적용 과정에서 에러가 발생
ENFORCE_ENCRYPTION이 FALSE로 설정되어 있는 경우에만 에러가 발생하지 않음
Hardware Security Module(HSM)이란 암호화 키를 저장하기 위한 secure storage인 물리적 장치를 의미
HSM은 암호화 복호화 작업을 위한 메모리도 제공하기 때문에 오라클 wallet보다 좀 더 강력한 보안성을 보장
TDE 기능을 HSM을 이용해서 구현하면, TDE를 위한 마스터 키가 HSM내에 저장되고, 마스터 키를 이용한 암호화/복호화 작업은 모두 HSM내의 메모리 상에서 이루어지기 때문에 마스터 키를 보호되지 않는 메모리 상에 노출시키지 않는다는 장점
그림 2 Hardware Security Module 개요
예제: http://blog.naver.com/biztec
교제 참조
11g TDE 기능이 이전 버전에 비해 달라진 점은 다음의 두 가지로 요약
Tablespace encryption은 메모리에 올라오는 순간 복호화가 되므로 종래의 컬럼 레벨 암호화에 비해 보안성은 다소 떨어지는 감이 있음
그러나, 메모리 내에서의 자동 복호화는 index range scan을 가능하게 한다는 순기능을 또한 제공함을 강조