OAuth / / 2024. 12. 17. 11:28

Proof Key(PKCE)

Proof Key는 일반적으로 "Proof Key for Code Exchange (PKCE)"를 의미하며, OAuth 2.0에서 보안을 강화하기 위해 사용되는 토큰 교환 방식을 보호하는 메커니즘입니다.

PKCE는 "픽시"라고도 불리며, 주로 공개 클라이언트(예: 모바일 앱, SPA와 같은 브라우저 기반 앱)에서 코드 중간자 공격(Authorization Code Interception Attack)을 방지하기 위해 설계되었습니다.


Proof Key for Code Exchange (PKCE)란?

PKCE는 OAuth 2.0Authorization Code Grant 흐름에서 다음과 같은 보안 문제를 해결하기 위해 도입된 메커니즘입니다.

  • 중간자 공격: 악의적인 사용자가 Authorization Code를 가로채 접근 토큰(Access Token)을 발급받는 공격을 방지.

PKCE 동작 과정

PKCE는 두 가지 값을 사용하여 클라이언트와 인증 서버 간에 안전한 토큰 교환을 보장합니다.

  1. Code Verifier
    • 임의의 문자열 (43~128자, 영문 대소문자/숫자/특수문자 사용 가능).
    • 클라이언트가 생성합니다.
  2. Code Challenge
    • Code Verifier의 해시값(SHA-256) 또는 원본 문자열.
    • 서버에 전달되는 값입니다.

PKCE 흐름

  1. 클라이언트Code Verifier를 생성합니다.
  2. Code Verifier를 기반으로 Code Challenge를 생성합니다 (SHA-256 해시).
  3. 클라이언트는 Authorization 요청 시 Code Challenge를 전송합니다.
  4. GET /authorize?client_id=example&code_challenge=hashValue&code_challenge_method=S256
  5. 인증 서버는 Code Challenge를 저장하고 인증 후 Authorization Code를 반환합니다.
  6. 클라이언트는 Token 요청 시 Code Verifier를 함께 보냅니다.
  7. POST /token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code code=authorizationCode code_verifier=randomString
  8. 인증 서버는 Code Verifier로 Code Challenge를 검증한 후 Access Token을 발급합니다.

요약

Proof Key: PKCE에서 사용되는 Code VerifierCode Challenge를 의미합니다.
보안 강화: OAuth 2.0 Authorization Code 흐름에서 Authorization Code 가로채기를 방지합니다.
구성 요소:

  • Code Verifier: 클라이언트가 생성한 임의의 문자열.
  • Code Challenge: Verifier의 해시값 (SHA-256) 또는 원본 문자열.

Authorization Code무용지물로 만들기 위해서 사용하는 보안 메커니즘은 PKCE (Proof Key for Code Exchange)입니다.

이는 중간자 공격(Authorization Code Interception Attack) 방지를 위해 Authorization Code를 안전하게 교환할 수 있도록 하는 방법입니다.


Authorization Code를 무용지물로 만드는 PKCE 메커니즘

  1. Code Verifier

    • 클라이언트가 임의로 생성하는 고유 문자열입니다.
  2. Code Challenge

    • Code Verifier를 기반으로 생성된 해시값입니다 (SHA-256).
    • 이 값이 인증 요청 시 전달됩니다.
  3. 검증 과정

    • Access Token 요청 시, Code Verifier를 함께 전달하여 검증합니다.
    • 인증 서버는 Code VerifierCode Challenge를 비교해 일치하는지 확인합니다.

무용지물로 만드는 이유

만약 Authorization Code가 공격자에게 노출되더라도, Code Verifier를 알지 못하면 Access Token을 요청할 수 없습니다.
즉, 공격자가 Authorization Code만 가로채도 쓸모가 없도록 만드는 것입니다.


정리

PKCE는 Authorization Code를 가로채더라도 사용할 수 없게 만들어 보안을 강화합니다.
Code VerifierCode Challenge의 검증을 통해 클라이언트와 서버 간의 안전한 토큰 교환을 보장합니다.

'OAuth' 카테고리의 다른 글

OAuth 2.0 액세스 토큰 발급 방법  (0) 2024.12.17
Spring Authorization Server 구성  (0) 2024.12.17
Authorization Code  (0) 2024.12.17
투명 토큰(Transparent Token)과 불투명 토큰(Opaque Token)  (1) 2024.12.17
OAuth(Open Authorization)  (0) 2024.12.17
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유