/dev/random은 앤트로피 풀에 있는 노이즈를 이용해서 랜덤값을 만들어 냅니다.
노이즈는 하드디스크, 마우스, 키보드와 같은 장치에서 발생하는 값인데,
만약 이들에게 입출력이 발생하지 않는다면 앤트로피 풀을 충분히 채우지 못하게
되고 오랜 시간동안 랜덤값을 리턴하지 않는 경우가 생길 수 있습니다.
그래서 최초 암호화 통신을 할 때 사용될 key값을 정의하는 등의 단회성이 강한
부분에 사용하고
지속적으로 랜덤값을 만들어야 하는경우에는 적당한방법이 아닙니다.
커널 2.6에서는 (문서상) /dev/random의 성능이 좋아 졌다고 해서 테스트 해봤는데
이 문제는 여전하더군요..
이런 이유로 지속적으로 랜덤값을 생성해야 하는 경우 random()을 약간 응용한
함수를 만들어서 사용하고 있습니다.
/dev/random에서 얻은 값을 seed로 해서 C 함수인 rando
/dev/random에서 얻은 값을 seed로 해서 C 함수인 random()을 이용하는 건 어떨까요?
/dev/random은 원래 런덤적 성향이 강한 대신 바로바로 안나오는
/dev/random은 원래 런덤적 성향이 강한 대신 바로바로 안나오는 수도 있다고 하네요. /dev/urandom은 랜덤적 성향이 조금 덜하지만 바로바로 값이 나온다고 합니다.
프로그램 짤 때는 cdpark님이 말한 대로 하는 것이 제일 좋은 방법인 듯 합니다 :)
방금전에 사용한 랜덤값을 seed 로 이용하는 것은 어떨런지요?
방금전에 사용한 랜덤값을 seed 로 이용하는 것은 어떨런지요?
netdev-random 라는 패치가 :)
http://www.kernel.org/pub/linux/kernel/people/rml/netdev-random/README-netdev-random
테스트 PC에서 동작시켜 봤는데 잘 동작 합니다 8)
Re: /dev/random에서 랜덤값 읽기 문제
/dev/random은 앤트로피 풀에 있는 노이즈를 이용해서 랜덤값을 만들어 냅니다.
노이즈는 하드디스크, 마우스, 키보드와 같은 장치에서 발생하는 값인데,
만약 이들에게 입출력이 발생하지 않는다면 앤트로피 풀을 충분히 채우지 못하게
되고 오랜 시간동안 랜덤값을 리턴하지 않는 경우가 생길 수 있습니다.
그래서 최초 암호화 통신을 할 때 사용될 key값을 정의하는 등의 단회성이 강한
부분에 사용하고
지속적으로 랜덤값을 만들어야 하는경우에는 적당한방법이 아닙니다.
커널 2.6에서는 (문서상) /dev/random의 성능이 좋아 졌다고 해서 테스트 해봤는데
이 문제는 여전하더군요..
이런 이유로 지속적으로 랜덤값을 생성해야 하는 경우 random()을 약간 응용한
함수를 만들어서 사용하고 있습니다.
random()버젼
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_random_read2
/dev/random 버젼
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_random_read
디스크 입출력을 강제로 발생시키는 루틴을 이용해서 -.-; 엔트로피 풀을 채우는
방법도 있겠지만 기분이 꿀꿀하죠 ?
댓글 달기