Skip to content

API 보안 보호

API 서비스에서 X-Timestamp, X-Nonce, X-AccessKey, X-Signature는 API 요청 서명 메커니즘의 일반적인 핵심 구성 요소로, 주로 인증, 데이터 무결성 검증, 재생 공격 방지에 사용됩니다.

핵심 구성 요소 분석

1. X-Timestamp (타임스탬프)

기능

  • 서버 측에서 요청 적시성을 검증하기 위해 요청 시작 시간(일반적으로 Unix 타임스탬프)을 기록합니다.

해결된 문제

  • 재생 공격 방지: 서버는 타임스탬프 유효 기간(예: 5분)을 설정하여 만료된 요청을 직접 거부합니다. 공격자는 만료된 후에 가로챈 합법적인 요청을 재생할 수 없습니다.
  • 동기화 확인: 클라이언트와 서버 간의 시간 편차가 합리적인 범위 내에 있는지 확인하여 시간 조작이 요청 유효성에 영향을 미치는 것을 방지합니다.

2. X-Nonce (일회성 랜덤 번호)

기능

  • 각 요청의 고유성을 보장하기 위해 고유한 랜덤 문자열(예: UUID)을 생성합니다.

해결된 문제

  • 중복 요청 방지: 서버는 Nonce 값을 캐시(또는 타임스탬프와 결합)하여 이미 처리된 중복 요청을 거부합니다.
  • 서명 동적성 강화: 동일한 매개변수를 가진 요청이라도 Nonce가 다르기 때문에 서명 결과가 다르며, 이를 통해 서명 재사용을 방지합니다.

3. X-AccessKey (액세스 키)

기능

  • 클라이언트 신원(예: 사용자, 애플리케이션 또는 서비스)을 식별하며, 일반적으로 서버에서 미리 할당된 SecretKey와 쌍으로 사용됩니다.

해결된 문제

  • 인증: 요청자가 법적으로 등록된 클라이언트인지 확인합니다.

4. X-Signature (요청 서명)

기능

  • 클라이언트는 SecretKey를 사용하여 요청 내용(매개변수, 경로, 타임스탬프, Nonce 등)에 대한 서명을 생성하고, 서버는 동일한 알고리즘을 사용하여 서명을 확인합니다.

해결된 문제

  • 데이터 무결성: 전송 중 요청이 변조되지 않았는지 보장합니다(매개변수 수정은 서명 확인 실패를 유발합니다).
  • 신원 위조 방지: SecretKey가 없는 공격자는 올바른 서명을 생성할 수 없으며 합법적인 요청을 위조할 수 없습니다.
  • 핵심 매개변수 바인딩: 서명 알고리즘은 일반적으로 요청 방법, 경로, 매개변수 등을 포함하여 요청 내용과 서명 간의 일관성을 보장합니다.

전체 프로세스 예제

클라이언트 서명 생성 단계

  1. 요청 데이터 연결
  2. 암호화 알고리즘을 통해 SecretKey로 서명을 생성하고 X-Signature 헤더에 저장합니다.
  3. X-Timestamp, X-Nonce, X-AccessKey, X-Signature를 요청 헤더에 추가하여 전송합니다.

서버 측 확인 프로세스

  1. 타임스탬프 확인: 유효 기간(예: ±5분) 내에 있는지 확인합니다.
  2. Nonce 확인: 이미 존재하는지 확인합니다(중복 요청 방지를 위해 타임스탬프와 함께 캐시할 수 있습니다).
  3. 서명 확인: AccessKey를 통해 해당 SecretKey를 찾고, 동일한 알고리즘으로 서명을 재생성하여 X-Signature와 비교합니다.
  4. 결과 처리: 모든 확인이 통과하면 요청 로직을 실행합니다; 그렇지 않으면 401 Unauthorized 또는 403 Forbidden 오류를 반환합니다.

메커니즘 장점 요약

기능구현 방법
인증AccessKey가 클라이언트 신원을 식별하고, Signature는 클라이언트가 유효한 SecretKey를 보유하고 있음을 확인합니다.
데이터 변조 방지서명이 요청 내용(방법, 경로, 매개변수 등)에 바인딩되어 있으며, 어떠한 수정도 서명 확인 실패를 유발합니다.
재생 공격 방지Timestamp는 적시성을 보장하고, Nonce는 요청 고유성을 보장하며, 이중 메커니즘은 중복/만료된 요청을 거부합니다.
부인 방지서명은 요청 원천을 추적할 수 있으며, 클라이언트는 합법적인 요청을 시작한 것을 거부할 수 없습니다.

toolsetlink@163.com