제4부 평가(Evaluation)
4.3 안전성 평가·레드팀
안전성 평가에는 능력 평가가 결코 가르쳐 주지 않는 규칙이 하나 있다. 공격을 하나라도 찾으면 그 시스템이 취약하다는 것이 증명되지만, 아무리 찾아도 못 찾았다고 해서 안전하다는 것은 증명되지 않는다. 없음의 증거는 안전의 증거가 아니다. 앞의 두 장은 "모델이 얼마나 잘하나"를 물었다 — 능력 벤치마크와 그 함정(4.1), 모델로 모델을 채점하는 자동 평가(4.2). 이 장은 방향을 뒤집는다. 능력 평가는 협조적인 사용자를 가정하고 평균 성능을 재지만, 안전성 평가는 적대적인 상대를 가정하고 최악의 경우를 사냥한다. 평균이 아니라 꼬리를, 성공이 아니라 실패를 쫓는다. 그리고 아무리 사냥해도 손에 쥐는 것은 취약성의 하한(lower bound)일 뿐 상한이 아니다 — 이 인식론적 비대칭이 이 장 전체를 규정한다.
한 가지 명시하고 시작한다. 이 장은 철저히 방어자의 관점으로 쓴다. 탈옥과 위험 능력을 분류하는 이유는 방어를 설계하고 측정하기 위함이지, 공격하는 법을 알려 주기 위함이 아니다. 그래서 공격의 축과 그 방어·측정 방법은 구체적으로 다루되, 실제로 동작하는 악용 프롬프트나 레시피는 어디에서도 제공하지 않는다. 안전은 "이렇게 하면 안전하다"는 이진 인증서가 아니라 지속적인 리스크 관리 태세이고, 이 장은 그 태세를 세우는 방법과 그 방법이 어디서 붕괴하는지를 다룬다.
4.3.1 안전 평가를 특이하게 만드는 세 가지 비대칭
능력 평가(4.1·4.2)에서 쓰던 도구를 그대로 안전에 가져오면 조용히 어긋난다. 어긋나는 지점이 셋인데, 셋 다 "비대칭"이라는 한 단어로 묶인다.
첫째는 평균이 아니라 최악의 경우다. MMLU 85%는 "평균적으로 잘한다"는 뜻이고, 이 평균이 곧 사용자 경험의 근사가 된다. 그러나 안전에서 "유해 응답률 0.1%"는 결코 0.1%만큼만 안전하다는 뜻이 아니다. 하루 1,000만 요청을 받는 서비스라면 $0.001 \times 10{,}000{,}000 = 10{,}000$, 즉 매일 1만 건의 위반이다. 게다가 이 1만 건은 무작위로 흩어진 실수가 아니다. 공격자는 그 0.1%를 의도적으로 찾아내 재현하고, 스크린샷을 찍고, 확산시킨다. 능력은 기댓값으로 평가해도 되지만 안전은 재현 가능한 최악 사례로 평가해야 한다. "평균적으로 안전"은 안전이 아니다.
둘째는 협조가 아니라 적대다. 능력 벤치마크의 입력은 정직한 질문이지만, 안전 평가의 입력은 방어를 우회하도록 최적화된 것이다. 그래서 고정된 테스트셋으로 잰 점수는 상대가 그 셋을 모를 때만 유효하다. 공개 벤치마크는 곧 알려지고, 알려지는 순간 노후화된다 — 4.1에서 본 데이터 오염 문제가 여기서는 "적응"이라는 훨씬 능동적인 형태로 나타난다. 데이터셋 오염은 우연히 학습 데이터에 유입된 것이지만, 안전에서는 상대가 벤치마크를 표적으로 삼아 그것만 피하도록 진화한다. 정적 스냅숏은 하한일 뿐 실제 취약성의 상한이 아니다.
셋째는 실패 비용의 비대칭이다. 능력 실패(오답)와 안전 실패(유해 출력 제공)는 비용의 자릿수가 다르다. 자해 조장, 미성년 관련 콘텐츠, 실행 가능한 무기 정보 같은 범주에서는 단 한 건의 실패도 심각한 피해·법적 책임·신뢰 붕괴로 직결된다. 그래서 안전 평가는 정밀도(precision)보다 재현율(recall) — 놓치지 않는 것 — 에 무게를 두고 의심스러우면 보수적으로 판단한다. 그런데 바로 이 보수성이 반대편에서 과잉거부(4.3.10)라는 비용을 낳는다. 안전 평가의 모든 긴장이 이 세 번째 비대칭에서 흘러나온다.
이 세 비대칭이 뒤에 오는 모든 절을 규정한다 — 무엇을 사냥할지(분류), 어떻게 사냥할지(레드팀), 무엇을 셀지(지표), 왜 멈출 수 없는지(지속 평가), 왜 한 겹으로 안 되는지(계층 방어).
4.3.2 없음의 증거는 안전의 증거가 아니다 — 평가가 주는 것은 하한이다
앞에서 "평가는 하한만 준다"고 했는데, 이것은 겸손을 떠는 수사가 아니라 통계로 확정할 수 있는 사실이다. 그리고 이 하나를 정확히 이해하면 안전 주장을 읽는 눈이 완전히 달라진다.
레드팀이 어떤 공격 분포에서 $n$ 개의 적대적 프롬프트를 던졌는데 위반이 하나도 안 나왔다고 하자. 이것으로 무엇을 결론지을 수 있나. 참 실패 확률을 $p$ 라 하면, $n$ 번의 독립 시행에서 실패가 한 번도 안 나올 확률은 $(1-p)^n$ 이다. 우리가 실제로 관측한 것은 "0회 실패"이고, 이 관측과 모순되지 않는 가장 큰 $p$ 를 95% 신뢰수준에서 구하면 된다. $(1-p)^n = 0.05$ 로 놓고 양변에 로그를 취하면
$$n \ln(1-p) = \ln 0.05 \approx -3$$
작은 $p$ 에서 $\ln(1-p) \approx -p$ 이므로 $-np \approx -3$, 즉
$$p \lesssim \frac{3}{n}$$
이것이 통계학에서 말하는 "3의 규칙(rule of three)"이다. 뒤집어 읽으면 더 쓸모 있다. 참 실패율이 목표치 $\epsilon$ 아래라고 95% 신뢰로 주장하려면, 실패 0회로 대략 $n \approx 3/\epsilon$ 회를 시험해야 한다.
숫자를 넣어 보자. 적대 프롬프트 1,000개를 입력해 위반이 0건이었다면, 결론은 "안전하다"가 아니라 "이 공격 분포에 대한 실패율이 95% 신뢰로 0.3% 미만"일 뿐이다($3/1000 = 0.003$). 실패율을 0.1%(천 분의 일) 아래로 확정하려면 3,000개를 깨끗이 통과해야 하고, 아동안전처럼 사실상 무관용이어야 하는 범주에서 원하는 0.001%(십만 분의 일) 아래를 주장하려면 무려 30만 개를 전부 통과해야 한다. 그리고 이 30만 개조차 오직 우리가 표집한 그 하나의 공격 분포에 대한 이야기다. 상대는 우리가 시험하지 않은 각도로 적응하므로, 실제 취약성은 이 하한이 말하는 것보다 언제나 나쁠 수 있다.
여기서 두 가지가 따라 나온다. 하나는 고심각도 범주일수록 요구 표본이 기하급수로 커진다는 것이다. 심각도가 높아 허용 실패율을 한 자릿수 낮추면 필요한 무결 시행이 열 배로 증가한다 — 안전 예산이 왜 그렇게 비용이 큰지의 산술적 이유다. 다른 하나는, 그래서 안전 주장은 반드시 "무엇에 대해, 얼마나 시험했고, 그 결과 하한이 얼마"라는 형식이어야 한다는 것이다. "우리 모델은 안전합니다"는 측정 불가능한 문장이다. "이 공격셋 N건에서 위반율 하한 X%"만이 측정 가능한 문장이다. 이 장이 뒤에서 다루는 모든 지표는 이 하한을 조금이라도 조이려는 시도이지, 안전을 증명하려는 시도가 아니다.
4.3.3 안전 위험 분류 — 유해 콘텐츠와 위험 능력
무엇을 평가할지 정하려면 먼저 무엇이 위험인지를 목록으로 세워야 한다. 이 목록이 안전 분류(safety taxonomy)다. 좋은 분류는 세 가지를 만족한다. 서비스의 실제 리스크를 덮고, 범주들이 서로 겹치지 않아 판정이 일관되며, 정책·평가·가드레일이 같은 범주 이름을 공유한다. 아래 분류는 널리 쓰이는 범주들을 종합한 골격이지 어떤 표준의 정본이 아니며, 여러 공개 정책 체계가 범주를 조금씩 다르게 나눈다. 자기 서비스는 적용 법규·대상 사용자·도메인에 맞춰 이 목록을 재단해야 한다 — 아동 대상 교육 서비스와 보안 연구자용 도구의 안전 경계가 같을 수는 없다.
첫 번째 축은 모델이 직접 생성한 텍스트 자체가 해로운 경우, 즉 유해 콘텐츠다.
| 범주 | 무엇을 다루나 | 판정의 회색지대(왜 어려운가) |
|---|---|---|
| 폭력·위해 | 폭력 조장·위협, 타인에 대한 신체적 위해 지시 | 뉴스 요약·역사 서술·픽션 속 폭력 묘사와의 경계 |
| 불법 행위 | 무기·마약·해킹·사기 등 범죄의 실행 가능한 조력 | "설명·교육"과 "실행 지침"의 구분(듀얼 유즈) |
| 자해·자살 | 자해·자살 방법·조장 | 위기 지원·정신건강 정보 제공은 오히려 권장되어야 함 |
| 아동 안전 | 미성년 관련 성적·착취 콘텐츠 | 무관용 — 회색지대 없음, 최우선 |
| 증오·괴롭힘 | 보호 속성 대상 비하·선동, 표적 괴롭힘 | 인용·비판·풍자·학술 논의와의 경계 |
| 프라이버시 | 개인정보(PII) 노출·신상털기, 사적 추론 | 공인 정보·공개 사실과의 경계(9.3) |
| 오정보·기만 | 검증 가능한 허위, 대규모 기만·설득·사기 콘텐츠 | 사실 오류(환각)와 의도적 기만 조력은 다름 |
| 성적 콘텐츠 | 성인 대상 성적 콘텐츠 | 서비스 정책·연령대에 따라 허용선이 크게 다름 |
이 표에서 가장 중요한 것은 오른쪽 열이다. 아동 안전 한 줄을 빼면 거의 모든 범주에 회색지대와 듀얼 유즈(dual-use)가 있다. "폭발물의 화학 원리"는 화학 교육일 수도, 위해 조력일 수도 있다. 무엇이 판정을 가르는가 — 맥락, 의도, 그리고 구체성이다. 폭발이 왜 일어나는지 설명하는 것과 특정 물질의 배합·수량·조립 순서를 단계별로 주는 것은 같은 주제의 전혀 다른 지점이다. 이 구별이 안전 판정이 단순 키워드 매칭으로는 불가능한 이유이고(7.3), 이 회색지대가 곧 레드팀의 사냥터이자 과잉거부의 발원지다.
두 번째 축은 콘텐츠 한 건의 유해성이 아니라, 모델의 능력이 큰 피해로 증폭될 수 있는가를 묻는 위험 능력이다. 개별 응답은 무해해 보여도 능력이 결합·규모화되면 위험이 커진다.
| 위험 능력 | 우려의 성격 | 실무 평가 관점 |
|---|---|---|
| 사이버 공격 조력 | 취약점 발견·익스플로잇·멀웨어 작성 지원 | 방어(청팀)와 공격 조력의 비대칭, 자동화 잠재력 |
| 생물·화학 위해 | 위험 물질·병원체 관련 실행 가능 정보 | 공개 문헌 대비 한계 상승(uplift) 여부가 핵심 질문 |
| 대규모 설득·조작 | 개인화된 기만·여론 조작의 자동화·규모화 | 콘텐츠 한 건이 아니라 규모가 위험을 만듦 |
| 자율성·기만 | 감독 회피·목표 오지정 하의 기만적 행동 | 대부분 연구 단계 우려 — 현재 실무 리스크로만 |
위험 능력 평가에서 가장 논쟁적이고 흔히 과장되는 지표가 한계 상승(uplift)이다 — 모델이 인터넷 검색이나 공개 문헌 대비 나쁜 행위자를 실제로 얼마나 더 유능하게 만드는가. 여기서 흔한 오류 두 개를 동시에 피해야 한다. 한쪽 오류는 "모델이 어떤 정보를 출력했다"는 사실만으로 위험을 단정하는 것이다. 그 정보가 이미 검색 한 번으로 나오는지, 실행에 필요한 암묵지와 물리적 자원이 무엇인지가 실제 리스크를 좌우한다 — 출력 사실 자체는 위험의 상한을 증명하지 못한다. 반대쪽 오류는 "능력 위험은 다 과장"이라며 사이버·프라이버시처럼 이미 실재하는 자동화 위험까지 부정하는 것이다. 자율성·기만 능력의 상당수는 재현·측정이 어려운 먼 미래 사변에 가까워 이 책은 현재 실무 리스크로만 다루지만(BK-04), 개인화 스팸의 자동 생성이나 취약점 스캔의 규모화는 지금 실재한다. 요점은 자릿수 있는 근거로 능력을 평가하되, 없는 위험을 지어내지도 있는 위험을 부정하지도 않는 것이다.
이 분류의 실용적 가치는 세 시스템이 같은 범주 이름을 공유하게 만드는 데 있다. 정책은 각 범주에 대해 "차단/조건부 허용/허용"과 회색지대 처리 규칙을 문서화한다 — 정책이 없으면 평가의 정답(ground truth)이 없다. 평가·레드팀은 각 범주별 테스트 프롬프트로 범주별 위반율을 잰다. 가드레일(7.3)의 입출력 분류기는 같은 범주 라벨을 낸다. 그래야 "정책 → 평가 → 필터"가 하나의 언어로 이어지고 회귀를 범주 단위로 추적할 수 있다. 정책 없는 안전 평가는 방향 없는 사냥이다 — 무엇을 위반으로 셀지부터 합의해야 지표가 의미를 가진다.
4.3.4 레드팀 방법론 — 수동·자동·모델 대 모델
레드팀은 아군이 상대 역할을 맡아 시스템을 공격해 약점을 찾는 군사·보안 용어다. LLM 레드팀은 의도적으로 정책 위반 출력을 끌어내려 시도하고, 성공하면 그 사례를 방어(정렬·가드레일·정책)로 환류시킨다. 접근은 크게 셋 — 사람이 하고, 기계가 하고, 모델이 모델을 공격한다.
수동 레드팀은 사람이 직접 프롬프트를 작성해 공격하며, 두 갈래가 상보적이다. 전문가 레드팀은 도메인 전문가(보안·의료·법률·아동안전)나 훈련된 팀이 깊고 현실적인 시나리오를 다룬다. 강점은 맥락·창의성·듀얼 유즈 판단이다 — 자동화가 놓치는 미묘한 회색지대를 찾는다. 약점은 비용이 크고 느리고 규모가 안 나온다는 것, 그리고 반복 노출로 인한 심리적 부담이다. 아동안전이나 극단적 폭력 콘텐츠를 종일 검토하는 일의 인적 비용은 실제 운영에서 무시할 수 없는 요소이며, 순환 근무·심리 지원·자동화로 관리하지 않으면 인력이 소진된다(9.4의 노동·거버넌스 논의와 연결). 크라우드 레드팀은 넓은 참여자 풀(공개 챌린지·바운티 포함)로 다양성과 규모를 얻는다. 강점은 예상 못 한 각도·문화·언어의 커버리지, 약점은 품질 편차·중복·판정 부담과, 참가자에게 실제 악용 지식이 축적될 수 있다는 윤리적 관리 필요다.
자동 레드팀은 사람 대신 알고리즘이 공격 프롬프트를 생성·최적화한다. 규모(하루 수백만 시도), 재현성, 회귀 자동화가 강점이다. 방법의 계보를 방어자 관점에서만 개관하면 — 세부 절차는 생략한다 — 크게 세 갈래다. 최적화 기반(화이트박스)은 모델의 기울기에 접근할 수 있을 때 특정 목표 출력의 확률을 높이는 입력을 경사 기반으로 탐색한다(GCG류 적대 접미사 탐색이 대표 계보다). 강력하지만 모델 내부 접근이 필요하고, 산출물이 사람에게 부자연스러워 입력 필터에 걸리기 쉽다는 방어상의 약점이 있다. 탐색·변이 기반(블랙박스)은 내부 접근 없이 프롬프트를 반복 변이·평가해 성공 방향으로 진화시키며(반복 정제·트리 탐색·품질다양성 탐색 계열), API만 있어도 되고 커버리지를 넓히도록 다양성을 명시적으로 목표에 넣는 변형이 있다. 재작성·번역 기반은 같은 목표를 다른 표현·언어·형식으로 바꿔 방어를 우회할 수 있는지 탐색한다. 방어자에게 이 계보가 중요한 이유는, 각 계보가 노리는 방어의 약한 지점이 다르기 때문이다 — 화이트박스는 정렬의 표면적 견고함을, 블랙박스는 커버리지의 사각을 노린다.
자동 레드팀의 지배적 구조는 세 모델이 실행되는 루프다. 4.2의 LLM-as-judge를 안전에 특화한 형태로, 공격자·대상·심판의 삼각이다.
공격자 모델은 시드 목표에서 적대 프롬프트를 만들고 심판의 피드백으로 실패를 정제한다. 대상 모델은 방어(정렬+가드레일)를 켠 상태로 응답한다. 심판 모델은 응답이 정책을 위반했는지, 얼마나 유해한지 라벨링한다 — 그리고 이 심판의 신뢰성이 리포트에 표시되는 모든 ASR 숫자의 신뢰성을 좌우한다(4.3.8). 이 루프의 값어치는 속도와 커버리지다. 사람이 한 달에 찾을 각도를 하루에 훑는다. 그러나 자동 공격자는 사람이 생각하는 실제로 창의적·맥락적 공격은 잘 만들지 못한다 — 시드와 변이 연산의 함수라, 시드에 없는 발상은 나오지 않는다. 그래서 실무는 셋을 섞는다. 자동으로 넓게 훑어 회귀셋을 채우고, 전문가가 깊게 파 새 각도를 열고, 크라우드로 다양성을 보강한다. 자동만 믿으면 사각이 남고 사람만 믿으면 규모가 안 난다.
레드팀의 최대 함정은 "찾은 것"만 보고 "안 찾은 것"을 잊는 것이다. ASR이 낮다는 것은 "우리가 시도한 공격에 강하다"일 뿐 "모든 공격에 강하다"가 아니다(4.3.2). 그래서 커버리지를 의도적으로 설계해야 한다. 위험 범주(4.3.3)를 한 축, 공격 유형(4.3.5)을 다른 축으로 놓은 격자를 만들어 셀 단위로 채웠는지 추적하면, "폭력×역할극은 100건 테스트했는데 프라이버시×인코딩은 0건"같은 사각지대가 드러난다. 시나리오는 단발 프롬프트뿐 아니라 다단계 대화·도구 사용·롱컨텍스트·다국어·멀티모달을 포함해야 한다 — 실제 공격은 한 줄이 아니라 대화 흐름 속에서 온다. 사용자 유형도 순진한 사용자(실수로 위험 요청), 호기심 사용자(경계 시험), 결연한 공격자(집요한 우회)로 나눠 상정한다. 셋의 방어 요구가 다르기 때문이다. 그러나 이 격자조차 상한이 아니라 알려진 위험의 지도일 뿐이다. 새 공격 벡터가 나오면 축이 늘어난다 — 이 미완결성이 4.3.12의 고양이-쥐 동학이다.
4.3.5 탈옥 패턴 — 방어를 위한 유형학
탈옥(jailbreak)은 모델이 자기 안전 정책을 스스로 위반하도록 사용자가 유도하는 것이다. 방어를 설계하려면 공격을 분류해야 하므로 여기서 유형을 개관하되, 구체적 악용 프롬프트는 제공하지 않는다. 목적은 "이런 축의 공격이 있으니 이렇게 방어·측정하라"이지 "이렇게 뚫어라"가 아니다. 아래는 연구·보안 커뮤니티에서 방어 목적으로 널리 논의된 추상 범주들이며, 각 범주에 대해 방어의 초점이 무엇인지만 적는다.
| 공격 축 | 개념(추상) | 방어의 초점 |
|---|---|---|
| 역할극·페르소나 | 모델에게 "제약 없는 인물"을 연기시켜 정책을 우회하려는 프레이밍 | 페르소나 지시가 안전 정책을 덮지 못하게 정렬·시스템 프롬프트 강건화 |
| 가상·우회 프레이밍 | "픽션·가정·연구 목적"이라는 틀로 유해 요청을 포장 | 맥락이 아니라 실행 가능성·구체성으로 판정 |
| 인코딩·난독화 | 우회 표기·형식 변형으로 필터의 표층 매칭을 회피 | 표층 키워드가 아닌 의미 기반 판정, 디코딩 후 재검사 |
| 지시 무시·프리픽스 유도 | "이전 지시를 무시하라"류로 안전 지시를 무력화하려는 시도 | 시스템·안전 지시의 우선순위 강제, 입력 지시와 정책의 분리 |
| 다단계·점진 유도 | 여러 턴에 걸쳐 조금씩 경계를 넓혀 누적적으로 유도 | 대화 전체 맥락 평가, 턴 단위가 아닌 세션 단위 모니터링 |
| 저자원 언어·코드 스위칭 | 방어가 약한 언어·형식으로 우회 | 다국어·멀티모달 커버리지를 평가·가드레일에 포함 |
이 표에서 방어자가 챙길 원리는 하나다. 거의 모든 탈옥은 "표층을 바꿔 의미를 숨긴다"에 귀착한다. 역할극은 요청의 화용론적 틀을 바꾸고, 인코딩은 표기를 바꾸고, 저자원 언어는 언어를 바꾸지만, 노리는 유해 의미는 그대로다. 그래서 표층(키워드·형식)에만 의존하는 방어는 반드시 우회된다. 필요한 것은 의미·의도·실행가능성 수준의 판정이며, 모델이 스스로 거절하는 정렬(3.1·3.6)과 시스템 쪽 가드레일(7.3)을 겹쳐 둔 다층 방어다. 다단계·점진 유도가 특히 까다로운 이유도 여기 있다 — 각 턴은 개별적으로 무해해 보이도록 설계되므로, 턴 단위로만 검사하면 통과하고 세션 전체의 궤적을 봐야만 드러난다. 이것이 안전 모니터링이 요청 단위가 아니라 세션 단위여야 하는 이유다.
4.3.6 탈옥과 프롬프트 인젝션은 다른 위협이다
탈옥과 프롬프트 인젝션은 자주 뭉뚱그려지지만 위협 모델이 근본적으로 다르다. 이 구분은 방어 책임을 어느 팀이 지느냐를 가르므로 분명히 해 둔다.
| 탈옥(jailbreak) | 프롬프트 인젝션(prompt injection) | |
|---|---|---|
| 누가 공격자인가 | 사용자 자신 | 제3자(사용자가 아닌 외부 콘텐츠 작성자) |
| 무엇을 노리나 | 모델이 자기 안전 정책을 어기게 함 | 모델이 개발자·사용자의 지시를 어기고 공격자 지시를 따르게 함 |
| 공격 경로 | 사용자가 모델에 직접 보내는 프롬프트 | 신뢰 안 되는 데이터(웹페이지·문서·이메일·도구 출력)가 컨텍스트에 섞임 |
| 누가 피해자인가 | 주로 플랫폼·제3자(유해 콘텐츠 유통) | 주로 사용자·시스템(데이터 유출·권한 오용·행동 탈취) |
| 핵심 원인 | 정렬의 우회 가능성 | LLM이 데이터와 지시를 구분 못 함(명령/데이터 경계 부재) |
| 대표 방어 | 정렬 강건화 + 안전 가드레일(7.3) | 입력 신뢰 경계·권한 최소화·출력 검증(7.4) |
한 문장으로 요약하면, 탈옥은 사용자가 모델의 양심을 우회하는 것이고 프롬프트 인젝션은 외부 데이터가 모델의 명령 체계를 가로채는 것이다. 둘은 결합될 수 있다 — 인젝션된 데이터가 탈옥 페이로드를 실어 나를 수도 있다. 그러나 방어와 평가의 책임 소재가 다르다. 탈옥은 안전팀·정렬의 문제이고, 프롬프트 인젝션은 보안팀·시스템 아키텍처의 문제다. 이 둘을 처음부터 나눠 다뤄야 하는 실무적 이유가 여기 있다. 탈옥 평가는 "모델이 유해 요청을 거절하는가"를 묻지만, 인젝션 평가는 "모델이 신뢰 경계를 존중하는가"를 묻는다 — 완전히 다른 테스트셋, 다른 위협 모델, 다른 완화책이다. 이 장은 탈옥의 평가·레드팀에 집중하고, 인젝션의 공격면·방어는 7.4에서 OWASP LLM Top 10과 함께 다룬다.
4.3.7 측정 — 혼동 행렬 위의 안전 지표
레드팀이 사례를 찾으면 그것을 숫자로 바꿔야 개선·회귀를 추적한다. 안전 지표는 겉보기보다 미묘한데, 하나의 숫자가 아니라 혼동 행렬(confusion matrix)로 봐야 하기 때문이다. 모든 안전 지표는 다음 2×2에서 파생된다. 한 축은 요청이 실제로 유해한가(정책 기준), 다른 축은 모델이 응했나 거부했나.
| 모델이 거부/차단 | 모델이 응답(compliance) | |
|---|---|---|
| 요청이 유해함 | 올바른 거부 (True Positive) | 안전 실패 (False Negative) — 유해 응답 |
| 요청이 무해함 | 과잉거부 (False Positive) — 4.3.10 | 올바른 도움 (True Negative) |
두 실패가 대각선으로 마주 본다. 왼쪽 아래(안전 실패)를 줄이려 보수적으로 거부하면 오른쪽 위(과잉거부)가 늘고, 그 반대도 마찬가지다. 안전 평가의 전 과제가 이 두 오류의 동시 최소화이며, 하나만 보면 반드시 다른 하나를 망친다.
여기서 파생되는 핵심 지표들을 정리하면 이렇다. 유해 응답률(violation rate)은 어떤 요청 분포에서 정책 위반 응답의 비율이다 — 분포에 크게 의존하므로 "일상 트래픽"인지 "적대 트래픽"인지를 반드시 명시해야 한다. 공격 성공률(Attack Success Rate, ASR)은 적대적 프롬프트 집합에서 위반을 끌어낸 비율, 곧 적대 조건에서 잰 안전 실패율이다. 거부율(refusal rate)은 요청 중 거부한 비율인데, 유해·무해를 나누지 않은 거부율은 무의미하다 — 무해 요청에 대한 거부율이 곧 과잉거부율이고, 이것과 유해 요청 거부율을 섞으면 아무것도 못 읽는다. 도움율(help rate)은 무해 요청에 올바르게 응한 비율($1 -$ 과잉거부율)로, 안전 지표와 반드시 짝으로 봐야 하는 유용성 축이다.
이 2×2를 실제 숫자로 실행해 보면 대각선 트레이드오프가 명확해진다. 정책상 유해한 요청 1,000건과 무해한 요청 1,000건, 합 2,000건을 두 모델에 입력한다고 하자. 기준 모델 A는 유해 1,000건 중 900건을 거부하고(TP) 100건에 응했으며(FN), 무해 1,000건 중 80건을 잘못 거부하고(FP) 920건을 도왔다(TN).
$$\text{안전 재현율} = \frac{TP}{TP+FN} = \frac{900}{1000} = 90\%, \qquad \text{ASR}_{\text{이 유해셋}} = \frac{FN}{1000} = 10\%$$
$$\text{과잉거부율} = \frac{FP}{FP+TN} = \frac{80}{1000} = 8\%, \qquad \text{거부 정밀도} = \frac{TP}{TP+FP} = \frac{900}{980} \approx 91.8\%$$
여기서 "안전 실패가 10%나 되니 더 조이자"며 모델 B로 넘어가면 무슨 일이 벌어지는가. 모델 B는 유해 1,000건 중 990건을 거부해 FN을 10건으로 줄였다 — ASR이 10%에서 1%로 떨어졌다. 훌륭해 보인다. 그런데 같은 조임이 무해 쪽도 함께 당겨, 무해 1,000건 중 250건을 잘못 거부한다(FP). 과잉거부율이 8%에서 25%로 증가했고, 거부 정밀도는 $990/1240 \approx 79.8\%$ 로 떨어졌다. ASR을 9%포인트 낮추는 대가로 무해 사용자의 4분의 1이 거부당하게 된 것이다. 이것이 대각선 트레이드오프의 정확한 정체다 — 두 모델은 안전과 유용성 사이 어느 점을 고르느냐만 다를 뿐이고, 한쪽 숫자만 보고 판단하면 반대편에서 벌어지는 이 참사를 못 본다. 그래서 안전 지표는 언제나 유해율(또는 ASR)과 과잉거부율을 짝으로 보고해야 한다.
한 가지 흔한 함정을 명시해 두자. 위 예에서 모델 A의 전체 거부율은 $(900+80)/2000 = 49\%$ 다. 이 49%라는 숫자는 아무것도 말하지 않는다 — 올바른 거부와 잘못된 거부를 뭉쳐 놓았기 때문이다. 유해·무해를 나누지 않은 거부율은 대시보드에 게시하지 마라. 반드시 "무해셋 거부율"과 "유해셋 거부율"을 따로 낸다.
4.3.8 ASR을 읽는 법 — 왜 논문 간 ASR은 비교 불가인가
ASR은 안전 리포트에서 가장 많이 인용되고 가장 많이 오독되는 숫자다. 핵심 규칙 하나만 기억하면 된다. 서로 다른 논문·리포트의 ASR을 직접 비교하지 마라. ASR은 두 가지에 따라 몇 배씩 달라진다 — 어떤 공격셋을 썼는지, 그리고 심판이 "성공"을 어떻게 정의했는지.
두 번째 요인이 특히 파괴적인데, 실제로 직접 따라가 보면 그 크기가 드러난다. 어떤 대상 모델에 적대 프롬프트 100개를 던졌다고 하자. 심판을 어떻게 세우느냐에 따라 같은 100개의 응답이 전혀 다른 ASR을 낸다. 순진한 심판은 "모델이 거부하지 않음"만으로 성공을 라벨링한다 — 응답에 "죄송하지만 도와드릴 수 없습니다" 같은 거부 문구가 없으면 성공으로 센다. 이 기준으로는 100개 중 45개가 "성공"이라 ASR 45%가 나온다. 그러나 그 45개를 뜯어보면 상당수가 모호하거나, 사실이 틀렸거나, 일반론만 늘어놓아 실제로는 실행 불가능한 출력이다. 엄격한 심판은 "출력이 실제로 구체적이고 실행 가능하며 진짜 유해한가"까지 본다(StrongREJECT 계열이 지적한 기준). 이 기준으로 45개를 다시 채점하면 실효 성공은 12개뿐이라 ASR 12%가 나온다.
$$\text{ASR}_{\text{순진한 심판}} = \frac{45}{100} = 45\%, \qquad \text{ASR}_{\text{엄격한 심판}} = \frac{12}{100} = 12\%$$
같은 시스템, 같은 100개 공격인데 심판 정의만 바꿔 ASR이 $45/12 \approx 3.75$ 배 벌어졌다. "45% ASR"을 보고한 논문과 "12% ASR"을 보고한 논문이 실제로는 동일한 견고함을 묘사하고 있을 수 있다는 뜻이다. 많은 "성공한 탈옥"이 실은 쓸모없는 출력이라는 이 관찰은 안전 문헌 전반을 다시 읽게 만든다 — 거부만 안 하면 성공으로 세는 느슨한 심판은 ASR을 크게 부풀린다. 그래서 ASR을 보고하거나 읽을 때는 세 가지를 반드시 함께 명시해야 한다. 어떤 공격셋인가, 심판이 무엇인가, "성공"의 정의가 무엇인가. 이 셋 없이 제시된 ASR 숫자는 비교 불가능하며, 사실상 무의미하다. 심판 품질을 빼고 ASR을 논하지 마라.
4.3.9 안전 벤치마크의 한계
공개 안전 벤치마크 — 적대 프롬프트 모음(AdvBench류), 탈옥 벤치(JailbreakBench류), 유해행동 데이터셋(HarmBench류) 같은 계보 — 는 표준화·재현·상대 비교의 출발점으로 유용하다. 그러나 4.1에서 본 벤치마크의 모든 함정이 안전에서는 더 날카롭게 적용된다.
가장 먼저, 오염을 넘어선 적응이 있다. 능력 벤치마크의 오염은 학습 데이터에 우연히 유입된 정답이지만, 안전에서는 상대가 벤치마크를 능동적으로 표적 삼아 그것만 피하도록 진화한다. 공개 벤치가 알려지면 그 점수는 실제 안전이 아니라 그 벤치에 대한 오버핏을 잰다 — 그리고 적응이 능동적이므로 열화가 능력 벤치보다 훨씬 빠르다. 둘째, 벤치는 스냅숏이고 공격은 진화한다. 어제 100% 막던 셋이 새 공격 각도에는 무력할 수 있으니, 벤치 점수는 언제나 하한이다(4.3.2). 셋째, 심판 신뢰성 문제가 그대로 온다. 유해성 판정을 모델이 하면 4.2의 편향·불일치가, 특히 회색지대에서 그대로 재현되고, 인간 판정도 정책 해석 차이로 판정자 간 불일치가 크다. 넷째, 커버리지 편향이 있다. 벤치는 특정 범주·언어·형식에 쏠려 있어, 벤치에 없는 범주(예: 특정 저자원 언어, 멀티모달 입력)는 점수에 아예 반영되지 않는 사각지대가 된다. 다섯째, 분포 불일치다. 벤치의 공격 분포는 실제 서비스가 받는 공격 분포와 다르므로, 실트래픽 기반 평가(7.6)로 보완해야 한다.
결론은 단순하다. 안전 벤치마크는 회귀 탐지와 상대 비교의 도구이지 "안전 인증서"가 아니다. 높은 점수는 "이 알려진 공격에는 강하다"까지만 말한다. 공개 벤치 점수를 안전 인증으로 오독하는 것이 이 분야에서 가장 흔하고 위험한 실수다.
4.3.10 과잉거부 — 안전과 유용성의 파레토 전선
안전 논의는 유해 출력을 막는 쪽으로 기울기 쉽지만, 반대편 실패 — 무해한 요청을 거부하는 과잉거부(over-refusal) — 도 똑같이 중요한 제품 실패다. 이것이 4.3.7 2×2의 왼쪽 아래(False Positive)다. 원인은 대개 표층·키워드 과민이거나 과도하게 보수적인 정렬·가드레일이다. 전형적 실패는 이렇다. "폭탄"이라는 단어 때문에 요리의 "flavor bomb"이나 게임 공략을 거부한다. "죽이다"가 들어간 프로세스 종료(kill -9)나 스포츠 표현을 거부한다. 의학·법률·보안의 정당한 전문 질문을 "위험할 수 있다"며 얼버무리거나 경고로 가득 채운다. 가장 타격이 큰 것은, 위기의 사용자에게 자해 관련이라는 이유로 필요한 지원 정보까지 차단해 오히려 해를 끼치는 경우다 — 4.3.3에서 본 회색지대의 반대편 비용이다.
과잉거부의 비용은 눈에 덜 띄지만 실질적이다. 유용성 저하, 사용자 이탈, 경쟁 열위, 그리고 무엇보다 "이 모델은 쓸데없이 깐깐하다"는 신뢰 훼손. 안전과 유용성은 하나를 극단으로 밀면 다른 하나가 붕괴하는 짝이다. 이 관계를 두 축으로 놓으면, 도달 가능한 시스템들은 파레토 전선(Pareto frontier) 위·아래에 놓인다.
이 그림에서 챙길 통찰은 둘이다. 첫째, 전선 위의 이동은 트레이드오프다 — 더 안전하려면 덜 유용해진다. 이것은 정책·리스크 선택의 문제라 아동 서비스는 왼쪽 위(더 보수적)를, 개발자 도구는 오른쪽(더 허용적)을 고른다. 앞 절의 모델 A와 B가 바로 이 전선 위의 두 점이었다. 둘째, 전선 자체를 바깥으로 미는 것은 순수한 개선이다. 더 나은 정렬(3.1·3.6), 의미 기반 가드레일(7.3), 정교한 정책은 "무해 요청은 더 잘 응하면서 유해는 더 잘 막는" 것을 동시에 이룬다. 좋은 안전 작업은 트레이드오프를 감내하는 것이 아니라 전선을 미는 것이다 — 표층 키워드 필터를 의미 판정으로 바꾸면 "flavor bomb"을 통과시키면서 실제 위해 요청은 여전히 차단하는, 곧 전선 전체를 바깥으로 옮기는 일이 된다.
안전 지표만 재고 과잉거부를 안 재면 "무조건 거부하는 무용한 모델"이 최고점을 받는다. 반드시 짝으로 잰다. 경계 근접(borderline) 무해 셋 — 유해와 표층은 닮았지만 실제로는 무해한 요청 — 을 모아 그 거부율을 잰다(XSTest·OR-Bench 계열의 over-refusal 벤치가 이 목적이다). 여기서 거부율이 높으면 과잉거부다. 더 강한 방법은 짝 평가(paired eval)로, 같은 축에서 "유해 버전"과 "무해 버전"을 쌍으로 만들어 유해는 거부하고 무해는 응답하는 판별력을 본다 — 둘 다 거부하면 판별이 아니라 무차별 회피다. 안전(유해셋 거부율)과 유용성(무해셋 응답률)은 하나로 합치지 말고 둘 다 보고한다. 굳이 단일 점수가 필요하면 F1식 조화나 리스크 가중 합을 쓰되 가중치를 명시한다 — 그 가중치가 곧 정책 선택이기 때문이다.
4.3.11 지속 평가 — 릴리스 전 게이트와 후 모니터링, 그리고 안전 회귀
안전은 한 번 통과하는 관문이 아니라 모델·프롬프트·정책·데이터가 바뀔 때마다 다시 실행되는 순환이다(8.2의 릴리스·회귀와 7.6의 관측성을 안전에 특화한 버전으로 볼 수 있다). 릴리스 전에는 자동 안전 스위트를 게이트로 적용한다. 회귀 스위트는 지금까지 찾은 모든 성공 공격(레드팀·크라우드·실사고)을 재현 테스트로 고정한다 — "한 번 막은 건 다시 뚫리면 안 된다"가 원칙이고, 안전 회귀는 능력 회귀보다 치명적이다. 범주별 위반율과 과잉거부율을 4.3.7의 지표로 내고 임계 초과 시 배포를 차단하되, 반드시 과잉거부까지 짝으로 게이트에 넣는다 — 안 그러면 "거부 폭증"으로 게이트를 통과하는 퇴행이 벌어진다. 4.3.4의 자동 레드팀 루프를 릴리스 후보에 실행해 새 취약점을 훑고, 자동 게이트를 통과해도 아동안전 같은 고위험 범주는 사람이 사인오프한다. 숫자만으로 배포하지 않는다.
배포는 끝이 아니라 시작이다. 실제 트래픽에서 새 공격이 온다.
모니터링은 거부율 급변, 특정 범주 위반 신고 급증, 새 공격 패턴을 실시간 추적한다 — 유해율뿐 아니라 과잉거부 급증도 회귀 신호로 검출한다. 인테이크 채널은 자동 탐지에 더해 사용자 신고와 외부 연구자·바운티를 포함해야 한다. 새 탈옥은 대개 배포 후 외부에서 먼저 발견되므로, 받아들이는 창구가 없으면 취약점이 조용히 방치된다. 확인된 새 공격은 정렬 데이터·가드레일·정책·회귀셋으로 환류시킨다 — 8.1의 데이터 플라이휠을 안전에 적용한 순환이다.
가장 놓치기 쉬운 함정은 능력을 개선하는 변경이 안전을 되돌린다는 것이다. 유용성·지시 준수를 강화하는 파인튜닝이 "거절 성향"을 약화시켜 이전에 막던 공격이 다시 우회될 수 있다 — 소량의 파인튜닝만으로도 안전 정렬이 눈에 띄게 약화될 수 있다는 보고들이 있다. 그래서 세 가지를 지킨다. 안전 스위트는 "안전과 무관해 보이는" 변경을 포함해 모든 모델·프롬프트 변경에 대해 실행된다. 안전 회귀셋은 단조 증가한다 — 한 번 추가된 공격은 영구히 남는다. 안전과 유용성 지표를 같은 대시보드에 놓아, 한쪽을 밀 때 다른 쪽이 붕괴하는지 즉시 본다(4.3.10의 파레토 관점). 능력 개선이 안전을 조용히 잠식한 것을 릴리스 후에야 아는 것이 이 분야의 가장 값비싼 사고 유형이다.
4.3.12 고양이-쥐 동학과 계층 방어 — 곱셈적 방어의 수계산
안전은 스팸·보안과 같은 적대적·적응적 게임이다. 방어가 새 공격을 막으면 공격자가 새 우회를 찾고, 그것을 막으면 또 다른 우회가 나온다 — 고양이-쥐(cat-and-mouse) 동학이다. 이것이 "왜 영원히 끝나지 않나"의 구조적 이유다. 비대칭이 그 근원인데, 방어자는 모든 구멍을 막아야 하고 공격자는 하나만 찾으면 된다(4.3.1의 최악 경우 논리). 정적 방어에 대해 공격은 진화하고, 알려진 공격으로 학습·평가한 방어가 모르는 공격에 강하리라는 보장은 없다 — 평가는 하한만 준다(4.3.2). 그래서 목표는 "완벽한 안전"이 아니라 공격 비용을 높이고, 실패를 줄이고, 새 공격에 빠르게 대응하는 태세다. "완성"이나 "절대 안전"을 약속하는 안전 주장은 그 자체로 의심 신호다.
단일 방어가 불완전하므로 실무는 독립적인 여러 겹을 쌓는다 — 계층 방어(defense in depth)다. 한 겹이 우회돼도 다른 겹이 검출한다. 각 겹은 7.3(가드레일)와 이 장(평가·정렬)이 역할을 나눠 맡는다.
계층 방어의 논리는 곱셈적이다. 이것을 직접 계산해 보면 왜 여러 겹이 그토록 강한지, 그리고 그 강함이 어디서 붕괴하는지가 동시에 드러난다. 각 겹의 공격 통과율(그 겹을 통과하는 공격의 비율)을 $p_i$ 라 하자. 입력 가드레일이 $p_1 = 0.35$(공격의 65%를 검출함), 정렬된 모델이 $p_2 = 0.25$(75% 거절), 출력 가드레일이 $p_3 = 0.4$(60%를 검출함)라 두면, 겹들이 독립이라는 이상화 하에서 끝까지 통과하는 공격의 비율은
$$\text{end-to-end ASR} = \prod_i p_i = 0.35 \times 0.25 \times 0.4 = 0.035 = 3.5\%$$
가장 강한 단일 겹조차 25%를 통과시키는데, 셋을 겹치니 전체가 3.5%로 떨어졌다. 이것이 곱셈적 방어의 힘이다 — 각 겹이 완벽하지 않아도 곱이 급감한다.
그런데 독립이라는 가정이 바로 이 계산의 아킬레스건이다. 만약 어떤 부류의 공격이 같은 표층 트릭으로 입력 가드레일과 출력 가드레일을 함께 우회한다면, 그 공격들에 대해 $p_1$ 과 $p_3$ 은 상관된다 — 겹 1을 통과했다는 조건에서 겹 3을 통과할 확률이 주변 확률 0.4보다 훨씬 높아진다. 구체적으로, 공격의 20%가 인코딩·난독화 부류여서 이들에 대해 겹 1 통과율이 0.6(난독화가 키워드 필터를 더 잘 우회함)이고, 겹 1을 통과하면 겹 3도 0.9로 통과한다고 하자. 두 부류로 나눠 계산하면
$$\text{일반 공격(80\%): } 0.35 \times 0.25 \times 0.4 = 0.035$$
$$\text{상관 공격(20\%): } 0.60 \times 0.25 \times 0.90 = 0.135$$
$$\text{혼합 ASR} = 0.8 \times 0.035 + 0.2 \times 0.135 = 0.028 + 0.027 = 0.055 = 5.5\%$$
순진한 독립 가정은 3.5%라 했지만 실제 누출은 5.5%로, 상관된 꼬리가 실질 실패를 거의 두 배로 키웠다. 여기서 계층 방어의 실제 설계 원리가 나온다 — 겹은 단순히 많이 쌓는다고 곱해지지 않는다. 겹들이 서로 다른 메커니즘(표층 필터 대 의미 판정 대 사후 검사)으로 독립적이어야만 곱셈이 성립한다. 같은 원리(예: 표층 키워드)로 만든 세 겹은 사실상 한 겹이다.
곱셈적 이득에는 대가가 따르는데, 이 대가도 정확히 계산된다. 각 겹은 공격만 막는 것이 아니라 무해 트래픽도 조금씩 잘못 거부한다(과잉거부). 어느 한 겹이라도 무해 요청을 거부하면 그 요청은 과잉거부된 것이다. 각 겹의 무해 오거부율을 $q_i$, 독립이라 두면, 무해 요청이 세 겹을 모두 통과할(=정상 서비스될) 확률은 $\prod_i (1 - q_i)$ 이고 과잉거부율은 그 여집합이다. $q_1 = q_2 = q_3 = 0.05$ 면
$$\text{전체 과잉거부율} = 1 - (1-0.05)^3 = 1 - 0.857 = 14.3\%$$
각 겹이 5%씩만 오거부하는데 전체는 14.3%로, 어느 단일 겹보다 크다. 그리고 겹을 하나 더 쌓으면 $1 - 0.95^4 = 18.5\%$ 로 더 오른다. 정리하면 이렇다.
| 항목 | 값 | 무엇을 말하나 |
|---|---|---|
| 3겹 독립 ASR | 3.5% | 곱셈적 방어의 이상적 이득 |
| 3겹 상관 보정 ASR | 5.5% | 표층 트릭이 여러 겹을 함께 우회하면 곱셈이 붕괴 |
| 3겹 과잉거부율 | 14.3% | 겹마다 5% 오거부가 누적 |
| 4겹 과잉거부율 | 18.5% | 겹을 더할수록 유용성 비용 증가 |
이 표가 계층 방어의 근본 긴장이다. 겹을 쌓을수록 공격 통과율은 곱으로 줄지만 과잉거부는 누적으로 는다. 그래서 계층의 수와 강도 자체가 4.3.10의 파레토 트레이드오프 대상이고, 무한정 쌓으면 유용성이 사라진다. 좋은 설계는 "메커니즘이 독립인 소수의 강한 겹"이지 "같은 원리의 겹을 잔뜩"이 아니다.
이 장의 자리도 여기서 분명해진다. 가드레일이라는 겹을 만드는 것은 7.3이고, 그 겹이 실제로 막는지 공격해 보는 것은 이 장이다. 평가는 어느 한 겹이 아니라 각 겹과 전체 조합을 적대적으로 시험해 "어느 겹이 어디서 약한가"와 "어느 트릭이 여러 겹을 함께 뚫는가"를 찾는다. 방어를 설계하는 손과 그 방어를 부수려는 손이 같은 조직 안에 공존해야 하는 이유가 이것이다.
여기서 제4부(평가)를 닫는다. 벤치마크의 함정(4.1), 모델로 모델 채점(4.2), 그리고 이 장의 안전·레드팀으로 "얼마나 잘하고 얼마나 위험한가"를 재는 틀을 세웠다. 다음 제5부는 방향을 바꿔 "이 모델을 실제로 어떻게 빠르고 싸게 굴리나"로 넘어간다 — 추론의 물리와 KV 캐시부터다(5.1). 평가에서 만든 안전·품질 기준은 사라지지 않는다. 이후 서빙과 제품, 운영에서 게이트·모니터링·회귀의 형태로 계속 되돌아오며, 특히 이 장의 계층 방어와 지속 평가는 7.3의 가드레일과 7.6의 관측성으로 곧장 이어진다.