본문 바로가기
공부

DB 암호화 방식

by 워냥 2025. 1. 18.

1. DB에서 암호화가 필요한 경우

개인정보를 데이터베이스에 보관하는 경우 민감정보와 고유식별정보는 암호화하여 보관해야 한다. (개인정보보호법)

https://blog.naver.com/n_privacy/80142669914

 

[개인정보보호법 이해하기] 민감정보 vs 고유식별정보

지난 9월 30일 개인정보보호법이 본격 시행됨에 따라 개인정보의 정의나 범위에 대한 문의를 종종 받곤 합...

blog.naver.com

2. 개인정보 암호화 예시

학생 테이블(Students)과 반 정보 테이블(Classes)이 있다고 가정하자.

테이블 예시

이때 "학생의 반 정보는 민감정보이다."라는 요구사항이 생겼을 때, 어떤 컬럼을 암호화해야 할까?

2-1. id 암호화

우선 아래와 같이 학생 테이블의 class_id를 암호화할 수 있을 것이다.

class_id 컬럼을 암호화

id 암호화 방식의 장단점은 다음과 같다:

장점: 각 학생이 어떤 반에 속하였는지 테이블 정보만으로 유추하지 못한다. (= 보안이 강력해진다.)

단점: JOIN 시 추가 비용이 발생한다.

 

암호화가 DB 레벨이 아닌 애플리케이션 레벨에서 이뤄지는 상황이라면, JOIN 같은 쿼리문으로 두 테이블의 정보를 합칠 수 없다.

(애플리케이션에서 암호화 후 DB에 삽입, DB에서 정보를 불러온 후 애플리케이션에서 복호화)

 

학생의 이름과 반 정보가 담긴 목록을 반환하려면 다음 과정을 거쳐야 한다.

  1. Students 목록 조회
  2. Students 목록을 순회하며 암호화 컬럼(class_id)을 복호화
  3. 각 Student의 class_id를 이용하여 반 정보를 조회

이 과정은 테이블 관계가 복잡해질수록 더 복잡해진다.

2-2. 데이터 암호화

Students 테이블의 class_id가 아닌 Classes의 name 항목을 암호화하면 어떨까?

name 컬럼을 암호화

데이터 암호화 방식의 장단점은 다음과 같다:

장점: id 암호화에서 발생한 JOIN 문제를 해결할 수 있다.

class_id가 암호화되어 있지 않으므로, Students 테이블과 Classes 테이블을 class_id = id로 JOIN 하여 한 번에 데이터를 불러올 수 있다.

 

단점: 보안이 약해진다.

위 암호화 방식을 하나의 테이블로 요약하면 다음과 같다.

하나의 테이블로 요약

위 테이블에서는 여전히 각 학생들이 어떤 반에 속하였는지 식별할 수 없다.

하지만 id 1의 학생과 id 3의 학생이 같은 반에 속한다는 정보를 얻을 수 있다.

 

즉 id를 암호화하지 않고 데이터를 암호화하는 방식은 결정론적 암호화(deterministic encryption)를 사용한 것과 같다고 볼 수 있다.

(결정론적 암호화: 동일한 평문을 암호화했을 때 항상 동일한 암호문을 생성하는 암호화)

3. 정리

DB를 암호화할 때는 보안과 JOIN 비용 간의 Trade-off가 발생한다는 것을 알 수 있다.

일반적으로 정보를 저장할 때와는 다르게 암호화라는 요구사항이 추가되며 고려할 점이 많아진다.

Trade-off를 고려하여 상황에 맞는 적절한 방식을 선택해야 할 것이다.

 

 

 

 

 

 

댓글