kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

IT 용어 사전

Oracle Database TDE 기능과 HSM이란?

까마기 2021. 11. 23. 23:56
반응형

지난 “DB암호화시 HSM을 사용하려면 기사” 에서 HSM 사용에 대한 전반적인 설명을 하였습니다. 이번에는 오라클 데이타베이스(Oracle Database) SW 에서 제공하는 TDE 기능에 대하여 좀 더 구체적으로 설명을 드리고자 합니다.  
 
오라클 데이터베이스 SW는 "DB 암호화" 기능을 DBMS 내부에서 지원하고 있으며, 이것을 TDE(Transparent Data Encryption)기능이라고 부르고 있습니다. 이를 위해 암호화 기능을 하는 SW모듈이 DBMS 내부에 있으며, 따라서 암호키도 내부에서 관리를 하고 있습니다.
 
TDE기능에서 사용하는 암호키는, 개념적으로 크게 분류하면, Master Key 와 Working Key 두 종류 입니다. Working Key 는 실제 data를 암ㆍ복호화 시키는 Key 이며, Master Key는 Working Key를 암ㆍ복호화 시키는 Key 입니다. Working Key는 Master Key로 암호화된 상태로 DBMS 내부에 존재하게 되며, 실제 데이터에 대한 암ㆍ복호화 연산은 DBMS 내부에서 이루어집니다..
 
TDE 기능에서는, 가장 안전하게 보관해야 할, "Master Key"를 보관하기 위한 장소로, SW Wallet이라는 불리는 "암호키 지갑" File 과 HSM 장비를 사용하고 있습니다(오라클은 제3의 안전한 장소로, 자체에서 개발한 Vault라는 Solution도 판매하고 있습니다). 버전 12c 부터는 용어를 “Software Keystore” 와 “Hardware Keystore”로 변경하여 사용하고 있습니다. 소프트웨어적인 방법(암호키 지갑으로 불리는 파일 사용)으로 암호키를 저장하는 방식의 보안 문제점(해킹으로 인한 암호키 유출 가능성: "암호키 지갑파일"만 또는 "지갑사용 비밀번호"도 함께 유출 가능성)을 인식하고 있기 때문에, Master key만을 외부의 HSM에 저장하는 기능을 함께 제공하고 있습니다. Software Keystore(SW Wallet File) 이름은 ewallet.p12 이며 password 방식으로 암호화되어 있으며, 위치도 sqlnet.ora 라는 configuration file 에 기록되어 있으므로, DB 서버에 접근만 할 수 있으면 쉽게 복사해 갈 수 있습니다.
 
 
 
 
HSM 장비를 사용하기 위해서는, 오라클 데이터베이스 TDE 사용 가이드라인에 따라 관련 Configuration을 설정해 주기만 하면 됩니다.
 
당사에서 공급하는  FIPS 140-2 Level 4 인증을 받은 HSM 장비인 KeyperPlus를 연동시켜 테스트를 해 보았습니다. 오라클 버전에 따라 고려할 사항은 없는 지 확인하고자 테스트를 한 것입니다. 사용한 오라클 데이터베이스 버전은 “11g Release 2”, “12c Release 1”, “12c Release 2” 3가지 이며, OS Platform 으로는 Linux를 사용하였습니다.
 
12c Release 2 버전에서는, 한국에서 개발한 국제표준인 ARIA, SEED 알고리즘 및 러시아에서 개발한 GOST 알고리즘을 지원하고 있습니다. 우리나라에선, 공공기관이 블록 암호 알고리즘을 사용할 경우는, 암호모듈검증제도(KCMVP) 검증필 암호모듈 탑재가 요구되는 데, 검증을 받기 위해서는ARIA 나 SEED를 지원해야 합니다. 12c Release 2 버전부터 KCMVP 검증 암호모듈을 지원하기 시작한 것으로 여겨지므로, 금융권을 비롯한 공공기관에서도 TDE기능을 사용하는 곳이 확대될 것으로 예상됩니다..
 
 
1. PKCS#11 Provider 설정 
KeyperPlus를 HSM장비(Hardware Keystore)로 사용하기 위해서는 DB서버에, 벤더사가 제공하는 PKCS#11 Provider(Dynamic Library) 와 Configuration file을 설치해야 하는 데, 이 과정은 간단하고 단순한  작업이므로, 여기서는 생략하고자 합니다( /usr/local/lib directory에 pkcs11.so file을 copy 해 두었습니다).
 
TDE를 사용하기 위해서는 아래와 같은 추가 작업을 하면 됩니다.
1) Make Directory and Copy
# mkdir –p opt/oracle/extapi/64/hsm/aep/5.0.5
# chmod a+w /opt/oracle/extapi/64/hsm/aep/5.0.5 
# chmod a+r /opt/oracle/extapi/64/hsm/aep/5.0.5
# cp /usr/local/lib/pkcs11.so  /opt/oracle/extapi/64/hsm/aep/5.0.5/libpkcs11.so
 
2) Change owner:group
# chown  oracle:oinstall  -R /opt/oracle/extapi/64/hsm/aep/5.0.5
 
참고로, /opt/oracle/extapi  directory에는 오직 한 vendor의 PKCS#11Library 만 존재해야 합니다. 
 
 
2-1. Migrating Master Encryption Key onto HSM
Software Keystore를 사용하고 있는 상태에서 HSM 으로 Master Key 저장 위치를 변경할 경우입니다. 이 과정을 수행하면, Software Keystore에 저장된 Master Key로 Working Key를 복호화 시킨 후에, HSM 에 생성된 “새로운 Master Key”로 Working Key 를 다시 암호화 시켜 저장합니다. 실제 데이터에는 변동이 없습니다.
 
12c 버전 사용시 
1) Exit database
 
2) sqlnet.ora  file 에  있는 아래의 내용 중  “METHOD=FILE” 만 아래와 같이 수정 
ENCRYPTION_WALLET_LOCATION = (SOURCE=(METHOD=HSM) (METHOD_DATA= (DIRECTORY = <path to wallet directory>)))
** sqlnet.ora file 의 위치 $ORACLE_HOME/network/admin 
 
3) Start database
 
4) Migrating master encryption key from software keystore to HSM keystore
SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY “User_PIN” MIGRATE USING software_keystore_password  WITH BACKUP USING  ‘before_migration’
** Migration을 종료하면, 이미 open 된 상태 이므로, 다시 open할 필요는 없음.
 
 
11g 버전 사용시 
1) Exit database
 
2) sqlnet.ora  file 에  있는 아래의 내용 중  “METHOD=FILE” 만 아래와 같이 수정 
ENCRYPTION_WALLET_LOCATION = (SOURCE=(METHOD=HSM) (METHOD_DATA= (DIRECTORY = <path to wallet directory>)))
** sqlnet.ora file 의 위치 $ORACLE_HOME/network/admin 
 
3) Start database
 
4) Migrating master encryption key from software keystore to HSM keystore
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY “User_PIN” MIGRATE USING "wallet_password”; 
** Migration을 종료하면, 이미 open 된 상태 이므로, 다시 open할 필요는 없음.
 
 
2-2. TDE 기능을 처음 사용할 경우
이 경우는, TDE 기능을 처음 사용하는 경우인데, 처음부터 Master Key를HSM 에 저장하는 경우 입니다. 이전에 Software Keystore 나 HSM(Hardware Keystore) 를 사용한 적이 있으면, 동작되지 않습니다.  이미 사용한 적이 있는 지의 확인은 database를 start 한 후에, 아래의 명령어로 확인 할 수 있습니다.
SQL>SELECT * FROM V$ENCRYPTION_WALLET;
 
 
12c 버전 사용시 
1) sqlnet.ora  file 에 아래와 같은 Line  추가 
ENCRYPTION_WALLET_LOCATION = (SOURCE=(METHOD=HSM))
** sqlnet.ora file 의 위치 $ORACLE_HOME/network/admin 
 
2) Start database 
 
3) Open HSM Keystore 
SQL>ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “User_PIN”;
** User_PIN 값은 KeyperPlus 장비 초기화 시 설정한 값이며, 8자리 이상이어야 합니다. 
 
4) Generate TDE master encryption key inside the HSM
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY “User_PIN”;
 
 
11g 버전 사용시 
1) sqlnet.ora  file 에 아래와 같은 Line  추가 
ENCRYPTION_WALLET_LOCATION = (SOURCE=(METHOD=HSM))
** sqlnet.ora file 의 위치 $ORACLE_HOME/network/admin 
 
2) Start database 
 
3) Create master encryption key inside the HSM
SQL>ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY “User_PIN”
** User_PIN 값은 KeyperPlus 장비 초기화 시 설정한 값이며, 8자리 이상이어야 합니다. 
 
 
3. Auto-login 기능 사용
Auto-login 기능을 사용하고자 하는 경우는, 추가적인 작업이 필요합니다.  처음으로 HSM을 사용하는 경우든, Software Keystore를 사용하여 Auto-login 방식을 사용하고 있던 경우든, 오라클 데이타베이스 TDE 가이드라인에서 설명하는 대로 따라 설정하면 됩니다.
 
 
맺음말
DB 버전에 따라, Keystore를 설정하는 SQL 명령어만 다를 뿐, 나머지 설정 방식은 동일합니다. 위에서 보듯이, 매우 간단한 절차만 따르면,  HSM 장비를 Keystore로 사용할 수 있음을 느낄 수 있습니다.
 
DB버전에 따라, HSM 을 사용하는 내부 로직에는 차이가 있었으나, 사용자 입장에서는 보이지 않는 부분이며, 아마도 버전 업 하면서 기능을 개선시킨 것으로 여겨집니다. 
 
HSM을 Keystore로 사용함으로 인해, 초래되는 성능 저하는 거의 없을 것으로 여겨집니다. 실제 데이타의 암ㆍ복호화는 Working Key로 수행되어지기 때문입니다. 성능에 차이가 있다면, Working Key를 사용하기 전에, LAN(TCP/IP 통신)을 통해 HSM 을 call 하는 것에서 초래됩니다. 따라서 초당 수 백건 이상의 데이타를 처리해야 하는, 속도에 민감한 경우는, 실제 환경과 비슷한 환경에서 비교 테스트를 수행해 보는 것이 필요하다고 여겨집니다. . .
 
 
아래 그림은 오라클 DB 서버와 다른 어플리케이션 서버에서 HSM 장비를 공유해서 사용할 경우의 그림입니다. .오라클 DB 사버용으로만 HSM을 사용할 경우는, LAN cable을 직접 바로 연결하면 됩니다. 

 

반응형