본문 바로가기

DBMS

DB 데이터 암호화 솔루션 - TDE (Transparent Data Encryption)

반응형

 

< 데이터 암호화 - TDE (Transparent Data Encryption)  >

 

□ 데이터를 암복호화할 때 사용하는 키 

→ 칼럼 키(Column Key) : 테이블 내의 칼럼을 암호화

→ 테이블 스페이스 키(Tablespace key) : 테이블 스페이스의 내용을 암호화

마스터 키(master key) : 잃어버리면 무진장 큰 일 나는 키로써,  

            칼럼 키와 테이블 스페이스 키를 암복호화 할 때 사용하는 키

 

 

◎ 칼럼 레벨 암호화

 

TDE를 이용해서 신용카드 번호와 같이 민감한 개인정보를 암호화된 상태로 저장하여 안전하게

관리할 수 있다. 기존 Application에 투명한(Transparent) 방식으로 동작하므로, 프로그램 소스를 수정하거나 Trigger, View를 만들 필요가 없다. 데이터는 디스크에 쓰는 과정에서

(투명하게) 암호화되고, 정상적으로 인증 및 권한을 가진 사용자가 읽기를 시도하면 (투명하게) 복호화된다.
 

 

 

 

 

위 그림을 보면 TDE는 칼럼 데이터를 암호화하기 위해 데이터 사전(Data Dictionary)에

저장되는 칼럼 키(Column Key)를 사용한다.

이 경우 암호화된 데이터와 그 데이터를 암호화하기 위해 사용 하는 키가

모두 같은 데이터베이스 내 테이블 형태로 저장되어 위험의 소지가 있다.  
 
따라서 Master Key를 이용해 Column Key를 암호화한 후 데이터베이스 외부에

안전한 보관 장소인 전자 지갑(Wallet)이나 하드웨어 형태의 키 보관 장치(HSM: Hardware Security Module)에 저장한다.

 

 

 

 

TDE를 적용하려면

먼저 전자 지갑을 생성하고 , 칼럼에 대한 암호화를 수행한다.

(Column Key는 암호화 작업 을 수행하는 과정에서 내부적으로 자동 생성된다)

 

적용 순서는 다음과 같다.


 

 

① 전자 지갑을 만든다.(마스터 키 생성)

 

우선 전자지갑이 만들어질 위치를 지정하기 위해서

설정 파일 D:\app\user\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora 를 열고  아래 내용을 추가한다. 
 

ENCRYPTION_WALLET_LOCATION= 
        (SOURCE=  
                (METHOD=FILE)  
                (METHOD=DATA=    
                        (DIRECTORY=D:\app\sunny\admin\orcl\wallet))  
        )

※ 들여쓰기 주의


본인이 지갑을 생성하고 싶은 위치에다가 wallet 폴더를 생성하고 쓰기 권한을 부여한 후

 

아래 sql 명령어를 통해 전자지갑을 생성한다.

 

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY test1234;

 

그리고 전자 지갑 생성 여부를 확인해본다.

 

SELECT * FROM v$encryption_wallet;

 

 


 

 

② 기존 테이블에 중요 칼럼에 암호화를 수행한다. 
 
-- oe의 customers 테이블 구조 확인 = desc oe.customers

 

oe사용자 고객 테이블에서 중요하다고 생각되는 credit_limit 칼람을 암호화해본다. 

 

ALTER TABLE oe.customers MODIFY (credit_limit ENCRYPT);

 


-- 암호화 칼럼 정보를 확인하려면 SELECT * FROM dba_encrypted_columns; 
 


 

 

 

요약

 

1
 
2
 
3
 
4
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "test1234"; 
 
SELECT * FROM v$encryption_wallet; 
 
ALTER TABLE oe.customers MODIFY (credit_limit ENCRYPT);
 
SELECT * FROM dba_encrypted_columns; 

 

 

1 - 전자지갑생성

2 - 지갑이 잘 생성됬는지 확인

3 - oe 고객 테이블의 특정 컬럼 암호화

4 - 암호화 알고리즘 정보 확인

 

※ 마스터 키를 잃어버리게 될 경우 원본 데이터를 해독 할 수 없으니 

    DBA는 키 관리를 잘해야한다. 

 


더보기

< 윈도우 Oracle Wallet Manager 프로그램으로 지갑 추가 - 삭제 > 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

◎ 테이블스페이스 레벨 암호화

 

테이블 스페이스 레벨 암호화는 11g의 새로운 기능으로 테이블스페이스 전체를 암호화한다.

따라서 암호화된 테이블 스페이스에 모든 객체는 암호화되어 저장된다.

 

 

 

주로 민감한 데이터를 가진 칼럼이 많은 경우에 사용하며,

기존 테이블스페이스에 대해서는 암호화를 수행할 수 없다.(존재하고있는 암호화되지 않은 테이블스페이스는

암호화할 수 없다)

 

참고) 데이터베이스 인스턴스를 다시 시작한 경우 전자 지갑을 열어야 암호화 작업이 수행된다.

 

ALTER system SET wallet open IDENTIFIED BY my_wallet_pw;
cs

 

 


 

 

1) 암호화 테이블스페이스 생성

  

  
CREATE TABLESPACE "tablespace_name"
DATAFILE 'D:\APP\USER\ORADATA\ORCL\table_space_name01.dbf' SIZE 100M
DEFAULT STORAGE(ENCRYPT)
ENCRYPTION USING 'AES192'
cs

 

* 암호화된 테이블 스페이스 조회

SELECT * FROM dba_tablespaces;
cs

 

 

 2) 민감한 정보를 가진 테이블을 테이블스페이스로 이전한다.

   

ALTER TABLE hr.employees MOVE TABLESPACE tablespace_name;
cs


 

 3) 암호화된 테이블 이전(Migration)

 

▷ expdp 도움말

expdp help=y (expdp는 export data pump의 약자)

 

 

 

 

① dump 파일이 생성 될 위치 지정

CREATE DIRECTORY dmpdir AS 'D:\app\user\admin\orcl\dpdump'-- AS 뒤에 경로를 dmpdir로 별칭한다.
GRANT WRITE , READ ON DIRECTORY dmpdir TO oe; -- oe사용자에게 dmpdir에 읽기,쓰기 권한 부여
cs

 

 

② oe 사용자에 암호화된 테이블을 EXPORT 한다.

   이 경우 TDE로 암호화된 데이터가 복호화되어 저장되므로,

   암호화되지 않은 상태라는 메세지가 출력된다

 

expdp userid=oe directory=dmpdir dumpfile=pro.dmp tables=product_information; 
cs

 

 

③ 따라서, 암호화된 테이블을 EXPORT 수행 시 암호화된 상태로 DUMP FILE을 생성하기 위해 ENCRYPTION_PASSWORD 키워드를 사용한다.

 

expdp userid=oe directory=dmpdir dumpfile=pro.dmp tables=product_informationencryption_password=password
cs


④ impdp를 이용해서 ①에 생성된 dump file을 이용하여 테이블을 이전한다.

impdp userid=oe directory=dmpdir dumpfile=pro.dmp tables=product_informationencryption_password=password
cs

 

 

 

 

반응형