위협 모델
핵심 요약
구매자는 자신의 브라우저 코드를 읽고·수정하고·복제할 수 있다고 가정합니다. 권한 확인과 중요 연산은 신뢰할 수 있는 서버에서 처리해야 합니다.
코드 은닉 또는 기기 보안을 보장한다고 안내하기 전에 공격자 모델과 잔여 위험을 확인하세요.
experiments/auto-protection/docs/THREAT_MODEL.md(규범 공격자 모델)과 docs/product/trust-model.md(제품 수준 책임 분할)에서 요약되었습니다. 그 파일들이 권위이고, 이 페이지는 읽기 쉬운 다이제스트입니다.
공격자
보호된 기능을 구매하지 않은(또는 한 번 구매하고 그 값을 배포하고 싶은) 최종 사용자이며, 자신의 브라우저 환경을 완전히 제어합니다. 구체적으로 이들은:
- 브라우저에 서빙된 모든 아티팩트를 다운로드하고 정적 분석할 수 있습니다(JS, WASM, HTML, 소스 맵).
- 임의 실행 지점의 메모리를 검사할 수 있습니다 — 시크릿 의존 값이 RAM에 있는 순간 포함.
- 라이선스/무결성 검사 코드 경로를 패치하거나, 재번들하거나, 제거할 수 있습니다.
- 자신의 트래픽을 MITM할 수 있습니다: 관찰, 기록, 수정, 드롭, 리플레이.
- 환경을 복제할 수 있습니다: 저장소, 토큰, IndexedDB, 프로필 전체.
- 협력하는 유료 사용자의 세션을 통해 릴레이할 수 있습니다.
- 클라이언트가 정당하게 받은 모든 결과를 재사용/재배포할 수 있습니다.
범위 밖: 서버 침해, 다른 사용자 디바이스에 대한 공격, 물리적/하드웨어 공격, DoS.
신뢰됨 vs 신뢰되지 않음
신뢰됨: 서버와 그 런타임 무결성; 서버 보유 시크릿; entitlement 원장(라이선스/폐기/사용량); 서버 측 인가 검사; 표준 암호학.
신뢰되지 않음:
| 구성 요소 | 이유 |
|---|---|
| 클라이언트 보유 키 | 클라이언트가 가진 것은 공격자가 가진 것입니다. |
| 추출 불가 WebCrypto 키 | extractable:false는 순진한 추출만 차단하고 내부 남용(sign()은 동일 환경의 적대적 코드가 호출 가능)이나 전체 프로필 복제는 차단하지 않습니다 — 수정이 아닌 입증된 한계. |
| 난독화 / WASM 불투명성 | 분석 비용을 올립니다 — 측정된 것은 수개월이 아닌 수 분~수십 분입니다. |
| 자체 무결성 검사 | 검사기는 동일한 공격자 제어 컨텍스트에서 실행됩니다; 제거 가능. |
| TEE/TPM/WebAuthn | 이 모델에서는 의존하지 않습니다. |
TLS는 정직한 엔드포인트 간 전송 바이트를 보호합니다 — 공격자가 그 엔드포인트 중 하나입니다. "TLS 종료"가 공격자 접근이 시작되는 곳입니다.
공개 클라이언트 복제 가능 한계
이것이 핵심 정직성 포인트이며, 명확히 진술합니다:
배송된 아티팩트만으로 값을 계산할 수 있다면, 그 아티팩트의 모든 클론은 정의상 동작합니다. 완전한 클라이언트 측 에셋은 복사 방지될 수 없습니다; 서버 의존성 없는 "복사 보호"는 기술적 장벽이 아닌 라이선스 강제로 축소됩니다.
이 사이트의 모든 정직한 클레임을 형성하는 따름 정리:
- 브라우저에 배송된 모든 것은 배송 시점에 공개입니다 — 알고리즘, 상수, 임베드된 "시크릿", WASM 내부.
- 배송된 자료의 런타임 기밀성은 존재하지 않습니다 — 클라이언트에 배송된 키는 공격자가 관찰 가능한 평문을 산출합니다.
- 배송된 결과는 재공유 가능합니다(아날로그 홀) — 사후 추적/워터마킹만 적용되며, 다른 규율입니다.
F_k쿼리를 릴레이하는 협력하는 유료 사용자는 승인된 접근을 행사하는 것입니다 — 완화는 미터링/레이트 리미팅이며 부분적입니다.- 지연과 비용 상승은 실재하지만 절대 방지로 오표시되어서는 안 됩니다. 문서는 지연을 의미할 때 지연이라고 말합니다.
- "키를 복제할 수 없다" ≠ "설정을 복제할 수 없다" — 추출 불가 키는 순진한 복제의 장벽을 올리지만 프로필 전체는 원칙적으로 복사 가능합니다.
보호 가능한 것
가르는 질문: 그 값을 얻는 것이 권한 없는 요청자에게 거부할 작업을 서버에 요구하는가? 그렇다면:
- 서버 측 시크릿은 비밀로 유지됩니다(절대 배송되지 않음).
- 부여는 서버 측에서 entitlement 게이트됩니다(입증된 형태: 이전 실험이 시도된 모든 무인증 실행을 차단).
- 원장 위의 원자적 capability 소비와 미터링을 통한 사용당 책임 — 클라이언트 카운터가 아닙니다.
- 권한 없는 클라이언트는
F_k(x)를 독립적으로 생산할 수 없습니다 — iffF_k가 진정으로 키된 함수이고 (experiments/auto-protection/docs/PARTITION-MODEL.md) oracle 남용이 경계될 때 — 그것이 실험이 가정이 아닌 검증하는 클레임입니다.
3자 책임 분할
docs/product/trust-model.md에서: DevPay는 라이선스/entitlement 권한입니다(관찰한 것만 미터링 — BYOS 실행은 구조적으로 보이지 않음); 셀러는 소프트웨어, 기능 네임스페이스, BYOS 강제 서버를 소유합니다 (셀러 측 변조는 플랫폼 범위 밖 — 강제는 바이어 대면 계약을 경계); 바이어는 제어된 환경 안에서 키 + 디바이스 키페어를 보유합니다.