Project/Afternote

[암호화] 간단 공부

gyuun365 2026. 1. 30. 19:05

Afternote 라는 프로젝트에서 사용자의 소셜 아이디,비밀번호를 DB에 저장해야하는 상황이 생겼다.

pm님은 이 정보를 암호화해서 저장하길 원하셔서 여러 방법을 알아보았다.

네트워크 격리

일단 지금은 로컬 DB로 하고 있지만 최종 설계는 아래와 같다.

이런 식으로 Amazon RDS를 쓰는 계획인데 여러 이유가 있다.

  1. 물리적·네트워크적 격리 (Private Subnet)
    RDS를 외부 인터넷 연결이 불가능한 Private Subnet에 배치했기 때문에, 해커가 외부에서 데이터베이스에 직접 접근하는 것 자체가 차단된다.
  2. 보안 그룹(Security Group)을 통한 최소 권한 원칙
    단순히 숨기는 것에서 그치는 것뿐만 아니라 보안 그룹 설정으로도 추가적인 보안을 생각했는데
    RDS의 보안 그룹(Security Group)을 설정할 때 오직 Spring 서버가 있는 EC2의 보안 그룹 ID로부터 들어오는 인바운드 트래픽만 허용하도록 구성했다.

데이터 암호화

뿐만 아니라 데이터를 RDS에 넣을 때도 암호화를 시켜서 넣음으로써 더욱 더 좋은 보안성을 추구했는데,

일단 아예 처음 하는 분야라 좀 찾아봤었다. gemini랑 놀 때 아래 요소들을 물어봤었는데,

  1. 복호화 
  2. 모바일인지 웹인지

우리 프로젝트는 복호화를 해서 그 데이터를 줘야하고 모바일 프로젝트이기 때문에 

"ChaCha20-Poly1305" 이라는 기술을 채택했다.

복호화를 해야하니까 AES와 ChaCha20를 고민했는데, 모바일 최적화라는 부분을 생각해보니

대부분의 모바일 기기는 ARM 아키텍처를 사용하니까 AES-GCM은 하드웨어 가속(AES-NI)이 없는 저사양 기기에서 성능 저하가 발생할 수 있지만, ChaCha20은 소프트웨어 구현만으로도 ARM 프로세서에서 AES보다 2~3배 빠른 속도를 보인다고 해서 선택했다. 

그 외에도 아래 이유들이 있다.

 

  • 무결성 보장(AEAD): 단순 암호화뿐만 아니라 Poly1305를 통한 인증(Authentication) 기능이 내장되어 있어, 데이터가 전송 중에 1비트라도 변조되면 즉시 감지할 수 있는 AEAD(Authenticated Encryption with Associated Data) 방식을 채택.
  • 재사용 공격 방지: AES-CBC 등에서 발생할 수 있는 IV(Initialization Vector) 재사용 문제를 방지하기 위해, 매번 랜덤한 Nonce를 생성하여 암호문과 함께 저장하는 방식을 적용해 보안성을 극대화.