상세 컨텐츠

본문 제목

사용중인 DB 암호화로 데이터 보호하기

Db2 for LUW

by 파란디비 2022. 10. 27. 16:54

본문

통계자료에 의하면 암호화된 데이터베이스는 전체의 약 10% 미만이라고 한다.  비 암호화된 데이터베이스에 내외부 침입자가 복사하거나 또는 백업 이미지가 외부로 유출되면 심각한 피해가 발생할 가능성이 높다. 과거 백업테이프의 도난으로 개인정보가 유출되어 막대한 피해를 입은 사례처럼 데이터베이스 암호화는 필수 IT과제 중 하나이다. 국내고객들이 선호하는 칼럼 암호화 방식은 성능 오버헤드뿐 아니라 응용 프로그램 변경이 필요하므로 적지 않은 시간과 비용이 든다. 

기존에 운영중인 비 암호화된 데이터베이스를 손쉽게 암호화 수 있는 방법이 있을까?  해결방안은  '기본 암호화' 기능을 적용하여 암호화하는 것이다. 이 방식은 응용 프로그램 수정을 요구하지 않는다. 게다가 칼럼 암호화 만큼 성능 오베헤드도 크지 않다.  워크로드에 따라 편차가 있지만 기본 암호화 기능을 적용했을 때 자체 테스트 결과에 의하면 Read : Write비율이 70:30인 업무에서 자원사용율이 약 5% 정도이다. CPU 사용이 높은 시스템이라면 약간의 증설을  고려하면 된다.

기본 암호화 기능은 추가 제품 없이, 전 에디션에서 무상 지원되므로 적용하는데 비용 부담이 없다. 

준수하는 보안 표준은 FIPS 140-2 certified and employ , NIST SP 800-131A compliant cryptographic algorithms로  default로 AES256이 적용된다.  암호화 대상은 데이터베이스 관련 모든 물리 파일들이다. 

  • 테이블공간
  • 테이블에 저장된 모든 유형의 데이터 (LOB, XML 등)
  • 아카이브 로그를 포함한 모든 트랜잭션 로그
  • LOAD COPY 데이터
  • LOAD 스테이징 파일
  • 덤프. bin 파일
  • 백업 이미지

암호화 기능 적용되면 3가지 요소들이 생성/관리된다

  • Data Encryption Key : 데이터베이스 내 보관된 암호화 키
  • Master Key :암호화 키를 암호화하는 키
  • Keystore : Master Key를 보관하는 파일

적용 방식에는 3가지가 제공되며  중앙 키 관리자와HSM 방식은 분산된 여러 데이터베이스와 파일 시스템의 암호화를 통합 관리할 수 있다는 장점이 있다. 

  • 로컬 키  :  DB서버 내부에서 인스턴스 단위로 키를 관리
  • 중앙 키 : 외부의 KMIP 버전 1.1 이상을 지원하는 보안 소프트웨어로 키 관리
  • HSM : 외부의 PKCS #11이 사용된 하드웨어 보안 모듈로 키를 관리

여기서는 추가 준비없이 간단히 적용할 만한 로컬 키 관리 방식으로 사용 중인 기존 데이터베이스를 암호화하는 방법에 대해  알아보자. 

 

 1)   IBM Global Security Kit(GSKit) 라이브러리(Db2설치시포함) 경로를 인스턴스 환경변수에 추가하기

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/sqllib/lib64/gskit 

 

 *** Linux, Unix : LIBPATH, SHLIB_PATH, LD_LIBRARY_PATH (Windows : PATH)

 

2)  gsk8capicmd(or gsk8capicmd_64) 사용하여 PKCS#12를 준수하는 Keystore를 생성하기. 다중 파티션환경이나 pureScale시스템의 경우 KeyStore파일은 모든 노드에서 접근되는 공유 파일 시스템에 생성한다.

 

$ su - db2inst1
$ cd /home/sqllib/gskit/bin/
$ gsk8capicmd_64 -keydb -create -db /db2sdhome/ccardskeystore.p12 -pw Str0ngPassw0rd -strong -type pkcs12 -stash;

 

 *** db2sdhome : purescale의 shared instance home,  keydb.db : 임의의 keystore 명

 *** stash : Keystore의 암호를 저장하는 keystore_name.sth파일 생성

 

3) 인스턴스에 keystore파일의 위치를 지정하기

 

$ db2 “update dbm cfg using keystore_type pkcs12 keystore_location /db2sdhome/ ccardskeystore.p12”

 

4)  수행 중인 모든 애플리케이션을 종료하고 오프라인 백업받은 후, 데이터베이스를 Drop 하기

 

$ db2 backup db sample
$ db2 drop db sample

 

5) ENCRYPT 옵션을 사용하여 백업받은 이미지를 Restore하기

 

$ db2 restore db sample encrypt

 

6)  Restore가 완료되면 자동으로 Master Key가 생성되고 지정된 Keystore파일에 저장된다. 데이터베이스 구성에서 확인가능하다.  

 

$db get db cfg for sample | grep ENCR
 Encryption Library for Backup               ENCRLIB) = libdb2encr.a
 Encryption Options for Backup             (ENCROPTS) = CIPHER=AES:MODE=CBC:KEY LENGTH=256
 Encrypted database                                      = YES

 

이와 같이 사용 중인 데이터베이스의 암호화를 손쉽게 수행하였다. 이제부터 이 인스턴스에 추가로 생성되는 데이터베이스는 암호화가 자동으로 적용된다. 

 

보안을 고려하여  Master Key는 여러 개 생성할 수 있다. 이제부터 암호화된 Db2시스템의 운영 Tip을 잠시 살펴보자.  

 

1.  Master Key 추가 생성하기 

 

-- /dev/random으로 256bits (32 bytes) 파일 생성 --
$ /db2sdhome/dd if=/dev/random of=mysecreatfile bs=32 count=1

 

 2. 새 Master Key를 Keystore에 등록 보관하기

 

$ HOME/db2/sqllib/gskit/bin/gsk8capicmd_64 -secretkey -add -db /db2sdhome/ ccardskeystore.p12 -stashed -label mylabel.mydb.myinstance.myserver -file /db2sdhome/mysecreatfile

 

3. Keystore에 있는 Master Key목록 중 Master Key 변경하기 

 

$ HOME/db2/sqllib/gskit/bin>gsk8capicmd_64 -cert -list -db /db2sdhome/ccardskeystore.p12 –stashed

$ db2 “CALL SYSPROC.ADMIN_ROTATE_MASTER_KEY('mylabel.mydb.myinstance.myserver')”

 

4.  사용하지 않는 Master Key 삭제하기  

 

$HOME/db2/sqllib/gskit/bin/gsk8capicmd_64 -cert -delete -db /db2sdhome/ccardskeystore.p12 -stashed -label mylabel.mydb.myinstance.myserver

 

5.  암호화 사항 확인하기

 

$ db2 "SELECT * FROM TABLE (SYSPROC.ADMIN_GET_ENCRYPTION_INFO())"

 

 이상으로 Db2에서 기존에 암호화되지 않은 데이터베이스를 암호화 하는 방법애 대해 알아보았다. 간단한 조치로 자칫 민감 정보의 외부  유출 위험을 사전 예방하자.

(https://www.ibm.com/docs/ko/db2/11.5?topic=encryption-data-rest)

 

'Db2 for LUW' 카테고리의 다른 글

Db2 OLTP 아키텍처 구성  (0) 2022.12.05
Db2 Trace Facility  (0) 2022.11.29
외부(External) 테이블  (0) 2022.11.23
Db2 라이센스(LUW)  (0) 2022.11.08
Db2 신규 SQL 함수  (0) 2022.11.03

관련글 더보기

댓글 영역