본문 바로가기
Information Security

[DB보안] 데이터베이스 암호화 설계, 구축, 운영 및 MySQL DBMS 암호화

by rla124 2024. 5. 28.

코딩하다가 집중이 안되면 기말고사 이론을 공부하는게 최고..

 

데이터베이스 암호화 설계란 데이터베이스 암호화 구축을 위해 전반적인 암호화에 대한 고려사항을 식별하고 설계하는 단계를 말한다. 데이터베이스 암호화 설계에는 5가지 고려해야할 요소가 있다.

 

- 데이터베이스 사용자 식별

- 비인가 사용자에 대한 통제

- 복호화 권한 통제

- 암호화 대상 선정

- 암호화 알고리즘 선정 

 

1. 사용자 식별 및 비인가 사용자에 대한 통제

사용자 식별

데이터베이스 암호화를 수행하기 전에 해당 데이터베이스를 사용하고 있는 사용자를 식별하여 적절한 사용자에게 암호키를 제공하는 것이 목적이며 사용자에게 정형적인 접근과 비정형적인 접근 권한을 줄 수 있다.

정형적인 접근은 웹 서버, 응용 프로그램처럼 특정 업무 수행을 위해 정기적으로 데이터베이스에서 접속하여 반복적인 SQL 작업을 수행하는 것이고 비정형적인 접근은 데이터베이스 관리자, 애플리케이션 개발자와 같이 DBMS 유지 보수나 애플리케이션 개발을 위해 DB에 직접 접속하여 데이터를 변경, 삭제 및 조회하는 작업을 수행할 수 있다. 

 

또한, 식별된 사용자들에 대한 접근 정보를 추가적으로 식별함으로써 정당한 상황에서만 암호 키가 발급 또는 복호화가 수행되도록 데이터베이스 암호화를 설계해야 한다. 

 

비인가 사용자에 대한 통제

비인가 사용자가 암호화된 데이터베이스에 접근을 시도할 때 보여지는 암호화된 데이터 형태의 설계를 말한다. 비인가 사용자에게는 암호화된 데이터를 null 값으로 표현하거나 암호화된 모습 그대로를 보여주는 방법을 적용할 수 있다. 

 

2. 암호화 대상 선정

데이터베이스 내 데이터 중에서도 특정 칼럼, 데이터베이스 전체 등 암호화를 수행할 대상을 암호화 대상이라고 한다. 

 

컬럼 암호화

- 일부 칼럼에 대하서만 암호화

- 암호화할 데이터 선정 과정이 추가로 필요

- 일반적으로 특정 개인을 알아낼 수 있거나 지극히 개인적인 민감하다고 판단되는 데이터가 저장된 칼럼을 선택한다. (주민번호, 신용카드 번호, 계좌번호 등)

식별된 사용자마다 적절한 암호화를 수행할 수 있다는 장점 : 의료 분야에서 환자의 의료 정보를 포함하는 테이블의 경우 의사는 질병 정보를 복호화하여 보여주고 간호사는 질병정보가 보이지 않도록 암호화하도록 설정

- 암호화된 컬럼이 인덱스를 가진 경우 인덱스 활용이 불가하다는 단점 

 

데이터베이스 전체 암호화

- 파일, 테이블스페이스 등과같이 논리적 저장 단위에 대해 암호화

- 파일 자체를 암호화하며 비인가 사용자의 데이터 열람을 비허용한다.

- 디스크 암호화 == 테이블스페이스 암호화 == 블록 암호화 == 데이터베이스 전체 암호화

- 민감한 칼럼을 별도로 식별하지 않아도 되는 간단한 구현방식이기 때문에 편리하고 전체가 암호화되므로 비인가자는 데이터 확인이 불가하다는 장점이 있어 높은 안전성을 확보

- 빈번한 암/복호화 과정으로 인해 DBMS 부하 발생 우려가 있고 사용자를 식별할 수 없어 사용자 관리에 어려움

 


 

데이터베이스 암호화 구축이란 암호화 설계 단계에서 설계한 내용을 토대로 실제 데이터베이스에 암호화를 수행하는 단계이다. 

 

1. 원본 데이터 삭제 

데이터베이스 암호화 수행 후, 원본 데이터를 가진 모든 스토리지에 포함된 평문 형태의 데이터를 삭제해야 한다. 반드시 인덱스 정보까지 삭제해야 한다. 

 

기존 DBMS의 서비스를 유지하면서 삭제하는 방식

- 시스템의 가용성을 유지 → O

- 암호화 시간 →  증가

 

서비스를 일시정지하고 삭제하는 방식

- 시스템의 가용성을 보장    X 

- 암호화 시간 →  짧음. 

 

2. 제약사항 유지

원본 데이터가 암호화된 이후에도 연관관계를 가지고 있던 인덱스, 기본키, 외래키, 유일키, 트리거 등 그대로 유지하는 것을 말한다. 인덱스를 까지 함께 암호화하여 복호화 되었을 때 사용할 수 있도록 해야 하며 암호화되지 않은 별도의 칼럼을 통해 인덱스가 가능하도록 구축해야 한다. 

 

3. DB 암호화 키 관리

암/복호화에 수행된 암호 키를 암호화하여 관리하는 것이다. 허술한 암호 키 관리로 악의적인 공격자가 암호 키를 취득하여 복호화를 통해 원본 데이터를 얻을 수 있기 때문에 데이터베이스 암호 구축에서 가장 중요하다. 

 

암호화 키 관리 방법은 아래와 같다.

- 마스터 키 사용

- HSM

- 암호 키에 대한 접근제어

- 암호 키 발급 및 폐기 내역 관리 

 

마스터 키 사용

- 암호 키가 임의 테이블에 저장되어도 암호화되어 있기 때문에 상대적으로 안전

- 많은 암호키를 관리해야할 수 있으며 안전한 마스터 키 관리 방인이 필요

 

HSM(Hardware Security Module)

- 암호 키를 보호, 생성, 저장

- 내부에서 생성된 암호 키는 유출이 불가능하도록 구성 

 

암호 키 변경 및 접근제어

- 적절한 주기에 따라 암호키 재발급 : 암호 키 유출 우려 (비번 주기적 변경처럼)

- 키 관리 시스템(키 생성, 폐기, 재발급까지 수행하는 시스템) 

- 권장 기간보다 더 짧은 유효기간 설정 필요 

 


 

데이터베이스 암호화 운영에 대해 알아보자. 

 

1. 암호 키 변경 이력 및 백업 관리 

여러 암호 키 사용 && 주기적인 암호 키 변경 && 암호 키 백업 관리를 통한 키 관리 시스템이다. 

- 암호 키 변경하지 않고 계속 사용할 경우 의도치 않은 보안 사고 발생 가능성 증가

- 하나의 키로 모든 데이터베이스 암호화 수행 시 키 유출 시 큰 보안 사고 발생 우려

- 암호 키를 분실할 경우 복호화가 불가능하여 데이터 손실 및 조직 이익에 악영향

 

- 키 관리 시스템 예 : 오라클의 Oracle Key Vault 

 

2. 사용자 로그 관리 

사용자 행동을 실시간으로 기록한 정보가 필요하기 때문에 사용자가 암호화된 데이터에 어떠한 행동을 수행하는지 모니터링하는 보안 감사이다. 

아래는 이를 위한 방법이다.

 

- 오라클의 보안 감사

- 데이터 사전 : 감사 레코드 내부 저장 시 감사 레코드 데이터 사전을 통해 조회 가능

이름 내용
USERNAME 사용자 이름
TIMESTAMP SQL문 실행 시간
OBJ_NAME 객체 이름
ACTION_NAME SQL문 내용

- 외부 솔루션 : 외부에서 감사를 수행하는 솔루션 

 


 

Oracle DBMS 암호화에 대해 알아보고자 한다.

 

1. Oracle DB 보안 개요

데이터베이스 관리 기능

- 데이터베이스 사용자 관리 : GRANT, REVOKE를 통한 권한 부여, 역할 기반 권한 부여, 뷰와 SQL 문 접근 통제

- 데이터베이스 자체 보호 : 데이터베이스 암호화(중요한 것은 암호화, 필요할 때 복호화) → 암호화로 제3자가 불법 취득 시 내용을 알지 못하여 보안성을 높일 수 있으나 암/복호화 과정으로 DBMS 성능저하 발생 

 

2. TDE(Transparent Data Encryption)

- 데이터베이스 암호화를 위해 제공되는 기술 

방식 설명
컬럼 테이블 내 특정 칼럼에 대해서 암호화를 수행하는 방식
BINARY, CHAR, DATE, TIMESTAMP 데이터 타입 암호화
테이블 스페이스
(여러 개의 물리적
데이터 파일을 포함)
(DB 전체)
테이블 스페이스 내 모든 객체에 대해 암호화를 수행
민감한 데이터가 많은 테이블에 적합

 

장점 데이터베이스 내부(커널 수준)에서 암복호화가 수행되어 구축 용이
응용 프로그램의 소스 코드 변경 및 트리거, 뷰 별도 작성 불필요 

 

- 암호 알고리즘

암호 알고리즘 키 크기(bits) 파라미터
AES 128 ABE128
192 AES192 (Default)
256 AES256
3DES 168 3DES168

 

- 암호 키 : 데이터베이스를 암호화하는 키인 테이블(스페이스) 키 && 테이블 키를 암호화하여 보호하는 마스터 키

 

3. 암/복호화 메소드 

- DBMS_CRYPTO 패키지 사용

- DES, 3DES, AES 등 암호 알고리즘을 피키지 상수로 사용 

 


 

마지막으로 MySQL DBMS의 암호화이다.

 

1. MySQL DB 보안 개요

- 데이터베이스 사용자 관리 : by 권한 부여

- 데이터베이스 자체 보호 : by 데이터베이스 암호화 

- 오라클과의 비교 

Oracle MySQL
TDE 암호화 Data-at-Rest Encryption
실제 암호화를 수행한 암호 키를 마스터 키로 암호화하여 데이터 베이스에 저장, 마스터 키만 관리  데이터베이스를 암호한 암호화 키를 테이블에 저장
칼럼 암호화 지원 칼럼 암호화 지원 X
AES, DES의 다양한 알고리즘 지원 AES256 암호 알고리즘만 지원
다양한 블록 암호 모드 지원 ECB 블록 암호 모드만 지원

 

2. 블록 암호 모드

- DES, AES와 같이 긴 평문을 블록 단위로 암호화하는 알고리즘을 위한 암호화 운용 방식 

 

ECB 모드

암호화할 데이터(평문)를 블록 단위로 쪼개서 각각의 블록에 대해 암호화하는 방식

장점 단점
여러 개의 모드의 암호화를 동시에 수행 (병렬 처리) 키 값 유추 가능 (낮은 안전성)
짧은 암호화 시간

 

CBC(Cipher Block Chaining) 모드 

암호문 블록을 체인처럼 연결하는 방식으로 한 단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR 하고 나서 암호화를 수행

- 각가의 암호문 블록은 평문 블록 뿐만 아니라 그 이전의 평문 블록들의 영향도 받으므로 병렬 처리 어려움

 

 

CFB(Cipher FeedBack) 모드

한 단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용하며 평문 블록은 암호화를 수행하지 않는다. 첫 번째 블록의 암호화는 IV 값을 이용하여 암호화하고 XOR 연산을 수행한다. 

 

 

OFB(Output-FeedBack) 모드 

평문 블록과 암호 알고리즘의 출력을 XOR 해서 암호문 블록을 생성

 

 

CTR(CounTeR.) 모드

1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호 

 

 

3. 암/복호화 메소드 

- AES와 3DES 알고리즘만 지원 

 


 

MySQL 블록 암호 알고리즘이 구별이 안된다ㅜㅠㅜㅠ

이 부분에 대해 더 많은 학습량이 필요한 듯