JWT Token Algorithm : HS256, RS256

Error Coder·2023년 8월 1일
0

HS256 알고리즘

HS256 알고리즘은 JWT 토큰의 암호화 알고리즘으로 많이 쓰이는 암호화 알고리즘 입니다. 앞에서 HS256에서 S256은 SHA256 을 의미한다고 했습니다. H는 무엇일까요? HMAC 알고리즘을 의미합니다. HMAC 알고리즘은 대칭키 암호화 알고리즘입니다.

HS256 = HMAC + SHA256

HS256 알고리즘을 이용한 JWT의 세부 동작 방식

  1. 서버에서 Header, Payload 는 Base64로 인코딩된다. (참고로, Base64 알고리즘은 복호화가 되는 알고리즘입니다.)

  2. Signature 는 "Header + Payload + secret 값" 을 HS256 알고리즘으로 암호화됩니다.

  • 자세히 말하면, HS256 ( Base64(Header) + Base64(Payload) + secret key ) 가 됩니다. 마지막에 전체적으로 Base64로 암호화하기도 합니다.
  1. 생성된 Header, Payload, Signature 로 JWT 토큰을 만들어 클라이언트로 보내고, 클라이언트는 로컬 스토리지에 토큰을 저장합니다.

  2. 클라이언트는 서버에 요청이 있을 경우, 토큰과 요청 내용을 같이 보냅니다.

  3. 서버에서는 Header 와 Payload 를 Base64 알고리즘으로 복호화한 뒤, 서버만 알고 있는 개인키를 가지고 다시 HS256 알고리즘을 이용해 암호화해보고, 클라이어트에서 보낸 토큰과 같은지 유효성 검증을 합니다.

  • 만약 다르다면, 유효하지 않은 토큰!
  • 같다면, 유효한 토큰!

RS256 알고리즘

그리고, RS256에 대해 알아보겠습니다. RS256에서 R은 RSA 를 의미합니다. RSA 알고리즘은 비대칭키 암호화 알고리즘입니다. 비대칭키 암호화 알고리즘은 공개키(public key)와 개인키(private key)를 이용해 암호화를 진행합니다. 그리고 RS256 알고리즘은 HS256 과는 달리, secret 값이 따로 필요하지 않다.

RS256 = RSA + SHA256

RS256 알고리즘을 이용한 JWT의 세부 동작 방식

  1. 서버에서 Header, Payload 는 Base64로 인코딩된다. (참고로, Base64 알고리즘은 복호화가 되는 알고리즘입니다)

  2. Header, Payload는 서버의 개인키로 암호화 Signature 를 만듭니다.

  3. 그리고 토큰을 만들어 클라이언트에 보냅니다.

  4. 클라이언트는 서버에 요청을 보낼 때 토큰과 요청 내용을 같이 보냅니다.

  5. 서버에서는 토큰의 유효성 검증을 하기 위해서, 공개키로 Signature 를 복호화해봅니다.

  • 비대칭키 암호화 알고리즘 특징
    - 공개키로 암호화한 것은 개인키로 복호화 가능! ('데이터 암호화' 기능)
    - 개인키로 암호화한 것은 공개키로 복호화 가능! ('전자서명' 기능)

출처 및 참고

http://wiki.hash.kr/index.php/SHA256
https://namu.wiki/w/%ED%95%B4%EC%8B%9C
https://velog.io/@octo__/SHA256-%ED%95%B4%EC%8B%9CHash-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://community.auth0.com/t/rs256-vs-hs256-jwt-signing-algorithms/58609
https://velog.io/@ddangle/JWT-%ED%86%A0%ED%81%B0-%EC%95%94%ED%98%B8%ED%99%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-HS256%EA%B3%BC-RS256

profile
개발자 지망생

0개의 댓글