1. Authorization과 Authentication
- Authentication 이란 자신이 누구라고 주장하는 사람을 확인하는 절차
- Authorization 이란 가고 싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정
2. Why Authorization & Authentication ?
- 당신의 서비스가 가지고 있는 정보가 소수의 사람들만의 비밀이거나 이들만을 위한 정보라면, 당신이 보길 원하는 사람만 정보(Resources)를 보도록 해야한다.
이 페이지에서는 이러한 Resources를 보호하기 위해 많은 사람들이 사용하는 "표준적인" 방법을 정리한다.
3. Session 기반 인증
이 페이지에서 Session 기반 인증은 자세히 다루지 않는다.
- Client가 브라우저를 사용한다면 Session 기반 인증을 사용할 수 있다.
단점
- CSRF Attack 등 보안 취약점
- Scaling issues - Load balancing 등 사용 시 Session을 shared database or cache에 저장 필요
이를 보완하기 위해 Token 기반 인증을 주로 사용한다.
4. Token 기반 인증
- Token 기반 인증은 인증 정보를 Client가 직접 들고 있는 방식
- Client는 Server에 요청을 보낼 때 HTTP의 Authorization Header에 실어 보낸다.
- 이 때, 서버에서는 Token이 유효한지 확인할 수 있어야 한다.
예를 들어 토큰이 만료되었는지 혹은 위변되었는지 등 Token의 유효성을 확인하고
사용자가 요청한 동작을 허가해도 되는지 확인하는 Authorization을 과정을 수행한다.
5. Digital Signature (디지털 서명)
송신자가 자신의 Private Key로 암호화한 메시지를 수신자(검증자)가 Public Key로 검증
6. MAC
- MAC(Message Authentication Code) - 메시지 인증에 쓰이는 작은 크기의 정보
MAC 값은 검증자(비밀 키를 소유한 사람)의 허가에 의해서 메시지의 데이터 인증과 더불어 무결성을 보호한다.
간단하게 얘기하자면, Message를 Key를 이용하여 암호화하고, 이 암호화된 값을 데이터에 같이 저장하는 것이다.
이를 통해 데이터가 위/변조 되었는지 확인이 가능하다. (검증자가 다시 암호화)
- Hash를 사용해 일방향으로만 암호화를 하면 HMAC (Hash-based Mac) 이라고 한다.
7. AE (Authenticated Encryption)
Encryption Data를 확인하는 경우에 이 값이 정상적인지 확인할 수 있는 방법은 없다.
이를 해결하기 위해 MAC을 사용하여 Encryption 하는 것을 AE 라고 한다.
MAC을 언제 적용하느냐에 따라 아래와 같이 접근하는 방법이 존재한다
8. AEAD (Authenticated encryption with associated data)
AE에도 단점이 있다. 예를 들면 Encryption Data를 그대로 다시 전송하는 Replay Attack 등에 취약할 수 있다.
이를 방지하기 위해 associated data(관련 데이터)를 추가하여 MAC을 만드는 것이다.
예를 들어 HTTP에서는 Header에 포함된 정보는 누구나 읽을 수 있지만 위변조되면 안된다.
이 Header를 MAC에 포함하여 작성할 수 있다.
이러한 AD를 통하여 integrity(무결성)이 생기게 된다.
이 AEAD가 포함된 암호화 방법에 CCM / GCM / ChaCha20-Poly1305 등이 있다.
AEAD가 적용된 GCM (Galois/Counter Mode) 방식
TLS 1.3 부터는 모든 Cipher Suite에 AEAD가 포함된다.
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
대부분 AES-GCM을 사용하며 일부가 CHACHA20_POLY1305를 사용하는 것으로 보인다
출처 - the-2021-tls-telemetry-report
※ AD(Associated data)는 AAD(additional authenticated data)라고도 불린다.
※ Cipher Suite:
OAuth OIDC JWT 알아보기
2023.11.29 - [Backend & Spring (스프링)/Authorization & Authentication] - OAuth 2.0 & OIDC with JWT
'Backend & Spring (스프링) > Authorization & Authentication' 카테고리의 다른 글
JWT (JSON Web Tokens) - JWS와 JWE (0) | 2024.12.13 |
---|---|
OAuth 2.0 & OIDC with JWT (0) | 2023.11.29 |