Menu

문서정보

설명

랜던값은 특히 보안영역에서 널리 사용된다. 예측하기 힘들어야 한다는 보안의 요구조건을 만족시킬 수 있기 때문으로, 랜덤이라는 용어에는 예측이 힘들다라는 의미가 내포되어 있기 때문이다. 간단한 랜덤값은 random(2)함수를 사용하기도 하는데, random 함수는 랜덤시드 값에 종속적이라는 문제를 가진다. 랜덤시드가 예측가능해지기 때문이다.

리눅스는 /dev/random 장치를 이용해서 랜덤값을 얻어올 수 있다. 이 장치는 장치의 노이즈의 값을 측정해서 랜덤값을 만들므로 훨씬 더 예측하기 힘든 랜덤값을 가져올 수 있다. 관련된 자세한 내용은 random값 만들기를 참고하자.

사용방법

int random_get(void *buf, size_t size)
  1. buf : 랜덤값이 저장된다.
  2. size : 주어진 크기만큼 buf로 복사한다.
int main()
{
    int n;
    unsigned long int value;
    n = random_get((void *)&value, 4);
    printf("%d %lu\n", n, value);
}

코드

int random_get(void *buf, size_t size)
{
    int fd;
    int n = 0;
    fd = open("/dev/random", O_RDONLY);
    while( n < size)
    {
        n += read(fd, buf, size - n);
    }
    close(fd);
    return n;
}