개발일지
PASETO (Platform-Agnostic SEcurity TOkens) 본문
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 |