- yagom's blog
- 배움에 길에는 끝이 없다.
- Naked Foot
- SAP PP
- SAP ABAP
- SAP BSP
- SAP Inside
- 자바지기
- SECRET OF KOREA
- X-Mobile User Interface World
- 대한민국 자식연합
- 대한민국 토리스토리
- Malus domestica
- PCPINSIDE(거리로 PC, 거실로 PC)
- My Eyes on You
- 조대협의 블로그
- 릴리펏's Logbook
- Dr. Ann(닥터앤)의 DB이야기
- 디지털을 말한다. By oojoo
- Slow Adopter
- T.B 의 SNS 이야기
- Sense and Sensibility
- 언제나 Burning~
- 바스토프의 세상이야기
- Edu&Story
- Min.Gun
- freestation
- nigh
- Programmer
- Shine A Light
- 하루 벌어 하루 살아요. ㅋㅋ
- 아이캐리즈
- 오라클 성능 문제에 대한 통찰 - 조동욱
- 에너쓰오라클
- Science of DataBase
- 기억을 글로 담기
- 홍기선's 아키텍트 이야기 그리고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Analytic Function
- MSSQL SQL
- data pump
- ORACLE SQL
- oracle
- A2P
- cluster table
- oracle tuning
- RBM
- 스폰서 요금제
- JDBC
- PostgreSQL
- Mean Time Between Failures
- index-organized table
- java
- aws
- zero rating
- Annualized Failure Rate
- Database
- ansi query
- OUTER JOIN
- Network Neutrality
- nested loops join
- semi join
- tuning
- ERP
- AWS Elastic Beanstalk
- Table
- EA
- MTBF
- Today
- Total
아이짱구
투명 데이터 암호화를 통한 저장된 데이터 보안 본문
Securing Stored Data Using Transparent Data Encryption
투명 데이터 암호화(TDE)를 사용하면 테이블과 테이블 공간에 저장하는 중요한 데이터를 암호화 할 수 있다. 암호화된 데이터는 데이터에 대한 액세스 권한이 있는 데이터베이스 사용자 또는 응용 프로그램에 투명하게 복호화 된다. TDE는 저장 매체 및 데이터 파일이 도난 당한 경우, 매체에 저장되어 있는 데이터를 보호할 수 있다.
About Transparent Data Encryption
Oracle Database의 데이터는 인증, 권한 부여 및 감사 메커니즘에 의해 보호되지만 데이터를 포함하는 운영체제 데이터 파일은 보호되지 않는다. 이러한 데이터 파일을 보호하기 위해서, Oracle Database에 투명 데이터 암호화가 포함되어 있다. TDE는 데이터 파일에 저장되어 있는 기밀 데이터를 암호화한다. 무단 해독을 방지하기 위해 TDE는 데이터베이스 외부 보안 모듈 암호화 키를 포함하고 있다.
데이터베이스 사용자와 응용 프로그램은 키 저장을 관리하고 보조 테이블, 뷰 및 트리거를 만들 필요가 없다. 중요한 데이터를 처리하는 응용 프로그램 TDE를 사용하면 응용 프로그램을 거의 또는 전혀 변경하지 않고 강력한 데이터 암호화를 제공한다.
TDE는 신용카드번호나 주민등록번호 등 중요한 데이터를 테이블의 컬럼에 저장하는데 사용한다. TDE를 사용하여 테이블 전체를 암호화 할 수 있다.
1. 장점
- 보안 관리자는 저장 매체 및 데이터 파일이 도난 당한 경우 민감한 데이터의 안전성을 확보할 수 있다.
- TDE를 구현함으로써 보안 규정 준수 문제에 대한 대응이 촉진된다.
- 권한이 있는 사용자 또는 응용 프로그램에 데이터를 해독하기 위해 트리거 또는 뷰를 만들 필요가 없다. 테이블의 데이터는 데이터베이스 사용자 및 응용 프로그램에 투명하게 복호화 된다.
- 데이터베이스 사용자 및 응용 프로그램이 액세스하는 데이터가 암호화 되어 저장되고 있다는 사실을 인식할 필요는 없다. 데이터는 데이터베이스 사용자 및 응용 프로그램에 투명하게 복화화 된다.
- 암호화된 데이터를 처리하도록 응용 프로그램을 변경할 필요가 없다. 데이터 암호화 및 복호화를 데이터베이스에 의해 관리한다.
- 키 관리 작업이 자동화 된다. 사용자 및 응용 프로그램은 암호화 키를 관리할 필요가 없다.
2. 암호화 유형
TDE 컬럼 암호화를 사용하면 선택한 테이블의 컬럼에 저장되어 있는 기밀 데이터를 암호화할 수 있다. TDE 테이블스페이스 암호화를 사용하면 테이블에 저장된 모든 데이터를 암호화할 수 있다. TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화는 모두 2층 키 기반 아키텍처를 사용한다. 암호화된 데이터를 검색하면 복호화 전 까지 이해가 불가능하다. 이 암호화 데이터에 대한 복호화는 테이블에 액세스할 수 있는 사용자에 대해 자동으로 수행된다.
2.1 TDE 컬럼 암호화
TDE 컬럼 암호화는 신용카드번호나 주민등록번호 등 중요한 데이터를 테이블의 컬럼에 저장하는데 사용한다. TDE 컬럼 암호화는 2층 키 기반 아키텍처를 사용하여 민감한 테이블의 컬럼을 투명하게 암호화 및 복호화 한다. TDE 마스터 암호화 키를 외부 보안 모듈에 저장한다. 이 외부 모듈은 Oracle 지갑 또는 하드웨어 보안 모듈(HSM)이다.
그림과 같이 마스터 암호화 키는 데이터에비스 외부에서 보안 관리자만 액세스할 수 있는 외부 보안 모듈에 저장된다. 이 외부 보안 모듈은 Oracle 지갑 또는 HSM을 사용한다. 따라서 마스터 암호화 키를 저장함으로써 무단 사용을 방지한다.
2.2 TDE 테이블스페이스 암호화
TDE 테이블스페이스 암호화를 사용하면 테이블 전체를 암호화 할 수 있다. 암호화 되어 있는 테이블스페이스에 만들어진 모든 개체는 자동으로 암호화된다. TDE 테이블스페이스 암호화는 테이블의 기밀 데이터를 보호하는데 유용하다. 암호화가 필요한 열을 확인하기 위해 각 테이블 열에 대한 자세한 분석을 수행할 필요가 없다.
또한, TDE 테이블스페이스 암호화는 벌크 암호화 및 캐시를 사용하여 높은 성능을 제공한다. 응용 프로그램의 실제 성능에 미치는 영향은 다르지만 성능에 미치는 영향은 약 5~8%로 추정된다.
TDE 테이블스페이스 암호화는 테이블의 여러 열에 민감한 데이터가 포함되어 있거나 개별 열 대신 전체 테이블을 보호하는 경우에 TDE 컬럼 암호화를 대체할 효과적인 대안이다.
TDE 테이블스페이스 암호화는 암호화된 테이블스페이스에 저장되는 데이터는 암호화 된다. 이 경우 BLOB 및 CLOB 같은 내부 대형 오브젝트(LOB)도 암호화 대상이 된다. TDE 테이블스페이스 암호화는 테이블스페이스 외부에 저장되는 데이터는 암호화 되지 않는다. 예를 들어 데이터베이스 외부에 저장된 BFILE 데이터는 암호화되지 않는다. 암호화된 테이블에 BFILE 열이 있는 테이블을 만든 경우 이 특별한 라인은 암호화되지 않는다. 그러나 SecureFile LOB는 Oracle Database 11g Release 1(11.1)에서 지원되고 있다.
암호화 된 테이블스페이스의 모든 데이터는 디스크에 암호화된 형식으로 저장된다. 데이터를 보거나 수정할 수 있는 권한이 있는 사용자는 데이터를 투명하게 해독하여 접근할 수 있다. 데이터베이스 사용자 또는 응용 프로그램은 특정 테이블 디스크에 암화회 되어 있는지 여부를 확인 할 필요가 없다. 디스크의 데이터 파일 또는 백업 미디어가 도난 당한 경우에도 데이터는 손상되지 않는다.
TDE 테이블스페이스 암호화는 두개 층의 키 기반 아키텍처를 사용하여 테이블을 투명하게 암호화 및 해독한다. TDE 마스터 키는 외부 보안 모듈(Oracle Wallet 또는 HSM)에 저장된다. 이 TDE 마스터 키는 TDE 테이블스페이스 오브젝트를 암호화하고 해독하는 사용한다.
참고: 암호화된 데이터를 JOIN이나 SORT 등의 작업 중에도 보호된다. 이것은 데이터를 임시 테입르로 이동하는 경에도 안전하다는 것을 의미한다. UNDO 로그와 REDO 로그의 데이터를 보호한다.
TDE 테이블스페이스 암호화를 사용하면 암호화된 테이블스페이스의 데이터에 대해 인덱스 범위 스탠을 수행할 수 있다. TDE 컬럼 암호화는 인덱스 범위 스캔을 지원하지 않는다.
Oracle Database 11g Release 2(11.2)에서는 TDE 테이블스페이스 암호화에 다음과 같은 향상된 기능이 구현되어 있다.
- TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화 모두 통합 마스터 암호화 키를 사용한다.
- 통합 마스터 암호화 키를 다시 설정할 수 있다. 이에 따라서 향상된 보안 및 준수 요구사항에 대응이 가능하다.
Using Transparent Data Encryption
1. 투명 데이터 암호화 사용
TDE 컬럼 암호화는 Oracle Database 10g Release 2(10.2)에서 처음 소개되었다.
TDE 테이블스페이스 암호화는 Oracle Database 11g Release 1(11.1)에서 도입되었다.
참고: Oracle Database 11g Release 1(11.1) 이상에서는 JOIN 이나 SORT 등의 작업 중에 임시 테이블스페이스 데이터를 보호한다. 즉, 작업 중에 임시 테이블스페이스의 데이터가 암호화된 상태로 존재한다.
TDE를 사용하기 시작하려면 보안 관리자가 지갑을 만들고 마스터 키를 설정해야 한다. 지갑은 다른 Oracle Database 구성 요소와 공유되는 기본 데이터베이스 지갑 또는 TDE 전용으로 사용하는 다른 지갑을 사용할 수 있다. 마스터 암호화 키를 별도의 지갑을 사용하여 저장하는 것이 좋다.
1.1 투명 데이터 암호화를 위해 지갑 위치 지정
TDE 전용 지값을 사용하려면 sqlnet.ora 파일 ENCRYPTION_WALLET_LOCATION 매개 변수를 사용하여 두 번째 지갑 위치를 지정해야 한다. YDE의 지갑 위치를 지정하려면 ENCRYPTION_WALLET_LOCATION 매개 변수의 사용을 추천한다.
1.2 자동 로그인을 사용하는 지갑 사용
외부 보안 모듈은 자동 로그인 기능이 활성화되어 있는 지갑을 사용할 수 있다. 이런 지갑은 항상 열려 있는 상태이다. 보안 관리자는 데이터베이스 인스턴스를 다시 시작한 후 지갑을 다시 열 필요가 없다. 지갑에서 제공되는 추가 보안(명시적으로 오픈하고 사용해야 한다)을 필요로 하지 않는 환경에서는 자동 로그인 지갑을 사용할 수 있다.
로컬 자동 로그인 지갑을 만들 수 있다. 로컬 자동 로그인 지갑을 다른 컴퓨터로 이동할 수 없다. 로컬 자동 로그인 지갑은 생성된 호스트에서 사용해야 된다.
2. 마스터 암호화 키 설정 및 재구성
마스터 암호화 키를 외부 보안 모듈에 저장된 테이블 키와 테이블스페이스 암호화 키를 보호하는데 사용된다. 기본적으로 마스터 암호화 키를 투명 데이터 암호화에 의해 생성되는 임의의 열쇠이다. 마스터 키는 암호화를 위해 지정된 PKI 인증서의 두 개의 키가 필요하다. PKI 키 쌍과 함께 TDE를 사용하려면 발행 인증기관이 암호화에 표시된 키를 사용 필드를 포함하는 X.509v3 인증서를 발급 받아야 한다.
참고: PKI 기반의 암호화는 TDE 테이블스페이스 암호화 및 하드웨어 보안 모듈과 함께 사용할 수 없다. 하드웨어 보안 모듈의 자세한 내용은 'TDE의 하드웨어 보안 모듈의 사용'을 참조한다.
두 개의 키 타입도 보안과 비슷하지만 조직에 이미 PKI를 배포하는 경우에는 PKI 서비스를 키 공탁 및 복구로 활용할 수 있다. 그러나 현재 PKI 알고리즘을 사용하여 암호화는 대칭 키 암호화보다 훨씬 더 많은 시스템 자원을 필요로 한다. 마스터 암호화 키로 PKI 키 쌍을 사용하면 데이터베이스의 암호화 열에 액세스할 때 성능이 크게 저하 될 수 있다.
마스터 암호화 키를 설정하거나 다시 설정(rekey)는 ALTER SYSTEM 명령을 사용한다. 다음 섹션에서는 마스터 암호화 키 구성 및 재구성에 대해 설명한다.
2.1 마스터 암호화 키 설정
데이터베이스 열 또는 데이블스페이스를 암호화 또는 복호화 하려면 그 전에 마스터 암호화 키를 생성해야 한다. Oracle Database 11g Release 2(11.2)에서는 TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화에서 동일한 마스터 암호화 키를 사용한다.
마스터 암호화 키 설정 명령은 다음과 같다.
SQL> ALTER SYSTEM SET ENCRYPTION KEY ["certificate_id"] IDENTIFIED BY "password";
- "certificate_id"는 Oracle 지갑에 저장되어 있는 인증서의 고유 식별자를 포함하는 선택적 문자열이다. PKI 비밀키를 마스터 암호화 키로 사용하는 경우 이 매개 변수를 사용한다. 이 매개 변수 기본 값은 없다. certificate_id는 큰 따옴표로 묶는다. certificate_id를 검색하려면 지갑이 열려 있을 때 V$WALLET 뷰를 질의한다. TDE 마스터 암호화 키로 사용할 수 있는 인증서만 표시된다.
- password는 보안 모듈의 필수 지갑 암호로 기본 설정 값은 없다. 이 암호는 대, 소문자를 구분한다. 암호 문자열을 큰 따옴표로 묶는다.
sqlnet.ora 파라미터 파일 ENCRYPTION_WALLET_LOCATION 매개 변수로 지정된 지갑 위치는 마스터 암호화 키를 만드는데 사용된다. sqlnet.ora 파일에 ENCRYPTION_WALLET_LOCATION 매개 변수가 지정되지 않으면 WALLET_LOCATION 값이 사용된다. 지갑이 존재하지 않으면 새로 만든다.
sqlnet.ora 파일 지갑 위치를 지정하지 않으면 기본 데이터베이스 지갑 위치가 사용된다. 기본 데이터베이스 지갑 위치는 ORACLE_BASE/admin/DB_UNIQUE_NAME/wallet 또는 ORACLE_HOME/admin/DB_UNIQUE_NAME/wallet에 존재한다. 여기서 DB_UNIQUE_NAME는 초기화 매개 변수 파일에 지정된 데이터베이스의 고유 이름이다.
생성하려는 지갑 위치에 기존 자동 로그인 지갑이 존재하면 새로은 지갑을 만들 수 없다.
2.2 마스터 암호화 키 재설정
마스터 암호화 키 재설정 및 재생성은 마스터 암호화 키 안전성이 손상되었을 경우, 또는 조직의 보안 정책을 따를 경우에만 수행한다. 마스터 암호화 키를 다시 설정하기 전에 지갑을 백업해야 한다.
자주 마스터 암호화 키를 다시 생성해도 시스템 보안이 강화되는 것은 아니다. 보안 모듈은 다수의 키를 저장할 수 있다. 그러나 이 숫자는 무한하지 않다. 자주 마스터 암호화 키를 다시 생서하면 사용 가능한 저장소를 소모할 수 있다.
마스터 암호화 키를 다시 설정하려면 "마스터 암호화 키 설정"에 설명되어 있는 SQL 구문을 사용한다.
참고: 자동 로그인이 설정되어 있는 지갑 마스터 암호화 키를 다시 설정하면 마스터 암호화 키를 다시 설정 명령을 설행하려면 확장자가 .sso인 자동 로그인 지갑과 .p12 암호화 지갑 모두 존재해야 한다. ALTER SYSTEM SET ENCRYPTION KEY 명령은 ALTER SYSTEM 권한이 필요한 데이터 정의 언어(DDL) 명령어로 따라서 보류 중인 모든 트랜잭션이 자동으로 커밋 된다.
예제-1 PKI 기반의 비밀키를 사용하기 위한 마스터 암호화 키 구성 또는 재구성
SQL> ALTER SYSTEM SET ENCRYPTION KEY "j23lm781098dhb345sm" IDENTIFIED BY "p3812dH9E";
여기서 j23lm781098dhb345sm는 인증서 ID, p3812dH9E는 지갑 비밀번호이다.
PKI 기반 키의 경우, 인증서 해지 목록은 규정되지 않는다. 이것은 인증서 해지를 규정하는 데이터베이스의 암호화된 모든 정보에 액세스할 수 없게 될 가능성이 있기 때문이다. 그러나 동일한 인증서를 사용하여 마스터 키를 다시 만들 수 없다.
3. 암호화 지갑 열기 및 닫기
데이터베이스의 열/테이블스페이스를 암호화 또는 복호화 하려면 그 전에 마스터 암호화 키를 메모리에 로드 되어 있어야 한다. 지갑을 열면 데이터베이스 마스터 암호화 키에 액세스할 수 있다. 다음 ALTER SYSTEM 명령을 사용하여 지갑을 며시적으로 오픈한다.
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN INDENTIFIED BY "password";
지갑을 열면 데이터에비스 인스턴스를 중지하거나 다음 명령을 실행하여 지갑을 명시적으로 닫을 때까지 열린 상태가 된다.
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE INDENTIFIED BY "password";
지갑을 닫으면 암호화 및 해독 작업이 모두 무효가 된다. 데이터를 암호화/복호화 하려고 하거나 암호화 된 데이터에 액세스 하려고 하면 다음의 오류가 발생한다.
ORA-28365: wallet is not open
데이터베이스 인스턴스를 다시 시작할 때마다, ALTER SYSTEM SET ENCRYPTION WALLET OPEN INDENTIFIED BY "password" 명령을 실행하여 암호화 및 해독 작업을 다시 활성화해야 한다.
참고: 자동 로그인 지갑은 자동으로 지갑이 열린다. 자동 로그인 지갑을 닫을 필요가 있는 경우 다음 명령으로 닫을 수 있다.
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
자동 로그인 지갑을 닫을 때는 암호를 지정할 필요가 없다.
사용자에게 ALTER SYSTEM 권한이 없거나 지갑이 사용할 수 없는 경우 잘못된 암호가 입력된 경우 이 명령은 오류를 반환하고 종료한다. 지갑이 이미 오픈되어 있는 경우 이 명령은 오류를 반환하고 아무것도 실행하지 않는다.
예제-2 ALTER SYSTEM을 사용하여 외부 보안 모듈 지갑 오픈
SQL> - Successfully opening the wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN INDENTIFIED BY "UB83j10LLt8v";
Wallet opened.
SQL> - Trying to open a wallet that is already open
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN INDENTIFIED BY "UB83j10LLt8v";
ERROR at line 1: ORA-28354: wallet already open
SQL> - Trying to open a wallet with an incorrect password
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN INDENTIFIED BY "U83j10LLt8v";
ERROR at line 1: ORA-28353: failed to open wallet
4. 테이블 컬럼의 암호화
4.1 암호화 열을 포함하는 테이블 만들기
암호화 열을 포함하는 관게형 테이블을 작성하려면 CREATE TABLE 문으로 데이터베이스 열을 정의할 때 SQL ENCRYPT 절을 지정한다.
4.1.1 암호화 열을 포함하는 테이블을 만드는 방법
기본적으로 TDE는 192비트 길이의 키를 사용하는 AES 암호화 알고리즘(AES192)을 사용한다. 알고리즘을 지정하지 않고 테이블의 열을 암호화하면 해당 열은 AES192 알고리즘을 사용하여 암호화 된다.
TDE는 암호화 전에 일반 텍스트로 salt를 추가한다. 이렇게 하면 공격자가 무작위 공격으로 데이터를 훔치는 것이 더 어려워 진다. 또한 무결성을 확인하기 위해 데이터 메시지 인증코드(MAC)가 추가된다. 기본적으로 SHA-1 무결성 알고리즘이 사용된다.
참고: 하나의 테이블에 여러 개의 암호화 열이 있는 경우 이러한 모든 열을 암호화 알고리즘과 무결성 알고리즘을 쌍으로 사용해야 한다. salt는 열 수준에서 지정된다. 즉, 테이블의 암호화 열은 테이블의 다른 암호화 열이 salt를 사용하는지 여부에 관계없이, salt를 사용하지 않도록 선택할 수 있다.
예제-3은 암호화 열을 포함하는 새 테이블을 만들고 있다. 이 열은 기본 암호화 알고리즘(AES192)을 사용하여 암호화된다. salt 및 MAC은 기본적으로 추가된다.
예제-3 기본 알고리즘 AES192를 사용하는 암호화 열을 포함하는 새 테이블 만들기
CREATE TABLE employee (
first_name VARCHAR2 (128),
last_name VARCHAR2 (128),
empID NUMBER,
salary NUMBER (6) ENCRYPT
);
4.1.2 기본값 이외의 알고리즘 및 NO SALT를 사용하는 암호화 열을 포함하는 테이블을 만드는 방법
기본적으로 TDE는 암호화 전에 일반 텍스트로 salt를 추가한다. 이렇게 하면 공격자가 무작위 공격으로 데이터를 훔치는 것이 더 어려워진다. 그러나 암호화 열을 이덱싱하는 경우 NO SALT를 사용해야 한다.
TDE는 기본값이 아닌 암호화 알고리즘을 지정할 수 있다. 다음 중 하나의 알고리즘을 선택할 수 있다.
- 3DES168
- AES128
- AES192 (기본값)
- AES256
예제-4는 SQL ENCRYPT 절에 NO SALT 매개 변수를 지정하는 방법을 나타낸다. 또 다른 암호화 알고리즘을 지정하는 구문도 보여준다. 알고리즘을 지정하는 문자열은 작은 따옴표로 묶어야 한다.것을 주의한다. empID 컬럼과 salary 컬럼은 3DES168 암호화 알고리즘을 사용한다. 이것은 테이블의 모든 암호화 열이 동일한 알고리즘을 사용하고 있을 필요가 있기 때문이다. salary 컬럼은 기본적으로 salt를 사용한다.
empID 열에 NO SALT 옵션이 지정되어 있기 때문에 salt는 사용하지 않는다.
CREATE TABLE employee (
first_name VARCHAR2 (128),
last_name VARCHAR2 (128),
empID NUMBER ENCRYPT NO SALT,
salary NUMBER (6) ENCRYPT USING '3DES168'
);
4.1.3 NOMAC 매개 변수 사용으로 디스크 공간 절약 및 성능 향상
NOMAC 매개 변수를 사용하여 TDE에 의해 수행되는 무결성 검사를 생략할 수 있다. 이 매개 변수는 암호화된 값에 대해 20바이트의 디스크 공간이 절약된다. 표 행 및 암호화 열 수가 많은 경우 이로 인해 절약되는 디스크 공간은 상당한 금액이다.
또한, NOMAC 매개 변수는 TDE와 관련된 성능 오버헤드를 줄일 수 있다. NOMAC 매개 변수를 사용하여 암호화 및 복호화 조작시 무결성 검사가 생략된다. 이것에 의해 처리 순환이 빨라지고 성능이 향상 된다.
참고: TDE에서는 기본적으로 SHA-1 무결성 알고리즘을 사용한다. 테이블의 모든 암호화 열이 동일한 무결성 알고리즘을 사용하고 있을 필요가 없다. SHA-1 알고리즘을 사용하는 컬럼이 테이블에 존재하는 경우 NOMAC 매개 변수를 사용하여 동일한 테이블의 다른 컬럼을 암호화할 수 없다.
ALTER TABLE ... REKEY ... 명령을 사용하여 테이블의 모든 암호화 열에 사용되는 무결성 알고리즘을 변경할 수 있다.
예제-5는 암호화 열을 포함하는 테이블을 작성한다. empID 열은 NOMAC 매개 변수를 사용하여 암호화된다.
예제-5 CREATE TABLE 문에서 NOMAC 매개 변수 사용
CREATE TABLE employee (
first_name VARCHAR2 (128),
last_name VARCHAR2 (128),
empID NUMBER ENCRYPT 'NOMAC' NO SALT,
salary NUMBER (6)
);
예제-6은 테이블의 암호화 열 무결성 알고리즘을 변경하는 방법을 보여준다. 암호화 알고리즘은 3DESA168에 무결성 알고리즘은 SHA-1으로 설정한다. 두 번째 ALTER TABLE 문은 무결성 알고리즘을 NOMAC으로 설정한다.
예제-6 테이블의 무결성 알고리즘 변경
SQL> ALTER TABLE EMPLOYEE REKEY USING '3DES168' 'SHA-1';
Table altered
SQL> ALTER TABLE EMPLOYEE REKEY USING '3DES168' 'NOMAC';
Table altered
5 테이블스페이스 전체의 암호화
TDE 테이블스페이스 암호화를 사용하려면 Oracle Database 11g Release 1(11.1) 이상을 사용해야 한다. 이전 버전에서 업그레이드 하는 경우 데이터베이스 호환성을 11.0.0 이상으로 설정해야 한다.
Oracle Database 11g Release 2(11.2)의 향상된 테이블스페이스 암호화 기능을 사용하려면 데이터베이스 호환성을 11.2 이상으로 설정해야 한다.
참고: COMPATIBLE 초기화 매개 변수를 사용하여 업데이트된 데이터베이스 호환성을 취소할 수 없다.
5.1 테이블스페이스 마스터 암호화 키 설정
테이블스페이스를 암호화 또는 복호화 하려면 그 전에 마스터 암호화 키를 생성하거나 설정해야 한다. 테이블의 마스터 암호화 키를 외부 보안 모듈에 저장된 TDE 테이블스페이스 암호화 키를 암호화하는데 사용된다.
sqlnet.ora 파일 ENCRYPTION_WALLET_LOCATION (또는 WALLET_LOCATION) 매개 변수가 올바른 소프트웨어 지갑 위치를 가리키고 있는지 확인해야 한다.
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/app/wallet)))
Oracle Database 11g Release 2(11.2)에서는 TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화에서 동일한 마스터 암호화 키를 사용한다. ALTER SYSTEM SET ENCRYPTION KEY 명령을 실행하면 TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화 모두에 대해 통합 마스터 암화화 키가 만들어진다. 마스터 암호화 키를 만드는 방법은 "마스터 암호화 키 설정"을 참조한다.
Oracle Database 10g Release 2(10.2)에서 TDE를 이미 사용하고 있고 다음 다음 데이터베이스를 11g Release 2(11.2)로 업그레이드 한 경우 ALTER SYSTEM SET ENCRYPTION KEY 명령을 다시 실행하여 통합 마스터 암호화 키를 생성해야 한다.
Oracle Database 11g Release 1(11.1)에서 TDE 테이블스페이스 암호화를 이미 사용하고 있고, 다음 데이터베이스를 11g Release 2(11.2)로 업그레이드 한 경우 TDE 컬럼 암호화 및 TDE 컬럼 암호화 및 TDE 테이블스페이스 암호화에 대해 생성되어 별도의 마스터 암호화 키를 사용한다. ALTER SYSTEM SET ENCRYPTION KEY 명령을 다시 실행하여 통합 마스터 암호화 키를 생성해야 한다.
5.2 Oracle 지갑 오픈
암호화된 테이브르스페이스를 생성하려면 , 먼저 테이블스페이스의 마스터 암호화 키를 포함하는 Oracle 지갑을 열어야 한다. 또한 이 지갑은 암호화 된 테이블스페이스의 데이터에 액세스하기 전에 열려 있어야 한다.
참고: 보안 관리자는 Oracle 인스턴스 시작 후 Oracle 지갑을 열어야 한다. Oracle 인스턴스를 다시 시작하려면 보안 관리자가 지갑을 다시 열어야 한다. 보안 관리자는 데이터베이스 복구 작업을 수행하기 전에도 지갑을 여어야 한다. 데이터베이스 복구를 실행할 때 데이터베이스를 열기 전에 지갑을 먼저 열어야 한다. 다음 예제를 참고한다.
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
SQL> ALTER DATABASE OPEN;
명시적으로 오픈해야 지갑이 제공하는 특별한 보안이 필요하지 않은 환경에서 자동 로그인 지갑을 사용할 수도 있다. 그러나 이 방법은 추천하지 않는다.
5.3 암호화 된 테이블스페이스 생성
암호화 된 테이블은 CREATE TABLESPACE 명령을 사용하여 만들 수 있다. permanent_tablespace_clause를 사용하면 암호화 알고리즘과 암호화 키 길이를 선택할 수 있다. storage_clause의 ENCRYPT 키워드를 사용하면 테이블스페이스는 암호화 된다. 구문은 다음과 같다.
CREATE
[ BIGFILE | SMALLFILE ]
{ permanent_tablespace_clause | temporary_tablespace_clause | undo_tablespace_clause };
WHERE,
permanent_tablespace_clause=
TABLESPACE tablespace
...
ENCRYPTION [ USING algorithm ]
...
storage_clause
...
WHERE,
sotrage_clause=
...
[ENCRYPT]
...
여기서 algorithm은 다음 값 중 하나를 지정할 수 있다.
- 3DES168
- AES128
- AES192
- AES256
키 길이는 알고리즘 자체의 이름에 포함되어 있다. 암호화 알고리즘을 지정하지 않으면 기본 암호화 알고리즘이 사용된다. 기본 암호화 알고리즘은 AES128 이다.
참고: permanent_tablespace_clause의 ENCRYPTION 키워드는 암호화 알고리즘을 지정하는데 사용된다. 테이블은 storage_tablespace_clause의 ENCRYPT 키워드에 의해 암호화 된다. 보안상 이유로 NO SALT 옵션은 테이블스페이스를 암호화할 수 없다.
예제-7은 securespace라는 테이블스페이스를 생성한다. 이 테이블은 3DES168 알고리즘을 사용하여 암호화 된다.
예제-7 암호화 테이블스페이스 생성
CREATE TABLESPACE securespace
DATAFILE '/home/user/oradata/secure01.dbf' SIZE 150M
ENCRYPTION USING '3DES168'
DEFAULT STORAGE (ENCRYPT);
- DBA_TABLESPACES: ENCRYPTED 컬럼에 테이블스페이스의 암호화 여부 확인
- USER_TABLESPACES: ENCRYPTED 컬럼에 테이블스페이스의 암호화 여부 확인
기존 테이블스페이스를 암호화 할 수 없다. 그러나 Oracle Data Pump 유틸리티를 사용하여 암호화 된 테이블스페이스의 데이터를 가져올 수 있다. CREATE TABLE ... AS SELECT ... 또는 ALTER TABLE ... MOVE ... 등의 SQL 명령을 사용하여 암호화된 테이블스페이스의 데이터를 이동할 수 있다. CREATE TABLE ... AS SELECT ... 명령은 SELECT 절의 테이블과 동일한 테이블을 생성할 수 있다. ALTER TABLE ... MOVE ... 명령은 테이블을 암호화된 테이블스페이스로 이동할 수 있다.
5.4 TDE 테이블스페이스 암호화 사용에 대한 제한
TDE 테이블스페이스 암호화는 읽기/쓰기 작업에서 데이터를 암호화 하거나 해독한다. 대조적으로 TDE 컬럼 암호화는 SQL 계층에서 데이터를 암호화 또는 복호화 한다. 이것은 TDE 컬럼 암호화에 적용되는 제한(데이터 형식 제한, 인덱스 유형 제한 등)의 대부분은 TDE 테이블스페이스 암호화에 적용할 수 없다는 것을 의미한다.
다음 목록은 TDE 테이블스페이스 암호화에 적용되는 제한이다.
TDE 테이블스페이스 암호화를 사용하여 외부 대형 오브젝트(BFILE)를 암호화 할 수 없다. 데이터베이스 외부에 존재하는 오브젝트로 지원하지 않는다.
가져오기/내보내기 유틸리티는 지원하지 않는다. 대신 Oracle Data Pump 유틸리티를 사용한다.