DB와암호화 패턴

1,571 views

Published on

암호화 솔루션과 DB 변경

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,571
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

DB와암호화 패턴

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

×