DBMS 1
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
DBMS_OBFUSCATION_TOOLKIT
Tibero System Package Guide
제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
DBMS_OBFUSCATION_TOOLKIT은 데이터를 암호화(encryption)하고 복호화(decryption)하는 패키지이다. 이 패키지에서는 데이터의 암호화 및 복호화를 위해 DES(Data Encryption Standard) 또는 3DES(Triple DES) 알고리즘을 이용한다.DES와 3DES 알고리즘은 대칭 키(symmetric key)를 사용하는 알고리즘이다.
이러한 대칭 키를 사용하는 암호화 알고리즘에서는 키를 안전하게 관리하는 것이 무엇보다 중요하다.
암호화 알고리즘에서 키를 관리하는 방법은 다음과 같다.
- 데이터베이스에 키를 저장하는 방법특정 테이블의 컬럼에 키를 저장하는 방법이다.이때 키를 저장하는 테이블은 암호화된 데이터 컬럼과 같은 테이블일 수도 있고, 다른 테이블일 수도 있다. 같은 테이블에 키를 저장하는 경우에는 해당 테이블 전체에 대한 액세스 특권을 부여하는 대신 뷰 또는tbPSM프로그램 등을 통하여 해당 테이블에 액세스해야 한다.
- 운영체제 파일에 저장하는 방법키를 파일에 저장하고, 데이터베이스 내에서tbPSM프로그램 등을 통하여 운영체제 파일로부터 키를 읽어 데이터를 암호화하거나 복호화하는 방법이다.이때 키를 저장하는 운영체제 파일은 패스워드 파일과 같이 다른 사람이 직접 액세스할 수 없도록 보안을 유지해야 한다.
- 사용자가 키를 직접 입력하는 방법사용자 또는 애플리케이션 프로그램 내에서 필요할 때마다 키를 데이터베이스로 전송하여 암호화 및 복호화를 수행하는 방법이다.이 방법은 사용자가 키를 항상 암기하고 있거나 애플리케이션 프로그램의 소스 내에 키가 포함되어 있어야 한다. 또한, 키는 네트워크를 통하여 데이터베이스 서버로 전달되므로, 네트워크 보안에도 유의해야 한다.
본 절에서는 DBMS_OBFUSCATION_TOOLKIT 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명한다.
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;
- 파라미터
- 예외 상황
- 예제
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;
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;
- 파라미터
- 예외 상황
- 예제
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;
임의의 값을 입력 값으로 받아 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;
- 파라미터
- 예외 상황
- 예제
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;
/
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;
- 파라미터
- 예외 상황
- 예제
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;
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;
- 파라미터
- 예외 상황
- 예제
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;
임의의 값을 입력 값으로 받아 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;
- 파라미터
- 예외 상황
- 예제
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;
/