외부 키 관리 서버에서 이진 데이터를 암호화하는 플러그인을 시험하면서 편해 보이는 텍스트 전용 래퍼를 피했다. 입력은 사람이 읽는 문장이 아니라 Base64로 전달된 바이너리였다. 래퍼를 거치면 그 문자열을 다시 인코딩할 수 있어 원문 바이트가 달라질 위험이 있었다.

Base64는 데이터를 옮기기 위한 형식이다. 디코딩한 바이트를 텍스트로 다루거나 Base64 문자열 자체를 다시 인코딩하면 서버에 전달되는 값이 호출자가 의도한 원문과 달라진다. 이때는 API 호출에 성공해도 필요한 암호화 결과를 얻은 것이 아니다.

플러그인은 기존 키 관리 클라이언트의 이진 암호화 연산을 직접 사용하도록 했다. 키 관리 서버가 무작위 초기화 벡터(IV)를 만들고 CBC 패딩과 암호화를 수행하며, 플러그인은 원문 바이트를 보존해 전달하는 역할만 맡았다.

35바이트 이진 입력을 실제 서버로 보내 암호화한 뒤 반환된 암호문을 별도 로컬 코드로 복호화했다. 결과는 원래 입력과 정확히 같았다. 19바이트 평문도 두 번 암호화해 각각 원문으로 복원되는지 확인했고, 두 요청의 IV가 서로 다른지도 확인했다. 바이트 보존과 반복 요청의 무작위성을 구분해서 살펴봤다.

세 번의 성공만으로 키 수명 주기나 장기간의 IV 중복 가능성을 검증했다고 볼 수는 없다. 같은 코드가 공개 엔드포인트에 배포됐다는 증거도 아니다. 다만 이진 암호화에서는 서버의 성공 응답에 더해 복호화한 바이트가 원본과 같은지 확인해야 한다. 래퍼의 편의 때문에 데이터가 달라진다면 그 경로를 쓰지 않아야 한다.

2026/09/21 14:50 2026/09/21 14:50