개발일지

PASETO (Platform-Agnostic SEcurity TOkens) 본문

CS, WEB

PASETO (Platform-Agnostic SEcurity TOkens)

lyjin 2022. 11. 25.

JWT 문제점

  • Weak algorithms
    • JWT는 여러 알고리즘을 제공하는데 그 중에는 보안에 취약한 알고리즘도 포함된다.
  • Trivial Forgery
    • 어떻게 구현하냐에 따라 위조가 쉬운 토큰을 양산할 수 있다.
    • JWT는 토큰 헤더에 서명 알고리즘을 포함한다.
      • 공격자가 alg 헤더에 None을 지정하면 인증을 우회할 수 있다. 또는 서버가 비대칭 알고리즘을 쓴다는 것을 알면서도 대칭키 알고리즘(ex.HS256)으로 변경하여 요청할 수 있다. 

예시) 서버의 RSA 공개 키는 공개적으로 알려져있다. 해커는 alg 헤더를 HS256 대칭 키 알고리즘으로 설정한 후, 공개키로 가짜 토큰을 생성한다. 서버 측에서는 alg 헤더에 명시된 대로 HS256 알고리즘과 서버의 공개키로 인증 요청을 처리할 수 있다. 이렇게 되면 프로세스에 성공하고 해커의 요청에 승인된다. 이 공격을 방지하기 위해 서버에서는 토큰 alg 헤더를 확인할 필요가 있다.

 


PASETO란?

장점

  • Strong algorithms
    • JWT의 문제를 해결한 강력한 서명 알고리즘을 제공한다. 더 이상 알고리즘을 선택할 필요 없이 PASETO의 버전만 선택하면 된다. (아래 버전 참조)
    • 페이로드만 base64 인코딩하고 토큰에 서명하는 JWT와 달리, PASETO는 강력한 알고리즘과 secret key를 사용하여 토큰의 모든 데이터를 암호화하고 인증한다.
  • Trivial Forgery
    • 더 이상 alg 헤더가 존재하지 않기 때문에 공격자는 이를 None으로 지정한다거나 알고리즘을 변경할 수 없다.
    • 대칭키 알고리즘를 사용한다면 페이로드가 단순히 인코딩되는게 아니라 암호화 되므로 sercet key 없이 토큰의 데이터를 읽거나 변경할 수 없다.

버전

Version 1.

  • 최신 암호화를 사용할 수 없는 레거시 시스템에 사용해야한다.
  • Authenticated Encryption with Associated Data (AEAD) 알고리즘을 사용한다.
  • JWT처럼 대칭키, 비대칭키 방식 두 가지 방식을 제공한다.
    • 대칭키 방식: 토큰의 모든 데이터 암호화한다.
    • 비대칭키 방식: JWT와 유사하게 토큰 데이터는 bsee64 인코딩하고, private key 사용하여 서명한다.

Version 2.

  • 보다 더 안전하고 최신의 알고리즘이 사용한다.
    • 대칭키 방식: XCahCah20 - Poly1305 알고리즘 사용
    • 비대칭키 방식: Ed25519 사용

PASETO 구조

local 대칭키

[Version].[Purpose].[Payload].[Footer]
  • Vesion: paseto 버전
  • Purpose: local / public. local은 대칭키 알고리즘을 사용한다는 의미이다.
  • Payload: 토큰 페이로드 데이터. secret key로 해독하면 3부분의 데이터를 얻게 된다.
    • Body: 페이로드 본체. 간단한 메시지와 토큰 만료 시간 등을 저장한다.
    • Nonce: 암호화 및 메시지 인증 프로세스에 사용되는 nonce 값
    • Authentication tag: encrypt 메시지, 관련된 unencripted 데이터를 인증하는 태그
  • Footer: 공개된 정보들로 base64 인코딩된 채로 제공한다. (optional)

public 비대칭키

[Version].[Purpose].[Payload]
  • Purpose: public, 비대칭키 알고리즘을 사용하며 페이로드는 암호화되지 않고 base64 인코딩 된다.
  • Payload
    • Body : base64 인코딩되어 저장
    • Signature : 개인키로 서명된 토큰의 서명. 공개키를 사용하여 검증한다.
 

'CS, WEB' 카테고리의 다른 글

로드밸런싱이란?  (0) 2024.02.07
OAuth 2.0 알아보기  (0) 2022.12.12
JWT(Json Web Token)  (0) 2022.11.20
토큰(Token) 기반 인증  (0) 2022.11.20
쿠키(Cookie)와 세션(Session)  (0) 2022.11.20