암호로 감싸도 세션과 모델을 안 가려

“암호로 감싼 추론을 같은 회사의 약한 모델에 그대로 넣으면, 그 모델이 내용을 평문으로 받아 적어.”

요즘 Anthropic, OpenAI, Google은 모델이 답을 만들기까지 거친 생각의 사슬을 그대로 보여주지 않아. 대신 암호화한 덩어리로 바꿔 클라이언트에 돌려주고, 다음 요청 때 그 덩어리를 다시 받아. 서버에 안 쌓아두니까 비용도 줄고 내용도 가려지거든.

문제는 그 덩어리가 세션이나 사용자, 모델이 달라져도 같은 회사 안에서는 그대로 통한다는 거야. 강한 모델이 만든 덩어리를 안전장치가 헐거운 작은 모델에 넣고 받아 적으라고 시키면, 강한 모델을 직접 건드리지 않고도 내용이 나와.

공개 저장소에 올려둔 로그에서 자격증명 182개

연구진은 GitHub 같은 공개 저장소에 이미 올라와 있던 실행 기록을 모았어. 거기 들어 있던 추론 블록 315,320개를 풀었더니 개인정보 367건과 자격증명 182개가 나왔다고 논문에 적혀 있어.

회사 서버가 뚫린 건 아니야. 개발자들이 API 세션 기록을 공유할 때 암호 덩어리 안에 뭐가 들었는지 몰랐던 게 컸어.

논문이 나눈 공격 경로 네 가지

  • 증류 방지 우회: 비공개 모델의 추론을 그대로 꺼내 학습에 쓸 수 있어. 세 회사 모두에서 재현됐다고 적었어
  • 공개 로그에서 개인정보 수집: 위의 315,320개 사례가 여기 해당해
  • 걸러진 내용 되살리기: 최종 답변은 위험한 요청을 거절했는데, 거절하기까지의 추론 안에 위험한 내용이 남아 있는 경우야
  • 보이지 않는 프롬프트 주입: 암호 덩어리 안에 명령을 숨겨 공개된 에이전트 실행 기록을 오염시키는 경로야. 논문이 제시한 방식이고, 실제 피해 보고가 나온 건 아니야

로그를 공개하기 전에 확인할 것

  • 이미 올린 기록부터: 저장소나 이슈에 붙여둔 에이전트 실행 로그가 있으면 암호 덩어리가 섞여 있는지 먼저 봐. 눈으로는 의미 없는 문자열이라 그냥 지나치기 쉬워
  • 자격증명은 로그 밖에: 키나 토큰이 대화에 들어가면 추론 안에도 남아. 환경변수로 빼두면 애초에 안 섞여
  • 회사 대응은 아직 확인 안 돼: 저자들은 신고를 마쳤고 암호화 방식과 시스템 수준 대응책을 같이 제안했어. 다만 세 회사가 무엇을 고쳤는지 공식 공지에서는 찾지 못했어. 급하게 API를 바꿀 일은 아니고, 공개해 둔 기록부터 정리하면 돼