워터마크 검출 API 가이드

워터마크 검출은 영상의 각 프레임을 분석하여 원본 워터마크 패턴을 감지하고 임베딩 시 사용한 비밀 키로 데이터를 해독합니다. 검출 과정을 통해 워터마크 페이로드를 찾아내면, 세션 데이터베이스에서 해당 페이로드를 키 값으로 하는 세션 정보를 찾아 검출 결과로 리포트합니다.

sequenceDiagram
    participant A as 서비스 사이트
    participant B as PallyCon 서비스
    A ->> B: 유출 의심 영상
    Note right of B: 워터마크(페이로드) 검출
    B -->> B: 영상 프레임 분석
    opt 워터마크 검출 시
    Note right of B: 워터마크 세션 데이터베이스
    B -->> B: 해당 세션 정보 검색
    end
    B ->> A: 검출 결과 리포트

워터마크 검출 요구사항

워터마크 검출을 위해서는 최소 5분 이상의 연속된 녹화 영상이 필요합니다. PallyCon 포렌식 워터마크 제품은 리사이징을 비롯한 각종 공격에 대한 강인성을 가지고 있지만, 실제 워터마크의 검출율은 검출에 사용되는 영상의 화질(해상도, 비트레이트, 흔들림 등)에 따라 달라질 수 있습니다. 검출에 필요한 최소 사양은 480p 1Mbps 이상이며, 일반적으로 720p 이상의 영상에 대해서는 대부분 검출이 가능합니다.

워터마크 검출에 필요한 상세 요구 사항은 다음과 같습니다.

항목 내용
최소 영상 길이 워터마크 검출을 위해서는 최소 5분 이상 길이의 구간 반복 없이 연속된 녹화 영상이 필요
검출 영상 화질 검출을 위해서는 최소 480p 1Mbps 이상 화질 필요. 720p 이상의 화질 권장
영상 안정성 흔들림 없이 고정된 녹화 영상 필요. 핸드헬드 카메라 또는 스마트폰으로 촬영되어 화면이 흔들리는 경우 검출 불가
버퍼링 또는 화면 멈춤 최소 5분 이상 버퍼링이나 화면 멈춤 현상 없이 정상 재생된 구간이 있어야 함

연동 방식

검출 매니져 API 는 2가지 요청 방법을 지원합니다.
Authorization 헤더가 Http Header에 포함되어 있으면 JWT 인증 방식으로 작동합니다.

  • pallycon-apidata 연동 (aes 암호화 방식)
  • JWT 인증

PallyCon HTTP API 규격

PallyCon 서비스에서 사용하는 각종 HTTP API 요청시 아래 규격을 따릅니다.

API 요청 규격에 대한 샘플 코드는 샘플 다운로드 페이지에서 확인하시기 바랍니다.

요청 규격

Name Value
pallycon-apidata base64 Encoding ( JSON string )

요청 데이터 JSON 형식

{
    "data":"{각 API 별 `API data` JSON 값을 aes256 cbc 암호화한 base64 문자열}",
    "timestamp":"{yyyy-mm-ddThh:mm:ssZ}",
    "hash":"{아래 'SHA256 입력 형식'의 문자열 값을 sha256 해시 처리한 base64 문자열}"
}

요청 데이터 명세

Name
Value
Required
Description
data String Y 각 API마다 정의된 규격으로 생성한 JSON 문자열을 AES 암호화하고, 결과값을 base64 문자열로 입력
timestamp String Y GMT 시간대 기준으로 요청 시점의 시간을 “yyyy-mm-ddThh:mm:ssZ” 형식으로 입력
hash String Y 아래 규격에 따라 생성한 해시값을 입력

AES256 암호화

AES256 암호화는 PallyCon Cloud 서비스 사이트 생성 시 발급 되는 Site 키 값을 이용하여 아래와 같이 처리 합니다. ( PallyCon 콘솔 사이트에서 확인 )

  • Mode : CBC
  • AES key : 32 byte (PallyCon 콘솔 사이트에서 발급 되는 site key)
  • AES IV : fixed 16 byte (0123456789abcdef)
  • Padding : pkcs7

SHA256 입력 형식

SHA256 해시의 입력값은 다음과 같은 문자열을 조합해 입력합니다.

[site access key] + [site_id] + [json.data] + [json.timestamp]
  • site access key: PallyCon Cloud 서비스 사이트 생성 시 발급 되는 access key 값이며 PallyCon 콘솔 사이트에서 확인 가능합니다.
  • sha256 해시 함수의 결과 값은 문자열로 변환하지 않고 바이너리 데이터 형태 그대로 base64 함수에 입력되어야 합니다.

JWT 인증 규격

Authorization 헤더에 토큰 api를 통해 발급된 데이터를 설정하여 검출 API를 호출할 수 있습니다.

JWT Token 발급 API

  • JWT 인증 규격을 통한 검출 API 호출 시 아래 과정을 통해 생성한 인증 토큰을 설정해야 합니다.

1단계: Base64 인코딩된 인증 매개변수 생성

  1. 웹 브라우저로 PallyCon 데브콘솔의 Base64 Enc/Dec 페이지에 접속합니다.
  2. Encrypt 옵션이 선택된 상태에서 AccountID:AccessKey 형태의 값을 왼쪽 필드에 입력합니다.
  3. 아래 스크린샷 이미지와 같이 Base64 인코딩 된 값이 화면 오른쪽에 출력됩니다.
  4. 다음 단계에서 사용을 위해 출력된 값을 복사해둡니다.

AccountIDAccessKey 값은 각각 PallyCon 서비스 가입 시 입력한 계정 ID와 가입 후 콘솔에 표시되는 엑세스 키를 입력해야 합니다.

2단계: 인코딩 된 매개변수를 이용해 인증 토큰 생성

1단계에서 생성한 Base64 인코딩 결과 값을 아래 토큰 API 요청의 Authorization 헤더에 설정해 API를 호출합니다.

경로 매개변수

매개변수 유형 설명
siteId 네자리 영숫자 콘솔에 표시되는 PallyCon 사이트 ID

요청 헤더

헤더 명 설명
Authorization 기본 인증 : Basic base64encode(userId:accessKey)

요청 예제

GET /api/v2/token/DEMO HTTP/1.1
Authorization: basic authInfo
Host: watermark.pallycon.com

응답 데이터 필드

필드 유형
error_code String 에러 코드
error_message String 에러 메시지
data.token String API 인증 토큰

응답 예제

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 112
{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "token" : "Bearer valid-token"
  }
} 

API 요청 헤더

Authorization 헤더에 토큰 API를 통해 발급된 데이터를 설정하여 세션 매니저 API를 호출할 수 있습니다.

공통 응답 규격

응답 상태

HTTP 상태 코드 설명
200 성공
401 JWT 토큰 규격이 잘못 되었거나 사용자 정보를 찾을 수 없습니다.
403 API 이용 권한이 없습니다.

응답 데이터 필드

유형
error_code String 0000: 성공 / 실패 시 해당 에러코드
error_message String 에러 메시지
data Json API 수행 결과

Url을 이용한 검출 요청 등록 API

유출이 의심되는 영상에 대해 url을 이용하여 워터마크 검출을 요청하는 API 입니다.

경로 매개변수

매개변수 설명
SITE_ID 콘솔에 표시되는 PallyCon 사이트 ID
SERVICE_CODE 검출 서비스 요청 제품 코드 FWM - PD002, DWM - PD006. default: PD002

API 데이터 JSON 형식

{
    "title": "title",
    "file_path": "aaa.mp4",
    "demo_contents": false
}

API 데이터 규격

Key type required description
title String Y 콘텐츠 타이틀
file_path String Y 검출 대상 파일의 다운로드 링크
demo_contents Boolean N pallycon demo contents 검출 요청 여부. default: false

응답 데이터 JSON 형식

{
    "error_code": "{error code}",
    "error_message": "{error message}",
    "detection_id": "detection id"
}

응답 데이터 규격

Key type description
error_code String 0000 : 성공, 에러인 경우 영문/숫자로 정의된 에러코드
error_message String 에러인 경우 에러 메시지
detection_id Number 해당 검출 요청에 대해 서버에서 자동 생성한 일련번호

파일 업로드로 검출 요청을 하기 위한 signed url 발급 API

검출 요청은 직접 파일을 업로드하여 요청할 수도 있습니다. 파일 업로드하기 위한 AWS S3 signed url을 발급하는 api 입니다. 발급받은 url로 파일 업로드 시 검출 요청이 진행 됩니다.

경로 매개변수

매개변수 설명
SITE_ID 콘솔에 표시되는 PallyCon 사이트 ID
SERVICE_CODE 검출 서비스 요청 제품 코드 FWM - PD002, DWM - PD006. default: PD002

API 데이터 JSON 형식

{
    "title": "title"
    "file_extension": "mp4",
    "demo_contents": false
}

API 데이터 규격

Key type required description
title String Y 콘텐츠 title
file_extension String Y 파일 확장자 (mp4, mkv, mov)
demo_contents Boolean N PallyCon demo contents 검출 요청 여부. default: false

응답 데이터 JSON 형식

{
    "error_code": "{error code}",
    "error_message": "{error message}",
    "upload_url": "upload url",
}

응답 데이터 규격

Key type description
error_code String “0000” : 성공, 에러인 경우 영문/숫자로 정의된 에러코드
error_message String 에러인 경우 에러 메시지
upload_url String 1분동안 업로드 가능한 signed url

파일 업로드 샘플 (curl)

curl -v --upload-file {filename.mp4} {signed upload url}

검출 결과 조회

등록된 검출 요청 항목들과 각각의 진행 상황, 검출 결과를 조회하는 API입니다.

경로 매개변수

매개변수 설명
SITE_ID 콘솔에 표시되는 PallyCon 사이트 ID
SERVICE_CODE 검출 서비스 요청 제품 코드 FWM - PD002, DWM - PD006. default: PD002

API 데이터 JSON 형식

{
    "search_keyword": "{search keyword}",
    "search_condition": "{search condition}",
    "detect_status": "FD001",
    "from": "{YYYY-MM-DD'T'hh:mm:ss'Z'}",
    "to": "{YYYY-MM-DD'T'hh:mm:ss'Z'}",
    "page_unit": "{long value}",
    "page_index": "{long value}",
    "time_zone": "{hh:mm}",
    "site_id": "{site id}"
}

API 데이터 규격

Key type required description
search_keyword String N 검색어
search_condition String N 검색타입(콘텐츠 제목, 검출 ID). 기본값: 제목
detect_status String N 검출 상태값(FD001 ~ FD005)
from String N 등록 날짜 검색 조건
to String N 등록 날짜 검색 조건
page_unit Int N 검색 갯수. 기본값 : 25
page_index Int N 검색 페이지. 기본값 : 1
time_zone String N 검색 기준 시간대
site_id String N 콘솔에 표시되는 PallyCon 사이트 ID

응답 데이터 JSON 형식

{
    "error_code": "{error code}",
    "error_message": "{error message}",
    "total_count": "total count",
    "time_zone": "{hh:mm}",
    "data": [{
        "detection_id" : "{detection id}",
        "site_id" : "{site id}",
        "title": "{title}",
        "demo_contents": "{demo contents}",
        "detect_status" : "{detect status}",
        "file_id" : "{file id}",
        "file_path": "{file path}",
        "region_code": "{region code}",
        "service_code": "{service code}",
        "wm_key": "{wm key}",
        "wm_data": "{wm data}",
        "reg_date" : "{register date}",
        "update_date": "{update date}"
     }]
}

응답 데이터 규격

Key type description
error_code String 0000 : 성공, 에러인 경우 영문/숫자로 정의된 에러코드
error_message String 에러인 경우 에러 메시지
totla_count String 총 list 갯수
time_zone String 검색 기준 시간대
data.detection_id Number 검출 ID
data.site_id String 고객사 Site ID
data.title String 콘텐츠 제목
data.demo_contents String 팰리컨 데모 콘텐츠로 검출 요청한 경우
data.file_id Number Anti Piracy 에서 검출 요청 시 테이크다운 ID, 포렌식 워터마킹에서 요청한 경우에는 파일 ID
data.file_path String 파일 경로
data.region_code String 지역 코드
data.service_code String 제품 코드(DWM-PD006, FWM-PD002)
data.wm_key String fwm -해당 사이트의 FWM 인증키, dwm - dwmId
data.wm_data String fwm -세션 매니저를 통해 설정한 워터마크 정보, dwm - recipient
data.reg_date String 등록 날짜
data.update_date String 수정 날짜

검출 상세 조회

등록된 검출 요청의 상세 조회 하는 API입니다.

경로 매개변수

매개변수 설명
SITE_ID 콘솔에 표시되는 PallyCon 사이트 ID
SERVICE_CODE 검출 서비스 요청 제품 코드 FWM - PD002, DWM - PD006. default: PD002

API 데이터 JSON 형식

{
    "detection_id": "{detection id}",
    "site_id": "{site id}"
}

API 데이터 규격

Key type required description
detection id Number Y 검출 ID
site_id String N 콘솔에 표시되는 PallyCon 사이트 ID

응답 데이터 JSON 형식

{
    "error_code": "{error code}",
    "error_message": "{error message}",
    "data": {
        "detection_id" : "{detection id}",
        "site_id" : "{site id}",
        "title": "{title}",
        "req_type": "{req_ ype}",
        "demo_contents": "{demo contents}",
        "detect_status" : "{detect status}",
        "file_path": "{file path}",
        "file_id" : "{file id}",
        "service_code": "{service code}",
        "wm_key": "{wm key}",
        "wm_data": "{wm data}",
        "wm_seed_key": "{wm seed key}",
        "error_code": "{error code}",
        "error_message": "{error message}",
        "reg_date" : "{register date}",
        "update_date": "{update date}"
     }
}

응답 데이터 규격

Key type description
error_code String 0000 : 성공, 에러인 경우 영문/숫자로 정의된 에러코드
error_message String 에러인 경우 에러 메시지
data.detection_id Number 검출 ID
data.site_id String 고객사 Site ID
data.title String 콘텐츠 제목
data.req_type String 검출 등록 요청 타입(url, file)
data.demo_contents String 팰리컨 데모 콘텐츠로 검출 요청한 경우
data.detect_status String 검출 상태값(FD001 ~ FD005)
data.detect_progress_status String 검출 진행 상태값(FD100 ~ FD700)
data.file_id Number Anti Piracy 에서 검출 요청 시 테이크다운 ID, 포렌식 워터마킹에서 요청한 경우에는 파일 ID
data.file_path String 파일 경로
data.service_code String 제품 코드(DWM-PD006, FWM-PD002)
data.wm_key String fwm -해당 사이트의 FWM 인증키, dwm - dwmId
data.wm_data String fwm -세션 매니저를 통해 설정한 워터마크 정보, dwm - recipient
data.wm_seed_key String ADMIN만 사용
data.reg_date String 등록 날짜
data.update_date String 수정 날짜
data.error_code String internal error 에러 코드
data.error_message String initernal error 에러 설명

검출 중지 요청

등록된 검출 요청을 중지하는 API입니다.

경로 매개변수

매개변수 설명
SITE_ID 콘솔에 표시되는 PallyCon 사이트 ID
SERVICE_CODE 검출 서비스 요청 제품 코드 FWM - PD002, DWM - PD006. default: PD002

API 데이터 JSON 형식

{
    "detection_id": "{detection id}"
}

API 데이터 규격

Key type required description
detection id Number Y 검출 ID

응답 데이터 JSON 형식

{
    "error_code": "{error code}",
    "error_message": "{error message}",
    "data": "{detection id}"
}

응답 데이터 규격

Key type description
error_code String 0000 : 성공, 에러인 경우 영문/숫자로 정의된 에러코드
error_message String 에러인 경우 에러 메시지
data Number 검출 ID

상태 및 에러 코드

워터마크 검출 상태 코드

상태 코드 상태
FD001 검출 작업 준비
FD002 다운로드 중
FD210 다운로드 시작됨
FD220 다운로드 완료
FD003 검출 중
FD311 자동 검출 시작됨
FD312 자동 검출 완료
FD321 수동 검출 시작됨
FD322 수동 검출 완료
FD004 작업 완료
FD400 작업 완료 (진행)
FD005 검출 취소
FD510 취소 요청 접수
FD520 검출 취소 완료
FD006 에러
FD600 에러 (진행)
FD700 검출 실패 (진행)

워터마크 검출 에러 코드

에러 코드 에러 메시지 원인 해결 방안
A1000 API 파라미터 오류 API URL의 파라미터가 null이거나 잘못된 값이 입력되었습니다. API 가이드에 따라 정확한 파라미터를 입력해 다시 호출합니다.
A1003 사이트 ID 값을 찾을 수 없음 API 파라미터에 사이트 ID가 누락되었거나 잘못된 값이 입력되었습니다. PallyCon 콘솔 사이트에서 정확한 사이트 ID (네자리 영숫자) 값을 확인해 적용합니다.
A1006 사이트 키 복호화 실패 pallycon-apidatadata 부분이 잘못된 사이트 키로 암호화 되었습니다. PallyCon 콘솔 사이트에서 정확한 사이트 키 값을 확인해 적용합니다.
A1007 해시 검증 실패 API 요청 데이터의 해시 값이 잘못 생성되었습니다. API 가이드 문서를 참고해 정확한 해시 값을 적용합니다.
A1108 서비스 상태이지 않음 서비스 사용중이지 않습니다. 서비스를 요청하세요.
A2022 kafka 메세지 생성 실패 kafka 메세지가 제대로 생성 되지 않았습니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A2131 ddb를 찾을수 없음 제대로 된 dynamo db에 연결을 하지 못하였습니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A2132 trial pack count update 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4001 지원하지 않는 서비스 코드 지원하지 않는 서비스 코드를 요청하였습니다. 지원하는 서비스 코드로 요청하여야 합니다(FWM, DWM)
A4002 검출 요청 등록 실패 요청 데이터가 잘못되어 내부 서버 에러가 발생했습니다. 1. 요청 데이터의 파라미터를 확인 후 재시도합니다.
2. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4005 파일 경로 정보가 잘못 입력되었습니다. 검출 요청 데이터의 파일 경로가 Null이거나 빈 문자열입니다. 요청 데이터 확인 후 재시도합니다.
A4006 검출 상태 업데이트 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4007 워터마크 키 정보를 등록하지 못했습니다. 기술 지원 담당자의 수동 검출 결과 등록 과정에서 내부 에러가 발생했습니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4008 진행 상태 알림 전송 실패 사용자/관리자에게 검출 결과 메일을 보내거나, PallyCon 내부 슬랙 채널에 알림을 전송하는 과정에서 에러가 발생하였습니다. 헬프데스크 티켓으로 검출 진행 상황 정보를 요청합니다.
A4009 검출 정보 검색 실패  내부 에러로 인해 데이터베이스에서 검출 결과를 조회하지 못했습니다. 요청 데이터를 다시 확인한 후 재시도합니다. 동일 에러 발생 시 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4010 검출 키 검색 실패 내부 에러로 인해 데이터베이스에서 검출 결과를 조회하지 못했습니다. 요청 데이터를 다시 확인한 후 재시도합니다. 동일 에러 발생 시 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4011 슬랙 알림 메시지 전송 실패  PallyCon 내부 슬랙 채널에 메시지를 전송하지 못했습니다. 고객사에서는 해당 에러에 대해 별도 처리가 필요 없습니다.
A4012 검출 정보 업데이트 실패 검출 과정에서 내부 서버 오류가 발생했습니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4013 메일 전송 실패 내부 오류로 인해 자동 검출 과정을 시작하지 못했습니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4015 trial 검출 횟수 초과 trial 최대검출 횟수 2회를 초과 하였습니다. trial 재 요청을 합니다.
A4016 dwmId list 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4017 최대 사용 중인 dwm Id 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4018 검출 list count 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4019 최대 검출 횟수 초과 서비스별 최대 검출 횟수를 초과 하였습니다. 검출 횟수를 초기화 해주세요.
A4020 검출 update시 검출 정보 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4021 검출 stop 요청시 검출 정보 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4022 다운로드용 url 요청시 검출 정보 검색 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4023 파일 확장자가 맞지 않음 파일 확장자(mp4, mpk, mov) 가 맞지 않습니다. 파일 확장자(mp4, mkv, mov)를 맞춰주세요.
A4025 업데이트 상태가 순서대로 오지 않음 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4026 S3에서 비디오 파일 접근 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A4027 S3에서 로그 파일 접근 실패 내부 서버 에러로 인해 발생합니다. 헬프데스크 티켓으로 기술 지원을 요청합니다.
A7008 Pallycon API DATA 파싱 실패 pallycon-apidata 값이 누락되었거나 잘못 생성되었습니다. API 가이드 문서를 참고해 정확한 규격의 pallycon-apidata를 적용합니다.
A9001 유효하지 않는 토큰 형식 jwt token 이 유효 하지 않습니다. basic token 포맷에 맞게 입력합니다.
A9002 유요하지 않은 토큰 페이로드 jwt token payload 가 유효 하지 않습니다.
A9008 계정 오류 사용자 게정이 정확하지 않습니다. 사용자 정보를 확인합니다.

검출 실패에 대한 에러 코드

에러 코드 설명
D000 기타 에러 (검출 실패 관련 정의되지 않은 에러)
D001 파일 다운로드 실패 
D002 영상 길이가 5분 미만입니다.
D003 지원되는 코덱이 아닙니다.(H.264 또는 H.265 코덱 지원)
D004 영상 해상도가 480P 미만입니다.  
D005 영상 비트레이트가 1 Mbps 미만입니다. 
D006 과도한 저화질 영상입니다.
D007 녹화된 화면이 흔들려 워터마크 검출이 실패하였습니다. 
D008 재생 중 과도한 버퍼링이 발생합니다. 
D009 영상에 반복 재생된 구간이 있습니다.
D010 지원되는 확장자가 아닙니다. (.mp4, .mkv, .mov 지원)
D011 영상의 미디어 스펙을 추출하지 못했습니다. 
D012 잘못된 키 목록 정보가 사용되었습니다.
D013 잘못된 fwmKey 정보가 사용되었습니다. 
이전