1. 암호화란 - 암호화란 주민등록번호, 계좌번호, 카드번호 등 외부에 노출이 되면 위험한정보를 인식할 수 없는 형태로 변경하여 저장하는 것- 암호화는 복호화를 전제로 함으로 조건을 제공하는 사람은 암호화되지 않은원래의 정보를 제시하지만 내부적으로는 암호화되어서 비교되어야 함 - 암호화 표준 : DES, MD5, DES3 대개의 경우 이런 암,복호 체계는DES(Data Encryption Standard) MD5(Message Digest 5) DES가 확장된 DES3(Triple DES)가 많이 사용되고 있다. (2004년 기준) Oracle 제공 암호화 (이하 oracle9i 기준) - Oracle9i New Features로 암호화 모듈이 제공되기 시작 - 모듈은 stored procedure인 “dbms_obfuscation_toolkit package“를 이용하여 제시 (DES, MD5, DES3 모두 지원)
2. 암호화란UsageSQL> create or replace procedure pwd_encdec (pwd varchar2, key varchar2) is 2 vr_inraw raw(128) := utl_raw.cast_to_raw(pwd); 3 vr_keyraw raw(128) := utl_raw.cast_to_raw(key); 4 vr_encraw raw(2048); 5 vr_decraw raw(2048); 6 begin 7 dbms_output.put_line('----------------------------------------------'); 8 dbms_output.put_line('your pwd (converted with to raw type) : ' || utl_raw.cast_to_varchar2(vr_inraw)); 9 dbms_output.put_line('your key (converted with to raw type) : ' || utl_raw.cast_to_varchar2(vr_keyraw)); 10 dbms_output.put_line('----------------------------------------------'); 11 dbms_obfuscation_toolkit.desencrypt( input => vr_inraw, key => vr_keyraw, encrypted_data => vr_encraw); 12 dbms_output.put_line('encrypted hex value : ' || rawtohex(vr_encraw)); 13 dbms_obfuscation_toolkit.desdecrypt( input => vr_encraw, key => vr_keyraw, decrypted_data => vr_decraw); 14 dbms_output.put_line('decrypted pwd : ' || utl_raw.cast_to_varchar2(vr_decraw)); 15 dbms_output.put_line('----------------------------------------------'); 16 end; 17 /SQL> set serveroutput onSQL> exec pwd_encdec('pwd12345', 'key56789');----------------------------------------------your pwd (converted with to raw type) : pwd12345your key (converted with to raw type) : key56789----------------------------------------------encrypted hex value : 8AE1B93004764662decrypted pwd : pwd12345----------------------------------------------
3. 암호화 제품의 방식3rd Party Vendor : 암호화 key가 data로 관리되면 안 된다 1. PLUG-IN - 암호화 모듈을 DATA 와 결합 (Tightly Coupled) - Stored Procedure를 통해 암호화 모듈을 관리 - Database에 구조적인 변화가 필요 2. API - 암호화 모둘이application에 존재 (Loosely Coupled) - AP 소스에서 관리함으로 binary 형태로 존재(노출이 안됨) - 관련 프로그램들의 소스 변경이 필요 3. ? EX. 암호화 데이터에 대한 성능저하엔코아 제품 중 암호화 필요성 있는 부분?
4. 암호화 제품의 방식필요한 기법Instead of Trigger (Oralce8 부터 소개) view에 trigger를 생성하여 view의 base table에 DML 실행 always a row-level trigger (not statement-level)
5. can read OLD and NEW values, but cannot change them
6. cannot be conditional EX. create or replace trigger trg_nameWHEN (NEW.NAME IS NOT NULL)REF. trigger level - Database level - DDL - DML - Instead of
7. 암호화 제품의 방식필요한 기법Instead of Trigger 예create or replace trigger emp_trginstead of insert on best_mem_view for each rowbegin insert into member values (:new.employee.memid, :new.employee.fname, :new.employee.lname, :new.employee.mem_desc) ; insert into bestmem values (:new.employee.memid, :new.best_point, :new.salary, :new.company_nm) ; end ;/
9. 암호화 제품의 방식필요한 기법암호화 trigger 예DECLARE…..ePrivEXCEPTION;V_JUMINO VARCHAR2(13);BEGIN if (inserting) then…..….. IF :new.JUMINIS NOT NULL THENV_JUMINNO :=dbenc.encore(:new.private_no,'SCHEMA','TABLENAME',‘JUMIN','INSERT'); END IF; else Raise ePriv; ….elsif (updating) then ….elsif (deleting) then………..end if;EXCEPTION WHEN … THEN RAISE_APPLICATION_ERROR(-20003, 'IINSERT ERROR');END;
10. 암호화 제품의 방식기본 개념대상 테이블변화 : value and length암호화 이전암호화 이후PLUG-IN SQL 변경 없음. 사용자는 인식 못함TABLE “고객_TAB”SELECT 주민번호 FROM 고객;복호화VIEW “고객”암호화VIEW “고객” TRIGGERUPDATE, INSERT, DELETE 고객;암호화 모듈 OPEN
11. 암호화 제품의 방식기본 개념API AP 변경 필요암호화SVC(고객)TABLE “고객”API복호화암호화 모듈이 AP로 감싸지는 형태
12. 끝지극히 개인적인 경험을 바탕으로 정리한 부분이라 어떤 학술적 정의나암호화 관련 전문가의 정보를 바탕으로 하지 않았음을 알려드립니다.중요한 것은 DB에 어떤 변경이 필요한지에 대한 관점으로만 봐주시기 바랍니다.