베어메탈 솔루션에 Oracle 투명 데이터 암호화(TDE) 배포 및 관리

이 페이지에서는 Oracle 고급 보안 투명 데이터 암호화(TDE)를 배포하고 Oracle 베어메탈 솔루션에서 Oracle 월렛 및 키를 관리하는 방법을 설명합니다.

개요

Oracle 고급 보안 TDE는 Oracle 데이터베이스의 저장 데이터를 투명하게 암호화하고 데이터베이스 파일에 대한 무단 액세스를 방지합니다. TDE는 전체 데이터베이스 백업(RMAN)과 데이터 펌프 내보내기는 물론 특정 테이블스페이스와 열도 암호화할 수 있습니다.

투명 데이터 암호화의 작동 방식

TDE는 암호화에 사용되는 여러 키를 만들고 관리합니다. 공격자가 암호화된 데이터와 일치하는 키를 얻으면 쉽게 복호화하여 명확한 데이터를 볼 수 있으므로 이러한 키를 보호해야 합니다.

TDE에는 단일 데이터베이스 마스터 키로 래핑되는 데이터 암호화 키를 사용하는 2계층 키 아키텍처가 있습니다. 마스터 키는 암호화된 데이터와 분리되어 데이터베이스 외부에 저장되며, Oracle 소프트웨어 키 저장소 월렛 또는 하드웨어 보안 모듈(HSM) 키 저장소일 수 있으며, 키 저장소의 데이터베이스 보안 관리자가 직접 관리합니다.

TDE는 다양한 고객 환경을 지원하기 위해 두 가지 키 저장소 옵션을 제공합니다. 기본적으로 TDE는 PKCS#12 표준 기반 키 저장소 파일인 Oracle 월렛에 마스터 키를 저장합니다. 월렛은 소수의 암호화된 데이터베이스를 위한 간편한 솔루션을 제공합니다.

베어메탈 솔루션 서버에서 Oracle 데이터베이스 11g에 TDE를 사용 설정:

열 수준과 테이블스페이스 수준에서 암호화 작업을 실행할 수 있습니다. RMAN 백업에도 TDE를 적용할 수도 있습니다.

TDE 기본 요건 사용 설정

키 저장소(11g의 경우 Oracle Wallet)를 설정하여 데이터베이스를 준비하고 초기 마스터 키를 만들어야 합니다.

베어메탈 솔루션 서버에서 Oracle 월렛 구성

  • 프로젝트의 jump host 또는 bastion 머신에서 베어메탈 솔루션 서버 중 하나에 연결합니다.

        $ ssh customeradmin@192.168.1.10
        $ su - oracle
    
  • 환경 변수를 설정합니다.

    [oracle@svr002 ~]$ . oraenv
     ORACLE_SID = [tdedb] ? DB11G
     The Oracle base has been changed from   /u01/app/oracle to /apps/oracle/oracle_base
    
    [oracle@svr002 ~]$ export ORACLE_SID=DB11G1
    
  • sysdba로 연결합니다.

    [oracle@svr002 ~]$ sqlplus / as sysdba
    
  • 다음 환경 변수가 모두 올바르게 설정되어 있는지 확인합니다.

    $ echo $ORACLE_HOME
    $ echo $ORACLE_BASE
    $ echo $DB_UNIQUE_NAME
    
  • 월렛 파일을 위한 새 디렉터리를 만듭니다.

    $ mkdir -p $ORACLE_BASE/admin/DB11G/wallet
    
  • orkbi 유틸리티를 사용하여 월렛 계정을 만들고 자동 로그인을 사용 설정하면 재시작 시 월렛을 사용 설정하지 않아도 됩니다.

    $ orapki wallet create -wallet $ORACLE_BASE/admin/DB11G/wallet -auto_login -pwd Oracle2020
    
  • Oracle은 월렛의 기본 경로를 사용합니다.

    $ ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet
    $ ORACLE_HOME/admin/$DB_UNIQUE_NAME/wallet
    

    기본 경로를 사용하지 않는 경우 sqlnet.ora 파일에서 대체 경로를 설정해야 합니다. 이러한 매개변수 ENCRYPTION_WALLET_LOCATION 또는 WALLET_LOCATION을 설정해야 합니다.

    월렛 경로를 찾으려면 다음 단계를 따릅니다.

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
    SQL> select * from v$encryption_wallet;
    
    WRL_TYPE     WRL_PARAMETER           STATUS
    --------     -------------           -------
    file        /apps/oracle/oracle_base OPEN_NO_MASTER_KEY
                /admin/DB11G/wallet
    
  • sqlnet.ora 파일에서 월렛 경로를 설정하려면 다음 단계를 따릅니다.

    $ vi sqlnet.ora
    
    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
     (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
    Or
    
    WALLET_LOCATION =
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
  • 월렛에 사용자 이름과 비밀번호를 추가합니다. 기존 월렛에 사용자 이름과 비밀번호를 추가하려면 다음과 같이 -createCredential 옵션과 함께 mkstore 명령어를 사용합니다.

    mkstore -wrl <wallet_location> -createCredential <TNS_alias> <username> <password>
    
    $ mkstore -wrl apps/oracle/oracle_base/admin/DB11G/wallet -createCredential DB11G testuser testtest123
    

    비밀번호를 입력하지 않고도 testuser@SID로 로그인할 수 있습니다.

  • 초기 마스터 키를 만듭니다.

    SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY Oracle2020;
    

    월렛 상태가 OPEN인지 확인합니다.

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
     SQL> select * from v$encryption_wallet;
    
          WRL_TYPE  WRL_PARAMETER             STATUS
          --------  -------------             ------
          file      /apps/oracle/oracle_base/ OPEN
              admin/DB11G/wallet
    
  • 월렛 열기 및 닫기:

    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Password";
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
    

Tablespace 수준에서 TDE 사용 설정

CREATE TABLESPACE SQL 문을 사용하여 암호화 작업을 실행할 수 있습니다.

새 Tablespace 암호화

새 테이블스페이스를 만들 때 생성 프로세스 중에 암호화 설정을 구성할 수 있습니다.

  1. 테이블스페이스 암호화의 호환 가능한 초기화 매개변수가 11.2.0.0 이상인지 확인하세요.

    SQL> SHOW PARAMETER COMPATIBLE
    
         NAME        TYPE     VALUE
         ----        ----     ------
         compatible  string   11.2.0.4.0
    
  2. TDE 마스터 암호화 키를 구성했는지 확인합니다. 기본 요건 섹션의 초기 마스터 키 만들기에서 TED 마스터 암호화 키를 확인할 수 있습니다.

  3. 암호화된 Tablespace 만들기

    데이터 파일 경로를 확인하려면 다음을 사용합니다.

    SQL> select * from dba_data_files ;
    

    암호화 절을 사용하여 CREATE TABLESPACE 문 실행

      SQL> create TABLESPACE encrypted_ts
           DATAFILE '+DATA/db11g/datafile/encrypted_ts01.dbf' SIZE 5 M
           AUTOEXTEND on NEXT 64K
           ENCRYPTION USING 'AES256'
           DEFAULT STORAGE(ENCRYPT);
    

    ENCRYPTION 'AES256' ENCRYPT는 암호화 알고리즘 및 암호화 키 길이를 지정합니다. ENCRYPT 절은 테이블스페이스를 암호화합니다.

    USING 절이 생략된 경우 암호화 알고리즘의 기본값은 'AES128'입니다. 또한 ENCRYPT의 기본 저장소 절을 지정해야 합니다. 또한 ALTER SYSTEM 문을 사용하여 향후 테이블스페이스 생성 작업의 기본 암호화 알고리즘을 정의하는 TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM 동적 매개변수를 설정할 수 있습니다.

      sql> ALTER SYSTEM SET TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM = value;
    

    값은 암호화 알고리즘 AES128, AES192, AES256, 3DES168, RRA128, SARA192, SARA256, SEED128, GOST256 중 하나일 수 있습니다. 기본값은 AES128입니다.

    또는 init.ora 파일에서 TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM을 초기화 매개변수로 설정할 수 있습니다.

    테이블스페이스 암호화가 구성되었는지 확인하려면 테이블스페이스가 암호화되었는지 여부를 나타내는 DBA_TABLESPACES 뷰와 USER_TABLESPACES 뷰의 ENCRYPTED 열을 확인하면 됩니다.

    SQL> SELECT tablespace_name, encrypted FROM dba_tablespaces;
    
          TABLESPACE_NAME                ENC
          -----------------------------------
          SYSTEM                         NO
          SYSAUX                         NO
          UNDOTBS1                       NO
          TEMP                           NO
          USERS                          NO
          UNDOTBS2                       NO
          ENCRYPTED_TS                   YES
    
  4. 암호화 테스트

    SQL> CREATE TABLE test (id NUMBER(10),data VARCHAR2(50))TABLESPACE encrypted_ts;
    Table created.
    
    SQL> CREATE INDEX test_idx ON test(data) TABLESPACE encrypted_ts;
    Index created.
    
    SQL> INSERT INTO test  (id, data) VALUES (1, 'Test  Encryptio');
    1 row created.
    
    SQL> COMMIT;
    Commit complete
    

    데이터가 데이터 파일에 기록되도록 버퍼 캐시를 플러시합니다.

      SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
    

    strings 명령어를 사용하여 데이터 파일 내의 데이터를 읽습니다.

      export ORACLE_SID=+ASM
      asmcmd
      ASMCMD> strings +DATA/db11g/datafile/encrypted_ts01.dbf
    

    데이터는 바이너리 형식으로 표시됩니다.

테이블 열 수준에서 TDE 사용 설정

TDE 열 암호화는 신용카드 번호, 주민등록번호(SSN), 개인 계좌 번호(PAN)와 같이 기밀인 데이터베이스 테이블의 특정 열 데이터를 암호화하는 데 사용될 수 있습니다.

  1. 암호화된 열이 있는 테이블 만들기

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

    SALT는 암호화된 데이터의 보안을 강화하는 방법입니다. 암호화되기 전에 데이터에 추가되는 무작위 문자열이므로, 암호화할 때 명료한텍스트가 반복되면서 다르게 표시됩니다. SALT는 공격자가 데이터를 도용하는 데 사용하는 방법, 즉 암호화된 텍스트의 일치하는 패턴을 삭제합니다. ENCRYPT 절과 함께 지정된 SALT 또는 NO SALT 매개변수를 사용할 수 있습니다.

    ALTER TABLE 명령어를 사용하여 암호화된 열을 추가하거나 기존 열을 암호화하여 기존 테이블의 열을 암호화할 수 있습니다.

    데이터베이스의 기존 테이블에 암호화된 열을 추가하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee ADD (credit_card_number VARCHAR2(16) ENCRYPT NO SALT);
    Table altered.
    

    데이터베이스 테이블에 있는 기존 열을 암호화하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee MODIFY (last_name encrypt);
    Table altered.
    

    데이터베이스 테이블의 암호화된 열에 SALT를 추가하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee MODIFY (last_name encrypt salt);
    Table altered.
    

    데이터베이스 테이블에 있는 기존 열을 복호화하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee MODIFY (last_name decrypt);
    Table altered.
    

    데이터베이스 테이블의 암호화된 열에서 SALT를 삭제하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee MODIFY (last_name encrypt no salt);
    Table altered.
    

    암호화된 열이 하나 이상 포함된 테이블의 암호화된 키를 변경하려면 다음 안내를 따르세요.

    SQL> ALTER TABLE employee rekey;
    Table altered.
    

    암호화된 열이 하나 이상 포함된 테이블의 암호화 알고리즘을 변경하는 방법

    SQL> ALTER TABLE employee rekey USING '3DES168';
    Table altered.
    

향후 테이블스페이스 암호화

ENCRYPT_NEW_TABLESPACES 데이터베이스 초기화 매개변수를 사용하여 만들 이후의 테이블스페이스를 자동으로 암호화하도록 Oracle 데이터베이스를 구성할 수 있습니다.

다음 ALTER SYSTEM 명령어를 사용합니다.

SQL> ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES=value;

값은 다음과 같습니다.

  • ALWAYSAES128 알고리즘을 사용하거나, CREATE TABLESPACEENCRYPTION 절을 생략하는 경우 TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM 동적 매개변수로 지정된 알고리즘을 사용하여 테이블스페이스를 자동으로 암호하는데, 이는 클라우드 및 온프레미스 시나리오 모두 해당합니다. 하지만 ENCRYPTION 절을 제공하면 지정한 알고리즘이 AES128보다 우선 적용됩니다.

  • DDL은 클라우드 및 온프레미스 환경 모두에 대해 지정된 CREATE TABLESPACEENCRYPTION 절 설정을 사용하여 테이블스페이스를 암호화합니다.

  • CLOUD_ONLY(사용 사례에 적용되지 않음)는 Oracle Cloud 환경에만 적용됩니다. 기본값은 CLOUD_ONLY입니다.

TDE 테이블스페이스 암호화 또는 TDE 열 암호화 중에서 선택

TDE 열 암호화를 선택해야 하는 경우 TDE 테이블스페이스 암호화를 선택해야 하는 경우
민감한 정보의 위치가 확인되었습니다. 민감한 정보의 위치를 알 수 없음
모든 애플리케이션 열의 5% 미만이 암호화 후보입니다. 대부분의 애플리케이션 데이터가 민감한 정보로 간주되거나, 여러 국가 및 국제 보안 및 개인정보 보호 의무가 업계에 적용됩니다.
TDE 열 암호화에서 데이터 유형 및 길이가 지원됩니다. 민감한 정보가 포함된 일부 데이터 유형은 TDE 열 암호화에서 지원되지 않습니다.
암호화 후보가 외래 키 열이 아닙니다. 암호화 후보가 외래 키 열입니다.
암호화 후보에 대한 색인은 일반 B-tree 색인입니다. 암호화 후보의 색인은 기능 색인입니다.
애플리케이션이 암호화된 데이터에 대해 범위 스캔을 수행하지 않습니다. 애플리케이션이 민감한 정보의 범위를 검색합니다.
암호화된 값당 1~52바이트의 저장용량을 증가합니다. 허용되는 저장용량 증가가 없습니다.
성능에 미치는 영향은 암호화된 값이 선택되거나 업데이트되는 빈도, 암호화된 데이터의 크기, 기타 변수와 같은 암호화된 열의 비율에 따라 달라집니다. 지속적인 성능 영향이 10% 미만입니다.
하드웨어 암호화 가속을 사용하려는 경우입니다.
암호화와 압축의 이점을 동시에 누리고 싶은 경우입니다.

RMAN 백업 암호화

백업 세트는 V$RMAN_ENCRYPTION_ALGORITHMS에 나열된 알고리즘을 사용하여 암호화됩니다. RMAN은 백업 세트에 기록된 데이터를 투명하게 암호화하고 이러한 백업 세트를 RESTORE 작업에 필요할 때 복호화할 수 있습니다. RMAN은 투명, 비밀번호 보호, 이중 모드의 세 가지 암호화 모드를 제공합니다.

  • 투명 모드 암호화(기본값)를 사용하려면 Oracle 암호화 월렛을 사용해야 합니다.

  • 비밀번호 모드를 사용하려면 암호화에 사용할 비밀번호를 DBA가 제공해야 합니다. SET ENCRYPTION ON IDENTIFIED BY password only로 비밀번호 모드를 설정할 수 있습니다.

  • 이중 모드 암호화를 사용하면 Oracle 월렛 또는 비밀번호를 사용하여 복호화할 수 있습니다. SET ENCRYPTION ON IDENTIFIED BY password로 듀얼 모드를 설정할 수 있습니다.

RMAN 백업 암호화 구성

  1. Oracle 월렛을 설정합니다.

  2. 암호화를 사용하도록 RMAN을 구성합니다.

    RMAN 암호화 모드를 구성합니다. 이 예시에서는 이중 모드를 사용합니다. 그렇게 하려면 RMAN 대상 데이터베이스에 연결하고 SET ENCRYPTION ON IDENTIFIED BY password 명령어를 실행하세요.

    [oracle@svr002 ~]$ . oraenv
      ORACLE_SID = [tdedb] ? DB11G
      The Oracle base has been changed from /u01/app/oracle to /apps/oracle/oracle_base
    
      export ORACLE_SID=DB11G1
    

    RMAN에 연결합니다.

      rman target /
      RMAN> SET ENCRYPTION ON IDENTIFIED BY <password>;
      executing command: SET encryption
    

    SET ENCRYPTION는 기본적으로 투명한 암호화를 사용하는 CONFIGURE ENCRYPTION 명령어로 지정된 암호화 설정을 재정의합니다.

  3. 기본 백업 암호화 알고리즘을 구성합니다.

    RMAN 암호화 알고리즘 목록을 가져오려면 v$rman_encryption_algorithms 뷰를 쿼리합니다.

     SQL> COL algorithm_name FORMAT a15
          COL algorithm_description FORMAT a15
          COL is_default FORMAT a15
     SQL> select algorithm_id, algorithm_name, algorithm_description, is_default from v$rman_encryption_algorithms;
    
          ALGORITHM_ID ALGORITHM_NAME  ALGORITHM_DESCR  IS_DEFAULT
          -----------  --------------  ---------------  ----------
          1             AES128          AES 128-bit key  YES
          2             AES192          AES 192-bit key  NO
          3             AES256          AES 256-bit key  NO
    

    기본 알고리즘을 변경하려면 다음 안내를 따르세요.

     RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           using target database control file instead of recovery catalog
           new RMAN configuration parameters:
              CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           new RMAN configuration parameters are successfully stored
    

    일반 RMAN 백업 명령어를 사용하여 암호화된 백업을 가져옵니다. 예를 들면 다음과 같습니다.

     RMAN> backup tablespace users;
    

    암호화 비밀번호를 사용하여 백업을 복원하려면 다음 단계를 따르세요.

    RMAN> set decryption identified by <password>;
    RMAN> restore tablespace users;
    

중요사항

  • 필요한 복호화 키를 사용할 수 있으면 암호화된 백업은 복원 및 복구 중에 자동으로 복호화됩니다. 각 백업 세트에는 별도의 키가 있습니다. 키는 백업 공간에 암호화된 형식으로 저장됩니다. 백업은 사용자가 제공한 비밀번호나 Oracle 소프트웨어 키 저장소에서 가져온 키로 복호화됩니다.

  • 투명한 백업 암호화는 자동 로그인 소프트웨어 키 저장소와 비밀번호 기반 소프트웨어 키 저장소를 모두 지원합니다. 자동 로그인 소프트웨어 키 저장소를 사용하면 자동 로그인 키 저장소가 항상 열려 있으므로 언제든지 암호화된 백업 작업을 수행할 수 있습니다. 비밀번호 기반 소프트웨어 키 저장소를 사용할 때는 백업 암호화를 수행하기 위해 키 저장소를 열어야 합니다.

  • 자동 로그인 키 저장소를 사용하는 경우 사용자가 백업 및 자동 로그인 키 저장소를 모두 얻을 경우 암호화된 백업을 읽을 수 있으므로 암호화된 백업 데이터와 함께 백업하지 마세요. 해당 형태의 키 저장소는 키 저장소 비밀번호 없이 사용할 수 없으므로 Oracle 키 저장소를 백업하는 것이 안전합니다.

  • 데이터베이스의 일부 열이 투명 데이터 암호화(TDE) 열 암호화를 통해 암호화되고 이러한 열이 백업 암호화를 사용하여 백업되면 백업 중에 두 번째 열이 두 번 암호화됩니다. 복원 작업 중에 백업 세트가 복호화되면 암호화된 열이 원래의 암호화된 형식으로 반환됩니다.

  • Oracle 키 저장소를 분실하면 투명 암호화된 백업을 복원할 수 없습니다. 또한 비밀번호 암호화 백업을 암호화하는 데 사용한 비밀번호를 잊어버리거나 분실한 경우 백업을 복원할 수 없습니다.