안전하게 토큰 비교하기 - String.equals() vs MessageDigest.isEqual()
·
JAVA
들어가며..Refresh Token 재발급 로직을 구현해 PR을 올렸는데, CodeRabbit으로부터 다음과 같은 피드백을 받았다.처음에는 단순히 문자열 비교를 통해 저장된 토큰과 일치하는지를 판별했지만, 해당 피드백을 보고 나서 타이밍 공격이 무엇인지, 그리고 MessageDigest.isEqual이 어떻게 이를 방지하는지에 대해 알게 되었고 더 깊이 알아보고자 한다.타이밍 공격(Timing Attack)이란?타이밍 공격(Timing Attack)은 암호 알고리즘이 실행되는 데 걸리는 시간을 분석하여 암호 시스템을 공격하는 부채널 공격(side-channel attack)의 일종이다. 컴퓨터의 모든 논리 연산은 수행하는 데 시간이 소요되며, 이 시간은 입력값에 따라 달라질 수 있다. 따라서 각 연산의 ..