CoreCode문서

릴레이 선택

Claude 릴레이가 진짜인지 확인하는 방법

최종 업데이트:

어떤 릴레이든 첫 화면에 "정품 Claude"라고 적을 수 있습니다. 이 문서는 릴레이의 업스트림이 Anthropic인지 직접 확인하는 방법을 설명합니다. 아무것도 증명하지 못하는 방법, 위조할 수 없는 신호, 바로 실행할 수 있는 스크립트를 다룹니다. CoreCode를 포함해 어떤 릴레이에도 쓸 수 있습니다.

핵심 요약
  • 모델에게 "어떤 모델이냐"고 묻는 것은 아무것도 증명하지 못합니다. 시스템 프롬프트 한 줄이면 어떤 모델이든 자신을 Claude라고 답합니다.
  • 검증할 수 있는 것은 동작입니다. Anthropic Messages 응답의 형태, 기록되고 다시 읽히는 프롬프트 캐시, 변조된 thinking 서명의 거부가 그것입니다.
  • Anthropic 문서에 따르면 변조되었거나 복호화할 수 없는 thinking 서명은 항상 400을 반환합니다.
  • 검증 스크립트 check-relay.py는 Python 표준 라이브러리만 필요하며 1회 실행에 몇 센트가 듭니다.
  • 이 스크립트는 업스트림이 Anthropic이라는 것을 증명할 뿐, 선택한 등급이 실제로 응답하고 있다는 것까지는 증명하지 않습니다.
  • CoreCode는 오픈소스 ModelTrace 지문으로 3일마다 모델 자체를 점검하고, 결과와 원시 데이터를 이 페이지에 공개합니다.

릴레이가 비용을 줄이는 방식

이 모두 대화와 코드 작성은 정상적으로 되기 때문에 평소 사용 중에는 거의 드러나지 않습니다.

"어떤 모델이야?"라고 묻는 것이 소용없는 이유

모델이 자신의 정체를 답하는 내용은 학습 데이터와 시스템 프롬프트에서 나오며 믿을 만한 근거가 아닙니다. 릴레이가 시스템 프롬프트에 "You are Claude Opus"라고 넣으면 어떤 모델이든 그대로 따라 하고, 진짜 Claude도 자신의 버전을 틀리게 말하기도 합니다. 정체나 지식 기준 시점을 묻거나 말투로 판단하는 것은 기껏해야 참고일 뿐 증거가 아닙니다.

효과가 있는 것은 Anthropic API에만 있고 다른 곳에서는 흉내 낼 수 없는 동작입니다.

위조할 수 없는 신호 세 가지

1. 응답 형태와 usage 필드

Messages API는 type: "message", msg_로 시작하는 id, input_tokens와 output_tokens가 담긴 usage를 반환하며, 캐시를 쓰면 cache_creation_input_tokens와 cache_read_input_tokens도 포함됩니다. 다른 모델의 출력을 이 형태로 변환하는 것은 쉬우므로 이 검사는 조잡한 변환만 잡아냅니다. 나머지 두 검사의 전제 조건입니다.

2. 프롬프트 캐시가 기록되고 다시 읽힘

cache_control을 지정해 약 20,000토큰의 시스템 프롬프트를 보냅니다. 첫 호출은 cache_creation_input_tokens를 보고해야 하고, 직후 같은 호출은 거의 같은 양의 cache_read_input_tokens를 보고해야 합니다. 두 필드는 Anthropic의 프롬프트 캐싱 문서에 설명되어 있습니다.

3. thinking 블록의 서명

확장 사고(extended thinking)를 켜면 Anthropic은 각 thinking 블록에 암호화된 signature를 붙입니다. 다음 턴에 이 블록을 다시 보내면 API가 서명을 검증하고, 수정된 서명은 400으로 거부합니다. 다른 회사의 모델은 통과하는 서명을 만들 수 없고, 변환 계층에는 서명을 검증할 Anthropic 키가 없습니다. Anthropic의 설명에 따르면 API는 이 서명으로 thinking 블록이 Claude가 생성한 것임을 검증하며(Thinking), 변조되었거나 복호화할 수 없는 서명은 항상 400을 반환합니다(Preserved thinking).

테스트 방법: 도구 호출이 있는 서명된 thinking 블록을 가져와 서명의 한 글자를 바꿔 다시 보내면 거부되어야 하고, 그대로 보내면 수락되어야 합니다. 변조된 서명도 수락된다면 아무도 서명을 검증하고 있지 않다는 뜻이며, 업스트림은 Anthropic이 아닙니다.

검증 스크립트

세 가지 검사는 스크립트 하나로 실행됩니다: check-relay.py. Python 3.8 이상과 표준 라이브러리만 필요하며, 키는 지정한 주소로만 전송되고 다른 곳으로는 가지 않습니다. 실행 전에 소스를 읽어 보세요. 소스, 테스트, 이슈는 GitHub에 있습니다: CoreCodeAI/claude-relay-check.

curl -fsSLO https://corecode.live/docs/verify/check-relay.py
python3 check-relay.py --base-url https://relay.example --key sk-your-key --model claude-sonnet-5-5

--base-url과 --key를 생략하면 Claude Code가 쓰는 설정인 ANTHROPIC_BASE_URL과 ANTHROPIC_AUTH_TOKEN을 읽습니다. 릴레이가 Authorization: Bearer를 요구하면 --bearer를 추가하세요. 1회 실행 비용은 몇 센트로, 약 20,000토큰의 캐시 요청 2건과 짧은 요청 4건입니다.

https://relay.example/v1/messages  model=claude-sonnet-5-5
[PASS] shape     Messages response, model claude-sonnet-5-5, 143 input tokens
[PASS] cache     wrote 17755 tokens, read 17755 on call 2
[PASS] signature tampered signature rejected (HTTP 400), genuine one accepted
Result: all checks look like Anthropic
결과의미
PASS이 검사는 Anthropic API의 동작과 일치합니다.
WARN의심스럽지만 단정할 수는 없는 경우입니다. 예를 들어 캐시가 기록만 되고 읽히지 않는 경우입니다.
FAIL이 검사 결과, 업스트림이 Anthropic이 아니거나 usage가 실제 값이 아닙니다. 종료 코드 1.
ERROR요청 자체가 실패했습니다(연결 불가, 잘못된 키, 잔액 없음, 클라이언트 거부). 검사가 끝나지 않았으므로 어느 쪽도 말해 주지 않습니다. 종료 코드 2.
SKIP모델이 thinking 요청을 거부했거나 이번에는 생각하지 않기로 해서 서명 검사를 건너뛰었습니다. 다시 실행하거나 다른 모델을 써 보세요.
Claude Code 전용 키는 ERROR로 보고됩니다일부 릴레이는 Claude Code 클라이언트의 요청만 받고 스크립트를 403으로 거부합니다. 이는 클라이언트 제한일 뿐 업스트림에 대해서는 아무것도 말해 주지 않습니다. CoreCode를 검사하려면 Claude 满血(可外接)그룹의 키를 쓰세요. 仅限CC 그룹의 키는 거부됩니다.

스크립트가 증명하지 못하는 것

모델 구분: CoreCode의 정기 점검

위의 세 신호는 업스트림이 Anthropic임을 증명하지만, 어떤 모델이 응답하는지는 알려 주지 못합니다. 그래서 오픈소스 도구 ModelTrace로 직접 점검합니다. 모델에게 1에서 355 사이의 정수를 수백 개 쓰게 하면 모델마다 선호하는 숫자가 다릅니다. ModelTrace는 이 분포를 보유한 GPT와 Claude 모델 18종의 지문과 비교해 가장 가능성이 높은 모델을 계산합니다.

서버는 3일마다 「Claude 满血(可外接)」 그룹의 키로 이 도구를 실행합니다. Claude 모델마다 3라운드, 라운드마다 3개의 답변입니다. 아래 표는 실행할 때마다 갱신됩니다. 두 그룹은 같은 계정을 씁니다. 「仅限CC」 그룹에서는 테스트하지 않습니다. 이 그룹은 Claude Code의 시스템 프롬프트가 붙은 요청만 받는데, ModelTrace 제작자가 이 프롬프트가 결과를 크게 왜곡한다고 밝혔기 때문입니다.

최근 검사: 2026-11-01 19:17 UTC, 모델마다 3라운드, 라운드마다 응답 3개. 모든 프롬프트와 응답은 2026-11-01.json에 있어 ModelTrace로 다시 계산할 수 있습니다.

모델유효 라운드Claude로 판정해당 모델로 판정가장 비슷한 모델
claude-fable-5-13 / 395%지문 라이브러리에 없음claude-opus-5-5
claude-haiku-5-53 / 3100%100%claude-haiku-5-5
claude-opus-5-53 / 3100%100%claude-opus-5-5
claude-sonnet-5-53 / 379%78%claude-sonnet-5-5

이전 검사

날짜claude-fable-5-1claude-haiku-5-5claude-opus-5-5claude-sonnet-5-5
2026-11-0195% / —100% / 100%100% / 100%79% / 78%
2026-10-31100% / —100% / 100%100% / 100%96% / 79%
2026-10-28100% / —100% / 100%100% / 100%99% / 99%

각 칸은 Claude로 판정 / 해당 모델로 판정 의 평균 확률입니다.

표 읽는 법:

릴레이에서 확인할 만한 나머지 항목은 Claude Code 릴레이 고르는 방법을 참고하세요.

FAQ

모델에게 어떤 모델이냐고 물어서 릴레이가 진짜인지 알 수 있나요?

아니요. 모델이 자신에 대해 답하는 내용은 학습 데이터와 시스템 프롬프트에서 나오며, 릴레이가 한 줄로 바꿀 수 있고 진짜 Claude도 자신의 버전을 틀리게 말할 수 있습니다. 아무도 흉내 낼 수 없는 동작을 보세요. 위조할 수 없는 신호 세 가지를 참고하세요.

검사 비용은 얼마인가요?

몇 센트입니다. 약 20,000토큰의 캐시 요청 2건과 짧은 요청 4건입니다.

CoreCode에서도 쓸 수 있나요?

네, Claude 满血(可外接)그룹의 키로 쓸 수 있습니다. 仅限CC 그룹은 Claude Code만 받으므로 스크립트가 403으로 거부되고 ERROR로 보고되며, 이는 어느 쪽도 말해 주지 않습니다.

스크립트는 내 키를 어디로 보내나요?

--base-url로 지정한 주소로만 보내며 다른 곳에는 접속하지 않습니다. 스크립트는 공개되어 있으니 실행 전에 읽어 보세요.

세 검사를 모두 통과하면 확실히 Opus인가요?

꼭 그렇지는 않습니다. Sonnet의 thinking 블록에도 유효한 서명이 붙습니다. 등급은 반환된 model 필드, 청구된 요청마다 기록된 모델과 가격, 어려운 작업에서의 성능으로 판단하세요. 스크립트가 증명하지 못하는 것을 참고하세요. CoreCode는 ModelTrace로 3일마다 각 모델을 점검합니다. 정기 점검을 참고하세요.