2009년 1월 22일 목요일

ORACLE Transparent Data Encryption [TDE] Reference

먼저 TDE 를 사용하기에 앞서 다음과 같은 이슈가 필요하다.

 1.  Transparent Data Encryption 의 Enabling
 2. 암호화 키를 엑세스 하기위한 Encypted Wallet Open
 3. Master Key 설정 과 재생성
 4. 암호화 컬럼을 포함한 테이블 생성
 5. 암호화 컬럼이 존재하는 테이블에 대한 설정
 6. 암호화 컬럼에 대한 인덱스 사용
 7. 암호화 컬럼에 대한 salt 사용 또는 제거



++ 마스터키 생성 ++

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY password  // master key create


++ 마스터키 로드 ++

ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY password 

// 마스터 키를 메모리에 로딩한다 이키는 shutdown 되기전까지는 메모리에 상주한다.

++ 마스터키 Close ++

ALTER SYSTEM SET WALLET CLOSE

// 암호화된 컬럼을 Disable 시킨다.

oracle wallert 안에있는 외부 보안 모듈 암호키는 기본적으로 sqlnet.ora 파일에 명시되어있다.
만약 어떤 위치도 지정이 되지 않았다면 오라클은 default 위치를 참조하여 사용한다.

데이터베이스 컬럼을 암호화 하기전에는 반드시 마스터키를 생성하여야 한다.
ENCRYPT cluse 를 포함한 SQL 쿼리를 날렸을때 마스터키에의해 암호화된 암호키가 생성된다.

ALTER SYSTEM SET ENCRYPTION KEY certificate_id IDENTIFIED BY password


certficate_id 는 optional 한 String 값(unique) 을 가지며 보안 모듈에 저장된다.  
V$WALLET 을 이용하여 open 된 certficate_id 를 찾을수있다 .
password는 보안모듈의 패스워드를 설정하며, 만드시 설정해줘야 한다.
password 는 case sensitive 하며, double quotation marks 를 포함한다.

++ 마스터키 재생생 ++

    너무 빈번한 마스터키 재생성은 시스템 보안 향상에 도움이 되지 않는다.
    보안모듈은 큰용량을 저장할수 있지만 무한하지는 않는다.
    빈번한 마스터키 재생성은 사용가능한 스토리지용량을 고갈시킬 우려가 있다.

    ALTER SYSTEM SET ENCRYPTION KEY "j231m781098dhb345dm" IDENTIFIED BY "p3812dG9E";


++ 암호화된 컬럼에 salt 추가 ++

    salt는 암호화된 데이터의 강력한 방법중 하나이다.
    salt는 암호화되기전에 임의의 string 을 데이터에 add 한다.

    ALTER TABLE employee MODIFY  (first_name ENCRYPT SALT);


++ salt 삭제 ++

    ALTER TABLE employee MODIFY (first_name ENCRYPT NO SALT);


++ 암호화된 컬럼을 포함한 테이블의 생성 ++

    테이블을 생성할때는  3가지의 옵션을가진다.

        1. default Algorithm 을 사용하는 암호화된 컬럼의 생성
        2. NON-default Algorithm 을 사용하는 암호화된 컬럼의 생성
        3. 암호화된 컬럼을 External 테이블에 생성

        ** default Algorithm 은 AES192 를 사용한다.

1. default Algorithm 을 사용하는 암호화된 컬럼의 생성
   
    CREATE TABLE employee (
        first_name VARCHAR2(128),
        last_name VARCHAR2(128),
        empID NUMBER,
        salary NUMBER(6) ENCRYPT
        );


2. NON-default Algorithm 을 사용하는 암호화된 컬럼의 생성   

    CREATE TABLE employee (
        first_name VARCHAR2(128),
        last_name VARCHAR2(128),
        empID NUMBER ENCRYPT NO SALT,
        salary NUMBER(6) ENCRYPT USING '3DES168'
        );


3. 암호화된 컬럼을 External 테이블에 생성
    생략

++ 존재하는 테이블에 대한 암호화 ++

    존재하는 테이블에 암호화된 컬럼 추가는 3가지의 옵션은 가진다.

        1. 존재하는 테이블에 암호화된 컬럼을 add

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

        2. 존재하는 컬럼에 대한 암호화

            ALTER TABLE employee MODIFY (first_name ENCRYPT);

        3. 암호화된 컬럼에 대하여 Disabling

            ALTER TABLE employee MODIFY (first_name DECRYPT);


   
++ 암호화된 컬럼에 대한 인덱스 생성 ++

    암호화된 컬럼에 대하여 인덱스를 생성하기 위해서는 CREATE INDEX 문을 사용하여야 한다.
    암호화된 컬럼에 인덱스를 생성할경우 반드시 NO SALT 로 지정해야한다.

    CREATE INDEX employee_idx on employee (empID);


++ 암호화키 알고리즘의 변경 ++

    ALTER TABLE employee REKEY;
    ALTER TABLE employee REKEY USING '3DES168';


++ 지원되는 알고리즘의 종류 ++

    Triple DES
    AES128 
     AES192 // default
    AES256


++ 암호화 가능한 DATA TYPE ++

   
   CHAR
    DATE
    INTERVAL DAY TO SECOND
    INTERVAL YEAR TO MONTH
    NCHAR
    NUMBER
    NVARCHAR2
    RAW
    TIMESTAMP
    VARCHAR2


++ Data Dictionary Views ++

    DBA_ENCRYPTED_COLUMNS
    ALL_ENCRYPTED_COLUMNS
    USER_ENCRYPTED_COLUMNS


댓글 없음:

댓글 쓰기