SlideShare une entreprise Scribd logo
1  sur  10
암호화란  - 암호화란 주민등록번호, 계좌번호, 카드번호 등 외부에 노출이 되면 위험한 정보를 인식할 수 없는 형태로 변경하여 저장하는 것 - 암호화는 복호화를 전제로 함으로 조건을 제공하는 사람은 암호화되지 않은 원래의 정보를 제시하지만 내부적으로는 암호화되어서 비교되어야 함  - 암호화 표준 : 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 모두 지원)
암호화란 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 ----------------------------------------------
암호화 제품의 방식 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 실행 ,[object Object]
 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_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 ;/
암호화 제품의 방식 필요한 기법 암호화 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 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;
암호화 제품의 방식 기본 개념 대상 테이블변화 : value and length 암호화 이전 암호화 이후 PLUG-IN          SQL 변경 없음. 사용자는 인식 못함 TABLE “고객_TAB” SELECT 주민번호 FROM 고객; 복호화 VIEW “고객” 암호화 VIEW “고객” TRIGGER UPDATE, INSERT, DELETE 고객; 암호화 모듈 OPEN

Contenu connexe

Tendances

JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
우영 주
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
희동 강
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴
Suan Lee
 
6장 performance of game_최준혁_2
6장 performance of game_최준혁_26장 performance of game_최준혁_2
6장 performance of game_최준혁_2
Mark Choi
 

Tendances (17)

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

Similaire à DB와암호화 패턴

회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy
Jc Kim
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+process
Hong Jae Kwon
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
Sang Don Kim
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
Ji Hun Kim
 

Similaire à DB와암호화 패턴 (20)

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

Plus de Kyung Sang Jang (19)

Oracle History #14
Oracle History #14Oracle History #14
Oracle History #14
 
O10g miscellaneous 17
O10g miscellaneous 17O10g miscellaneous 17
O10g miscellaneous 17
 
O10g flashback 13
O10g flashback 13O10g flashback 13
O10g flashback 13
 
O10g data control_10
O10g data control_10O10g data control_10
O10g data control_10
 
O10g bak rec_15
O10g bak rec_15O10g bak rec_15
O10g bak rec_15
 
O10g asm 16
O10g asm 16O10g asm 16
O10g asm 16
 
O10g app support_11
O10g app support_11O10g app support_11
O10g app support_11
 
O10g security 12
O10g security 12O10g security 12
O10g security 12
 
Oracle History #7
Oracle History #7Oracle History #7
Oracle History #7
 
Oracle History #8
Oracle History #8Oracle History #8
Oracle History #8
 
Oracle History #9
Oracle History #9Oracle History #9
Oracle History #9
 
Oracle History #6
Oracle History #6Oracle History #6
Oracle History #6
 
Oracle History #5
Oracle History #5Oracle History #5
Oracle History #5
 
Oracle History #4
Oracle History #4Oracle History #4
Oracle History #4
 
OracleHistory3
OracleHistory3OracleHistory3
OracleHistory3
 
OracleHistory2
OracleHistory2OracleHistory2
OracleHistory2
 
OracleHistory1
OracleHistory1OracleHistory1
OracleHistory1
 
NO PARALLEL DML
NO PARALLEL DMLNO PARALLEL DML
NO PARALLEL DML
 
11g nf sql_anlz
11g nf sql_anlz11g nf sql_anlz
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. 암호화란 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에 어떤 변경이 필요한지에 대한 관점으로만 봐주시기 바랍니다.