테스트 사이트 - 개발 중인 베타 버전입니다

타이밍어택 개념

· 2년 전 · 1329 · 1

Timing Attack - 타이밍어택이란 어떤 공격인가?
프로그래밍을 할 때 같은 문자열인지를 알아내기 위해 is_equal() 함수를 쓴다고 하자.

어떤 입력값이 "yotaiji" 라는 문자열과 똑같은지 비교를 한다고 하자. 그러면 처음엔 y, 그 다음엔 o, 그 다음엔 t... 이와 같은 순서로 첫번째 문자부터 하나씩 비교를 해간다.

만일 한 문자를 비교하는데 걸리는 시간이 0.001ms라고 가정할때!

만약 내가 "yaaaaaa" 라는 문자열을 넣었다면 두번째 문자를 비교할 때 다르다는 걸 알게 되고 컴퓨터는 return false를 할 것이다. 걸린 시간 0.002ms(y, a 까지 비교 시간합)

그 다음엔 "yoaaaaa" 를 넣어본다. 그러면 세번째 문자에서 false를 보여줄 것이다.
걸린 시간 0.003ms(y, o, a 까지 비교 시간합)

여기서 일치문자가 많을수록 함수 실행 속도가 조금 차이가 나게된다. 물론 쉽게 측정은 안되지만 어느정도 시도를 하다보면 마이크로초, 또는 나노초 단위로 문자열이 다른지를 비교하는 시간이 차이가 난다.

이걸로 해커들이 중요한 키 값이나 비밀번호 등을 알아낼 수 있다고 한다. 이를 해결하는 가장 간단한 방법은 앞의 문자에서 다르다는 걸 깨달아도 무조건 끝까지 비교하는 코드를 새로 작성하면 언제나 수행시간이 거의 같으므로 타이밍 어택을 피할 수 있다.

PHP에서는 버전 5.6부터 hash_equals() 라는 대책함수가 지원되었다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 1개

신통한 생각입니다.

게시글 목록

번호 제목
20307
20301
20299
20297
20295
20291
20290
20288
20285
20282
20281
20280
20279
20278
20277
20276
20271
20270
20269
20268
20267
20266
20265
20264
20263
20261
20258
20256
20255
20253