알쓸코지
article thumbnail
Real MySQL 8.0 - 7.1.1 2단계 키 관리에서 MySQL 서버의 TDE에서 지원되는 암호화 알고리즘에 대해 설명하였는데,이와 관련하여 몇 가지 궁금증이 있어서 작성하게 되었다.
MySQL 서버의 TDE에서 지원되는 암호화 알고리즘은 AES 256 비트이며, 이외의 알고리즘은 지원되지 않는다. 테이블스페이스 키는 AES-256 ECB(Electronic CodeBook) 알고리즘을 이용해 암호화되고, 실제 데이터 파일은 AES-256 CBC(Cipher Block Chaining) 알고리즘을 이용해서 암호화된다.

Q1. 다양한 암호화 알고리즘 중 왜 AES 256만 지원할까?

Q2. 테이블스페이스 키는 AES-256 ECB, 실제 데이터 파일은 AES-256 CBC 알고리즘을 이용하여 암호화하는 이유는 무엇일까?

 

(MySQL에서 지원하는) 암호화 알고리즘을 간단하게 정리하고, 위의 질문에 대한 답변 또한 정리해보려고 한다. 


암호화 알고리즘

https://velog.io/@inyong_pang/Programming-%EC%95%94%ED%98%B8%ED%99%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A2%85%EB%A5%98%EC%99%80-%EB%B6%84%EB%A5%98

대칭 키 암호화 방식

암호화와 복호화에 같은 암호 키를 사용하는 방식
  • 키가 공개될 경우 원문을 해독할 수 있으므로 키의 보안이 중요하다.
  • 대칭 키 암호는 암호화하는 단위에 따라 다음 두 가지로 나뉜다.
    • `스트림 암호`: 연속적인 비트/바이트를 계속해서 입력받아, 그에 대응하는 암호화 비트/바이트를 생성하는 방식
    • `블록 암호`: 정해진 한 단위(블록)를 입력받아 그에 대응하는 암호화 블록을 생성하는 방식

AES(Advanced Encryption Standard)

  • 대칭 블록 암호화 알고리즘
  • 128비트, 192비트, 256비트의 세 가지 키 길이를 지원한다.
    • 키의 길이는 암호화의 강도를 결정하며, 비트 수가 길수록 보안성 강화
  • AES 알고리즘은 보안, 효율성, 유연성, 표준화 등의 장점을 갖는다.
    • 높은 안정성과 빠른 속도로 현재 가장 대중적으로 사용되고 있다.

단방향 암호화 방식

Hash를 이용하여 암호화하는 방식
  • 암호화는 가능하지만 복호화는 불가능하다.

MD5(Message-Digest algorithm 5)

  • 128비트 암호화 해시 함수
  • 주로 데이터 무결성 검증을 위해 사용되지만, 현재는 보안성에 취약하므로 사용을 권장하지 않는다.
    •  

https://www.kicassl.com/cstmrsuprt/ntc/searchNtcDetail.sg?page=1&ntcSeq=87&mode=&searchType=subject&searchWord=&searchRowCnt=10

SHA-1(Secure Hash Algorithm 1)

  • 160비트 암호화 해시 함수(16진수 40자리의 문자열 반환)
  • 보안 문제가 발견되어 역시 사용이 권장되지 않는다.

SHA-2(Secure Hash Algorithm 2)

  • SHA-1의 취약성 보완
  • 다양한 해시 길이를 지원한다. (224, 256, 384, 512비트 등)
    • SHA-256(256비트)과 SHA-512(512비트)가 가장 널리 사용된다.
💡
대칭키 알고리즘(AES)은 주로 데이터의 기밀성을 보호하는 데 사용하고
단방향 알고리즘(SHA-2)은 (복호화가 불가능하므로) 주로 데이터의 무결성을 검증하는 데 사용된다.

 

TDE에서 지원하는 암호화 알고리즘

처음에 언급했던 궁금증을 해소하고자 TDE에서 이러한 알고리즘을 선택한 이유를 설명한 자료를 찾아보았지만 결국 찾을 수 없었다😭

그래서 다음과 같은 이유가 아니었을까.. 하고 정리해보려고 한다.

❓ 다양한 암호화 알고리즘 중 왜 AES 256만 지원할까?

  • 양방향 vs 단방향? 데이터의 암호화, 복호화를 수행해야 하므로 단방향 암호화는 적합하지 않다.
  • 대칭 키 vs 비대칭 키? 대칭 키 방식은 단일 키를 사용하므로 키 관리도 용이하고, 연산 속도도 빠르다. 즉, 대칭 키가 구현하기도 쉽고 성능도 좋다. 
  • 왜 AES-256? AES-256은 256비트 길이의 키를 사용하기 때문에 무차별 대입 공격에 매우 강하며, 전 세계적으로 널리 사용되고 있다.

테이블스페이스 키는 AES-256 ECB, 실제 데이터 파일은 AES-256 CBC 알고리즘을 이용하여 암호화하는 이유는 무엇일까?

AES-256 ECB(Electronic Codebook)

https://veneas.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-AES-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%98%EA%B8%B0-AES-128-AES-192-AES-256

  • 가장 간단한 AES 암호화 모드
  • 암호화하려는 메시지를 여러 블록으로 나누어 각 블록을 독립적으로 암호화하는 방식
  • 병렬 처리가 가능하지만, 동일한 평문 블록에 대해 항상 같은 암호문 블록을 생성한다는 보안 취약점이 있다.

AES-256 CBC(Cipher Block Chaining) 

https://veneas.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-AES-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%98%EA%B8%B0-AES-128-AES-192-AES-256

  • `IV(Initialization vector)`를 사용하여 각 블록을 암호화하기 전에 이전 암호문 블록과 XOR 연산한다.
    • `IV`: 암호화 과정에 무작위성을 추가하여 같은 평문이 같은 암호문으로 변환되는 것을 방지하고, 공격자로부터 예측 가능한 패턴을 만들지 않게 하는 역할
    • 이전 암호문 블록과의 연산을 통해 암호화를 하므로, 병렬 처리가 아닌 순차적으로 진행되어야 한다.
  • 블록 암호화 운영 모드 중 보안성이 가장 높으며, 현재 널리 사용되는 운용 방식 중 하나
  • 같은 평문 블록에 대해서도 다른 암호문 블록을 생성하여 패턴을 숨긴다.
💡
테이블스페이스 키간단한 구현과 병렬 처리의 효율성 때문에 AES-256 ECB를,
실제 데이터 파일은 보안이 중요하므로 보안성이 더 높은 AES-256 CBC를 사용하는 것이 아닐까?
잘못된 정보가 있다면 댓글 부탁드립니다 🙇🏻‍♀️

 

Ref

암호화 방식

https://ko.wikipedia.org/wiki/%EB%8C%80%EC%B9%AD_%ED%82%A4_%EC%95%94%ED%98%B8

https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%98%B8%ED%99%94_%ED%91%9C%EC%A4%80

https://velog.io/@mineru/MySQL-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%A8%EC%88%98

https://velog.io/@inyong_pang/Programming-%EC%95%94%ED%98%B8%ED%99%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A2%85%EB%A5%98%EC%99%80-%EB%B6%84%EB%A5%98

https://ko.wikipedia.org/wiki/MD5

https://myallinone.tistory.com/entry/%EC%95%94%ED%98%B8-%EB%8C%80%EC%B9%AD%ED%82%A4-vs-%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4-vs-%EB%8B%A8%EB%B0%A9%ED%96%A5-%EC%95%94%ED%98%B8%ED%99%94

 

AES

https://colevelup.tistory.com/51

https://onecoin-life.com/73

https://veneas.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-AES-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%98%EA%B8%B0-AES-128-AES-192-AES-256

https://velog.io/@choidongkuen/Spring-AES-256-%EC%95%94%ED%98%B8%ED%99%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%97%90-%EB%8C%80%ED%95%B4

 

'Backend > Database' 카테고리의 다른 글

[MySQL] 실행 계획 - partitions 칼럼  (0) 2024.02.15
[MySQL] 히스토그램  (0) 2024.02.07
[MySQL] Read Ahead에 대해서 알아보자  (0) 2024.01.25
[MySQL] B-Tree 알고리즘  (0) 2024.01.18
[MySQL] 격리성 수준에 따른 MVCC  (0) 2024.01.04
profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!