DB암호화

JM·2022년 8월 1일

면접 중, "DB암호화의 필요성"에 대한 질문을 받았는데 "비밀번호를 암호화해야되기 때문입니다!"라고 어처구니 없이 답변하여, 제대로 학습하기 위해 글을 작성합니다.

DB암호화란?

DB자체를 암호화하거나 DB서버와 연결된 어플리케이션 서버에서 DB에서 받은 데이터를 암,복호화하는 방법이 존재합니다. 이처럼, DB에 저장된 데이터를 암호화, 복호화하는 기능을 두어 보안을 강화하는 것을 DB암호화라고 말합니다.

DB에는 기업의 서비스와 관련한 중요한 정보가 저장되어 있습니다. 즉, 핵심 비즈니스와 관련한 정보가 저장되어 있기 때문에 공격의 대상이 됩니다. DB에 대한 공격은 방화벽 밖의 외부 네트워크에서 발생할 수 있지만, 기업 내부의 인가된 내부자에 의한 DB 데이터 유출사고가 발생할 수 있습니다. 따라서, 단순한 해커들의 공격뿐만 아니라 통제되지 않는 내부자에 의한 정보유출도 보안의 대상이 됩니다.

DB암호화를 위해 고려할 사항

  1. 어떻게 암호화를 수행할 것인가?
  2. 기업의 IT 인프라에서 데이터의 흐름이 어떻게 되는가?
  3. DB 암호화가 어떻게 기업내의 보안 규칙과 연동되는가?

어떻게 암호화를 수행할 것인가?

  • 암호화 대상 기준
    • DBMS가 제공하는 암,복호화 기능 사용
      민감한 정보의 보안성을 높이는데는 최적의 선택.
      암호키의 관리가 중요. 랜덤 키에 의한 암호키 생성 추천.
    • DBMS 외부에서 암,복호화 기능 사용
  • 암호화 알고리즘
    • DES 알고리즘
      많이 사용되는 알고리즘. 그러나 다소 보안성이 약한 것으로 여겨짐
      대칭키 알고리즘. 64비트의 평문을 56비트의 암호키를 사용하여 64비트의 암호문으로 암호화. 비대칭키 보다 암,복호화 속도가 빠르다.
    • 3DES 알고리즘
      DES보다 보안성이 우월. 하지만, 속도면에서 떨어진다.
      DES알고리즘을 3단으로 겹치게 한 알고리즘.

위에서 암호화 대상과 알고리즘을 기준으로 구분하였지만, 훨씬 중요한 것은 암호키를 관리하는 방법입니다. 암호키에 접근할 수 있는 대상을 명확히 구분해야 합니다. 또한, DB 암호화로 인해 데이터 사이즈의 증가나 성능 저하도 고려해야 합니다. 만약 DB 컬럼을 암호화할 경우 인덱스를 가진 컬럼을 암호화하는데 유의해야 합니다. 인덱스를 가진 컬럼이 암호화되면 인덱스를 활용할 수 없기 때문에 특정한 레코드 값을 찾기 위해 엄청난 부하 발생과 응답시간의 저하가 발생할 것입니다. 따라서, 인덱스를 갖지 않는 컬럼을 암호화하도록 유도하는 전략이 필요합니다.

기업의 IT 인프라에서 데이터의 흐름이 어떻게 되는가?

DB를 암호화할 경우, DB에서 암호화된 데이터를 복호화하여 어플리케이션 서버로 전송할 것입니다. 이때, 어플리케이션 서버에는 복호화된 데이터와 암호화된 데이터가 혼재될 수 있습니다. 따라서, 이에 대한 명확한 정의가 필요합니다(?).

암호키 관리

  • 암호키의 개수
    업무의 범위나 시스템의 역할에 따라 암호키를 분리해야 합니다. 즉, 하나의 암호키가 아닌 소수의 암호키로 분리하여 관리해야 합니다.
  • 암호키 저장 위치
    • 테이블 혹은 파일에 저장 : DB관리자가 접근 권한을 갖기 때문에 임의의 암,복호화 작업이 가능해져 위험합니다.
    • DB 서버와 독립된 머신(HSM)에 저장 : 시스템상의 접근제어. 관리자나 임의의 사용자에 의한 암호키 유출을 막을 수 있음.

DB 서버 내부에서의 암호화 구축

  • DBMS의 내장 기능을 통한 암호화 수행.
  • 가장 손쉬운 방법
  • DB서버에 부하. 동일한 DB내에 암호키 관리로 인한 보안 위험성 존재.
  • Plug-In 방식 : DB 서버의 부하를 발생시키는 것은 동일하지만, 암호키 관리를 위부에서 수행하기 때문에 보안 취약점 극복 가능.
  • 어플리케이션 서버와의 통신에서 암호화되지 않은 평문 데이터가 송수신되기 때문에, 통신 네트워크 상에 보안 문제 존재.

DB 서버 외부에서의 암호화 구축

  • DB서버와 어플리케이션 서버와의 전송 단계에서 유출에 대한 보안성을 고려해야 한다면 이 방법이 적절.
  • 보안성 측면에서 우수.
  • 기존 어플리케이션 서버 수정 필요.
  • 만약, 여러 어플리케이션 서버를 둘 경우 암복호화 전용 서버를 두어 암보호화 기능을 전담하도록 하면 복잡성을 줄일 수 있음.

참고링크 : https://dataonair.or.kr/db-tech-reference/d-guide/db-security/?pageid=2&mod=document&uid=441

profile
블로그 이전 : https://blog.naver.com/tjsqls2067

0개의 댓글