통계자료에 의하면 암호화된 데이터베이스는 전체의 약 10% 미만이라고 한다. 비 암호화된 데이터베이스에 내외부 침입자가 복사하거나 또는 백업 이미지가 외부로 유출되면 심각한 피해가 발생할 가능성이 높다. 과거 백업테이프의 도난으로 개인정보가 유출되어 막대한 피해를 입은 사례처럼 데이터베이스 암호화는 필수 IT과제 중 하나이다. 국내고객들이 선호하는 칼럼 암호화 방식은 성능 오버헤드뿐 아니라 응용 프로그램 변경이 필요하므로 적지 않은 시간과 비용이 든다.
기존에 운영중인 비 암호화된 데이터베이스를 손쉽게 암호화 수 있는 방법이 있을까? 해결방안은 '기본 암호화' 기능을 적용하여 암호화하는 것이다. 이 방식은 응용 프로그램 수정을 요구하지 않는다. 게다가 칼럼 암호화 만큼 성능 오베헤드도 크지 않다. 워크로드에 따라 편차가 있지만 기본 암호화 기능을 적용했을 때 자체 테스트 결과에 의하면 Read : Write비율이 70:30인 업무에서 자원사용율이 약 5% 정도이다. CPU 사용이 높은 시스템이라면 약간의 증설을 고려하면 된다.
기본 암호화 기능은 추가 제품 없이, 전 에디션에서 무상 지원되므로 적용하는데 비용 부담이 없다.
준수하는 보안 표준은 FIPS 140-2 certified and employ , NIST SP 800-131A compliant cryptographic algorithms로 default로 AES256이 적용된다. 암호화 대상은 데이터베이스 관련 모든 물리 파일들이다.
암호화 기능 적용되면 3가지 요소들이 생성/관리된다
적용 방식에는 3가지가 제공되며 중앙 키 관리자와HSM 방식은 분산된 여러 데이터베이스와 파일 시스템의 암호화를 통합 관리할 수 있다는 장점이 있다.
여기서는 추가 준비없이 간단히 적용할 만한 로컬 키 관리 방식으로 사용 중인 기존 데이터베이스를 암호화하는 방법에 대해 알아보자.
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 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 |
댓글 영역