하드웨어 보안
위 비밀번호 비교 함수에 숨어 있는 문제와 대책의 조합으로 올바른 것은?
int check(const char *in, const char *pw, int n) {
for (int i = 0; i < n; i++)
if (in[i] != pw[i]) return 0;
return 1;
}
- An이 크면 계산 결과가 틀린다. 비교 전에 n을 작게 한다
- B첫 불일치에서 끝나므로 몇 번째 글자까지 맞는지 처리 시간으로 알 수 있다. 불일치가 있어도 끝까지 비교하고 결과를 모아서 반환한다
- C문제가 없으며 이대로 안전하다
정답과 해설 보기
정답: B. 첫 불일치에서 끝나므로 몇 번째 글자까지 맞는지 처리 시간으로 알 수 있다. 불일치가 있어도 끝까지 비교하고 결과를 모아서 반환한다
이 함수는 첫 글자가 다르면 곧바로, 첫 글자가 맞으면 두 번째 글자를 비교한 뒤에 반환하므로, 맞는 글자 수만큼 처리 시간이 길어집니다. 공격자는 한 글자씩 후보를 시도하여 시간이 길어지는 것을 고르면, 모든 조합을 시도하지 않고도 비밀번호를 추측할 수 있습니다. 모든 글자의 차이를 배타적 논리합(XOR) 등으로 모아 마지막에 판정하면, 시간은 맞는 글자 수와 관계없이 일정해집니다.
- A. 결과는 올바르지만 시간으로 정보가 유출됩니다.
- B. 올바릅니다. 시간 차이를 만들지 않는 것이 중요합니다.
- C. 타이밍 공격에 취약한 작성 방식입니다.