Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle 투명 데이터 암호화(TDE) 완벽 가이드: 개념부터 실전 설정까지

Oracle®는 보안 강화를 위해 Oracle 12c에서 투명 데이터 암호화(Transparent Data Encryption, TDE) 기능을 도입했습니다. TDE를 사용하면 사용자가 민감한 데이터에 대해 테이블스페이스 및 컬럼 수준의 암호화를 손쉽게 활성화할 수 있습니다.

개요

데이터를 한 번 암호화하면 인가된 사용자나 애플리케이션만 접근할 수 있습니다. Oracle은 다양한 도구와 프로세스를 통해 데이터베이스에 대한 인증, 권한 부여, 감사를 수행하지만, 실제 데이터가 저장된 운영체제(OS) 데이터 파일 자체까지는 보호하지 않습니다.

Oracle Database Advanced Security Guide(ASOAG)에서는 이렇게 설명합니다. "TDE는 데이터 파일에 저장된 민감한 데이터를 암호화한다. 무단 복호화를 방지하기 위해 TDE는 암호화 키를 데이터베이스 외부의 보안 모듈, 즉 키스토어(keystore)에 별도로 보관한다."

TDE 구성에 필요한 권한

TDE를 구성하려면 먼저 사용자에게 SYSKM 관리 권한을 부여해야 합니다. ASOAG는 "SYSKM 계정으로 비밀번호를 사용해 데이터베이스에 접속할 수 있도록 패스워드 파일을 생성하는 것을 권장한다"며, 동시에 "TDE 컬럼 또는 테이블스페이스 암호화를 구성하는 데에는 SYSKM 권한이 반드시 필요한 것은 아니다"라고 안내합니다. 다만 테이블 컬럼과 테이블스페이스를 암호화하려면 아래 권한들이 필요합니다.

  • CREATE TABLE
  • ALTER TABLE
  • CREATE TABLESPACE
  • ALTER TABLESPACE (온라인 및 오프라인 테이블스페이스 암호화 시)
  • ALTER DATABASE (빠른 오프라인 테이블스페이스 암호화 시)

위 권한 외에도 TDE를 활성화하려면 항상 열려 있어야 하는 월렛(wallet)을 생성해야 합니다. Oracle 12c에서는 이 월렛을 키스토어(keystore)라고도 부릅니다.

TDE의 두 가지 유형

1. TDE 컬럼 암호화

컬럼 암호화는 테이블에 저장된 신용카드 번호, 주민등록번호 등 기밀 데이터를 보호합니다. ASOAG에 따르면 "2계층(two-tiered) 키 기반 아키텍처를 사용해 민감한 테이블 컬럼을 투명하게 암호화하고 복호화한다. TDE 마스터 암호화 키는 Oracle 소프트웨어 또는 하드웨어 키스토어 형태의 외부 보안 모듈에 저장되며, 이 마스터 키가 TDE 테이블 키를 암호화·복호화하고, 그 테이블 키가 다시 테이블 컬럼의 데이터를 암호화·복호화한다."

Oracle 투명 데이터 암호화(TDE) 완벽 가이드: 개념부터 실전 설정까지

이미지 출처: https://docs.oracle.com/database/121/ASOAG/introduction-to-transparent-data-encryption.htm#ASOAG10137


2. TDE 테이블스페이스 암호화

암호화된 테이블스페이스에 생성되는 모든 객체는 자동으로 암호화됩니다. 이를 활용하면 테이블 전체 또는 여러 컬럼을 한 번에 암호화할 수 있습니다. ASOAG는 "TDE 테이블스페이스 암호화 역시 2계층 키 기반 아키텍처를 사용해 테이블스페이스를 투명하게 암호화(복호화)한다. TDE 마스터 암호화 키는 외부 보안 모듈(소프트웨어 또는 하드웨어 키스토어)에 저장되며, 이 마스터 키로 TDE 테이블스페이스 암호화 키를 암호화하고, 그 키가 테이블스페이스 내 데이터를 암호화·복호화한다"고 설명합니다.

Oracle 투명 데이터 암호화(TDE) 완벽 가이드: 개념부터 실전 설정까지

이미지 출처: https://docs.oracle.com/database/121/ASOAG/introduction-to-transparent-data-encryption.htm#ASOAG10137

TDE를 사용해야 하는 이유

ASOAG는 TDE 사용 이유로 다음과 같은 항목들을 제시합니다.

  1. 저장 매체나 데이터 파일이 도난당하더라도 민감한 데이터를 안전하게 보호할 수 있습니다.
  2. 보안 관련 규정 준수(compliance) 요구 사항 충족에 도움이 됩니다.
  3. 애플리케이션 변경을 거의 또는 전혀 필요로 하지 않으면서, 데이터베이스 사용자와 애플리케이션을 위해 테이블 데이터를 투명하게 복호화합니다.
  4. DB 및 애플리케이션 사용자는 자신이 접근하는 데이터가 암호화되어 있다는 사실조차 인식할 필요가 없습니다.
  5. 온라인 재정의(online redefinition)를 활용하거나 오프라인 모드에서 암호화하여 가동 중단 없이 데이터를 암호화할 수 있습니다.
  6. 암호화된 데이터를 처리하기 위한 별도의 애플리케이션 수정이 필요하지 않습니다. 데이터베이스가 직접 암호화와 복호화를 수행합니다.
  7. Oracle Database는 TDE 마스터 암호화 키와 키스토어 관리 작업을 자동화합니다.

TDE 구성 절차

다음 단계에 따라 TDE와 월렛을 구성할 수 있습니다.

  1. 월렛(키스토어) 위치를 생성합니다.

    mkdir -p /u01/oracle/wallet
    
  2. sqlnet.ora 파일에 월렛 위치를 업데이트합니다.

    cat $ORACLE_HOME/network/admin/sqlnet.ora
    # sqlnet.ora Network Configuration File: /home/oracle/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
    # Generated by Oracle configuration tools.
    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
    ENCRYPTION_WALLET_LOCATION =
    (SOURCE =(METHOD = FILE)(METHOD_DATA =
    (DIRECTORY = /u01/oracle/wallet)))
    
  3. 키스토어를 생성합니다.

    SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/oracle/wallet/' IDENTIFIED BY Oraclewallet#123 ;
    keystore altered.
    SQL> host ls /u01/oracle/wallet/
    Oraclewallet.P12
    
  4. 키스토어를 엽니다.

    SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY Oraclewallet#123;
    keystore altered.
    
  5. 암호화 키를 활성화합니다.

    SQL> SET LINESIZE 100
    SELECT con_id, key_id FROM v$encryption_keys;
    
    no rows selected
    SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY Oraclewallet#123 WITH BACKUP;
    keystore altered.
    SQL> SET LINESIZE 100
    SELECT con_id, key_id FROM v$encryption_keys;
    
    CON_ID KEY_ID
    ---------- ------------------------------------------------------------------------------
    0 HTDRKP*%GRLOHNRWMrX2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    SQL> SET LINESIZE 200
    COLUMN wrl_parameter FORMAT A50
    SELECT * FROM v$encryption_wallet;
    
    WRL_TYPE      WRL_PARAMETER                                                     STATUS             
    WALLET_TYPE              WALLET_OR FULLY_BAC     CON_ID
    -------------------- -------------------------------------------------- ------------------------------ -------------------- --------- --------- ----------
    FILE                   
    /u01/oracle/wallet/                                             OPEN       
    PASSWORD        SINGLE   
    NO                  0
    
  6. 암호화된 테이블스페이스를 생성합니다.

    SQL> CREATE TABLESPACE ENCRYPTION_TEST 
    datafile '/u01/oracle/app/oracle/oradata/db/encrytest.dbf' size 2G 
    ENCRYPTION USING 'AES256'
    DEFAULT STORAGE(ENCRYPT);
    
    Tablespace created.
    SQL> create table ENCRYPTION_EMP(
    empno   Number(3),
    Name     varchar(10)
    ) tablespace ENCRYPTION_TEST;
    
    Table created.
    SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='ENCRYPTION_TEST';
    TABLESPACE_NAME              ENC
    ------------------------------ ---
    ENCRYPTION_TEST                           YES
    
  7. 암호화된 컬럼을 포함하는 테이블을 생성합니다.

    SQL> CREATE TABLE employee (
    first_name VARCHAR2(128),
    last_name VARCHAR2(128),
    empID NUMBER,
    salary NUMBER(6) ENCRYPT
    );
    Table created.
    SQL> select owner,table_name,column_name,encryption_alg from dba_encrypted_columns where table_name='EMPLOYEE';
    OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_A
    ---------- ------------ ------------ -----
    RAJ EMPLOYEE SALARY AES 192 bits
    key
    
  8. 자동 로그인(auto login)을 확인합니다.

    SQL> SELECT * FROM v$encryption_wallet;
    WRL_TYPE      WRL_PARAMETER       STATUS       WALLET_TYPE     WALLET_OR     FULLY_BAC     CON_ID
    ----------    ------------------- ------------ --------------- ------------- ------------- ----------
    FILE          /u01/oracle/wallet/   OPEN         PASSWORD      SINGLE         NO            0
    

여기서 wallet_typePASSWORD입니다. 이 경우 데이터베이스를 재시작할 때마다 키 또는 월렛을 명시적으로 열어 주어야 합니다. 이런 번거로움을 피하려면 자동 로그인을 활성화하면 됩니다. 자동 로그인이 설정되면 데이터베이스 재시작 시 월렛이 자동으로 열립니다.

결론

TDE를 활용하면 고도로 민감한 데이터를 안전하게 보호할 수 있습니다. 데이터 파일이나 저장 매체가 도난당하더라도 복호화 키가 없는 사용자는 데이터에 접근할 수 없습니다.

데이터베이스 서비스에 대해 더 자세히 알아보세요.

피드백 탭을 통해 의견을 남기거나 질문할 수 있습니다. 언제든지 저희와 대화를 시작해 주세요.