01 · 사기 방지를 위한 디바이스 인텔리전스 태그를 지정한 여정

웹을 위한 디바이스 인텔리전스·사기 위험 API 모든 접속을 평가하고, 근거로 결정하세요.

원하는 화면마다 태그 하나

사이트에 넣는 스크립트 하나가 데스크톱 기준 약 0.1초 만에 브라우저와 디바이스를 읽습니다. 백엔드에서 직접 이름 붙인 태그와 함께 서명된 호출 한 번이면 바로 답을 받습니다. 신뢰 점수(위험 점수), 증거 커버리지, 그리고 봇·자동화 탐지, 브라우저 위장, 에뮬레이터부터 VPN·프록시·Tor까지 13개 지표와 모든 권고의 근거입니다. 계정 탈취, 가짜 가입, 출금 사기를 추측이 아닌 근거로 찾아내세요. 권고는 저희가, 결정과 조치는 고객사가 합니다.

태그를 지정한 모든 화면에서 동기 응답 · 어떤 결정에도 영향을 주기 전 섀도 모드 · 규칙도, 리스트도, 결정도 고객사의 몫

이 응답 읽는 법 · v1.1/login_completed 예시

  1. 이 권고의 이유

    ALLOWreason_codes · NO_ADVERSE_INDICATOR_MATCH

    정책이 가중치를 두는 지표 중 탐지된 것이 없습니다. 계약 예시: FingerTrackID 관리형 정책은 모든 점수에서 MONITOR를 권고하며, ALLOW는 고객사가 자체 위험 규칙에서 설정한 점수 구간에서 나옵니다. policy-login-v1 기준으로 결정되었습니다.

  2. 점수가 의미하는 것과 의미하지 않는 것

    trust_score 1000–100 · 높을수록 좋음

    이 정책 버전에서 이 접속에 대한 신뢰도이며, 사기 확률이 아닙니다. COMPLETED 외의 상태에서는 null이며, 기본값으로 채우지 않습니다.

  3. 얼마나 볼 수 있었는가

    evidence_coverage 100limitation_codes · 없음

    예정된 검사 중 실제로 실행된 비율입니다. 누락된 증거가 있으면 여기에 명시됩니다. 커버리지를 낮출 뿐, 위험 사유가 되지는 않습니다.

  4. 이후는 고객사의 몫

    customer_action그다음 결과(outcome)

    고객사 백엔드가 결정하고 조치한 뒤, 무엇을 했는지와 실제 결과를 알려 줍니다. 저희는 차단하거나 자금을 보류하지 않습니다.

POST /v1/assessments → 201

event-assessment.v1.1 · 계약 예시

assessment_status완료평가 완료
trust_score1000–100 · 높을수록 좋음
device_match_confidence0.980–1 · 일치 강도
evidence_coverage1000–100 · 충분성
ALLOWrecommendation_basis · EVALUATION조치가 아닌 권고
reason_codes NO_ADVERSE_INDICATOR_MATCH  ·  limitation_codes none
{  "schema_version": "event-assessment.v1.1",  "tag": "login",  "assessment_status": "COMPLETED",  "trust_score": 100,  "device_match_confidence": 0.98,  "evidence_coverage": 100,  "signals": [ … 13 objects ],  "limitation_codes": [],  "reason_codes": ["NO_ADVERSE_INDICATOR_MATCH"],  "recommended_action": "ALLOW",  "recommendation_basis": "EVALUATION",  "policy_version": "policy-login-v1"  // … 21 more fields in the full response: ids, snapshot, versions, timestamps}
전체 응답 · 54줄 · 신호 13개, 미탐지 항목은 접힘
1{2  "schema_version": "event-assessment.v1.1",3  "assessment_id": "01996f2a-0000-7000-8000-000000000101",4  "assessment_version": 1,5  "supersedes_assessment_id": null,6  "business_event_id": "01996f2a-0000-7000-8000-000000000102",7  "external_event_id": "login_20260904_000001",8  "tag": "login",9  "assessment_status": "COMPLETED",10  "retryable": false,11  "trust_score": 100,12  "device_intelligence_snapshot_id": "01996f2a-0000-7000-8000-000000000103",13  "device_intelligence_snapshot_version": 1,14  "device_id": "dev_0123456789abcdefghij",15  "device_match_confidence": 0.98,16  "evidence_coverage": 100,17  "data_freshness": {18    "evidence_cutoff_at": "2026-09-04T12:00:00Z",19    "oldest_required_observed_at": "2026-09-04T11:59:59Z",20    "maximum_required_age_ms": 300000,21    "all_required_fresh": true22  },23  "signals": [24    { "signal_code": "ANTI_FINGERPRINTING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },25    { "signal_code": "BOT_AUTOMATION", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },26    { "signal_code": "BROWSER_SPOOFING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },27    { "signal_code": "EMULATED_ENVIRONMENT", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },28    { "signal_code": "PRIVATE_BROWSING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },29    { "signal_code": "BROWSER_PRIVACY_BRAVE", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },30    { "signal_code": "BROWSER_PRIVACY_SAFARI", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },31    { "signal_code": "BROWSER_PRIVACY_SAMSUNG_INTERNET", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },32    { "signal_code": "NETWORK_PROXY", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },33    { "signal_code": "NETWORK_VPN", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },34    { "signal_code": "NETWORK_HOSTING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },35    { "signal_code": "NETWORK_TOR", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },36    { "signal_code": "DEVICE_MULTI_USER", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … }37  ],38  "limitation_codes": [],39  "reason_codes": ["NO_ADVERSE_INDICATOR_MATCH"],40  "recommended_action": "ALLOW",41  "recommendation_basis": "EVALUATION",42  "policy_version": "policy-login-v1",43  "fallback_policy_version": "production-observation-fallback-v2",44  "ruleset_version": "ruleset-web-v1",45  "signal_catalog_version": "signals-web-v1",46  "feature_schema_version": "features-v1",47  "resolver_version": "resolver-v1",48  "sdk_version": "web-sdk-1.0.0",49  "provider_versions": ["network-provider-2026-09-04"],50  "evidence_cutoff_at": "2026-09-04T12:00:00Z",51  "evaluated_at": "2026-09-04T12:00:01Z",52  "expires_at": "2026-09-04T12:05:00Z",53  "correlation_id": "corr-assessment-login-0001"54}

결과를 만든 버전 · policy-login-v1 · production-observation-fallback-v2 · ruleset-web-v1 · signals-web-v1 · features-v1 · resolver-v1 · web-sdk-1.0.0 · network-provider-2026-09-04

전체 응답의 신호 13개 · 지표 매트릭스 ↓

숫자로 보는 제품

응답

13

모든 응답에 포함되는 웹 지표

3

지표별 상태: 탐지, 미탐지, 평가 안 됨

14

‘평가 안 됨’에 붙는 명시적 사유, 조용한 false는 없음

5

가능한 권고

3

분리된 측정값: 신뢰, 디바이스 일치, 증거 커버리지

1

평가 이벤트당 서명된 호출

수집

17

수집 1회당 브라우저·디바이스 증거 섹션

48

브라우저가 주장하는 버전과 대조하는 브라우저 API

125

밀리초 이하: Chrome, Firefox, Safari 데스크톱 수집 시간 중앙값

0

사용자에게 표시되는 권한 요청

고객사의 규칙과 조사

54

모든 평가 안에서 계산되는 컨텍스트 인사이트

67

고객사가 자체 점수에 반영할 수 있는 규칙: 지표 13개와 인사이트 54개

6

네트워크 지표의 근거가 되는 공개 참조 리스트

6

콘솔 언어: 영어, 포르투갈어(브라질·포르투갈), 스페인어, 프랑스어, 독일어

절대 수집하지 않음 — 요금제와 무관

  • 포인터 움직임과 키 입력: SDK는 어느 것도 수집하지 않습니다
  • 픽셀, 오디오 샘플, GPU 제조사·렌더러 이름, 폰트 이름: canvas, WebGL, WebGPU, 오디오, 폰트는 해시, GPU 계열, 고정 폰트 목록에 대한 존재 마스크 형태로만 브라우저 밖으로 나갑니다
  • WebRTC, 로컬 포트, 배터리, 모션 센서: 읽지 않습니다
  • 권한 요청 없음, 브라우저 내 결정 없음, 고객 계정에 대한 저희의 조치 없음

— 모든 값은 버전 관리되는 계약, 카탈로그 또는 리스트의 개수입니다. 단, 수집 시간은 콜드 캐시 상태의 자체 테스트 머신에서 측정한 값입니다. 어느 값도 요금제나 사용량에 따라 달라지지 않습니다.

03 · 활용 사례

결정이 중요한 화면에서의 사기 방지.

디바이스 인텔리전스는 백엔드가 동작을 허용하기 전에 한 가지 질문에 답합니다. 이 화면 반대편에는 실제로 무엇이 있는가? 모든 여정에 같은 호출을 쓰며, 보내는 태그는 분류에만 쓰입니다.

login · password_recovery · profile_change

계정 탈취(ATO) 방지

한 번도 쓰지 않은 디바이스에서 접속한 기존 계정, 스스로를 속이는 브라우저, 안티디텍트 브라우저, 시간상 불가능한 이동. 모두 근거로 돌아오므로 정말 필요할 때만 2차 인증을 요청할 수 있습니다.

signup · login · checkout

봇 및 자동화 탐지

헤드리스 브라우저, 자동화 프레임워크, 시그니처로 식별한 AI 에이전트, 데이터센터 트래픽. BOT_AUTOMATION와 NETWORK_HOSTING는 무엇이 보였는지를, 커버리지는 얼마나 볼 수 있었는지를 알려 줍니다.

signup · deposit · promotions

가짜 계정과 다중 계정

디바이스별·IP별 계정 수와 인물 수, 고객사 사용자 기반에서 해당 디바이스 프로필이 얼마나 드문지, 다른 디바이스에서 반복된 동일 수집. 규칙에 반영할 수 있는 컨텍스트일 뿐 자동 판정이 아닙니다. 한 사람이 정당한 계정을 여러 개 가질 수 있습니다.

withdrawal · pix_transfer · trade

출금, Pix, 송금 사기

새 디바이스 후 첫 1시간 안의 출금, 여러 계정이 공유하는 수취인, 고객사가 사기 확정으로 표시한 인접 계정. 자금 보류나 검토는 고객사 백엔드가 합니다. 저희는 하지 않습니다.

모든 여정

에뮬레이터와 위장 브라우저

Android 에뮬레이터와 가상화, 선언된 시스템에서 불가능한 GPU, 자체 API와 모순되는 브라우저 버전. 디바이스 핑거프린팅 신호는 원시 픽셀이 아니라 해시와 계열로만 읽습니다.

모든 여정

VPN, 프록시, Tor 탐지

알려진 VPN 제공업체, 공개 프록시, Tor 출구 노드, 호스팅 대역, Apple iCloud Private Relay를 저희 쪽에서 갱신하는 공개 리스트로 식별합니다. 익명화는 컨텍스트이지 유죄의 증거가 아닙니다. 얼마나 반영할지는 고객사 정책이 정합니다.

04 · 측정값

측정값은 분리됩니다. 확실성으로 위장한 평균은 없습니다.

신뢰도, 커버리지, 디바이스 일치를 하나의 숫자로 합치면 분석가가 정작 봐야 할 것, 즉 문제가 접속에 있는지 증거에 있는지가 가려집니다.

trust_score

접속 신뢰도

72

0100 · 높을수록 좋음

이 정책 버전에서 이 접속을 얼마나 신뢰할 수 있는지에 답하며, 보내는 태그는 값을 바꾸지 않습니다. 0~100의 정수입니다. assessment_status = COMPLETED일 때만 존재하고, 다른 모든 상태에서는 null이며 기본값으로 채우지 않습니다.

사기 확률, 개인의 평판, 누락 데이터의 기본값이 아닙니다. 저희는 72/100을 보여 줄 뿐, ‘72% 신뢰’라고 말하지 않습니다.

device_match_confidence

디바이스 일치

0.94

01 · 상한 0.98

이 접속이 이미 본 동일 디바이스에서 왔다는 증거의 강도로, 0~1 사이 값입니다. 확률적 클러스터의 불투명한 공개 식별자인 device_id와 함께 제공됩니다.

개인의 신원도, 하드웨어의 증명도 아닙니다. Party와 Account는 서로 다릅니다.

evidence_coverage

증거 충분성

100

0100 · 13개 중 13개 평가

예정된 검사 세트 중 실행할 수 있었던 비율로, 0~100입니다. 적용 대상 지표가 NOT_EVALUATED로 남으면 커버리지가 낮아지고 limitation_codes에 표시됩니다.

점수의 일부가 아닙니다. 커버리지가 낮다고 점수가 내려가거나 올라가지 않으며, 평가가 결론 불가로 남을 뿐입니다.

합산하지 않는 이유

하나의 ‘의심’ 점수는 서로 다른 세 질문을 섞어 버립니다. 이 접속은 신뢰할 만한가? 증거는 충분했는가? 같은 디바이스인가? 답이 분리되어 오면 분석가는 2차 인증을 요청할지, 수집을 기다릴지, 이력을 볼지 알 수 있습니다. 하나로 합쳐 오면 아는 것은 ‘42점이 나왔다’는 것뿐입니다.

05 · 지표 13개

13개 지표. 각 지표는 봤는지, 못 봤는지, 평가할 수 없었는지를 말합니다.

모든 웹 평가는 13개 코드를 항상 반환합니다. 바뀌는 것은 각 코드의 상태일 뿐, 목록은 바뀌지 않습니다. 각 지표에는 버전 관리되는 전용 탐지기가 있으며, 응답에는 해당 지표를 평가한 버전이 명시됩니다. 탐지기가 없거나 만료되었거나 오류가 나도 false가 되지 않습니다.

signal_catalog web · 코드 13개 · withdrawal_completed 예시

  • 탐지됨
  • Not_detected
  • — 평가 안 됨

환경 무결성

브라우저 프라이버시 · 중립 컨텍스트

네트워크 · 중립 컨텍스트

디바이스

reason_codes · NETWORK_TOR_DETECTED REVIEW

저희 관리형 정책에서 Tor만으로는 BLOCK_RECOMMENDED가 정당화되지 않습니다. 고객사가 설정한 규칙은 고객사가 정한 가중치와 기준선을 따릅니다. 이 v1 계약 예시에서 policy-withdrawal-v1는 차단이 아니라 출금 검토를 요청했고, 단 하나의 사유 코드가 정확히 그것을 말합니다. 현재 운영 중인 관리형 정책은 모든 점수에서 MONITOR를 권고합니다.

같은 지표, 세 가지 상태

  • 탐지됨 · NETWORK_TOR PROVIDER · ftid-network-tor.v1 · 0.9 · withdrawal_completed 예시
  • 미탐지 · NETWORK_TOR PROVIDER · ftid-network-tor.v1 · 0.9 · login_completed 예시
  • — 평가 안 됨 · NETWORK_TOR not_evaluated_reason_code PROVIDER_UNAVAILABLE · limitation_codes ["PROVIDER_UNAVAILABLE"] · evidence_coverage 69 · provider_unavailable 예시

탐지기가 없거나 만료되었거나 오류가 나도 false가 되지 않습니다. NOT_APPLICABLE는 채널, 엔진, 플랫폼별 카탈로그의 불변 매트릭스에서만 나옵니다. 태그는 이를 바꾸지 않으며, 정책 비활성화, 타임아웃, 장애도 이 지름길을 쓰지 않습니다.

기본적으로 중립 컨텍스트

PRIVATE_BROWSINGBROWSER_PRIVACY_BRAVEBROWSER_PRIVACY_SAFARIBROWSER_PRIVACY_SAMSUNG_INTERNETNETWORK_PROXYNETWORK_VPNNETWORK_TOR

이들은 관찰 범위를 제한할 수 있습니다. 커버리지는 증거가 평가되지 않은 부분에서만 낮아집니다. 사기가 아닙니다. 환경을 설명할 뿐, 사람을 고발하지 않습니다. 저희 관리형 정책에서 이들만으로는 BLOCK_RECOMMENDED가 정당화되지 않으며, 고객사가 설정한 규칙은 고객사가 정한 가중치와 기준선을 따릅니다. Apple iCloud Private Relay 뒤처럼 네트워크 유형을 구분할 수 없을 때는 호스팅, VPN, 프록시 모두 NETWORK_TYPE_AMBIGUOUS와 함께 NOT_EVALUATED로 남습니다. 하나의 boolean으로 세 개의 탐지를 표시하지 않습니다.

네트워크 증거는 저희 인프라에서 직접 갱신하는 공개 참조 리스트에서 나옵니다. Tor 출구 주소, 클라우드 제공업체 대역, 호스팅 네트워크 리스트, VPN 제공업체 대역, 공개 프록시 데이터베이스입니다. 사용자의 주소는 리스트 배포처로 전송되지 않습니다. 최대 유효 기간이 지난 리스트는 해당 지표를 NOT_DETECTED가 아니라 NOT_EVALUATED로 남깁니다.

06 · 컨텍스트 인사이트

13개 지표 너머, 54개의 컨텍스트 인사이트. 조사를 위해, 그리고 원할 때는 고객사 점수를 위해.

모든 평가 안에서, 응답 전에, 수집된 데이터와 고객사 자체 이력을 바탕으로 54개의 컨텍스트 인사이트를 계산합니다. 이 디바이스를 또 누가 쓰는지, 계정이 얼마나 빠르게 움직이는지, 어떤 네트워크에서, 어떤 계정들과 인접해 있는지. FingerTrackID 관리형 정책은 이를 점수에서 제외합니다. 고객사 자체 위험 규칙에서는 각 인사이트를 꺼짐, 고스트, 활성으로 설정하고 ‘이례적’과 ‘매우 이례적’에 점수를 줄 수 있습니다. 활성 인사이트가 발동하면 신뢰 점수에서 점수를 차감하고 reason_codes에 자신을 명시합니다.

context-insight.v1 · 6개 주제의 인사이트 54개 · 콘솔과 규칙에서의 분류 기준

  • 계정과 디바이스 · 10

    계정의 새 디바이스와 새 운영체제 · 30일간 디바이스의 서로 다른 계정 수와 인물 수 · 디바이스상의 동일 인물 계정 · 24시간 동안 계정별·인물별 디바이스 수 · 고활동 디바이스 · 고객사 내에서 디바이스 프로필이 흔한지, 드문지, 희귀한지 · 디바이스 쿠키 유실

  • 출금과 주문 · 7

    새 디바이스 후 첫 1시간 안의 출금 · 30일간 디바이스별 수취인 수와 수취인별 계정 수 · 계정별 출금 건수와 금액 · 계정별 주문 건수와 주문 간격 중앙값

  • 네트워크와 위치 · 12

    계정의 새 국가와 새 인터넷 제공업체(ASN) · 계정별 서로 다른 국가, 제공업체, IP 수 · IP별 계정 수와 인물 수 · 불가능한 이동 · IP 국가와 맞지 않는 브라우저 시간대 · VPN 출구 국가 · 공개 악용 리스트에 오른 제공업체 · Apple iCloud Private Relay

  • 브라우저와 SDK 무결성 · 16

    개발자 도구 열림 · 자동화 흔적 · 안티디텍트 브라우저 표식 · 선언된 브라우저와 맞지 않는 TLS 시그니처와 30일간의 안정성 · 소프트웨어 렌더러와 GPU 계열 · 두 번 읽을 때 달라지는 canvas 또는 오디오 · 인앱 브라우저 · 게스트 모드 가능성 · 시그니처로 식별한 AI 에이전트 · 봇 카테고리 · 승인된 패키지와 다른 SDK · 여러 디바이스에서 쓰인 하나의 SDK 세션 · 다른 디바이스에서 반복된 동일 수집 · 지나치게 먼 장소들에서 사용된 디바이스 쿠키

  • 속도(Velocity) · 5

    5분, 1시간, 24시간 동안 디바이스별·계정별 접속 수, 5분과 1시간 동안 IP별 접속 수 · 1분, 5분, 1시간 동안 계정별·디바이스별 같은 태그의 평가 수

  • 계정 간 연결, 1홉 · 4

    같은 디바이스를 쓴 다른 계정 · 자동화나 브라우저 위장이 탐지된 인접 계정 · 고객사가 사기 확정으로 표시한 인접 계정 · 다른 계정과 공유된 출금 수취인

세 가지 상태 · 0이 아니라 사유

  • 관찰됨 · 조건이 존재하거나, 건수·측정값이 중립값과 다릅니다.
  • 관찰 안 됨 · 평가되었고, 없거나 중립값입니다.
  • 평가 안 됨 · 항상 사유와 함께 표시되며, 0으로 표시되지 않습니다.

일부 인사이트는 고객사가 보내는 데이터에 의존합니다. 계정·인물 ref, 태그, 결과(outcome)가 없으면 항목이 그렇게 알려 줍니다. 계정 미전송, 태그 없는 평가, 결과 미전송. 태그가 지정된 요청에는 금액이나 수취인이 없으므로 출금 금액과 수취인 항목도 그렇게 표시합니다. 첫 접속, 익명화된 네트워크, 검사의 1시간 범위를 벗어난 IP도 사유가 됩니다.

인사이트가 아닌 것

  • 13개 지표 중 하나가 아니며, 제한 코드도 아닙니다. 고객사가 활성화한 규칙을 통해서만 reason_codes에 도달합니다.
  • FingerTrackID 관리형 정책의 점수에는 절대 들어가지 않습니다. 데이터가 없는 활성 인사이트는 아무것도 차감하지 않습니다. 누락된 증거는 위험이 되지 않습니다.
  • 숨겨진 모델이 아닙니다. 각 인사이트는 공개된 기본값에서 출발해 고객사가 조정할 수 있는 기준에 따라 예상 범위, 이례적, 매우 이례적으로 판독됩니다.
  • 고발이 아닙니다. 한 디바이스의 계정 수나 인물 수가 많다고 사기의 증거가 되지 않으며, ‘디바이스당 계정 N개 = 사기’ 규칙은 없습니다.

분석가가 인사이트를 보는 곳

접속 상세. ‘접속 컨텍스트’ 카드가 인사이트를 주제별로 묶어 시간 범위, 참조한 이력의 기준 시점, 고객사 기준에서 각 항목이 얼마나 이례적인지, 값이 없는 항목의 사유를 보여 줍니다. 평가의 시간 예산 안에 들어오지 못한 인사이트는 백그라운드에서 마무리되고 그 사실을 표시하며, 응답을 지연시키거나 실패시키지 않습니다.

지표 카탈로그. 한 페이지에서 13개 지표 각각이 무엇을 찾는지, 무엇 때문에 평가 안 됨이 되는지, 점수를 움직일 수 있는지 설명하고, 컨텍스트 인사이트와 값이 없을 수 있는 사유를 나열합니다.

Canvas, WebGL, 오디오, 폰트는 모든 고객사의 관리형 수집 정책에 따라 파생값으로만 읽히며, GPU 계열, 소프트웨어 렌더러, 두 번 읽을 때 달라지는 렌더링 같은 일부 인사이트에 쓰입니다. 브라우저가 검사를 허용하지 않으면 해당 항목은 사유와 함께 평가 안 됨으로 남습니다.

07 · 결론 불가도 결과입니다

평가할 수 없을 때는 그렇다고, 그리고 그 이유를 말합니다.

증거가 없다고 신뢰도 100이 되지 않으며, 사기 신호가 되지도 않습니다. 점수가 없으면 권고는 정책 버전 안에 고정되어 해시로 보호되는 폴백에서 나오며, 태그와 관계없이 점수 없는 모든 상태에 하나의 답을 줍니다: MONITOR. ALLOW는 절대 아닙니다.

계약 예시 속 점수 없는 사례

태그는 폴백을 선택하지 않습니다. 관리형 정책에서는 어떤 태그든 점수 없는 모든 상태에 MONITOR를 권고합니다. 진행하되 기록하라는 뜻입니다. 아래 세 가지 계약 예시도 마찬가지입니다.

  • INCONCLUSIVE태그 login · SDK 미로드

    MONITOR

    수집 없음: trust_score: null, evidence_coverage: 0, COLLECTOR_NOT_LOADED, basis INSUFFICIENT_EVIDENCE. 어떤 경우에도 ALLOW로 통과시키지 않습니다.

  • INCONCLUSIVE네트워크 증거 사용 불가

    MONITOR

    네트워크 지표 4개 NOT_EVALUATED, evidence_coverage: 69, PROVIDER_UNAVAILABLE. 어떤 거래든 고객사 시스템 안에서 고객사의 결정에 따릅니다. 저희는 자금을 보류하지 않습니다.

  • FAILED태그 pix_transfer · 정책 사용 불가

    MONITOR

    기술적 실패: POLICY_UNAVAILABLE, policy_version: null, basis TECHNICAL_FAILURE. ‘위험 없음’으로 해석되지 않습니다.

점수가 없으면 ALLOW를 권고하지 않습니다 · 예시의 fallback_policy_version production-observation-fallback-v2 · 폴백은 정책을 읽을 때마다 정책과 함께 검증됩니다

평가 상태 네 가지

완료 72 basis EVALUATION · reason_codes가 점수를 설명
결론 불가 null basis INSUFFICIENT_EVIDENCE · limitation_codes가 누락 항목을 명시
채점 불가 null basis OUT_OF_POLICY_SCOPE · 유효한 이벤트지만 정책 적용 범위 밖
실패 null basis TECHNICAL_FAILURE · POLICY_UNAVAILABLE, policy_version null · ‘위험 없음’이 아님

카탈로그의 제한 코드 14개 · 무엇이 빠졌는지를 말할 뿐, 왜 위험한지가 아님

NO_FIRST_PARTY_COOKIEINSTALLATION_COOKIE_REJECTEDNO_EDGE_SIGNALSSTALE_DEVICE_PROFILEPROVIDER_UNAVAILABLEPROVIDER_BUDGET_EXCEEDEDCOLLECTOR_NOT_LOADEDUNSUPPORTED_RUNTIMEREQUIRED_EVIDENCE_MISSINGDETECTOR_TIMEOUTDETECTOR_ERRORNETWORK_TYPE_AMBIGUOUSCLIENT_CLOCK_SKEWPOLICY_UNAVAILABLE

제한 코드는 수집과 품질을, 사유 코드는 정책을 설명합니다. NOT_EVALUATED 상태의 각 지표는 자신의 코드를 가리키고, 평가는 이를 모두 limitation_codes에 모읍니다. 수집 제한은 위험 사유가 되지 않습니다.

08 · 결정은 고객사가

권고 다섯 가지. 저희가 취하는 조치는 0개.

recommended_action는 정책이 제안하는 것을, customer_action는 고객사가 한 것을 말합니다. 두 가지 사실이므로 필드도 두 개입니다.

누가 권고하고, 누가 결정하고, 누가 조치하는가

FingerTrackID가 권고

  • ALLOW
  • MONITOR
  • STEP_UP
  • REVIEW
  • BLOCK_RECOMMENDED

프라이버시만을 근거로 하지 않음 · Tor, VPN, 프록시, 시크릿 모드, 공유 디바이스

고객사 플로우가 결정

결정과 조치는 고객사 백엔드가 합니다. 저희는 권고를 반환하며, 현재 관리형 정책은 관찰 전용인 MONITOR로 답합니다. 접속을 어떻게 처리할지는 고객사 쪽에서 결정하고 실행합니다. 계정, 한도, 이력, 마찰 비용을 아는 것은 고객사입니다. 저희가 아닙니다.

고객사가 조치하고 결과를 알림

  • ALLOWED
  • CHALLENGED
  • HELD
  • REVIEWED
  • BLOCKED
  • CANCELLED

customer_action · 고객사가 회신하는 필드

  • 저희는 사람을 인증하지 않습니다.
  • 저희는 고객사 인터페이스를 차단하지 않습니다.
  • 저희는 자금을 이동시키지 않습니다.

각 권고가 의미하지 않는 것

  • ALLOW

    정책이 이 접속에 마찰을 줄 이유를 찾지 못했습니다. 사람이 정당하다거나 접속이 인증되었다는 뜻이 아닙니다. 점수가 있고 필수 증거가 평가된 경우에만 발행됩니다.

  • MONITOR

    진행하되 기록하세요. 모든 태그에서 점수가 없을 때의 폴백이며, 현재는 모든 점수에서 관리형 정책의 답이기도 합니다. 의심이 확인되었다는 뜻이 아니며, 사용자에게 어떤 조치도 요구하지 않습니다.

  • STEP_UP

    2차 인증이나 확인을 요청하세요. 저희가 누군가에게 챌린지를 건다는 뜻이 아닙니다. 챌린지를 보여 주는 것은 고객사입니다.

  • REVIEW

    사람의 검토로 보내세요. 저희가 자금을 보류한다는 뜻이 아닙니다. 거래는 고객사 시스템 안에서 고객사의 결정에 따릅니다.

  • BLOCK_RECOMMENDED

    정책이 거부를 제안합니다. 차단이 실행되었다거나, 사기가 확정되었다거나, 이용 정지라는 뜻이 아닙니다. 고객사가 차단하면 그것은 고객사의 이벤트인 customer_action: BLOCKED가 되고, 정확도 측정에 쓰입니다.

09 · 연동

세 단계, 하나의 계약. 브라우저는 수집하고, 백엔드는 요청하고, 저희는 답합니다.

사이트에 스크립트 하나, 백엔드에 서버 간 엔드포인트 하나, 그리고 조치와 결과를 회신하는 호출 두 개. 클라이언트에서는 어떤 결정도 하지 않습니다.

사이트의 SDK

SDK는 수집하고 토큰을 반환합니다. 그게 전부입니다.

고객사 서브도메인에서 제공됩니다. 평가받을 요청을 보내기 전에, 어떤 화면이든 브라우저와 환경 신호를 수집하고 202 PROCESSING를 받습니다. 이는 결과가 아니라 수신 확인입니다. 네트워크 신호는 스크립트가 아니라 고객사 수집 도메인의 엣지가 추가합니다. 점수, 신호, 결정은 브라우저로 돌아가지 않습니다.

import { initializeSdk } from '@ftid/sdk-web'

// publicKey is a public locator, not a secret.
// collectionOrigin is YOUR collection domain (https).
const sdk = initializeSdk({
  publicKey: 'pub_app_0123456789abcdef',
  collectionOrigin: 'https://collect.yourcompany.com',
})

// ACCEPTED (202 PROCESSING on the wire): confirms receipt, not a result.
const collection = await sdk.collect()
if (collection.status !== 'ACCEPTED') {
  // Without collection the journey continues; the backend will get
  // INCONCLUSIVE / COLLECTOR_NOT_LOADED: no fake score.
  return continueWithoutToken()
}

// Create the event before sending the request to be assessed.
const event = sdk.createEvent(collection.observation)

// Only a COMPLETED collection yields a token. The token goes in the POST
// that YOUR backend makes; the decision never comes back here.
const ctx = await sdk.getEventContext(event)
const token =
  ctx.status === 'COMPLETED'
    ? ctx.eventContextToken
    : null

백엔드가 호출

서명된 동기 호출 한 번, 고객사가 정한 기한 안에.

10줄의 정규화 문자열에 대한 HMAC-SHA-256 — 마커, key_id, 메서드, 경로, 타임스탬프, 이벤트·요청 ID, 콘텐츠 메타데이터, 그리고 마지막 줄에 정확한 본문 바이트의 SHA-256. 해싱 전에 JSON을 다시 직렬화하지 마세요. 계약에 규범 벡터가 포함되어 있습니다. key_id가 유일한 공개 로케이터입니다. 시크릿은 전송되지 않습니다. v1.1 계약의 정규 벡터 requests.both_refs_deadline_750: v1과 같은 경로와 같은 서명이며, journey, action, journey_context 대신 tag를 씁니다.

POST /v1/assessments HTTP/1.1
Host: api.fingertrackid.com
Content-Type: application/json
X-FTID-Signature: v1=<key_id>:<mac-hex>
X-FTID-Timestamp: 1791720000
X-FTID-Request-Id: <uuidv7 of the attempt>
X-FTID-External-Event-Id: evt:tag-0003

{
  "schema_version": "event-assessment-request.v1.1",
  "external_event_id": "evt:tag-0003",
  "idempotency_key": "idem-tag-0003",
  "occurred_at": "2026-10-11T12:00:00.000Z",
  "subject_ref": "subject:synthetic",
  "account_ref": "account:synthetic",
  "event_context_token": "ctx.synthetic-token_0003",
  "tag": "pix_transfer_a1b2c3d4e5f6g7h8i9j0abcdeabcdeabcdeabcdeabcdeabcdez",
  "deadline_ms": 750
}

tag는 최대 64자의 소문자 슬러그(영문자, 숫자, 밑줄, 숫자는 최대 10개)이며 개인정보를 담지 않습니다. 이 벡터는 그 한도에 맞춰져 있습니다 · subject_ref와 account_ref는 null일 수 있으며, account_ref에는 subject_ref가 필요합니다 · ref는 고객사의 불투명 코드이며 주민등록번호 등 국가 신분 번호, 이메일, 순차 ID가 아닙니다 · deadline_ms는 250~5000의 정수 또는 5000을 뜻하는 null이며, 초과하면 부분 점수가 아니라 재시도 가능한 503 Problem이 반환됩니다

동기 응답

읽고, 결정하고, 한 일을 회신하세요.

status
COMPLETED
trust_score
72
device_match
0.94
coverage
100
reason_codes
NETWORK_TOR_DETECTED
limitations
none
policy
policy-withdrawal-v1
expires_at
+5 min
REVIEW

그다음 피드백 호출 두 개: 무엇을 했는지 담은 customer_action, 그리고 알게 되었을 때 실제 결과(outcome: 정상, 사기 확정, 증거 불충분)를 담은 truth_status. 계약은 두 호출에 평가 호출과 같은 규율을 적용합니다. 영속 커밋 전에는 어떤 것도 수락된 것으로 보지 않으며, 동일한 재시도는 두 번째 효과를 만들지 않습니다. 결과는 나중에 정정할 수 있으며, 정정은 후속 기록으로 추가되고 이전 기록은 계속 읽을 수 있습니다.

POST /v1/assessments/{assessment_id}/customer-actions
POST /v1/assessments/{assessment_id}/outcomes

↑ 전체 예시로 돌아가기

  • Web SDK
  • 동기 S2S API
  • Node.js용 서버 SDK
  • 코딩 에이전트용 MCP 서버
  • 조치·결과 API
  • 콘솔

웹, 모든 최신 브라우저 지원 · 설치할 앱 없음 · SDK, 평가, 피드백이 하나의 버전 관리 계약 안에

npm install @fingertrackid/server가 호출에 서명해 주고, @fingertrackid/mcp로 Claude Code, Cursor 등 MCP를 지원하는 코딩 에이전트가 공개 계약을 바탕으로 연동을 구성할 수 있습니다. 자세한 단계는 퀵스타트, Web SDK 가이드, API 레퍼런스에 있습니다.

10 · 브라우저에 대한 제로 트러스트

브라우저는 수집만 합니다. 결정과 식별자는 브라우저를 거치지 않습니다.

브라우저에서 오는 어떤 것도 권한으로 취급하지 않습니다. 평가는 서버 간에 서명된 형태로 이루어지며, 각 시도는 한 번만 집계됩니다. 반복해도 새로운 효과가 생기지 않습니다.

누가 누구와 통신하는가

Browser Your backend FingerTrackID event_context_token (that is all) HMAC · request_id assessment no decision no device_id

브라우저는 불투명한 세션 ID와 이벤트 ID만 받습니다. 점수, 신호, 권고는 서버에서 생성되어 서버에 머뭅니다. 퍼스트 파티 쿠키는 서명되어 있고, HttpOnly, Secure이며, 고객사 테넌트와 애플리케이션 범위로 제한됩니다.

호출의 구조

POST /v1/assessments계약의 security ftidHmacV1
X-FTID-Signature: v1=<key_id>:<mac-hex>key_id UUIDv7이 유일한 로케이터입니다. 테넌트, 애플리케이션, 환경, 권한(capability)은 상수 시간 비교로 MAC이 유효하다고 확인된 뒤에만 권한이 됩니다. X-Client-Id, 레거시 nonce, 다중 서명은 거부됩니다.
X-FTID-Timestamp: 1791720000초 단위 epoch. 허용 오차 ±300초. 미래 타임스탬프로 보존 기간이 늘어나지 않습니다.
X-FTID-Request-Id: <uuidv7>시도당 1회 사용, 유효한 MAC 확인 후 예약됩니다. 논리적 재시도에는 새 request_id에 서명하며, 유효하지 않은 MAC은 예약을 만들지 않습니다.
X-FTID-External-Event-Id: evt:tag-0003본문과 서명 문자열의 값과 바이트 단위로 동일해야 합니다.
body.idempotency_key같은 키, 같은 작업: 동일한 재시도는 다시 계산하지 않고 저장된 같은 평가를 반환합니다.
body.deadline_ms고객사의 예산입니다. 평가 전에 초과하면 부분 점수가 아니라 Problem assessment-unavailable(503, retryable: true)이 반환됩니다.
  • 401일관된 응답: 존재하지 않는 key_id, 폐기된 키, 잘못된 서명 모두 같은 authentication-failed를 반환합니다.
  • 403인증되었지만 해당 경로의 평가 권한(capability)이 없는 자격 증명.
  • 503시크릿 의존성 사용 불가: 전역 래치가 응답을 일관되게 만들어 key_id의 존재 여부를 드러내지 않습니다. 새 request_id에 서명하세요.

11 · 버전 관리되는 정책

모든 결정에는 버전이 있습니다. 버전은 결정을 만든 모든 것을 고정합니다.

지표 하나의 민감도를 바꿔도 작성자, 적용 기간, 시뮬레이션, 롤백을 갖춘 새 버전이 생깁니다. 이력은 바뀌지 않습니다. 실제 버전이 없으면 사용이 차단됩니다.

결정을 내린 버전 · withdrawal_completed 예시

policy-withdrawal-v1

fallback_policy_version
production-observation-fallback-v2
ruleset_version
ruleset-web-v1
signal_catalog_version
web-detectors-v3
feature_schema_version
configured-assessment-features.v1
resolver_version
first-party-installation-v1
sdk_version
0.1.0
provider_versions
asn-reputation.v1 · cloud-ranges.v1 · icloud-private-relay.v1 · ip2proxy-lite-px2.v1 · tor-exit.v1 · x4b-vpn.v1
evidence_cutoff_at
2026-09-04T12:00:00Z
evaluated_at
2026-09-04T12:00:01Z
expires_at
2026-09-04T12:05:00Z
correlation_id
corr-assessment-withdrawal-0001

correlation_id는 개인 식별자를 노출하지 않고 지원을 받기 위한 값입니다. 노출되는 버전은 불투명한 공개 태그이며, 내부 데이터베이스 ID는 API, 웹훅, 콘솔 어디에도 나타나지 않습니다.

정책 버전이 고정하는 것

  • 신호 카탈로그
  • 정규화
  • 피처
  • 디바이스 리졸버
  • 규칙
  • 상관관계 전략
  • 지표별 수준
  • 상한과 임계값

재현 가능하며, 다시 쓰이지 않음

login_completed 예시

assessment_version1

supersedes_assessment_idnull

login_completed_revision_2 예시

assessment_version2

supersedes_assessment_id…0000000101

운영상의 수정은 이벤트의 received_at 시점에 유효했던 정책과 다른 모든 버전을 보존합니다. 과거 이벤트에 새 정책을 적용하는 것은 별도의 시뮬레이션이며, 과거 결정을 이끈 권고가 무엇이었는지를 다시 쓰지 않습니다.

12 · 섀도 모드

먼저 병행 운영. 그다음에야 응답이 조치에 영향을 줍니다.

섀도 모드는 응답이 어떤 결정에도 닿지 않은 채 FingerTrackID를 현재 쓰는 솔루션과 나란히 운영하는 것입니다. 비교하고, 실제 결과를 회신한 뒤에야 권고를 쓰기 시작합니다. 저희가 권하는 시작 방법입니다.

전체 사이클

  1. 01

    SDK가 수집

    202 PROCESSING · event_context_token

  2. 02

    백엔드가 평가를 요청

    POST /v1/assessments · 동기

  3. 03

    고객사 플로우로 결정

    섀도 모드, 응답은 사용하지 않음

  4. 04

    조치를 알림

    customer_action · POST …/customer-actions

  5. 05

    결과를 알림

    truth_status · POST …/outcomes

recommendation_alignment · 권고 × 조치 쌍으로 서버에서 도출되며, 클라이언트가 선언하지 않습니다. 일치한다고 인과관계, 정확도, 사기가 증명되지는 않습니다.

필드별 비교

recommended_actioncustomer_actionrecommendation_alignment
REVIEWREVIEWED 또는 HELDALIGNED
STEP_UPALLOWEDNOT_ALIGNED
ALLOW 또는 MONITORALLOWEDALIGNED
BLOCK_RECOMMENDEDBLOCKEDALIGNED
모두CANCELLEDNOT_COMPARABLE

차단은 사기를 증명하지 않습니다. 사기 확정에는 독립적인 증거가 필요합니다. truth_status는 PENDING에서 LEGITIMATE, FRAUD_CONFIRMED 또는 INSUFFICIENT_EVIDENCE로 바뀌며, 성숙도는 PROVISIONAL 또는 MATURE입니다. 성숙한 라벨만 품질 지표가 됩니다.

사이클이 만들어 내는 것

  • 오탐과 미탐을 직접 입력한 필드가 아니라 성숙한 라벨에서 도출한 지표로.
  • 규칙과 임계값의 재보정, 언제나 새 정책 버전으로.
  • 응답이 고객사의 어떤 조치에 영향을 주기 전, 섀도 모드에서 측정하는 탐지기 품질.
  • 하지 않는 것: 자동 집행이 되는 것. customer_action와 truth_status는 별개의 사실이며, 모든 정정은 후속 기록을 만듭니다.

13 · 계약으로 보장하는 프라이버시

설정이 아니라 계약으로 제한됩니다.

평문 개인정보(PII)는 제품 요구 사항이 아닙니다. 고객사는 불투명한 인물·계정 ref를 보내며, 저희는 접속 평가를 위해 주민등록번호 같은 신분 번호, 이메일, 전화번호를 요구하지 않습니다.

packages/contracts/src/sdk-handshake-v1.ts · 수집 정책

canvas: z.boolean(),
audio: z.boolean(),
fonts: z.boolean(),
behavioral: z.literal(false),

packages/contracts/src/sdk-signals/rendering-v1.ts · 발췌

const Hash128 = z.string().regex(/^[0-9a-f]{32}$/)
canvas_hash: Hash128.optional(),
webgl_gpu_family: z.enum(SDK_RENDERING_GPU_FAMILY_V1).optional(),
audio_hash: Hash128.optional(),
fonts_count: z.number().int().min(0).max(SDK_RENDERING_FONT_COUNT_V1).optional(),

행동 수집, 즉 포인터 움직임과 키 입력은 off 값만 허용합니다. 켜려면 설정이 아니라 계약을 바꿔야 합니다. Canvas, WebGL, 오프라인 오디오, 폰트 존재 여부는 모든 고객사에 대해 이를 켜는 관리형 수집 정책에 따라 읽히며, 파생값으로만 브라우저 밖으로 나갑니다. 고정 길이 해시, 닫힌 GPU 계열, 개수, 고정 폰트 목록에 대한 존재 마스크입니다. 계약에는 픽셀, 오디오 샘플, GPU 제조사·렌더러 이름, 폰트 이름을 위한 필드가 없습니다. 이 파생값들을 합치면 같은 브라우저를 다시 알아볼 수 있으므로, 익명 데이터가 아니라 디바이스 데이터로 취급합니다. 절대 원칙으로 수집하지 않는 것: 비밀번호, 입력한 텍스트, 채팅·문서 내용, 클립보드, 스크린샷, 마이크, 카메라. 모든 증거에는 프라이버시 등급이 있으며, 등급은 위험 가중치가 아닙니다.

선의에 기대지 않는 보장

  • PII는 로그에 들어가지 않습니다. 원시 데이터는 콘솔에 자유롭게 표시되지 않으며, 모든 접근이 기록됩니다. 식별자나 개인 값은 URL에 들어가지 않습니다.
  • 테넌트 간 상관 분석은 꺼져 있습니다. 모든 도메인 테이블에는 tenant_id가 있고 데이터베이스에서 격리가 강제됩니다. 고객사 간에 공유되는 평판이나 라벨은 없습니다.
  • 고객사 도메인에서 제공되는 퍼스트 파티 쿠키: 서명되어 있고, HttpOnly, Secure이며, 고객사 테넌트와 애플리케이션으로 제한됩니다. 값은 데이터베이스, 큐, 로그로 가지 않습니다. 없거나 거부되면 연속성이 제한 사항으로 저하될 뿐, 평가는 멈추지 않습니다.
  • 모든 디바이스 병합은 되돌릴 수 있으며, 병합을 수행한 리졸버 버전을 기록합니다. IP만으로 디바이스를 통합하지 않습니다.
  • 모든 종류의 증거는 데이터 인벤토리에 목적, 프라이버시 등급, 접근 규칙, 보존 기간이 명시되어 있습니다. 법적 근거, 데이터 레지던시, DPA는 계약 시 고객사 법무팀과 다룹니다. 이 페이지의 어떤 내용도 법률 자문이 아닙니다.

Party는 Account가 아닙니다

Party Account Account Account

연결은 고객사 백엔드에서 옵니다 · 핑거프린트로 추론하지 않음

한 사람, 여러 개의 정당한 계정. 계정은 조용히 다른 사람으로 바뀌지 않습니다. 세션은 익명에서 인물로, 그다음 같은 인물의 계정으로만 진행됩니다. 모순은 충돌로 처리되며, 새로운 연결도, 임의로 만든 부정적 증거도 아닙니다.

데이터가 저장되는 곳

cloud
Google Cloud, us-central1 region
source of truth
PostgreSQL, single
isolation
RLS forced per tenant, with a negative test
secrets
Secret Manager; never in code or in infrastructure state
logs
no PII; raw data never displayed freely

14 · 콘솔

연동하고, 조사하고, 루프를 닫는 콘솔.

콘솔은 먼저 ‘제대로 수신하고, 평가하고, 설명하고 있는가?’에 답하고, 그다음에야 정당성을 논하게 합니다. 모든 백분율은 분모를 밝힙니다.

개념도이며 스크린샷이 아님 · 프레임 안은 콘솔 색조

접속 상세. 세 가지 측정값을 세 개의 분리된 컴포넌트로 표시합니다. recommendation_basis와 함께한 권고, 적용 중인 정책, 고객사 팀이 보고한 조치, 증거의 최신성, 상태·적용 여부·출처·탐지기 신뢰도·최신성·평가 안 됨 사유를 갖춘 13개 지표, 제한 코드와 사유 코드, 세션·디바이스와 그 연결, 디바이스상의 다중성, 네트워크 기반의 대략적 위치, 접속 컨텍스트, 그리고 SDK와 엣지가 수집한 모든 것을 담은 기술 데이터 탭. 여기에는 브라우저가 노출하는 API로 읽은 실제 브라우저 버전이 선언된 버전 옆에 표시됩니다.

조사 필터. 접속 목록을 인터넷 제공업체(ASN), 네트워크 국가, 디바이스 설치, 지표가 평가되지 않은 사유, 그리고 원하는 상태의 지표 최대 두 개를 동시에 조합해 좁히고, 고객사 자체 계정·인물 ref로 접속을 찾을 수 있습니다. IP 주소 필터는 없습니다. 개인정보이기 때문입니다. 각 접속 상세에는 컨텍스트 인사이트 ↑도 함께 표시됩니다.

심층 조사. 어떤 접속에서든 링크 그래프를 열어 주변의 디바이스와 계정을 한 홉씩, 고객사 자체 이력 최대 92일 범위에서 펼칠 수 있습니다. 모든 확장은 기록되는 조회이며, IP 주소는 노드가 되지 않습니다.

차단·허용 리스트. 접속 상세에서 고객사 팀이 디바이스, 계정 ref, 단일 IP를 고객사의 차단 리스트(차단 또는 검토)나 허용 리스트에 메모와 등록자 이름과 함께 추가합니다. 점수가 있는 운영 환경 접속에서는 리스트 항목이 권고를 덮어쓰고 reason_codes에 자신을 명시합니다. 삭제되는 것은 없습니다. 항목을 제거하면 누가 언제 제거했는지 기록됩니다.

AI 어시스턴트. 사이드 패널이 모든 화면을 설명하고, 고객사와 역할 범위 안에서 연동과 접속에 관한 질문에 답합니다.

위험 설정. 애플리케이션별 고객사 자체 위험 규칙입니다. 13개 지표 각각을 꺼짐, 고스트, 활성으로 두고 1~100점의 가중치를 주며, 점수 구간과 구간별 조치를 직접 정합니다. 고스트 규칙은 계산·기록되지만 응답을 바꾸지 않습니다. 게시 전에 영향 카드가 초안을 최근 1일, 7일, 30일의 평가에 재적용해 보여 줍니다. 54개 컨텍스트 인사이트 ↑ 각각도 자체 점수로 추가할 수 있습니다. 고객사 관리자나 위험 감독자가 직접 게시하며, 모든 게시는 감사되는 새 버전이 되고, 모두 고스트로를 누르면 모든 규칙이 한 번에 멈춥니다. FingerTrackID는 고객사 대신 규칙을 활성화하지 않습니다. 지원팀은 애플리케이션의 모든 규칙을 고스트로 전환하는 것만 할 수 있으며, 그 사유가 콘솔에 표시됩니다. 활성 규칙이 없는 동안에는 FingerTrackID 팀이 승인 기록과 함께 게시한 관리형 정책이 답합니다.

4개 그룹의 16개 화면 · 메인, 탐지, 운영, 관리

  • 01홈
  • 09연동과 상태
  • 02개요
  • 10사용량
  • 03접속
  • 11내보내기
  • 04검토 대기열
  • 12보고서
  • 05위험 설정
  • 13사용자와 접근 권한
  • 06정책 시뮬레이션
  • 14감사
  • 07리스트
  • 15고객 라이프사이클
  • 08지표 카탈로그
  • 16계정과 보안

검토 대기열은 출금 검토 모듈입니다. 같은 코어 위에 구축된 운영 대기열로, REVIEW가 권고된 모든 v1 출금을 증거와 함께 담당자에게 전달합니다. 태그가 지정된 평가는 들어가지 않으며, 현재 관리형 정책처럼 정책이 MONITOR를 권고하는 동안에는 비어 있습니다.

영어, 포르투갈어(브라질·포르투갈), 스페인어, 프랑스어, 독일어 지원. 패스키 또는 2차 인증으로 로그인, 역할 기반 권한, 누가 민감 데이터를 봤고 누가 무엇을 바꿨는지에 대한 감사 기록. 원시 데이터는 자유롭게 표시되지 않으며, 모든 접근이 기록됩니다.

15 · 과금 방식

과금 단위는 하나. 나머지는 집계되지 않습니다.

완료된 수집량 기준 가격으로, 제안서에서 정합니다. 섀도 모드도 같은 단위를 소비하며 콘솔에 예상 사용량으로 표시됩니다. 해당 기간의 청구 내용은 제안서에서 정합니다.

단위

고객사 연동이 요청하고 완료된 운영 환경 디바이스 인텔리전스 스냅샷 1건.

측정 단위이자 과금 후보 단위입니다. 각 device_intelligence_snapshot_id는 그 수집을 사용하는 평가, 태그, 제공업체, 재처리가 몇 개든 최대 1단위만 만듭니다.

  • 점수, 권고, 조치, 결과는 과금에 영향을 주지 않습니다. 위험한 결과라서 더 비싸지지 않고, 정상 결과라서 더 싸지지도 않습니다.
  • 상업적 한도가 차단, 요청 속도 제한, 자동 서비스 저하로 바뀌는 일은 없습니다.
  • 요청된 모든 스냅샷은 과금 대상이 아니더라도 변경 불가능한 사용 기록을 남깁니다. 제외 여부는 로그로 재구성하는 것이 아니라 그 기록으로 증명됩니다.

이벤트 · 단위 생성 여부

  • 운영 환경이 아닌 애플리케이션(개발, 스테이징)아니요
  • 같은 idempotency_key로 재시도아니요
  • 최신 스냅샷을 재사용하는 모든 평가(태그 무관)아니요
  • 재처리, 과거 리플레이, 정책 변경아니요
  • 저희가 시작한 비동기 보강과 갱신아니요
  • 제공업체 호출 또는 재시도아니요
  • 웹훅 전송아니요
  • customer_action와 결과(outcome)아니요
  • 조회, 대시보드, 보고서, 내보내기아니요
  • 인증, 인가, 유효하지 않은 계약으로 인한 4xx아니요
  • 5xx, 저희 측 타임아웃, 수집 INCONCLUSIVE 또는 FAILED아니요
  • 연동이 요청하고 완료된 운영 환경 스냅샷예 · 1

사용량 기반 제안서, 섀도 모드 사용량도 함께 논의합니다.

제안서 요청

16 · FAQ

위험 관리 책임자와 CTO가 묻는 질문.

Q01연동은 어떻게 시작하나요?
섀도 모드로 시작합니다. 사이트에 SDK를 설치하고 서버 간 호출을 켜면, 응답이 어떤 결정에도 닿지 않은 채 실제 플로우와 나란히 실행됩니다. customer_action와 결과(outcome)를 회신하면, 콘솔에서 접속별로 권고와 고객사 팀이 보고한 조치를 비교하고 증거 커버리지를 추적할 수 있습니다. 수치가 맞아떨어지면 권고를 결정에 반영할지, 어디에 반영할지는 고객사 팀이 정하며, 실행은 언제나 고객사 백엔드가 합니다.
Q02어떤 여정을 평가하나요?
원하는 모든 화면입니다. 고객사 백엔드는 평가마다 직접 정한 tag를 보내며, login, withdrawal, pix_transfer 같은 소문자 슬러그입니다. 등록도, 정해진 목록도, 개수 제한도 없습니다. 콘솔에서 태그별로 필터링, 그룹화, 내보내기를 할 수 있고, 템플릿(가입, 로그인, 비밀번호 복구, 2차 인증, 프로필 변경, 입금, 출금, Pix 송금, 트레이드, 결제)은 연동 가이드입니다. 태그는 정책, 탐지기, 폴백, 기한을 선택하지 않습니다. 태그가 지정된 모든 평가는 같은 정책과 같은 13개 지표로 실행됩니다. 태그에 개인정보를 담아서는 안 됩니다. 요청에는 금액, 통화, 수취인이 포함되지 않습니다.
Q03왜 차단하지 않나요?
이벤트는 사기가 아니고, 점수는 결정이 아니며, 차단은 아무것도 증명하지 않기 때문입니다. 계정, 한도, 이력, 마찰 비용을 아는 것은 고객사입니다. 저희는 증거, 커버리지, 설명이 붙은 권고를 제공합니다. BLOCK_RECOMMENDED는 가장 강한 권고이지만 여전히 권고입니다. 고객사가 차단하면 customer_action: BLOCKED를 기록하고, 그것이 권고가 옳았는지 측정하는 데이터가 됩니다.
Q04VPN, Tor, 시크릿 탭이 점수를 떨어뜨리나요?
저희 관리형 정책에서는 어느 것도 단독으로 BLOCK_RECOMMENDED를 만들지 않습니다. 고객사가 설정한 규칙은 고객사가 정한 가중치와 기준선을 따릅니다. 시크릿 모드와 브라우저 보호 기능은 중립 컨텍스트입니다. 커버리지를 줄일 수 있고 상세 화면에 표시되지만, 불리한 사유 코드는 붙지 않습니다. Tor, 프록시, VPN, 호스팅은 익명화 컨텍스트입니다. 정책은 함께 관찰된 다른 요소와 함께 이를 반영할 수 있지만, 태그에 따라 반영하지는 않습니다. 현재 관리형 정책에서 점수를 움직이는 것은 자동화와 브라우저 위장뿐이며, 권고는 MONITOR입니다. 이 페이지의 v1 출금 계약 예시에서는 Tor 탐지가 REVIEW로 이어졌고, 사유 코드가 그렇게 말합니다. 그 자체로 사기는 아닙니다.
Q05SDK가 로드되지 않거나 사용자가 스크립트를 차단하면요?
여정은 계속됩니다. 백엔드가 event_context_token 없이 API를 호출하면 INCONCLUSIVE, trust_score: null, evidence_coverage: 0, limitation_codes: ["COLLECTOR_NOT_LOADED"]와 폴백 권고 MONITOR를 받습니다. 지어낸 점수는 없습니다. 증거 부족을 이유로 ALLOW를 주지도 않습니다.
Q06지연 시간은 어느 정도인가요? SLA가 있나요?
기한은 고객사가 정합니다. 계약 기본값은 5000ms이며, deadline_ms로 250~5000 사이에서 설정할 수 있습니다(기본값을 쓸 때는 HTTP 타임아웃을 약 6초 이상으로 두세요). 초과하면 부분 응답이 아니라 Problem assessment-unavailable(503, retryable: true, Retry-After 포함)을 받습니다. 같은 논리 작업을 새 request_id로 다시 시도하세요. 지연 시간과 SLA는 어떤 결정도 응답에 의존하기 전에 섀도 모드에서 측정해 제안서에 반영합니다.
Q07응답이 위조되지 않았다는 것을 어떻게 아나요?
응답은 브라우저를 거치지 않습니다. 고객사 백엔드는 모든 호출에 10줄의 정규화 문자열에 대한 HMAC-SHA-256으로 서명하며, 마지막 줄은 정확한 본문 바이트의 SHA-256입니다. key_id UUIDv7이 유일한 공개 로케이터이고, request_id는 재전송 공격(replay) 방지를 위해 예약되며, 인증 실패는 키의 존재 여부를 드러내지 않는 일관된 401를 반환합니다. 시크릿은 전송되지 않습니다. 프로토콜의 규범 테스트 벡터가 계약에 포함되어 있어 서명을 바이트 단위로 재현할 수 있습니다.
Q08주민등록번호 같은 신분 번호, 이메일, 전화번호를 보내야 하나요?
아니요. 평가에는 고객사 시스템만 해석할 수 있는 불투명한 인물·계정 ref를 사용합니다. 평문 PII는 제품 요구 사항이 아닙니다. 포인터와 키 입력 행동 수집은 계약상 꺼져 있습니다. Canvas, WebGL, 오디오, 폰트 검사는 모든 고객사의 관리형 수집 정책에 따라 실행되며, 해시, GPU 계열, 고정 폰트 목록에 대한 존재 마스크로만 브라우저 밖으로 나갑니다. 픽셀, 소리, GPU 이름, 폰트 이름은 나가지 않습니다. 비밀번호, 입력한 텍스트, 클립보드, 스크린샷, 마이크, 카메라는 금지되어 있습니다. 모든 종류의 증거에는 목적, 프라이버시 등급, 보존 기간이 명시되어 있으며, 법적 근거는 운영 환경을 켜기 전에 고객사 법무팀과 검토합니다. 이 페이지의 어떤 내용도 그 검토를 대신하지 않습니다.
Q09비용은 얼마이고, 저희 팀은 무엇을 해야 하나요?
완료된 수집량 기준 가격으로, 제안서에서 정합니다. 과금 후보 단위는 운영 환경에서 완료된 스냅샷이며, 운영 환경 밖의 것은 집계되지 않습니다. 고객사 쪽 작업: 사이트에 스크립트 하나, 백엔드에 평가를 요청하는 서버 간 엔드포인트 하나, 그리고 취한 조치와 실제 결과(outcome)를 회신하는 API 호출 두 개. SDK는 웹용이며 모든 최신 브라우저에서 실행되고, 설치할 앱은 없습니다.
Q10디바이스 인텔리전스란 무엇이며, 디바이스 핑거프린팅과 무엇이 다른가요?
디바이스 핑거프린팅은 브라우저의 안정적인 특성을 읽어 다시 알아보는 기술입니다. 디바이스 인텔리전스는 거기서 출발해 더 나아갑니다. 그 특성들이 서로, 그리고 네트워크와 일관되는지, 자동화·에뮬레이터·안티디텍트 브라우저가 작동 중인지, 이 디바이스가 고객사 계정들에서 어떻게 행동하는지를 확인합니다. FingerTrackID는 이를 신뢰 점수, 자체 신뢰도를 가진 디바이스 일치, 증거 커버리지, 그리고 각각 판독한 탐지기 버전이 붙은 13개 지표로 반환합니다.
Q11자체 규칙, 점수, 리스트를 설정할 수 있나요?
네. 콘솔에서 13개 지표와 54개 컨텍스트 인사이트 중 무엇에든 점수를 주고, 점수 구간과 구간별 권고를 정하며, 어떤 규칙이든 먼저 고스트로 실행해 응답을 바꾸지 않고 계산·기록할 수 있습니다. 차단·허용 리스트에는 디바이스, 계정 ref, 단일 IP를 한 번에 하나씩 메모와 등록자 이름과 함께 넣습니다. 모든 게시는 감사되는 새 버전입니다. FingerTrackID는 고객사 대신 규칙을 활성화하거나 리스트 항목을 추가하지 않습니다.
Q12AI 코딩 에이전트가 연동을 할 수 있나요?
네. 서버 SDK @fingertrackid/server가 호출에 서명하고, MCP 서버 @fingertrackid/mcp는 Claude Code, Cursor 등 MCP를 지원하는 에이전트에 계약, 서명 벡터, 태그별 즉시 사용 가능한 서버 모듈, 수집 도메인 점검 기능을 모두 읽기 전용으로 제공합니다. 문서에는 llms.txt와 AGENTS.md용 즉시 사용 가능한 규칙 블록이 공개되어 있습니다. 시크릿은 고객사 환경에 머물며, 에이전트가 볼 필요가 없습니다.
Q13SDK는 얼마나 무겁고, 페이지를 느리게 하나요?
SDK는 고객사 자체 수집 서브도메인으로 보내는 단일 요청 안에서 병렬로 한 번 수집합니다. 데스크톱에서 전체 수집은 Chrome, Firefox, Safari 중앙값 기준 약 80~125ms가 걸렸고, 엄격한 예산은 250ms입니다. 각 검사는 메인 스레드를 최대 2ms만 쓰며, 프레임 타이밍이나 Worker처럼 대기가 필요한 검사는 병렬로 대기합니다. 권한 요청을 띄우지 않으며 인터페이스를 막지 않습니다.

17 · 문의

원하는 여정을 섀도 모드로 평가하세요.

섀도 모드로 시작하세요. 응답이 어떤 결정에도 닿지 않은 채 실제 플로우와 나란히 실행되고, 비교하고, 결과를 회신한 뒤에야 권고를 쓰기 시작합니다. 결정이 중요한 화면이 있고, 신뢰하기 전에 설명이 붙은 응답을 직접 보고 싶다면 문의해 주세요.

데모 신청

도메인이 포함된 이메일을 입력하세요.
회사명을 입력하세요.
평가하고 싶은 것

여정이란 원하는 모든 화면이며, 이름도 직접 정합니다. 이미 염두에 둔 것을 선택하세요. 나머지는 대화하면서 정리합니다.

뉴스레터 없음 · 담당자가 한 분씩 이메일로 답변드립니다 · 또는 바로 연락하세요: contato@fingertrackid.com

시작 과정

  1. 평가하려는 여정과 의사결정 플로우에 대한 30분 미팅.
  2. 애플리케이션용 서버 자격 증명, 실행 가능한 계약, HMAC 벡터. 샌드박스는 없습니다. 운영 환경에서 섀도 모드로 테스트합니다.
  3. 실제 플로우와 함께하는 섀도 모드: 응답이 어떤 결정에 영향을 주기 전에 비교하고 결과를 회신합니다.
  4. 태그를 지정한 화면에서 버전 관리되는 정책으로 운영 전환. 모든 결정은 고객사 백엔드에 남습니다.

함께 제공되는 것

  • 증거 커버리지와, 접속별로 권고를 보고된 조치와 나란히 보여 주는 콘솔
  • HMAC 테스트 벡터를 포함한 실행 가능한 event-assessment.v1 계약
  • 첫날부터 운영 환경에서 섀도 모드: 응답은 플로우와 나란히 실행되며 어떤 결정에도 닿지 않습니다
  • 정책을 직접 작성하는 사람들과의 직접 채널