SlideShare a Scribd company logo
암호화란 - 암호화란 주민등록번호, 계좌번호, 카드번호 등 외부에 노출이 되면 위험한정보를 인식할 수 없는 형태로 변경하여 저장하는 것- 암호화는 복호화를 전제로 함으로 조건을 제공하는 사람은 암호화되지 않은원래의 정보를 제시하지만 내부적으로는 암호화되어서 비교되어야 함 - 암호화 표준 : 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 모두 지원)
암호화란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----------------------------------------------
암호화 제품의 방식3rd Party Vendor : 암호화 key가 data로 관리되면 안 된다  1. PLUG-IN      - 암호화 모듈을 DATA 와 결합 (Tightly Coupled)      - Stored Procedure를 통해 암호화 모듈을 관리      - Database에 구조적인 변화가 필요   2. API      - 암호화 모둘이application에 존재 (Loosely Coupled)      - AP 소스에서 관리함으로 binary 형태로 존재(노출이 안됨)      - 관련 프로그램들의 소스 변경이 필요   3. ?  EX. 암호화 데이터에 대한 성능저하엔코아 제품 중 암호화 필요성 있는 부분?
암호화 제품의 방식필요한 기법Instead of Trigger (Oralce8 부터 소개)       view에 trigger를 생성하여 view의 base table에 DML 실행 always a row-level trigger (not statement-level)
 can read OLD and NEW values, but cannot change them
 cannot be conditional  EX. create or replace trigger trg_nameWHEN (NEW.NAME IS NOT NULL)REF. trigger level           - Database level           - DDL           - DML           - Instead of
암호화 제품의 방식필요한 기법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 ;/
암호화 제품의 방식필요한 기법암호화 VIEW 예SELECT…..tostdrstax, tostdfinsplamt, bankcd,dbenc.decore (private_no,                                      ‘SCHEMA',                                      ‘고객_TAB',                                      ‘JUMIN'),         ………FROM 고객
암호화 제품의 방식필요한 기법암호화 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;
암호화 제품의 방식기본 개념대상 테이블변화 : value and length암호화 이전암호화 이후PLUG-IN         SQL 변경 없음. 사용자는 인식 못함TABLE “고객_TAB”SELECT 주민번호 FROM 고객;복호화VIEW “고객”암호화VIEW “고객” TRIGGERUPDATE, INSERT, DELETE 고객;암호화 모듈 OPEN

More Related Content

PDF
암달의 법칙과 쿼리튜닝 기초
PPTX
Programming Game AI by Example. Ch7. Raven
PDF
Es2015 Simple Overview
PPTX
AIbyExample - Ch7 raven. version 0.8
PPTX
Startup JavaScript 3 - 조건문, 반복문, 예외처리
PDF
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
PDF
React로 TDD 쵸큼 맛보기
암달의 법칙과 쿼리튜닝 기초
Programming Game AI by Example. Ch7. Raven
Es2015 Simple Overview
AIbyExample - Ch7 raven. version 0.8
Startup JavaScript 3 - 조건문, 반복문, 예외처리
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
React로 TDD 쵸큼 맛보기

What's hot (17)

PDF
MySQL 인덱스의 기초
PDF
JavaScript Promises
PPTX
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
PPTX
효율적인Sql작성방법 2주차
PDF
데이터베이스패턴
PPTX
6장 performance of game_최준혁_2
PDF
Laravel 로 배우는 서버사이드 #4
PPTX
Promise 패턴 공부
PDF
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
PPTX
SQL쿼리튜닝팁 - 허성
PPTX
개발자들이 흔히 실수하는 SQL 7가지
PPT
Boost pp 20091102_서진택
PPT
3ds maxscript 튜토리얼_20151206_서진택
PDF
Hello Swift 4/5 : Closure and Enum
PPTX
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
PDF
PostgreSQL로 배우는 SQL 기초
PDF
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
MySQL 인덱스의 기초
JavaScript Promises
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
효율적인Sql작성방법 2주차
데이터베이스패턴
6장 performance of game_최준혁_2
Laravel 로 배우는 서버사이드 #4
Promise 패턴 공부
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
SQL쿼리튜닝팁 - 허성
개발자들이 흔히 실수하는 SQL 7가지
Boost pp 20091102_서진택
3ds maxscript 튜토리얼_20151206_서진택
Hello Swift 4/5 : Closure and Enum
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
PostgreSQL로 배우는 SQL 기초
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
Ad

Similar to DB와암호화 패턴 (20)

PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
PDF
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PPT
Device driver
PPT
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
PDF
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
PDF
회사에서 써보는 SQLAlchemy
PPTX
Android+init+process
PPTX
Tips and experience of DX12 Engine development .
PDF
NodeJs로 디바이스 통신하기
PDF
망고210 android fastboot nand write 방법
PDF
[D2 campus seminar]개발자가 꼭 알아야 할 보안이야기
PDF
7가지 동시성 모델 람다아키텍처
PDF
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
PDF
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
PPTX
읽기 좋은 코드가 좋은 코드다 Part one
PPTX
Tips and experience_of_dx12_engine_development._ver_1.2
PPT
NDC11_김성익_슈퍼클래스
PDF
하이퍼레저 패브릭 데이터 구조
PDF
ES6 for Node.js Study 2주차
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
Device driver
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
회사에서 써보는 SQLAlchemy
Android+init+process
Tips and experience of DX12 Engine development .
NodeJs로 디바이스 통신하기
망고210 android fastboot nand write 방법
[D2 campus seminar]개발자가 꼭 알아야 할 보안이야기
7가지 동시성 모델 람다아키텍처
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
읽기 좋은 코드가 좋은 코드다 Part one
Tips and experience_of_dx12_engine_development._ver_1.2
NDC11_김성익_슈퍼클래스
하이퍼레저 패브릭 데이터 구조
ES6 for Node.js Study 2주차
Ad

More from Kyung Sang Jang (19)

DOC
Oracle History #14
DOC
O10g miscellaneous 17
DOC
O10g flashback 13
DOC
O10g data control_10
DOC
O10g bak rec_15
DOC
O10g asm 16
DOC
O10g app support_11
DOC
O10g security 12
DOC
Oracle History #7
DOC
Oracle History #8
DOC
Oracle History #9
PDF
Oracle History #6
PDF
Oracle History #5
DOC
Oracle History #4
DOC
OracleHistory3
DOC
OracleHistory2
DOC
OracleHistory1
PPTX
NO PARALLEL DML
PPTX
11g nf sql_anlz
Oracle History #14
O10g miscellaneous 17
O10g flashback 13
O10g data control_10
O10g bak rec_15
O10g asm 16
O10g app support_11
O10g security 12
Oracle History #7
Oracle History #8
Oracle History #9
Oracle History #6
Oracle History #5
Oracle History #4
OracleHistory3
OracleHistory2
OracleHistory1
NO PARALLEL DML
11g nf sql_anlz

DB와암호화 패턴

  • 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 ;/
  • 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 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에 어떤 변경이 필요한지에 대한 관점으로만 봐주시기 바랍니다.