안전하지 않은 난수 생성기

안전하지 않은 난수 생성기

설명

rand 같은 예측 가능한 난수 생성기를 보안 토큰, 세션 식별자, 키 재료에 사용하면 값을 추측할 수 있습니다.

잠재적 영향

  • 토큰 예측, 세션 탈취, 암호학적 보호 약화가 발생할 수 있습니다.

해결 방법

운영체제 CSPRNG 또는 검증된 암호학적 난수 API를 사용하세요. 요청한 바이트를 모두 얻었는지 확인하고, 실패한 버퍼를 토큰이나 키로 사용하지 마세요.

예시

변경 전

c
int token = rand();

변경 후

Linux에서 <sys/random.h>를 포함한, 오류 시 -1을 반환하는 함수 내부의 발췌입니다.

c
unsigned char token[32];
if (getrandom(token, sizeof(token), 0) != (ssize_t)sizeof(token)) {
    return -1;
}

설명:

  • 변경 전: 보안에 민감한 값에 예측 가능한 일반 목적 PRNG를 사용합니다.
  • 변경 후: 운영체제의 암호학적 난수 소스를 사용하고, 32바이트를 얻지 못하면 처리를 중단합니다.

참조