DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

DBMS_OBFUSCATION_TOOLKIT

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_OBFUSCATION_TOOLKIT
작성자
dataonair
작성일
2021-02-18 10:33
조회
955



제11장DBMS_OBFUSCATION_TOOLKIT




내용 목차






11.1. 개요

11.2. 프로시저와 함수

11.2.1. DES3DECRYPT

11.2.2. DES3ENCRYPT

11.2.3. DES3GETKEY

11.2.4. DESDECRYPT

11.2.5. DESENCRYPT

11.2.6. DESGETKEY





11.1. 개요




DBMS_OBFUSCATION_TOOLKIT은 데이터를 암호화(encryption)하고 복호화(decryption)하는 패키지이다. 이 패키지에서는 데이터의 암호화 및 복호화를 위해 DES(Data Encryption Standard) 또는 3DES(Triple DES) 알고리즘을 이용한다.DES와 3DES 알고리즘은 대칭 키(symmetric key)를 사용하는 알고리즘이다.

알고리즘 설명
DES 56 bit의 키를 사용하는 알고리즘이다. 그 동안 널리 사용되어 왔으나 최근에는 보안성이 보장되지 않아 점차 사용 빈도가 줄어들고 있다.대칭 키를 사용하는 알고리즘이다.
3DES 하나의 데이터에 DES 알고리즘을 두 번 내지 세 번 반복하여 적용하는 알고리즘이다. 각각 112(56 * 2) bit와 168(56 * 3) bit 키를 사용한다. DES 알고리즘과 마찬가지로 대칭 키를 사용하는 알고리즘이다.다른 대칭 키를 사용하는 알고리즘에 비해 암호화 및 복호화를 하는 시간이 많이 필요하다는 단점이 있다.

이러한 대칭 키를 사용하는 암호화 알고리즘에서는 키를 안전하게 관리하는 것이 무엇보다 중요하다.

암호화 알고리즘에서 키를 관리하는 방법은 다음과 같다.

  • 데이터베이스에 키를 저장하는 방법특정 테이블의 컬럼에 키를 저장하는 방법이다.이때 키를 저장하는 테이블은 암호화된 데이터 컬럼과 같은 테이블일 수도 있고, 다른 테이블일 수도 있다. 같은 테이블에 키를 저장하는 경우에는 해당 테이블 전체에 대한 액세스 특권을 부여하는 대신 뷰 또는tbPSM프로그램 등을 통하여 해당 테이블에 액세스해야 한다.
  • 운영체제 파일에 저장하는 방법키를 파일에 저장하고, 데이터베이스 내에서tbPSM프로그램 등을 통하여 운영체제 파일로부터 키를 읽어 데이터를 암호화하거나 복호화하는 방법이다.이때 키를 저장하는 운영체제 파일은 패스워드 파일과 같이 다른 사람이 직접 액세스할 수 없도록 보안을 유지해야 한다.
  • 사용자가 키를 직접 입력하는 방법사용자 또는 애플리케이션 프로그램 내에서 필요할 때마다 키를 데이터베이스로 전송하여 암호화 및 복호화를 수행하는 방법이다.이 방법은 사용자가 키를 항상 암기하고 있거나 애플리케이션 프로그램의 소스 내에 키가 포함되어 있어야 한다. 또한, 키는 네트워크를 통하여 데이터베이스 서버로 전달되므로, 네트워크 보안에도 유의해야 한다.





11.2. 프로시저와 함수




본 절에서는 DBMS_OBFUSCATION_TOOLKIT 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명한다.




11.2.1. DES3DECRYPT




3DES 알고리즘을 이용하여 암호화된 데이터를 복호화하는 프로시저와 함수이다. 주어진 암호화된 데이터에 대하여 두 번 또는 세 번의 DES 복호화를 수행할 수 있다.복호화를 위해 주어진 키에 대해 복호화를 두 번 수행한다면 16byte(128bit), 세 번을 수행한다면 24byte(192bit)이어야 하며, 그렇지 않으면 예외 상황이 발생한다. 디폴트는 두 번의 DES 복호화를 수행한다. 암호화된 데이터와 같은 횟수만큼 DES 알고리즘을 수행해야 한다.

DES3DECRYPT 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT 
      (
      input IN RAW,
      key IN RAW,
      decrypted_data OUT RAW,
      which IN PLS_INTEGER DEFAULT 0,
      iv IN RAW DEFAULT NULL
      );
      DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      decrypted_string OUT VARCHAR2,
      which IN PLS_INTEGER DEFAULT 0,
      iv_string IN VARCHAR2 DEFAULT NULL
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT 
      (
      input IN RAW,
      key IN RAW,
      which IN PLS_INTEGER DEFAULT 0,
      iv IN RAW DEFAULT NULL
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      which IN PLS_INTEGER DEFAULT 0,
      iv_string IN VARCHAR2 DEFAULT NULL
      )
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    input, input_string 복호화할 데이터이다.
    key 복호화하기 위해 주어진 키 값이다.
    decrypted_data 복호화된 결

    • 0이면 DES 복호화를 2번 수행한다.
    • 1이면 DES 복호화를 3번 수행한다.
    iv 초기화 벡터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_INPUT input_data의 길이가 8의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 8보다 작은 경우이다.
    INVALID_DES_MODE which 값이 0 또는 1이 아닌 경우이다.
  • 예제
    DECLARE
    data RAW(256);
    key RAW(16);
    encrypted_data RAW(256);
    decrypted_data RAW(256);
    BEGIN
    data := '0102030405AE030D0123456789ABCDEF';
    key := '0A123B8E002CD3FF01DE2389A4567BCF';
    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(input => data, key => key,
    encrypted_data => encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(input => data, key => key,
    decrypted_data => decrypted_data);
    END;





11.2.2. DES3ENCRYPT




3DES 알고리즘을 이용하여 데이터를 암호화하는 프로시저와 함수이다. 주어진 데이터에 대하여 두 번 또는 세 번의 DES 암호화를 수행할 수 있다.암호화를 위해 주어진 키에 대해 암호화를 두 번을 수행한다면 16byte(128bit), 세 번을 수행한다면 24byte(192bit)이어야 하며, 그렇지 않으면 예외 상황이 발생한다. 디폴트는 두 번의 DES 암호화를 수행한다.

DES3ENCRYPT 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT 
      (
      input IN RAW,
      key IN RAW,
      encrypted_data OUT RAW,
      which IN PLS_INTEGER DEFAULT 0,
      iv IN RAW DEFAULT NULL
      );
      DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      encrypted_string OUT VARCHAR2,
      which IN PLS_INTEGER DEFAULT 0,
      iv_string IN VARCHAR2 DEFAULT NULL
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT 
      (
      input IN RAW,
      key IN RAW,
      which IN PLS_INTEGER DEFAULT 0,
      iv IN RAW DEFAULT NULL
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      which IN PLS_INTEGER DEFAULT 0,
      iv_string IN VARCHAR2 DEFAULT NULL
      )
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    input, input_string 암호 암호화하기 위해 주어진 키 값이다.
    encrypted_data 암호화된 결과 데이터이다.
    which

    • 0이면 DES 복호화를 2번 수행한다.
    • 1이면 DES 복호화를 3번 수행한다.
    iv 초기화 벡터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_INPUT input_data의 길이가 8의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 8보다 작은 경우이다.
    INVALID_DES_MODE which 값이 0 또는 1이 아닌 경우이다.
  • 예제
    DECLARE
    data RAW(256);
    key RAW(16);
    encrypted_data RAW(256);
    decrypted_data RAW(256);
    BEGIN
    data := '0102030405AE030D0123456789ABCDEF';
    key := '0A123B8E002CD3FF01DE2389A4567BCF';
    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(input => data, key => key,
    encrypted_data => encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(input => data, key => key,
    decrypted_data => decrypted_data);
    END;





11.2.3. DES3GETKEY




임의의 값을 입력 값으로 받아 DES3 알고리즘을 위한 키를 생성하는 프로시저와 함수이다.

DES3GETKEY 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY 
      (
      which IN PLS_INTEGER DEFAULT 0,
      seed IN RAW,
      key OUT RAW
      );
      DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY 
      (
      which IN PLS_INTEGER DEFAULT 0,
      seed_string IN VARCHAR2,
      key OUT VARCHAR2
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY 
      (
      which IN PLS_INTEGER DEFAULT 0,
      seed IN RAW
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY 
      (
      which IN PLS_INTEGER DEFAULT 0,
      seed_string IN VARCHAR2
      )
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    which

    • 0이면 DES 복호화를 2번 수행한다.
    • 1이면 DES 복호화를 3번 수행한다.
    seed 80자 이상의 임의의 값이다.
    key 암호화하기 위해 주어진 키 값이다.
  • 예외 상황

    예외 상황 설명
    NO_SEED seed의 값이 NULL인 경우이다.
    SEED_TOO_SHORT seed의 길이가 80보다 작은 경우이다.
    INVALID_INPUT which가 NULL인 경우이다.
    INVALID_DES_MODE which의 값이 0 또는 1이 아닌 경우이다.
  • 예제
    DECLARE
    data VARCHAR2(4096);
    key VARCHAR2(4096);
    key_seed VARCHAR2(4096);
    encrypted_data VARCHAR2(4096);
    decrypted_data VARCHAR2(4096);
    BEGIN
    data := '0102030405AE030D';
    key_seed := '1234567890'||'1234567890'||'1234567890'||'1234567890';
    key_seed := rpad(key_seed,80);
    key := dbms_obfuscation_toolkit.DES3GetKey(seed_string => key_seed);
    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(input_string => data, key_string => key,
    encrypted_string=> encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(input_string => data, key_string => key,
    decrypted_string => decrypted_data);
    END;
    /





11.2.4. DESDECRYPT




DES 알고리즘을 이용하여 암호화된 데이터를 복호화하는 프로시저와 함수이다. 복호화를 위해 주어진 키는 반드시 8byte(64bit) 이어야 하며, 그렇지 않으면 예외 상황이 발생한다.

DESDECRYPT 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT 
      (
      input IN RAW,
      key IN RAW,
      decrypted_data OUT RAW
      );
      DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      decrypted_string OUT VARCHAR2
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT 
      (
      input IN RAW,
      key IN RAW
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2
      );
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    input, input_string 복호화할 데이터이다.
    key 복호화하기 위해 주어진 키 값이다.
    decrypted_data 복호화된 결과 데이터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_INPUT input_data의 길이가 8의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 8보다 작은 경우이다.
  • 예제
    DECLARE
    data RAW(256);
    key RAW(16);
    encrypted_data RAW(256);
    decrypted_data RAW(256);
    BEGIN
    data := '0102030405AE030D';
    key := '0A123B8E002CD3FF';
    DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(input => data, key => key,
    encrypted_data => encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(input => data, key => key,
    decrypted_data => decrypted_data);
    END;





11.2.5. DESENCRYPT




DES 알고리즘을 이용하여 데이터를 암호화하는 프로시저와 함수이다. 암호화를 위해 주어진 키는 반드시 8byte(64bit)이어야 하며, 그렇지 않으면 예외 상황이 발생한다.

DESENCRYPT 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT 
      (
      input IN RAW,
      key IN RAW,
      encrypted_data OUT RAW
      );
      DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2,
      encrypted_string OUT VARCHAR2
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT 
      (
      input IN RAW,
      key IN RAW
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT 
      (
      input_string IN VARCHAR2,
      key_string IN VARCHAR2
      )
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    input, input_string 암호화할 데이터이다.
    key 암호화하기 위해 주어진 키 값이다.
    encrypted_data 암호화된 결과 데이터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_INPUT input_data의 길이가 8의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 8보다 작은 경우이다.
  • 예제
    DECLARE
    data RAW(256);
    key RAW(16);
    encrypted_data RAW(256);
    decrypted_data RAW(256);
    BEGIN
    data := '0102030405AE030D';
    key := '0A123B8E002CD3FF';
    DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(input => data, key => key,
    encrypted_data => encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(input => data, key => key,
    decrypted_data => decrypted_data);
    END;





11.2.6. DESGETKEY




임의의 값을 입력 값으로 받아 DES 알고리즘을 위한 키를 생성하는 프로시저와 함수이다.

DESGETKEY 프로시저와 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    • 프로시저
      DBMS_OBFUSCATION_TOOLKIT.DESGETKEY 
      (
      seed IN RAW,
      key OUT RAW
      );
      DBMS_OBFUSCATION_TOOLKIT.DESGETKEY 
      (
      seed_string IN VARCHAR2,
      key OUT VARCHAR2
      );
    • 함수
      DBMS_OBFUSCATION_TOOLKIT.DESGETKEY 
      (
      seed IN RAW
      )
      RETURN RAW;
      DBMS_OBFUSCATION_TOOLKIT.DESGETKEY 
      (
      seed_string IN VARCHAR2
      )
      RETURN VARCHAR2;
  • 파라미터

    파라미터 설명
    seed 80자 이상의 임의의 값이다.
    key 암호화하기 위해 주어진 키 값이다.
  • 예외 상황

    예외 상황 설명
    NO_SEED seed의 값이 NULL인 경우이다.
    SEED_TOO_SHORT seed의 길이가 80보다 작은 경우이다.
  • 예제
    DECLARE
    data VARCHAR2(4096);
    key VARCHAR2(4096);
    key_seed VARCHAR2(4096);
    encrypted_data VARCHAR2(4096);
    decrypted_data VARCHAR2(4096);
    BEGIN
    data := '0102030405AE030D';
    key_seed := '1234567890'||'1234567890'||'1234567890'||'1234567890';
    key_seed := rpad(key_seed,80);
    key := dbms_obfuscation_toolkit.DESGetKey(seed_string => key_seed);
    DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(input_string => data, key_string => key,
    encrypted_string=> encrypted_data);
    data := encrypted_data;
    DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(input_string => data, key_string => key,
    decrypted_string => decrypted_data);
    END;
    /