HS256과 RS256의 차이는 무엇일까?
위의 궁금증을 갖게 된 이유는 JWT로 생성된 Token을 가지고 인터페이스 인증을 하다 JWT 변환 방식에 HS256과 RS256이 있음을 알고 포스팅을 하게 되었다. 추후 JWT에 대해서도 다룰 기회가 있으면 좋겠다.
1. 해싱이란?
- 임의의 길이로 데이터를 고정된 길이의 값으로 암호화 하여 바꾸며 변경된 코드는 항상 동일하다.
- 해싱은 단방향으로 암호화를 하면 복호화를 할 수 없다.
2. HS256 이란?
- HS256은 HMAC SHA256의 합성어이다. 그렇다면 HMAC와 SHA256에 대해서도 공부가 필요할 것으로 보인다.
2-1. HMAC이란?
Hash-based Message Authentication Code 로 해싱된 검증코드를 통한 대칭키, 대칭비교를 통해 검증을 한다
2-2. SHA256이란?
Secure Hash Algorithm으로 여러 해시 함수의 종류중 하나이다.
* 결론적으로 SHA256이란 함수로 해싱된 인증코드를 베이스로한 인증방식이다 라고 보면될것 같다.
3. RS256(RSA + SHA256) 이란?
- 위의 HS256은 대칭키 방식으로 하지만 RS256은 비대칭키 방식으로 인증을 진행한다.
3-1. RSA
RSA인증방식을 개발한 로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir),
레너드 애들먼(Leonard Adleman) 의 앞글자를 따서 RSA라고 한다. 공개키(Public key)와
비밀키(Private key)를 사용하여 인증을 한다.
쉽게설명하면 인증방식에는 2가지가 있다.
(1) 인증요청을 할 A서버의 Public key를 가지고 내용을 암호화해 A서버에 보내면 A서버는 Private key를
사용해 복호화를 하여 안에 내용을 볼 수 있다.
(2) 인증요청할 A 서버에서 내용을 Private key를 가지고 내용을 암호화해 Public key와 함께 요청자에게
보낸다. 요청자가 가지고 있는 Public key를 사용해 내용을 복후화 하고 인증을 한다. (전자서명)
(
예시 : 금융기관 로그인시 공동인증서 로그인을 한다. 그러면 공동인증서에서는 Public key와 사용자 정보
가 담긴 private key로 암호화된 데이터를 보내줄것이다. 그러면 로그인한 요청자는 Public key로
private key를 복후화 한후 로그인을 진행한다.
)
자세한건
https://blog.naver.com/PostView.naver?blogId=chodahi&logNo=221385524980 블로그를 참고하도록 하자
공부를 하며 햇걸렸던 부분은 JWT사용시 알고리즘을 HS256으로 했는데 왜 DECODE가 될까 였다.
바보같은 생각이였는데 JWT는 BASE64기반으로 Encoding 하고 VERIFY SIGNATURE(서명확인) 인증 파트 부분만 HS256으로 Encoding 한다는 의미였다.