by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

14S_암호화의 유형




암호화의 유형

  • 동적 데이터 : 네트워크를 통해 이동 데이터
  • 정적 데이터 : 데이터 파일 내에 저장된 데이터

동적 데이터

  • 데이터베이스로 부터 나오는 정보의 변화하는 스트림을 연속적으로 암호화해야 하고, 클라이언트에 도착했을 때는 복호화
  • 부인방지 데이터
  • 데이터 정확도 보호
  • 데이터 재생 방지

정적 데이터

일반 케이스 설정
SQL> create tablespace new_in_the_clear datafile 'D:\app\LG\data_file\new_in_the_clear.dbf' size 1m;

테이블스페이스가 생성되었습니다.

SQL> create table new_t
  2  ( id        varchar2( 30 ) primary key,
  3    ssn       varchar2( 11 ) ,
  4    address   varchar2( 80 ) ,
  5    credit_card   varchar2( 30 )
  6  )tablespace new_in_the_clear;

테이블이 생성되었습니다.

SQL> insert into new_t( id, ssn, address, credit_card ) values( 'Lock for me', '123-45-6789', '123 Main Street', '1234-5678-9876-5432' );

1 개의 행이 만들어졌습니다.

SQL> commit;

SQL> alter system checkpoint
  2  ;

시스템이 변경되었습니다.

D:\app\LG>strings  -a D:\app\LG\data_file\new_in_the_clear.dbf

Strings v2.51
Copyright (C) 1999-2013 Mark Russinovich
Sysinternals - www.sysinternals.com

}|{z
LQJHLEE68
NEW_IN_THE_CLEAR
Lock for me
123-45-6789
123 Main Street
1234-5678-9876-5432
/ec886133_HistogramHash
/c76191f4_LookupCRIF
/c46a4786_ConstantCRIF
/5c3572a5_MaxFilterXOpImage
/53b33dfb_MagnitudePhaseOpImag
/7574e0ae_DivideComplexCRIF
/a79ab000_TransposeBinaryOpIma
/9633a9ba_MultiplyCRIF
/18c763e5_FilteredSubsampleOpI
/2170a9c1_AndCRIF
...
|
삭제시
SQL> delete from new_t where id = 'Lock for me';

1 행이 삭제되었습니다.

SQL> COMMIT;

커밋이 완료되었습니다.

SQL> ALTER SYSTEM CHECKPOINT;

시스템이 변경되었습니다.

D:\app\LG>strings  -a D:\app\LG\data_file\new_in_the_clear.dbf

Strings v2.51
Copyright (C) 1999-2013 Mark Russinovich
Sysinternals - www.sysinternals.com

}|{z
LQJHLEE68
NEW_IN_THE_CLEAR
Lock for me
123-45-6789
123 Main Street
1234-5678-9876-5432
/ec886133_HistogramHash
/c76191f4_LookupCRIF
/c46a4786_ConstantCRIF
/5c3572a5_MaxFilterXOpImage
/53b33dfb_MagnitudePhaseOpImag
/7574e0ae_DivideComplexCRIF
/a79ab000_TransposeBinaryOpIma
/9633a9ba_MultiplyCRIF
/18c763e5_FilteredSubsampleOpI
/2170a9c1_AndCRIF
/157a0d70_SubsampleBinaryToGra
/45f59a27_StreamImage
/5600a10a_AddConstToCollection
/8ada891e_MagnitudeCRIF
/91f23f8_DivideByConstCRIF
/27561cdd_MeanOpImage
/c321a3cb_ColorConvertOpImageI
...


SQL>

current online redo log
SQL> select a.member
  2    from v$logfile a, v$log b
  3   where a.group# = b.group#
  4     and b.status = 'CURRENT'
  5     and rownum = 1;

MEMBER
------------------------------------------------------------------------------
D:\APP\LG\ORADATA\JHLEE68\REDO02.LOG


D:\app\LG>strings -a D:\APP\LG\ORADATA\JHLEE68\REDO02.LOG
...
l memory b
Lock for me
Lock for me
Lock for me
segment header
segment header
segment header
...

SQL>

수작업 애플리케이션 암호화

  • 트리거
  • 저장 프로시저 ( SP, FN )
  • 단점 : 개발에 높은비용 발생, 암복화 키 관리 이슈

오라클 Wallet

Wallet의 이해

  • 암호화 키가 암호화되어 저장된 단순한 파일 이고, 데이터 베이스를 위해 암호화 키를 유지하거나, 다른 오라클 컴포넌트을 위해 일부 정보을 유지한다.
  • 모든 것을 하나의 wallet을 사용하는 것보다는 여러 개의 wallet을 사용하는 것을 오라클은 추천
  • 데이터베이스 외부에 저장됨

Wallet 사용 방법

  • 1. ALTER SYSTEM ... : 무언가을 소유하고 무언가를 알고 있다. ( 둘돠 )
  • 2. 자동 로그인 : 데이터베이스가 오픈 되었을 때 즉시 릴리즈
  • 3. HSM ( hardwar security module ) - 11gR1: 데이터베이스 서버 외부에 external 하드웨어 일부에 키를 저장할 수 있도록 한다.

오라클 Wallet 설정

생성 확인
D:\app\LG\product\11.2.0\dbhome_1\NETWORK\ADMIN>DIR
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 74FA-1C6B

D:\app\LG\product\11.2.0\dbhome_1\NETWORK\ADMIN 디렉터리

2015-01-26  오후 07:20    <DIR>          .
2015-01-26  오후 07:20    <DIR>          ..
2015-01-26  오후 07:04    <DIR>          SAMPLE
2015-01-29  오후 09:34               402 sqlnet.ora
               1개 파일                 402 바이트
               3개 디렉터리  242,302,930,944 바이트 남음

D:\app\LG\product\11.2.0\dbhome_1\NETWORK\ADMIN>

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES = (NTS)

ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=D:\app\LG\product\11.2.0\dbhome_1\admin\wallet)))

SQL> alter system set encryption key identified by foobar
  2  ;
alter system set encryption key identified by foobar
*
1행에 오류:
ORA-28368: 전자 지갑을 자동으로 생성할 수 없습니다.

D:\app\LG\product\11.2.0\dbhome_1\admin\wallet>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 74FA-1C6B

 D:\app\LG\product\11.2.0\dbhome_1\admin\wallet 디렉터리

2015-01-29  오후 10:47    <DIR>          .
2015-01-29  오후 10:47    <DIR>          ..
               0개 파일                   0 바이트
               2개 디렉터리  242,302,869,504 바이트 남음


SQLNET.AUTHENTICATION_SERVICES = (TNSNAMES, EZCONNECT)

ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)
        (METHOD_DATA=
                (DIRECTORY=D:\app\LG\product\11.2.0\dbhome_1\admin\wallet )
        )
 )

SQL> alter system set encryption key identified by foobar;
alter system set encryption key identified by foobar
*
1행에 오류:
ORA-28368: 전자 지갑을 자동으로 생성할 수 없습니다.

-- 재기동을 해야하는건가?

SQL> shutdown abort
ORACLE 인스턴스가 종료되었습니다.

SQL> conn sys/1111 as sysdba
휴지 인스턴스에 접속되었습니다.
SQL>
SQL>
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area 2522038272 bytes
Fixed Size                  2283864 bytes
Variable Size             620758696 bytes
Database Buffers         1879048192 bytes
Redo Buffers               19947520 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL>
SQL>
SQL>
SQL> alter system set encryption key identified by foobar;

시스템이 변경되었습니다.



D:\app\LG\product\11.2.0\dbhome_1\admin\wallet>dir
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 74FA-1C6B

 D:\app\LG\product\11.2.0\dbhome_1\admin\wallet 디렉터리

2015-01-29  오후 10:53    <DIR>          .
2015-01-29  오후 10:53    <DIR>          ..
2015-01-29  오후 10:53             2,845 ewallet.p12
               1개 파일               2,845 바이트
               2개 디렉터리  242,302,746,624 바이트 남음

D:\app\LG\product\11.2.0\dbhome_1\admin\wallet>

SQL> alter system set encryption wallet open identified by foobar;
alter system set encryption wallet open identified by foobar
*
1행에 오류:
ORA-28354: 암호화 전자 지갑, 자동 로그인 전자 지갑 또는 HSM이 이미 열려
있습니다.

-- 머지? ㅠ

-- 암호화된 데이터의 액세스을 차단( 읽기 및 쓰기  불가능 )
SQL> alter system set encryption wallet close identified by foobar;

시스템이 변경되었습니다.

SQL>

transparent 컬럼 레벨 암호화

  • 10gR2
  • 투명화게 복호화 및 암호화
  • 컬럼과 연관된 모든 리두, 언두, 템프 데이터 암호화
    
    SQL> create tablespace tde_test datafile 'D:\app\LG\data_file\tde_test.dbf' size 1m
      2  ;
    
    테이블스페이스가 생성되었습니다.
    
    SQL>
    
    SQL>  create table tde_col_t
      2   ( c1        varchar2( 30 ) ,
      3     c2        varchar2( 30 ) encrypt
      4   )tablespace tde_test;
       c2        varchar2( 30 ) encrypt
       *
    3행에 오류:
    ORA-28336: SYS 소유 객체를 암호화할 수 없습니다. -- 헐
    
    SQL>  create table SCOTT.tde_col_t
      2   ( c1        varchar2( 30 ) ,
      3     c2        varchar2( 30 ) encrypt
      4   )tablespace tde_test;
     create table SCOTT.tde_col_t
    *
    1행에 오류:
    ORA-28365: 전자 지갑이 열려 있지 않습니다.
    
    SQL> alter system set encryption wallet open identified by foobar;
    
    시스템이 변경되었습니다.
    
    SQL>
    SQL>  create table SCOTT.tde_col_t      
      2   ( c1        varchar2( 30 ) ,      
      3     c2        varchar2( 30 ) encrypt
      4   )tablespace tde_test;             
                                            
    테이블이 생성되었습니다.                
                                            
    SQL>    
    
    SQL> insert into SCOTT.tde_col_t  values( 'this_is_NOT_encrypted', 'this_is_encrypted' );
    
    1 개의 행이 만들어졌습니다.
    
    SQL> select * from SCOTT.tde_col_t
      2  ;
    
    C1                             C2
    ------------------------------ ------------------------------
    this_is_NOT_encrypted          this_is_encrypted
    
    SQL>
    
    SQL>                                
    
    
    || 누군가 절취한 상황 연출 wallet close||
    
    SQL> alter system set encryption wallet close identified by foobar;
    
    시스템이 변경되었습니다.
    SQL> select * from SCOTT.tde_col_t        
      2  ;                                    
    select * from SCOTT.tde_col_t             
                        *                     
    1행에 오류:                               
    ORA-28365: 전자 지갑이 열려 있지 않습니다.
                                              
                                              
    SQL>                                      
    SQL>  select c1 from SCOTT.tde_col_t ;
    
    C1
    ------------------------------
    this_is_NOT_encrypted
    
    SQL>
    SQL> insert into SCOTT.tde_col_t  values( 'this_is_NOT_encrypted', 'this_is_encrypted' );
    insert into SCOTT.tde_col_t  values( 'this_is_NOT_encrypted', 'this_is_encrypted' )
                      *
    1행에 오류:
    ORA-28365: 전자 지갑이 열려 있지 않습니다.
    
    SQL> insert into SCOTT.tde_col_t  values( 'this_is_NOT_encrypted',   null );
    
    1 개의 행이 만들어졌습니다.
    
    SQL> commit;
    
    커밋이 완료되었습니다.
    
    SQL> alter system set encryption wallet open identified by foobar;
    
    시스템이 변경되었습니다.
    
    SQL>  select * from SCOTT.tde_col_t;
    
    C1                             C2
    ------------------------------ ------------------------------
    this_is_NOT_encrypted          this_is_encrypted
    this_is_NOT_encrypted
    
    SQL>
    
    
    
    || 데이터파일 내용 확인 ||
    
    SQL> alter system checkpoint
      2  ;
    
    시스템이 변경되었습니다.
    
    D:\app\LG>strings  -a D:\app\LG\data_file\tde_test.dbf
    
    Strings v2.51
    Copyright (C) 1999-2013 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    }|{z
    LQJHLEE68
    TDE_TEST
    this_is_NOT_encrypted,
    this_is_NOT_encryptedDA,H]
    Ge^L
    zyh
    zqZ
    
    

Transparent 테이블 스페이스 암호화

  • 11gR1
  • 테이블 스페이스에 저장되는 모든 세그먼트는 암호화 포맷( INDEX, LOBSEGMENT, TABLE PARTITION )으로 디스크에 저장
    
    SQL> create tablespace clear datafile 'D:\app\LG\data_file\clear.dbf' size 1m;
    
    테이블스페이스가 생성되었습니다.
    
    SQL> create tablespace encrypted datafile 'D:\app\LG\data_file\encrypted.dbf' size 1m
      2  encryption default storage ( encrypt );
    
    테이블스페이스가 생성되었습니다.
    
    SQL> create table SCOTT.ts_clear_t tablespace clear
      2  as
      3  select *
      4    from all_users;
    
    테이블이 생성되었습니다.
    
    SQL> commit;
    
    커밋이 완료되었습니다.
    
    SQL> create index SCOTT.ts_clear_t_ix01 on SCOTT.ts_clear_t ( lower( username )) tablespace clear;
    
    인덱스가 생성되었습니다.
    
    SQL> alter system checkpoint
      2  ;
    
    시스템이 변경되었습니다.
    
    SQL>
    
    D:\app\LG>strings  -a D:\app\LG\data_file\clear.dbf
    
    Strings v2.51
    Copyright (C) 1999-2013 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    }|{z
    LQJHLEE68
    CLEAR
    SYS
    SYSTEM
    OUTLN
    DIP
    ORACLE_OCM
    DBSNMP
    APPQOSSYS
    WMSYS
     #,
    XS$NULL
    01%'
    EXFSYS
    &),
    CTXSYS
    &6,
    XDB
    ' ,
    ANONYMOUS
    ' ,
    ORDSYS
    )$,
    ORDDATA
    )$,
    ORDPLUGINS
    )$,
    SI_INFORMTN_SCHEMA
    )$,
    MDSYS
    )$,
    OLAPSYS
    . ,
    MDDATA
    SPATIAL_WFS_ADMIN_USR
    3$,
    SPATIAL_CSW_ADMIN_USR
    3(,
    SYSMAN
    3;,
    MGMT_VIEW
    FLOWS_FILES
    APEX_PUBLIC_USER
    APEX_030200
    OWBSYS
    OWBSYS_AUDIT
    SCOTT
    xs$null
    xdb
    wmsys
    system
    sysman
    sys
    spatial_wfs_admin_usr
    spatial_csw_admin_usr
    si_informtn_schema
    scott
    owbsys_audit
    owbsys
    outln
    ordsys
    ordplugins
    orddata
    oracle_ocm
    olapsys
    mgmt_view
    mdsys
    mddata
    flows_files
    exfsys
    dip
    dbsnmp
    ctxsys
    appqossys
    apex_public_user
    apex_030200
    anonymous
    
    D:\app\LG>
    
    
    
    
    || 컬럼레벨 암호화 제약 조건 FBI 불가 ||
    
    SQL> ALTER TABLE SCOTT.ts_clear_t MODIFY USERNAME ENCRYPT;
    ALTER TABLE SCOTT.ts_clear_t MODIFY USERNAME ENCRYPT
                                        *
    1행에 오류:
    ORA-28348: 지정된 열에 정의된 인덱스를 암호화할 수 없습니다.
    
    SQL> DROP INDEX SCOTT.ts_clear_t_ix01;
    
    인덱스가 삭제되었습니다.
    
    SQL> ALTER TABLE SCOTT.ts_clear_t MODIFY USERNAME ENCRYPT;
    
    테이블이 변경되었습니다.
    
    SQL> -- 테이블 초기화 및 생성
    
    SQL> ALTER TABLE SCOTT.ts_clear_t MOVE TABLESPACE ENCRYPTED;
    
    테이블이 변경되었습니다.
    
    SQL> ALTER INDEX SCOTT.ts_clear_t_ix01 REBUILD TABLESPACE ENCRYPTED
      2  ;
    
    인덱스가 변경되었습니다.
    
    D:\app\LG>strings  -a D:\app\LG\data_file\encrypted.dbf
    
    Strings v2.51
    Copyright (C) 1999-2013 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    }|{z
    LQJHLEE68
    ENCRYPTED
    >cN
    +?uU
    fvi
    ^,z
    Odn
    G2{
    ~$w
    k[^*{
    X!?]
    _;7
    H.K
    MBQ8
    N9&
    b+7
    s^^
     PF2GrF
    J>~
    r,,
    qjV
    )DYr
    !^,
    %or
    .q.
    SYg"
    RDQE
    9 @
    UOt8
    yaL
    ny1dJ
    [7K
    *M$
    DEW
    ecl
    dx?
    /Ye(
    QP!o}y*qox
    g>N
    ;?!
    vWm
    QDbP
    \@(
    Sl1\
    'F:
    2rH
    R 8
    j_K!
    vxZ~>
    o0Y
    .c7X
    d2n
    $.,
    >x\
    s,;
    csv
    Yt5
    ji/
    wW:}
    `LpI
    {tHMf
    g%`0W
    agn
    1j0
    VaRQ
    Qli
    Wr?`
     >)cl
    72<
    fES
    6qV
    aaH
    G9y
    x?g
    X [
    Z\9
    9j
    ;`d{
    /u`
    I7[
    vN=U
    Kc/
     8P9e
    c!~
    p_!
    @G8
    S],
    x&L
    k^;
    g1Y
    ]Y0
    !cN
    \oJ+
    *Vl
    `0i
    .kN
    L4@N4CBb6
    }#g
    p2$
    AM#@
    7cW
    {G`
    7!zS>C
    v:C
    OqG
    f3?d
    71>~B?
    =@G
    &R)cP
    Wim
    o58@
    Had
    PEyq
    91Jb
    d^J
    i?ZAI
    Jgb7
    6{g
    7RN
    v!4
    y{vL
    q09F
    AxK
    b#s'c
    ?I3
    P )
    [N!
    .OR
     B%
    =0F
    Nu'
    X^O
    8@c
    NVu
    y/~*
    {Lg
    3ecW
    `nQ
    0#Q8
    [ 0u>,
    jVk
    0A|
    e5}-
    _kN
    _$g
    >4y
    YUn))
    U K(4EeF
    _v]
    W:p
    /HUE{
    ru/T
    0^}
    pRS(
    eE.YY
    WC=/
    /3=
    o$A
    
    
    || MOVE == COPY ||
    D:\app\LG>strings  -a D:\app\LG\data_file\clear.dbf
    
    Strings v2.51
    Copyright (C) 1999-2013 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    }|{z
    LQJHLEE68
    CLEAR
    SYS
    SYSTEM
    OUTLN
    DIP
    ORACLE_OCM
    DBSNMP
    APPQOSSYS
    WMSYS
     #,
    XS$NULL
    01%'
    EXFSYS
    &),
    CTXSYS
    &6,
    XDB
    ' ,
    ANONYMOUS
    ' ,
    ORDSYS
    )$,
    ORDDATA
    )$,
    ORDPLUGINS
    )$,
    SI_INFORMTN_SCHEMA
    )$,
    MDSYS
    )$,
    OLAPSYS
    . ,
    MDDATA
    SPATIAL_WFS_ADMIN_USR
    3$,
    SPATIAL_CSW_ADMIN_USR
    3(,
    SYSMAN
    3;,
    MGMT_VIEW
    FLOWS_FILES
    APEX_PUBLIC_USER
    APEX_030200
    OWBSYS
    OWBSYS_AUDIT
    SCOTT
    xs$null
    xdb
    wmsys
    system
    sysman
    sys
    spatial_wfs_admin_usr
    spatial_csw_admin_usr
    si_informtn_schema
    scott
    owbsys_audit
    owbsys
    outln
    ordsys
    ordplugins
    orddata
    oracle_ocm
    olapsys
    mgmt_view
    mdsys
    mddata
    flows_files
    exfsys
    dip
    dbsnmp
    ctxsys
    appqossys
    apex_public_user
    apex_030200
    anonymous
    
    D:\app\LG>
    
    
    

암호화와 관련 없는 것

  • 암호화 : 절도 또는 분실로부터 정적 제이터을 보호하는 것
  • 접근 제어 : 어떠한 규칙에 따라 데이터에 실시간으로 접근하는 것을 제한하는 것

접근 제어 규칙

  • GRANT 와 REVOKE : 사용자 또는 시스템전체 객체 레벨 접근을 허용한다.
  • 로우 레벨 보안 : 특정 로우에 접근을 허용 또한 방지
  • 컬럼 레벨 보안 : 특정 컬럼에 접근을 허용 또한 방지

수작업 애플리케이션 암호화 구현

  • DBMS_OBFUSCATION_TOOLKIT : 8i ~ 10g, DES( DATA

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.