오라클 sql과 pl/sql을 다루는 기술 - 19장.데이터 암호화, 유틸리티
TRANSCRIPT
The Technique of Java Programming
들어가기
이 자료는 교육 등 비영리 목적으로만 사용해야 합니다 !!!!
만든사람 및 책 소개
• 오라클 SQL과 PL/SQL을 다루는 기술 : 오라클 프로그래밍 , 현장 밀착 입문서는 따로 있다 !
• 홍형경
• 주요 저서 : - 〈뇌를 자극하는 오라클 프로그래밍 SQL&PL/SQL
- Head First 시리즈를 비롯해 다수의 책 번역
데이터 암호화 , 유틸리티넷째 마당 . 실무 능력을 높이는 오라클 프로그래밍 기법
19장
01 데이터 암호화
유틸리티 프로그램02
데이터 암호화 , 유틸리티 프로그램
01
데이터 암호화란 ?
데이터 암호화
● 민감하고 중요한 데이터를 암호화해 테이블에 저장하고 조회 시 복호화 하는 일련의 과정 ● “ 데이터를 암호화할 만한 좋은 이유가 많긴 하지만 , 데이터를 암호화하지 말아야 할 이유도 많다 . 암호화는 모든 보안문제를 해결해 주지 않으며 , 일부는 문제를 더 악화시킬 수 있다”
● 오라클에서는 시스템 패키지를 이용해 암호화 , 복호화 수행
● DBMS_CRYPTO 패키지
사용 전 권한 할당 : grant execute on DBMS_CRYPTO to public;
01
암호화 알고리즘
데이터 암호화
● DES (Data Encryption Standard) ● 3DES
● AES (Advanced Encryption Standard)
● RC4 (Advanced Encryption Standard)
● MD5 (Message-Digest algorithm5) 와 MD4
● SHA-1 (Secure Hash Algorithm-1)
● MAC(Message Authentication Code, 메시지인증코드 )
01
블록 암호화
데이터 암호화
● 암호화 대상 데이터의 길이가 블록 길이보다 크면 이 데이터를 블록 단위로 잘라
암호화 알고리즘을 적용해 암호화 하는 방식
● ECB (Electric CodeBook)
● CBC (Cipher Block Chaining)
● CFB (Cipher-FeedBack)
● OFB (Output-FeedBack)
● CTR (CounTeR)
01
DBMS_CRYPTO 패키지
데이터 암호화
● 암호화 알고리즘 상수
ㆍ ENCRYPT_DES : DES 암호화 알고리즘 . 유효키 길이는 56 비트 .
ㆍ EMCRYPT_3DES_2KEY : DES 알고리즘을 2 키로 3 번 블록을 암호화한다 . 유효키 길이는 112 비트 .
ㆍ ENCRYPT_3DES : DES 알고리즘을 사용해 블록을 3 번 암호화한다 .
ㆍ ENCRYPT_AES128 : AES 블록 암호화로 128 비트 키를 사용한다 .
ㆍ ENCRYPT_AES192 : AES 블록 암호화로 192 비트 키를 사용한다 .
ㆍ ENCRYPT_AES256 : AES 블록 암호화로 256 비트 키를 사용한다 .
ㆍ ENCRYPT_RC4 : 스트림 암호화 방식 . 각 세션에 따라 무작위로 유일한 키를 생성한다 .
01
DBMS_CRYPTO 패키지
데이터 암호화
● 블록 암호화 모드 상수
ㆍ CHAIN_ECB : ECB 모드
ㆍ CHAIN_CBC : CBC 모드
ㆍ CHAIN_CFB : CFB 모드
ㆍ CHAIN_OFB : OFB 모드
01
DBMS_CRYPTO 패키지
데이터 암호화
● 패딩 관련 상수
ㆍ PAD_PKCS5 : PKCS5( 비밀번호 기반 암호화 표준
Password-based Encryption Standard) 로 이루어진 패딩
ㆍ PAD_NONE : 패딩이 없음을 의미
ㆍ PAD_ZERO : 0 으로 이루어진 패딩
01
DBMS_CRYPTO 패키지
데이터 암호화
● 암호화 슈트 관련 상수
ㆍ DES_CBC_PKCS5 : ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5 가 결합된 슈트 .ㆍ DES3_CBC_PKCS5 : ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5 가 결합된 슈트 .
● 암호화 해시 함수 관련 상수
ㆍ HASH_MD4 : MD4 . 128 비트 해시 .ㆍ HASH_MD5 : MD5. 128 비트 해시 .ㆍ HASH_SH1 : SH1. 160 비트 해시 .
● MAC 함수 관련 상수
ㆍ HMAC_MD5 : 해시값을 검증하기 위해 비밀키를 사용하는 점만 제외하면 MD5 와 같다 . ㆍ HMAC_SH1 : 해시값을 검증하기 위해 비밀키를 사용하는 점만 제외하면 SHA1 과 같다 .
01
ENCRYPT 함수
데이터 암호화
● 키와 암호화 대상 데이터를 입력 받아 암호화 한 뒤 그 결과 반환
● 구문
DBMS_CRYPTO.ENCRYPT( src IN RAW, -- 암호화할 대상 데이터 typ IN PLS_INTEGER, -- 암호화에 사용될 슈트 key IN RAW, -- 암호화 키 iv IN RAW DEFAULT NULL ) -- 초기화 벡터 RETURN RAW;
● 암호화 대상이 VARCHAR2 타입이면 AL32UTF8 문자셋의 VARCHAR2 로 변환해야 함
UTL_I18N.STRING_TO_RAW (‘ 입력문자열’ , 'AL32UTF8');
01
ENCRYPT 프로시저
데이터 암호화
● ENCRYPT 함수와 같은 기능 , 암호화 결과를 OUT 변수에 담는다
● 구문
DBMS_CRYPTO.ENCRYPT( dst IN OUT NOCOPY BLOB, -- 암호화 결과 src IN BLOB, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL);
01
ENCRYPT 프로시저
데이터 암호화
● 매개변수가 CLOB 타입인 다른 버전의 프로시저가 있음
DBMS_CRYPTO.ENCRYPT( dst IN OUT NOCOPY BLOB, src IN CLOB CHARACTER SET ANY_CS, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL);
01
DECRYPT 함수와 DECRYPT 프로시저
데이터 암호화
● 암호화된 데이터를 매개변수로 받아 복호화 수행
● 복호화를 위해서는 암호화 시 사용했던 암호화 키와 슈트를 사용해야 함
● DECRYPT 함수 구문
DBMS_CRYPTO.DECRYPT( src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL) RETURN RAW;
● RAW 타입 복호화 결과 ‘ AL32UTF8’ 문자셋의 VARCHAR2 로 변환
UTL_I18N.RAW_TO_CHAR (‘ 입력문자열’ , 'AL32UTF8');
01
DECRYPT 함수와 DECRYPT 프로시저
데이터 암호화
● DECRYPT 프로시저 구문
DBMS_CRYPTO.DECRYPT( dst IN OUT NOCOPY BLOB, src IN BLOB, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL);
01
HASH 함수
데이터 암호화
● MD4, MD5, SHA-1 을 사용해 해시 값을 생성해 반환하는 함수 , 3 가지 버전
DBMS_CRYPTO.HASH( src IN RAW, typ IN PLS_INTEGER) RETURN RAW; DBMS_CRYPTO. HASH ( src IN BLOB, typ IN PLS_INTEGER) RETURN RAW; DBMS_CRYPTO. HASH ( src IN CLOB CHARACTER SET ANY_CS, typ IN PLS_INTEGER) RETURN RAW;
01
MAC 함수
데이터 암호화
● HASH 함수와 비슷하나 매개변수로 사용할 비밀 키를 더 입력 받는다
DBMS_CRYPTO.MAC ( src IN RAW, typ IN PLS_INTEGER, key IN RAW) RETURN RAW; DBMS_CRYPTO.MAC ( src IN BLOB, typ IN PLS_INTEGER key IN RAW) RETURN RAW; DBMS_CRYPTO.MAC ( src IN CLOB CHARACTER SET ANY_CS, typ IN PLS_INTEGER key IN RAW) RETURN RAW;
01
RANDOMBYTES 함수
데이터 암호화
● 암호화 요건을 충족시키는 안전한 무작위 난수 바이트 (RAW 타입 ) 값을 반환
● 보통 암호화 키를 생성할 때 사용
● 구문
DBMS_CRYPTO.RANDOMBYTES ( number_bytes IN POSITIVE) -- 생성할 무작위 난수 바이트 수 RETURN RAW;
01
기타
데이터 암호화
● HASH, MAC 함수는 사용자 아이디와 비밀번호를 체크하는데 주로 사용됨
● 암호화에 있어서는 암호화 키 관리가 핵심임
키를 잃어버리거나 외부 유출 시 암호화된 데이터는 무용지물
● 안전한 키 관리 방법
ㆍ 암호화 키를 관리하는 패키지 생성 후 암호화 키를 패키지 상수로 선언
ㆍ DBMS_DDL.CREATE_WRAPPED 시스템 패키지를 사용해 암호하 키 보관 패키지를
감춘다 해당 패키지 내용을 볼 수 없음
02
나만의 유틸리티 프로그램
유틸리티 프로그램
● 지금까지 이 책에서 배운 내용을 토대로 유용하게 사용할 수 있는 유틸리티 프로그램을
작성해 보자 .