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. 암호화란 Usage SQL> 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 on SQL> exec pwd_encdec('pwd12345', 'key56789'); ---------------------------------------------- your pwd (converted with to raw type) : pwd12345 your key (converted with to raw type) : key56789 ---------------------------------------------- encrypted hex value : 8AE1B93004764662 decrypted 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.
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_trg instead 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 ;/
8. 암호화 제품의 방식 필요한 기법 암호화 VIEW 예 SELECT ….. tostdrstax, tostdfinsplamt, bankcd, dbenc.decore (private_no, ‘SCHEMA', ‘고객_TAB', ‘JUMIN' ), ……… FROM 고객
9. 암호화 제품의 방식 필요한 기법 암호화 trigger 예 DECLARE ….. ePrivEXCEPTION; V_JUMINO VARCHAR2(13); BEGIN if (inserting) then ….. ….. IF :new.JUMINIS NOT NULL THEN V_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 “고객” TRIGGER UPDATE, INSERT, DELETE 고객; 암호화 모듈 OPEN
11. 암호화 제품의 방식 기본 개념 API AP 변경 필요 암호화 SVC(고객) TABLE “고객” API 복호화 암호화 모듈이 AP로 감싸지는 형태
12. 끝 지극히 개인적인 경험을 바탕으로 정리한 부분이라 어떤 학술적 정의나 암호화 관련 전문가의 정보를 바탕으로 하지 않았음을 알려드립니다. 중요한 것은 DB에 어떤 변경이 필요한지에 대한 관점으로만 봐주시기 바랍니다.