5.JWT 시그니처
Header와 Payload를 인코딩한 값을 합쳐서 특정 알고리즘과 키를 통해 암호화되어 있는 값으로,
암호화 되어 있기 때문에 복호화를 하지 않으면 볼 수 없음
서명(Signature)을 추가하는 이유는,
헤더와 페이로드는 사실 암호화된 값이 아니라 단순히 Base64로 인코딩되어 있는 값이기 때문에 중간자(MITM, Man In The Middle)에 의해 내용이 위변조될 수 있기 때문
따라서 서명을 통해 위변조 여부를 판별함
만약 누군가 토큰을 위조하거나, 페이로드, 헤더 값을 변조하더라도 서명의 정보와 다르거나 이를 검증하는 측에서 토큰 복호화가 불가능하기 때문에 서버에서는 해당 토큰이 위변조된 토큰임을 쉽게 파악할 수 있음
SHA256 알고리즘은 암호/복호화에 쓰이는 키가 동일한 대칭키 암호화 알고리즘으로, 만약 토큰 암호화에 쓰인 키를 탈취당할 경우에는 문제가 발생할 수 있음
따라서 토큰을 공개키, 개인키를 이용해서 비대칭 암호화 알고리즘으로 서명할 경우 더 높은 보안 성능을 가질 수 있음
이러한 암호화 알고리즘을 이용한다는 것은 키가 필요하다는 뜻이기도 한데, 키는 암호와 비슷하며, 올바른 키가 있는 사람은 토큰에 서명하거나 서명이 진짜인지 검증할 수 있음
따라서 토큰의 서명이 진짜이면 토큰에 서명된 후 아무도 토큰을 변경하지 않았다는 증명이 됨
Last updated on