DBMS 1

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

DBMS_CRYPTO

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_CRYPTO
작성자
dataonair
작성일
2021-02-18 10:29
조회
2510



제3장DBMS_CRYPTO




내용 목차






3.1. 개요

3.2. 암호화/복호화 알고리즘 및 체인, 패딩

3.3. 해시 알고리즘

3.4. 프로시저와 함수


3.4.1. DECRYPT

3.4.2. ENCRYPT

3.4.3. HASH





3.1. 개요




DBMS_CRYPTO은 데이터 암복호화 및 인증 등에 쓰이는 해시 알고리즘을 제공하는 패키지이다. 이 패키지의 암복호화 알고리즘들은 모두 키를 사용하는데, 이와 같이 키를 사용하는 암호화 알고리즘에서는 키를 안전하게 관리하는 것이 무엇보다 중요하다.암호화 알고리즘에서 키를 관리하는 방법은DBMS_CRYPTO챕터를 참고하기 바란다.해시 알고리즘은 임의의 길이의 데이터를 고정길이의 해시값으로 변환한다.




3.2. 암호화/복호화 알고리즘 및 체인, 패딩




DBMS_CRYPTO은 데이터의 암호화 및 복호화를 위해 DES(Data Encryption Standard), 3DES(Triple DES), AES(Advanced Encryption Standard) 등의 더욱 다양한 알고리즘 및 블록 패딩 방식을 지원하고 있다.DBMS_CRYPTO보다 많은 종류의 알고리즘을 사용하므로, 이 패키지를 사용할 것을 권장한다.각 알고리즘, 체인, 패딩 방식은 아래와 같다.

  • 알고리즘

    알고리즘 설명
    DES 64 bit의 블록 단위로 나누어 각각을 56 bit의 키를 사용하는 알고리즘이다. 그 동안 널리 사용되어 왔으나 최근에는 보안성이 보장되지 않아 점차 사용 빈도가 줄어들고 있다.대칭 키를 사용하는 알고리즘이다.
    3DES 하나의 데이터에 DES 알고리즘을 두 번 내지 세 번 반복하여 적용하는 알고리즘이다. 각각 112(56 * 2) bit와 168(56 * 3) bit 키를 사용한다. DES 알고리즘과 마찬가지로 대칭 키를 사용하는 알고리즘이다.다른 대칭 키를 사용하는 알고리즘에 비해 암호화 및 복호화를 하는 시간이 많이 필요하다는 단점이 있다.
    AES 128 bit의 블록 단위로 나누어 각각을 128, 192, 혹은 256 bit의 키를 사용하는 알고리즘이다. DES 방식보다 강력한 알고리즘으로 설계되었으며, 사실상 암호화 표준으로 자리 잡을 것으로 보인다.
    RC4 RSA 보안을 위해 로널드 라이베스트가 만든 스트림 암호화 방식으로, 무작위 치환에 기반을 두고 있다. 바이트 단위 연산을 하기 때문에 비트 단위 연산을 하는 다른 스트림 암호화에 비해 속도가 빠르다.SSL/TLS(Secure Sockets Layer / Transport Layer Security) 및 무선랜 표준 IEEE 802.11 WEP(Wired Equivalent Privacy) 프로토콜 등에서 사용된다.
    ARIA 대한민국의 국가보안기술연구소에서 개발한 블록 암호화 알고리즘으로, AES처럼 128 bit의 블록 단위로 나누어 각각을 128, 192, 혹은 256 bit의 키를 사용한다.Involutional SPN 구조를 갖기 때문에 경량 환경 및 하드웨어 구현에 최적화되어 있다.
  • 체인(chaining) 방식

    체인 방식 설명
    ECB(Electronic Codebook) 각 원본 데이터 블록들이 각각 별개로 암호화된다.
    CBC(Cipher Block Chaining) 현재 블록이 바로 앞에 암호화된 블록의 데이터와 XOR 연산을 거친 후 암호화된다.ECB 방식에서처럼 동일한 원본이 있을 경우 동일한 암호문이 생성되는 위험을 방지하기 위함이다.
    CFB(Cipher-Feedback) CBC와 유사하지만, 비트 단위로 암호화하면서 쉬프트시키는 방식으로, 스트림 암호화 방식에 가깝다.그러므로 블록 크기보다 작은 단위의 데이터의 암호화도 가능해진다.
    OFB(Output-Feedback) 블록 암호가 동기화된 스트림 암호처럼 동작하게 한다.CFB와 유사하지만, 다음 블록을 위한 키배열 조합에 있어서 현재 블록의 암호문이 영향을 끼치지 않으므로, 현재 블록 암호화에서 오류가 발생해도 다음 블록에 영향을 끼치지 않는 장점이 있다.
  • 패딩(padding) 방식

    패딩 방식 설명
    PKCS5 PKCS #5 (Password-Based Cryptography Standard) 표준에 따르는 패딩 방식이다.
    NONE 패딩을 사용하지 않는다. 이러할 경우 데이터가 단위 블록의 크기(128 bit)의 배수가 아니면 암호화가 불가능하여 에러를 리턴하므로, 반드시 데이터의 크기를 확인해야 한다.
    ZERO 마지막 블록의 남는 바이트들을 0으로 채운다. 문자열과 같이 0의 값으로 끝을 체크하는 데이터에만 사용해야 한다.





3.3. 해시 알고리즘




DBMS_CRYPTO은 임의의 길이의 데이터를 고정 길이의 해시값으로 변환하는데, 해시값을 만드는 것은 쉽지만, 해시값을 원래의 데이터로 복원하는 일은 지극히 어렵게 함으로써, 데이터의 안전성을 보장한다.데이터 변경 여부 체크 및 암호 인증 등 인증(authentication) 작업에 주로 사용된다.MD4, MD5, SHA-1를 통해 더욱 다양한 알고리즘 및 블록 패딩 방식을 지원하고 있다. 각 알고리즘은 아래와 같다.

알고리즘 설명
SHA-1(Secure Hash Algorithm 1) SHA는 미국 NIST에 의해 개발된 SHS(secure hash standard) 내에 정의된 알고리즘으로, 길이 264bit 이하의 메시지를 160bit 길이의 축약된 메시지로 만들어낸다.MD5보다는 다소 느리지만, 대규모 메시지 요약들이 폭력적 충돌 및 도치 공격을 받을 때, 좀더 안전하게 지켜준다.
MD5(Message Digest 5) 입력 데이터 (길이에 상관없는 하나의 메시지)로부터 128bit 메시지 축약을 만듦으로써 데이터 무결성을 검증하는 데 사용되는 알고리즘이다.MD4의 확장판인데, MD4에 비해 속도가 빠르지는 않지만, 데이터 보안성에 있어 더 많은 확신을 제공한다.
MD4(Message Digest 4) MD4는 MD5의 초기 버전으로서, 입력 데이터 (길이에 상관없는 하나의 메시지)로부터 128bit 메시지 축약을 만듦으로써 데이터 무결성을 검증하는데 사용되는 알고리즘이다





3.4. 프로시저와 함수




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




3.4.1. DECRYPT




사용자가 명시한 암호화 알고리즘 및 체인, 패딩 기법을 이용하여 암호화된 데이터를 복호화하는 함수이다.주어진 알고리즘에 맞는 키의 크기와 블록의 크기를 설정해야 올바르게 동작한다. 알고리즘 각각에 따른 키의 크기와 블록의 크기는 위의 표에 언급되어 있으니 참고하기 바란다.

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

  • 프로토타입
    DBMS_CRYPTO.DECRYPT(
    src IN RAW,
    cipher_type IN PLS_INTEGER,
    key IN RAW,
    init_vector IN RAW DEFAULT NULL)
    RETURN RAW
  • 파라미터

    파라미터 설명
    src 복호화할 데이터이다.
    cipher_type 사용할 암호화 알고리즘, 체인, 패딩 기법이다.
    key 복호화하기 위해 주어진 키 값이다.
    init_vector 초기화 벡터이다. NULL이면 0으로 채워진 초기화 벡터를 사용한다.
  • 반환값복호화된 데이터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_NTH_ARGUMENT cipher_type 값이 잘못 설정된 경우이다.
    INVALID_INPUT input_data의 길이가 8의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 필요한 크기보다 작은 경우이다.
  • 예제
    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;





3.4.2. ENCRYPT




사용자가 명시한 암호화 알고리즘 및 체인, 패딩 기법을 이용하여 데이터를 암호화하는 함수이다.주어진 알고리즘에 맞는 키의 크기와 블록의 크기를 설정해야 올바르게 동작한다. 알고리즘 각각에 따른 키의 크기와 블록의 크기는 위의 표에 언급되어 있으니 참고하기 바란다.

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

  • 프로토타입
    DBMS_CRYPTO.ENCRYPT(
    src IN RAW,
    cipher_type IN PLS_INTEGER,
    key IN RAW,
    init_vector IN RAW DEFAULT NULL)
    RETURN RAW
  • 파라미터

    파라미터 설명
    src 암호화할 데이터이다.
    cipher_type 사용할 암호화 알고리즘, 체인, 패딩 기법이다.
    key 암호화하기 위해 주어진 키 값이다.
    init_vector 초기화 벡터이다. NULL이면 0으로 채워진 초기화 벡터를 사용한다.
  • 반환값암호화된 데이터이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_NTH_ARGUMENT cipher_type 값이 잘못 설정된 경우이다.
    INVALID_INPUT ZERO 패딩 방식일 때, input_data의 길이가 블록 크기의 배수가 아닌 경우이다.
    KEY_TOO_SHORT key 값의 길이가 필요한 크기보다 작은 경우이다.
  • 예제
    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;





3.4.3. HASH




사용자가 명시한 알고리즘을 이용하여 임의의 길이의 데이터를 고정길이의 해시값으로 변환하는 함수이다.

HASH 함수의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_CRYPTO.HASH(
    src IN RAW,
    hash_type IN PLS_INTEGER)
    RETURN RAW
  • 파라미터

    파라미터 설명
    src 원본 데이터이다.
    hash_type 사용할 해시 알고리즘이다.
  • 예외 상황

    예외 상황 설명
    INVALID_ARGUMENT 파라미터 중 하나라도 NULL인 경우이다.
    INVALID_NTH_ARGUMENT hash_type 값이 잘못 설정된 경우이다.
  • 예제
    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;