TDE 란 ?

TDE(Transparent Database Encryption)는 오라클 10gR2 의 New feature 이며 Enterprise Edition 에서 사용 할 수
있다. 테이블의 컬럼 데이터를 암호화 하여 디스크에 저장하는 기법으로, 데이터를 보호 할 수 있다.
 디스크에 저장되어 있을 때에는 암호화 되어 있지만 메모리에 데이터가 올라올 때는 마
스터 키를 이용하여 자동으로 복호화가 되어 사용자에게 보여지며 디스크에 저장 될 때에는 다시 암호화되어 저장
되기 때문에 테이블에 적절한 권한이 있는 사용자는 TDE 를 적용 하더라도 암호화 되지 않은 데이터를 볼 수 있다.
10g 에서는 컬럼단위의 암호화를 지원하며 11g 에는 테이블 스페이스 단위의 암호화를 지원한다. 11g 에서는 테이블
스페이스 단위로 지원 되기 때문에 테이블, 클러스터, 인덱스, Lobs, 테이블, 인덱스 파티션도 암호화를 할 수 있
다. TDE 는 타 솔루션과 달리 컬럼 단위와 테이블 스페이스 단위로 암호화 되기 때문에 application 의 변경이 필요
하지 않는 것이 가장 큰 장점이라 할 수 있다.

- Wallet File
Wallet File은 encryption과 decryption을 수행하는 마스터 키를 저장하고 있으며, wallet File은 데이터 베이스와
별도의 공간에 저장하여 허가된 사용자만 접근토록 한다.
$ORACLE_HOME/network/admin/sqlnet.ora 파일에  wallet File 의 위치를 지정 할 수 있다.

ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY= /oracle/product/admin/PROD/WALLET)))

위치를 지정하지 않았을 때는 기본적으로 $ORACLE_BASE/ADMIN/<SID>/WALLET 에 생성 되지만 경로가 존재하지 않거
나  파일 위치를 지정하지 않았을 때에는 에러가 발생 하기도 한다.

- Wallet 위치 조회와 Wallet 상태를 조회

SQL> select wrl_parameter ,status from v$encryption_wallet;
WRL_PARAMETER STATUS
-------------------------------------------------- ------------------
/oracle11g/product/admin/ORCL/WALLET OPEN


- 주의할 점

Size 가 큰 table 의 관하여 Column 암호화를 하는 경우 redo log size 를 증가시켜주어야 하고, 인덱스가 걸려 있
는 상태에서의 Column 암호화는 상당한 시간이 소요된다.
그렇기 때문에 Index 를 제거후에 No Salt 옵션과 함께 암호화를 한 후, Index 를 새로 만들어 주어야 한다.(새로
만들어진 Index 는 암호화 된 값의 의해서 생성이 됨)

- TDE Configuration
TDE 구성에 있어 크게 일반적인 Oracle 데이터 이관 기능(datapump, exp/imp, alter table move, 기타..)을
이용하는 오프라인 방식과 Online Table Redefinition 기능을 이용한 온라인 방식으로 나눌수가 있다.


- Encryption Key
① Master Encryption Key
Master Key 는 column 또는 tablespace 에 사용되는 보조키를 암호화 하는데 사용되는 암호화 키이다.
② Table Key (column 단위-10g)
데이터 베이스 안의 Data Dicionary 에 저장되며 암호화된 테이블에 대하여 master key 와 함께 데이터를 암복호화
하는데 쓰인다.
③ Tablespace Key (tablespace 단위-11g)
11g 부터는 Encryption Key 가 각 tablespace header 안의 저장이 되어 데이터 암복호화에 사용이 된다.

- TDE 구성

1. Configuration of TDE with Encryption Wallet

처음 TDE 를 구성할 시 Master Key 를 생성해야 한다.
Sqlnet.ora 파일에 wallet 의 경로를 지정 후에는 v$encryption_wallet 뷰를 통하여 sqlnet.ora 에 지정된 경로와
동일 하게 설정 되어 있는지 확인 한다.

$> vi $ORACLE_HOME/network/admin/sqlnet.ora
# Encryption Wallet Location
    ENCRYPTION_WALLET_LOCATION =
    ( SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = /oracle/LSP/102_64/dbs) ) )

Encryption Wallet status 확인 ( 아직 close )

SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
------------------- -------------------------------------- ------------------
file /oracle/LSP/102_64/dbs CLOSED

2. Generate the first TDE master key

- Master Key 생성
Master Key는 아래 명령어를 통하여 생성이 가능하며 최초 생성 시에만 사용해야 하며 아래의 문장으로 패스워드를
변경 할 경우에는 기존의 암호화 되었던 테이블을 사용할 수 없게 된다.
Wallet file 이름은 기본적으로 ewallet.p12로 생성이 된다.

SQL> alter system set encryption key identified by "<wallet_password>";
System altered.

SQL> select * from v$encryption_wallet; (wallet 오픈)
WRL_TYPE WRL_PARAMETER STATUS
------------------- -------------------------------------- ------------------
file /oracle/LSP/102_64/dbs OPEN

 -Encryption Wallet 생성 : /oracle/PRD/112_64/dbs/ewallet.p12
 -Encryption Wallet Copy본 생성 : /oracle/PRD/112_64/dbs/ewallet.cpy

3.  Master Key OPEN 및 Close

데이터 베이스를 재 시작 할때마다 master key 를 아래의 명령어로 LOAD 해야 한다.
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "<wallet_password>”;
System altered.

Encryption Wallet status 확인
SQL> select * from V$ENCRYPTION_WALLET;


4. TABLE별 Encryption 수행(예 : oracle 10.2.0.5 , column 암호화 수행)

SQL>alter table "TABLE_NAME" modify ("COLUMN_NAME" ENCRYPT'NOMAC');

* NOMAC Parameter : NOMAC 파라미터를 사용하게 되면 암호화/ 복호화시에 하는 무결성 체크부분이 빠지면서 TDE 의 관한 성능 오버헤드를 줄일 수 있다.

ENCRYPTION 오픈 후에 데이터 엔트리 확인

SQL>select "COLUMN_NAME" from "TABLE_NAME";

조회가능(wallet 클로즈 상태에서 데이터 조회 불가)

암호화된 테이블리스트 조회

SQL>select TABLE_NAME, COLUMN_NAME from DBA_ENCRYPTED_COUMNS;