본문 바로가기

oracle10R2

TDE (Transparent Data Encryption)

1. Transparent Data Encryption란?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

Oracle Database 10g Release 2 및 이후 버전에서 제공되는 새로운 기능입니다.

Transparent Data Encryption을 사용하면 수작업으로 키를 관리할 필요가 없으며,

데이터베이스가 키를 관리하면서 투명한 방식으로 암호화를 수행합니다.

데이터는 암호화된 형태로만 저장되며, SELECT 구문을 사용하여 조회하면 일반 텍스트 포맷으로 반환됩니다.

Oracle Database 10g Release 2 Enterprise 버전에 포함 되어있으며 별도의 라이센스 비용은 청구되지 않습니다.

데이타를 쉽게 암호화할 수 있는 기능으로,  애플리케이션에서 더 이상 암호화 키를 다루지 않아도 됩니다.

Transparent Data Encryption 기능은 데 이터베이스 레벨에서 칼럼 등에 대한 암호화 설정으로 자동 암호화 및 복호화를 지원하며,

데이터는 디스크에 저장될 때 암호화되어 저장되므로, 누군가가 데이터베이스를 훔치는 경우에 데이타는 보호될 수 있습니다.

 

Chapter 17: Oracle Database Security Guide, Chapter 3 : Oracle Database Advanced Security Administrator's Guide) 참고 

 

TDE를 사용하기 전에

 

일반적인 암호화 테크닉을 사용할 것인지 Transparent Data Encryption을 사용할 것인지 결정하는 것이 매우 중요합니다.

(Oracle Database 10g Release 2 이전 버전에서는 전자의 방법만이 사용 가능합니다.)

 

암호화할 테이블과 컬럼을 결정해야 합니다. 모든 컬럼을 암호화하여 CPU 사이클을 낭비하는 것은 바람직하지 않습니다.

 

암호화 알고리즘을 선택합니다. Triple Data Encryption Standard with 156-bit encryption (DES3)이 가장 많이 사용되고 있긴 하지만,

 

Oracle Database 10g Release 1 및 이후 버전에서는 보다 새롭고, 빠르고, 안정적인

 

128 비트 롱 키 기반 Advanced Encryption Standard (AES) 알고리즘이 제공되고 있습니다.

 

Oracle9i Database는 dbms_obfuscation_toolkit을 제공하고 있으며

 

Oracle Database 10g Release 1부터는 개선된 유틸리티인 dbms_crypto가 제공됩니다.

 

기존의 패키지도 여전히 사용 가능하지만, 암호화 인프라스트럭처를 새로 구축하는 경우에는 사용하지 않는 것이 권장됩니다.

 

이제 TDE를 사용할 것인지 독자적인 루틴을 개발할 것인지 결정해야 합니다. 그 장단점의 비교 결과가 아래와 같습니다.

 

 

Transparent Data Encryption, 암호화 루틴 자체 개발 비교

 

 

 

TDE (Transparent Data Encryption) 고려사항

 

- SYS가 소유한 테이블은 암호화(encryption)할 수 없습니다.

- LONG 및 LOB 데이터 유형은 지원되지 않습니다.

- 다음과 같은 암호화 알고리즘이 지원됩니다.

- 3DES168

- AES128

- AES192

- AES256

- 인덱스 열을 암호화하려면 NO SALT를 사용해야 합니다.

- TDE는 동등 검색을 위해 인덱스와 함께 작동합니다.

- 암호화된(encrypted) 데이터는 표현식 평가 전에 암호를 해독(decryption)해야 합니다.

- 최적의 사용법: 전자 지갑을 백업합니다.

 

기존 테이블 및 TDE

 

 - 암호화된(encrypted) 열 추가

   ALTER TABLE emp ADD (ssn VARCHAR2(11) ENCRYPT);

 

 - 암호화되지 않은(UNENCRYPTED) 열 암호화

   ALTER TABLE emp MODIFY (first_name ENCRYPT);

 

 - 열 암호화(encryption) 비활성화

   ALTER TABLE emp MODIFY (first_name DECRYPT);

 

 - salt 추가 또는 제거

   ALTER TABLE emp MODIFY (first_name ENCRYPT [NO] SALT);

 

 - 키 및 암호화 알고리즘 변경

   ALTER TABLE emp REKEY USING '3DES168';

 

주의사항

 

몇 가지 주의 사항이 존재합니다.

 

암호화는 CPU 의존도가 높은 작업입니다. CPU 사용도가 높은 시스템 환경에 암호화를 적용하면 성능이 저하될 수 있습니다.

 

인덱스는 암호화된 컬럼에서 제대로 동작합니다. 특히 WHERE LIKE 'XYZ%와 같은 조건절을 사용하는 경우 풀 테이블 스캔이 불가피합니다.

 

키 관리는 매우 중요합니다. 키를 잃어버리면 데이터에 대한 접근이 전혀 불가능합니다.

 

 

 

2. TDE 생성 과정

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1) 전자 지갑을 생성해야 합니다.

Oracle Wallet Manager를 사용하거나, TDE(Transparent DataEncryption) 소프트웨어에서

전자 지갑의 디렉토리가 SQLNET.ORA 파일에 지정될 때 자동으로 전자 지갑을 생성하도록 합니다.

기본적으로 데이터베이스가 설치될 때 암호화되지 않은(unencrypted) 전자 지갑(cwallet.sso)이 생성됩니다.

그러나 TDE와 함께 사용하기 위해 암호화된(encrypted) 전자 지갑(ewallet.p12)을 권장합니다.

 

다음은 SQLNET.ORA 파일의 항목 예입니다.

 

ENCRYPTION_WALLET_LOCATION=

(SOURCE=(METHOD=FILE)(METHOD_DATA=

(DIRECTORY=/opt/oracle/product/10.2.0/db_1/)))

 

주의: sqlnet.ora 파일에서 두 개의 유사한 항목을 찾을 수 있습니다.

SSL(Secure SocketsLayer) 인증은 WALLET_LOCATION 파라미터를 사용하고 TDE는 ENCRYPTION_WALLET_LOCATION 파라미터를 사용합니다.

 

2) 전자 지갑 내에 마스터 키를 설정해야 합니다.

마스터 키가 노출되었을 경우에만 키를 재 생성해야 합니다.

빈번한 마스터 키 재생성은 전자 지갑에서 사용 가능한 모든 저장 영역을 소모할 수 있습니다.

슬라이드에 표시된 것처럼 ALTER SYSTEM 명령을 사용하여 마스터 키를 설정하거나 재설정할 수 있습니다.

디렉토리에 암호화된(encrypted) 전자 지갑이 없으면 이 명령은 암호화된 전자 지갑(ewallet.p12)을 생성하고

전자 지갑을 열고 TDE의 마스터 키를 생성합니다.

암호화된 전자 지갑이 있으면 이 명령은 전자 지갑을 열고 TDE의 마스터 키를 생성하거나 재생성합니다.

 

3) 이후 세션을 위해서는 새 마스터 키를 생성하지 않고 전자 지갑을 열기만 하면 됩니다

(데이터베이스를 종료할 때 전자 지갑이 닫힘).

따라서 단계 3에 표시된 명령을 사용하는 것은 전자 지갑을 열기만 하는 것입니다.

 

4) 이제 암호화된(encrypted) 열이 있는 테이블을 생성할 수 있습니다.

슬라이드 예제는 세 개의 암호화된 열을 포함하는 EMP라는 테이블을 생성합니다.

기본적으로 열은 salt로 암호화됩니다. salt 사용은 암호화된 데이터의 보안을 강화하는 방법입니다.

salt는 암호화되기 전에 데이터에 추가되는 임의의 문자열로, 암호문의 패턴을 알려진 암호문 샘플에

대응시켜 공격자가 데이터를 훔치기 어렵도록 만듭니다. 그러나 암호화된 열에 인덱스를 생성하려는 경우 NO SALT를 사용하여 생성해야 합니다.

또한 TDE는 192비트 암호 키(AES192)를 가진 Advanced Encryption Standard를 기본 암호화 알고리즘으로 사용합니다.

예제에 나오는 것처럼 이 기본 알고리즘을 Triple Data Encryption Standard와 같이 다르게 지원되는 알고리즘으로 변경할 수 있습니다.

 

 

3. TDE 설정 예제

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1) Wallet 설정

- Wallet에 암호화 키가 저장될 것이고, 그 다음 이 파일은 패스워드로 보호될 것입니다.

ORACLE_HOME에서 wallet 이라는 디렉토리를 만든뒤 sqlnet.ora 파일에 전자지갑을 생성합니다.

 

vi sqlnet.ora

 

WALLET_LOCATION=

(SOURCE=(METHOD=FILE)

(METHOD_DATA=

(DIRECTORY=/u01/app/oracle/product/10.2.0/db_1/wallet)))

 

다음에는 Wallet을 열기만 하면 됩니다.

 

SQL> alter system set encryption wallet open identified by test;

 

데이터베이스 오픈 후 반드시 위에 쿼리를 해야만 Transparent Data Encryption 기능을 사용할수 있습니다.

 

 

 2) 암호화 키 setup

 

SQL> alter system set encryption key identified by test;

 

예제에서는 시스템이 키를 만들도록 했으며, 고유의 키를 만들 수도 있습니다.

이렇게 하면 이 시스템에서 또 다른 시스템으로 쉽게 데이터를 옮길 수 있습니다.

 

 

3) 데이터 암호화를 위한 작업

 

SQL> create table test

(

abc varchar2(80),

def varchar2(80) encrypt

)

tablespace test;

 

SQL> insert into test values ('samdasoo_jeju_jjang',' suksu_taste_good);

 

데이터는 암호화되어 디스크에 insert 되고, 해당 권한을 가진 사용자는 데이터 select 시 데이터의 암호가 복호화 되어 진짜 데이터를 확인할 수 있습니다.

 

 SQL> select * from test;

abc                            def

------------------- -----------------------

samdasoo_jeju_jjang  suksu_taste_good

 

 

4) 암호화 확인 작업

먼저, 암호화된 데이터가 들어 있는 블록이 디스크에 저장되어 있는지부터 확인 합니다.

 

SQL> alter system checkpoint;

 

그 다음 문자열들을 찾아보면.

samdasoo을 포함 하고 있는 암호화된 dbf 데이터파일에서 문자열을 찾아봅니다.

 

 $ strings -a encrypt.dbf|grep samdasoo

samdasoo_jeju_jjang

 

samdasoo_jeju_jjang 문자열만 나타납니다.

다른 문자열은 저장되기 전에 이미 암호화 되었기 때문에 볼 수가 없는 것입니다.

 

Transparent Data Encryption은 외부의 테이블 언로드, 데이터 펌프 등과도 잘 작동하며,

Oracle Wallet Manager 같은 GUI 툴을 통해 Wallet과 Passwrd를 관리할수있습니다.

또한 키가 손상된 것 같다면 명령어를 이용해 데이터를 re-key 할 수있습니다.

'oracle10R2' 카테고리의 다른 글

Oracle Database 10g & 11g - DBA를 위한 20가지 주요기능  (0) 2011.09.12
10g isqlplus 설정하기  (0) 2011.08.14
Oracle 10g XML Fundamentals  (0) 2011.07.20
SQL Loader  (0) 2011.07.10
Advanced Product Service 10g Develop PLP 02  (0) 2011.07.02