1. 컬럼 암호화 사용법
  2. 컬럼 암호화가 적용된 데이터 저장공간
    1. 컬럼 암호화로 증가된 저장공간
    2. SGA에 저장
  3. 영향을 미치는 정도
    1. 측정 대상의 이해
    2. 암호화의 영향도
    3. 데이터 조회 비용
    4. 암호화된 컬럼 통계정보
  4. 컬럼 암호화 제약

컬럼 암호화 사용법

  1. 오라클 wallet 설치 및 release
  2. CREATE/ALTER TABLE문에서 암호화할 컬럼에 ENCRYPT 키워드 명시
    1. NUMBER, TIMESTAMP, VARCHAR2, NCHAR와 같은 데이터타입에 사용 가능
    2. CLOB, BLOB은 테이블스페이스 레벨의 암호화 필요
  3. 세가지 옵션 사용 가능
    1. USING algorithm: 암호화 방법(AES, DES), 키를 몇 비트로 설정할지 결정
    2. IDENTIFIED BY password: 데이터 암호화시 사용할 특정 키 지정
    3. SALT/NO SALT: SALT가 디폴트이며 데이터 암화화에 앖서 데이터에 데이터 난수 바이트를 추가함으로써 암호화를 더 강력하게 만드는 효과(암호화된 컬럼에 인덱스를 설정할때에는 NO SALT 여야만 한다.)

컬럼 암호화가 적용된 데이터 저장공간

컬럼 암호화로 증가된 저장공간

  1. 데이터 암호화시 데이터가 항상 16의 배수로 고정된 길이의 필드로 저장되기때문에 반드시 스토리지 사용을 증가시킨다.
  2. SALT 속성 사용시 데이터 암호화시 데이터 앞에 항상 10개의 난수 바이트를 추가한후에 암호화하기 때문이다.
  3. 예제
    1. 테이블
    2. 암호화하지 않은 컬럼 저장공간
      384 - 62 = 322블록 사용
    3. 암호화한 컬럼 저장공간(WITH SALT)
      786 - 62 = 706블록 사용(위보다 약 2배 더 사용)

    4. 암호화한 컬럼 저장공간(WITHOUT SALT)
      578블록 사용(SALT를 사용할 때보다 128블록 적게 사용)

SGA에 저장

  1. 암호화된 컬럼 데이터는 암호화 형태로 버퍼 캐시에 저장되기 때문에 액세스시마다 암복호화에 따른 절차가 따른다. (하지만 수작업 애플리케이션으로 구현된 복호화만큼 영향도가 크지는 않다.)
  2. SGA역시 위의 '컬럼 암호화로 증가된 저장공간'과 같은 이유로 추가 공간을 더 소비한다.
  3. 암호화된 컬럼에 인덱스를 생성하면 암호화된 데이터로 인덱싱되기 때문에 INDEX RANGE SCAN이 불가능하며 = 조건에 따른 조건절만 액세스 가능하다.

영향을 미치는 정도

당연한 말이지만 액세스 빈도가 적은 컬럼에 암호화를 하면 성능에 영향이 거의 없을것이고 액세스 빈도가 높은 컬럼을 암호화하면 성능에 영향이 많을 것이다.

측정 대상의 이해

  1. 암복호화 처리에 따른 CPU 뿐만 아니라 더 많은 스토리지 공간을 쓰기 때문에 더 많은 리두 작성이 필요하다.
  2. 애플리케이션에서 데이터가 사용되는 액세스 빈도 (단순히 암호화를 했을때의 성능 차이에 더해 액세스 빈도도 함께 고려되어야만 한다.)

암호화의 영향도

  1. 예제 테이블
  2. SQL연산의 CPU 효율성과 리두 생성을 측정하는 프로시저 생성

  3. NON ENCRYPTED 컬럼과 ENCRYPTED 컬럼의 BULK INSERT 간의 차이 측정
    1. 암호화된 컬럼에 경우 거의 10배에 가까운 CPU 사용(하드웨어에 따라 다름)
    2. 리두는 2배 이상 생성
    3. 수작업 암호화의 경우 CPU 활용도가 50배에 달한다.
  4. NON ENCRYPTED 컬럼과 ENCRYPTED 컬럼의 로우 단위 처리간의 차이 측정
    1. 암호화된 컬럼에 경우 거의 2.5배에 가까운 CPU 사용
    2. 리두는 약간 더 필요
    3. 하지만 한번에 한로우씩 로딩하는 매우 비효율적인 로우 단위 작업의 부하가 너무 큼

데이터 조회 비용

  1. 컬럼 레벨 암호화는 버퍼 캐시에 암호화된 상태로 정보를 저정하기 때문에 조회시 복화화의 비용이 발생
  2. 예제
    1. 데이터를 가진 컬럼을 모두 로드하고 난후 한번에 한 컬럼씩 조회
    2. 암호화된 컬럼을 조회시 거의 10배정도의 CPU 시간이 소요 (수동 방법의 경우 50배에 가까운 차이)

암호화된 컬럼 통계정보

  1. 예상 로우수가 NON_ENCRYPTED 컬럼에서 2개였는데 ENCRYPTED 컬럼에서 646로우로 변경
  2. 암호화를 적용해서 생기는 부작용으로 실행계획에 변화를 주어 악영향을 미칠 수 있다.

컬럼 암호화 제약

  1. 인덱스 사용 능력 감소
    1. 인덱스에 암호화된 값을 저장하므로 데이터를 정렬된 상태로 저장할 수 없다.(암호화된 값으로 정렬)
    2. INDEX RANGE SCAN이 불가하다.(UNIQUE SCAN만 가능)
  2. 인덱스 사용시 보호 감소
    암호화된 컬럼에 인덱스가 있다면 SALT 옵션을 사용할 수 없어 암호화 레벨이 감소된다.
  3. 함수 기반 인덱스 사용 불가
    암호화된 데이터로 인덱스를 생성하기 때문에 함수 기반 인덱스의 입력값이 암호화된 데이터라 유효하지 않다.
  4. 참조 키 제약 사용 불능
    암호화 키에 대해 지원되지 않는다.

주민번호를 기본키로 사용하는 시스템의 경우 주민번호를 암호화하는 요구사항이 있다면

1. 기본키이기 떄문에 인덱스가 해당 컬럼에 생성되어 있을것이고
2. 기본키라면 다른 테이블의 참조키로 사용될 가능성이 높고
3. 기본키이기 때문에 자주 액세스되고 암호화 컬럼을 자주 액세스할 경우 성능에 악영향을 미칠 가능성이 매우 크다.