GPG 데이터 암호화

현재 진행중인 프로젝트에서 대칭키인 AES로 암호화되는 휴대전화번호와 한전고객번호를 비대칭키 방식의 RSA 키로 전환하는 것을 고려하고 있었다. 그런데, 전달받은 RSA 공개키와 비밀키 파일에는 일반적으로 RSA 키를 만들었을때 포함되는 블록이 아니었다. 키 파일에 포함된 PGP PUBLIC KEY BLOCK는 무엇일까?

OpenPGP

GPG(GNU Privacy Guard)는 RFC 4880 표준으로 정의된 데이터 암호화 방식이다. 조직에서 개발용으로 전달받은 RSA 공개키와 비밀키는 일반적인 RSA 키와 다르게 PGP 헤더 블록으로 포함되어 있었다. 이 RSA 키페어는 맥 OS에서 gnupg를 설치해서 GPG 키를 생성한 것으로 보인다. 깃허브 커밋에도 GPG 키를 사용해서 커밋을 서명하는데에도 사용할 수 있나보다. 아무튼 이메일 보안을 위해 사용하던 PGP를 오픈소스화 하여 공유된 것이 GPG인가 보다.

Ascii Armor

PostgreSQL의 pycrypto 모듈에서는 데이터 암복화를 해야할 때 PGP 암호화 함수를 사용하는데 이 과정에서 armor와 dearmor 라는 함수로 PGP ASCII-armor 형식의 키를 bytea 형태로 변환하여 함수 파라미터로 전달하게 된다. 만약, 자바 애플리케이션에서 데이터베이스 함수를 호출할 때 데이터 암복호화를 위한 공개키 또는 비밀키를 바이트 배열로 전달한다면 Bouncy Castle을 사용해서 아스키 아머가 풀어진 형태로 호출할 수 있다. 간단하게 말해서, 아스키 아머는 Base64처럼 아스키코드로 보호된 형태로 안전하게 전달하기 위한 것으로 생각하면 된다.

RDS Slow Query

AWS RDS 또는 Aurora DB를 사용하는 환경이라면 애플리케이션 레이어에서 데이터베이스 호출할 때 데이터 암복호화에 사용되는 공개키와 비밀키를 파라미터로 전달할 때 크리티컬한 문제가 있을 수 있다. 만약, 2초 이상 소요되는 슬로우 쿼리가 감지될 때 SELECT 또는 프로시저 호출인 경우에는 전달되는 모든 파라미터의 값이 로그 메시지로 포함된다. 그러니까, 사용자의 민감한 개인정보의 보호를 위해 데이터 암호화에 사용되는 키가 그대로 노출될 수 있다는 이야기이기 때문에 보안 관점에서는 문제가 될 수 있는 부분이다.