랜던값은 특히 보안영역에서 널리 사용된다. 예측하기 힘들어야 한다는 보안의 요구조건을 만족시킬 수 있기 때문으로, 랜덤이라는 용어에는 예측이 힘들다라는 의미가 내포되어 있기 때문이다. 간단한 랜덤값은 random(2)함수를 사용하기도 하는데, random 함수는 랜덤시드 값에 종속적이라는 문제를 가진다. 랜덤시드가 예측가능해지기 때문이다.
리눅스는 /dev/random 장치를 이용해서 랜덤값을 얻어올 수 있다. 이 장치는 장치의 노이즈의 값을 측정해서 랜덤값을 만들므로 훨씬 더 예측하기 힘든 랜덤값을 가져올 수 있다. 관련된 자세한 내용은 random값 만들기를 참고하자.
사용방법
int random_get(void *buf, size_t size)
buf : 랜덤값이 저장된다.
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;
}
설명
사용방법
코드
Recent Posts
Archive Posts
Tags