DBMS 1
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
DBMS_CRYPTO
Tibero System Package Guide
3.1. 개요
3.2. 암호화/복호화 알고리즘 및 체인, 패딩
3.3. 해시 알고리즘
3.4. 프로시저와 함수
3.4.1. DECRYPT
3.4.2. ENCRYPT
3.4.3. HASH
DBMS_CRYPTO은 데이터 암복호화 및 인증 등에 쓰이는 해시 알고리즘을 제공하는 패키지이다. 이 패키지의 암복호화 알고리즘들은 모두 키를 사용하는데, 이와 같이 키를 사용하는 암호화 알고리즘에서는 키를 안전하게 관리하는 것이 무엇보다 중요하다.암호화 알고리즘에서 키를 관리하는 방법은
DBMS_CRYPTO챕터를 참고하기 바란다.해시 알고리즘은 임의의 길이의 데이터를 고정길이의 해시값으로 변환한다.
3.2. 암호화/복호화 알고리즘 및 체인, 패딩
DBMS_CRYPTO은 데이터의 암호화 및 복호화를 위해 DES(Data Encryption Standard)
, 3DES(Triple DES), AES(Advanced Encryption Standard) 등의 더욱 다양한 알고리즘 및 블록 패딩 방식을 지원하고 있다.
DBMS_CRYPTO보다 많은 종류의 알고리즘을 사용하므로, 이 패키지를 사용할 것을 권장한다.
각 알고리즘, 체인, 패딩 방식은 아래와 같다.
- 알고리즘
- 체인(chaining) 방식
- 패딩(padding) 방식
DBMS_CRYPTO은 임의의 길이의 데이터를 고정 길이의 해시값으로 변환하는데, 해시값을 만드는 것은 쉽지만, 해시값을 원래의 데이터로 복원하는 일은 지극히 어렵게 함으로써, 데이터의 안전성을 보장한다.데이터 변경 여부 체크 및 암호 인증 등 인증(authentication) 작업에 주로 사용된다.MD4, MD5, SHA-1를 통해 더욱 다양한 알고리즘 및 블록 패딩 방식을 지원하고 있다. 각 알고리즘은 아래와 같다.
본 절에서는 DBMS_CRYPTO 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명한다.
사용자가 명시한 암호화 알고리즘 및 체인, 패딩 기법을 이용하여 암호화된 데이터를 복호화하는 함수이다.주어진 알고리즘에 맞는 키의 크기와 블록의 크기를 설정해야 올바르게 동작한다. 알고리즘 각각에 따른 키의 크기와 블록의 크기는 위의 표에 언급되어 있으니 참고하기 바란다.
DECRYPT 프로시저와 함수의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_CRYPTO.DECRYPT(
src IN RAW,
cipher_type IN PLS_INTEGER,
key IN RAW,
init_vector IN RAW DEFAULT NULL)
RETURN RAW
- 파라미터
- 반환값복호화된 데이터이다.
- 예외 상황
- 예제
DECLARE
data RAW(256);
key RAW(16);
encrypted_data RAW(256);
decrypted_data RAW(256);
iv RAW(256);
BEGIN
data := '0102030405AE030D0102030405AE030D';
key := '0A123B8E002CD3FFA021B3E800C23DFF';
iv := '00000000000000000000000000000000';
encrypted_data := DBMS_CRYPTO.ENCRYPT(
src => data,
cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC +
DBMS_CRYPTO.PAD_PKCS5,
key => key,
init_vector => iv);
encrypted_data := DBMS_CRYPTO.DECRYPT(
src => encrypted_data,
cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC +
DBMS_CRYPTO.PAD_PKCS5,
key => key,
init_vector => iv);
END;
사용자가 명시한 암호화 알고리즘 및 체인, 패딩 기법을 이용하여 데이터를 암호화하는 함수이다.주어진 알고리즘에 맞는 키의 크기와 블록의 크기를 설정해야 올바르게 동작한다. 알고리즘 각각에 따른 키의 크기와 블록의 크기는 위의 표에 언급되어 있으니 참고하기 바란다.
ENCRYPT 프로시저와 함수의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_CRYPTO.ENCRYPT(
src IN RAW,
cipher_type IN PLS_INTEGER,
key IN RAW,
init_vector IN RAW DEFAULT NULL)
RETURN RAW
- 파라미터
- 반환값암호화된 데이터이다.
- 예외 상황
- 예제
DECLARE
data RAW(256);
key RAW(16);
encrypted_data RAW(256);
decrypted_data RAW(256);
iv RAW(256);
BEGIN
data := '0102030405AE030D0102030405AE030D';
key := '0A123B8E002CD3FFA021B3E800C23DFF';
iv := '00000000000000000000000000000000';
encrypted_data := DBMS_CRYPTO.ENCRYPT(
src => data,
cipher_type => DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC +
DBMS_CRYPTO.PAD_PKCS5,
key => key,
init_vector => iv);
END;
사용자가 명시한 알고리즘을 이용하여 임의의 길이의 데이터를 고정길이의 해시값으로 변환하는 함수이다.
HASH 함수의 세부 내용은 다음과 같다.
- 프로토타입
DBMS_CRYPTO.HASH(
src IN RAW,
hash_type IN PLS_INTEGER)
RETURN RAW
- 파라미터
- 예외 상황
- 예제
DECLARE
input varchar2(100);
hash_val raw(20);
BEGIN
input := 'DBMS_CRYPTO.HASH 테스트';
hash_val := DBMS_CRYPTO.HASH(
src => utl_raw.cast_to_raw(input),
hash_type => DBMS_CRYPTO.HASH_SH1);
END;