랜덤 값 생성 방법에 대한 질문입니다.
글쓴이: dmswltnr / 작성시간: 월, 2004/09/06 - 9:36오후
커널에서 랜덤값을 받으려고 합니다.
random.c를 보면 세가지 방법이 있다고 나와 있는데요.
첫번째 방법인, get_random_byte()말구요.
/dev/random에서 값을 가져오는 것이 해커로부터 안전한 방법이라고 되어 있습니다.
어떻게 사용하는지 random.c를 보고 도대체 알 수가 없군요.
한참보고 추정한 것이 add_keyboard_randomness()를 실행시킨 후
get_random_byte를 통해 값을 받는것이 아닌가 싶기도 하구요.
정확한 방법을 알고 싶습니다.
C에서는 srandom()을 실행 시킨 후에, random()으로 부터 값을 얻는 방법이
있는데요. 이와 유사할 것도 같은데요.
아시는 분의 답변을 기다립니다.
Forums:
그냥 장치 파일을 열어서 read()로 읽어오면 random한 값이 읽어
그냥 장치 파일을 열어서 read()로 읽어오면 random한 값이 읽어집니다. :)
질문을 잘 못 이해하셨네요.
커널 프로그래밍을 얘기한겁니다.
모듈로 컴파일해서 insmod로 적재시킨 후 실행시키는 커널 프로그램에서는 상위 프로그램에서 사용하는 read()는 사용할 수 없습니다.
그러면 get_random_bytes()를 사용하세요. 생긴 그대로 값을
그러면 get_random_bytes()를 사용하세요. 생긴 그대로 값을 저장할 버퍼와 길이를 넘겨주면 됩니다. 예를 들어 4바이트 정수를 받고 싶다면 :
int random;
get_random_bytes(&random, sizeof random);
암호화 키에 사용가능한 안전한 값을 얻고 싶은데요
처음 질문에서 get_random_bytes()를 제하고 다른 방법을 질문 드렸습니다.
랜덤함수 생성 방법은 random.c를 보면 세가지가 있습니다.
get_random_bytes()를 사용하는 방법.
dev/random에서 읽어 오는 방법.
dev/urandom에서 읽어 오는 방법.
첫번째 방법은 랜덤값이긴 하지만 hacker로부터 안전할 수는 없다고 기술되어 있습니다.
강력한 안전성을 가진 방법으로 두번째 방법이 제시 되어 있지요.
하지만 커널에서 두번째 방법을 사용하는 코드를 찾아볼 수가 없어서.
혹시 get_random_bytes()를 srandom()처럼 사용하게 되면 좀더 안전할 수 있는지에 대한 질문을 한거죠. 그러기 위해서 add_keyboard_randomness()같은 함수를 random()함수처럼 사용할 수 있는가에 대한 거였죠.
아시다시피 random()에 seed값을 넣고 실행시킨 후 srandom()을 실행시키면 seed값에 따른 random값을 찾을 수 있으니까요.
이와 유사한 방법이 커널에 있는지 혹은 dev/random에서 값을 읽어오는 방법을 알고 있다면 알려 주셨으면 합니다
댓글 달기