반응형

Oracle 컬럼 암호화 (Transparent Data Encryption)

Oracle10g Release 2에서는 데이터의 암호화를 위하여 
Transparent Data Encryption (이하 TDE) 라는 기능을 제공한다.

이 기능의 특징은


1. 테이블의 컬럼별로 데이터를 암호화 할 수 있다.
2. 인덱스도 암호화 할 수 있으며, 인덱스에 암호화 하더라도 성능의 큰 저하는 없다
(Oracle에서는 Insert시 1.6배, Select시 1.4배의 저하가 생긴다고 함..수치 확인필요)
3. pl-sql로 암호화/복호화의 DDL을 재정의, 혹은 정의 할 필요가 없다.
4. 물리적인 데이터파일(dbf확장자 파일)의 도난에 안전하다.
5. 동일 Wallet으로 Data Dump의 import, export도 가능하다.
6. AES128, AES192, AES256, 3DE168(168비트 Triple DES알고리즘)로 암호화 가능.
7. Salt라는 기능으로 같은 값의 데이터를 다른 암호화된 데이터로 저장 가능.
8. 기존 테이블에 ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRYPT)로 
   암호화 가능


이정도가 될 것 같다. 장점을 우선으로 나열했다.

구현 방법은


1. %ORA_HOME%\admin\SID 밑에 wallet이라는 폴더를 만든다
(디폴트로 해당 폴더가 생성되지 않는다. wallet을 저장하는 디폴트 폴더가 저기.)

2. ALTER SYSTEM권한이 있는 계정으로 로그인한다.
(SYSDBA계정으로 GRANT해도 되고, SYSDBA계정으로 로그인해도 됨)

3. ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY "비밀번호"; 입력
(비밀번호는 반드시 더블쿼테이션으로..)
(AUTHENTICATED 대신 IDENTIFIED로 해도 됐었던 기억이...)
※ 이때 wallet을 자동 생성 할 수 없다는 에러가 발생할 때
 → 1번의 폴더 생성확인 해 볼 것. 
     비밀번호를 영어대소문자, 숫자, 특수문자를 포함하는 8자리 이상으로 지정 해 볼 것.

4. 1번의 폴더에 물리적 wallet파일이 생성되었는지 확인

5. 4번으로 생성된 wallet이 자동으로 open되나, open되었는지 확인 (에러 확인)
(ALTER SYSTEM SET ENCRYPTION WALLET OPEN AUTHENTICRYPTED BY "비밀번호"; 여기서 비밀번호는 생성시의 비밀번호)
※ WALLET 닫기
→ ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;

6. 테이블 생성 (컬럼 정의 시, 암호화 할 컬럼 맨 마지막에 ENCRYPT 정의)
ex) CREATE TABLE encryptedTable (col1 varchar2(10) ENCRYPT);
Primary key에 대해서는 SALT로 컬럼을 생성 할 수 없다.(ENCRYPT는 SALT가 기본)
그럴때는
CREATE TABLE encryptedTable (col1 varchar2(10) ENCRYPT NO SALT);

7. 기존 테이블을 수정 할 경우
ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRPYT);

이것으로 기본 설정은 끝.


Tip!
1. 컬럼에 암호화 설정시, 암호화 방식을 설정 할 수 있다. (기본 AES192)
ex) ALTER TABLE 테이블명 MODIFY (컬럼명 ENCRYPT USING '방식');

2. 암호화된 컬럼의 암호화 설정 제거
ex) ALTER TABLE 테이블명 MODIFY (컬럼명 DECRYPT);

이제 평상시 대로 INSERT, UPDATE, DELETE, SELECT를 하면 된다.
쿼리의 결과로는 복호화되기 전의 암호화 된 데이터의 확인이 불가능하다.
WALLET을 CLOSE하고 DDL을 날리면 WALLET이 CLOSE되어 있다는 에러 발생.

※ TDE의 단점 
정당한 방법으로 로그인 한 유저에 대해서는 암호화 정책이 해당되지 않는다.

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,