/dev/random
커널 interupts의 타이밍을 사용하여 엔트로피 풀에 추가합니다. 풀의 엔트로피 양은이라는 변수에서 추적됩니다 entropy_count
.
의 관련 코드 스 니펫은 다음과 같습니다 random.c
. 변수의 마지막 두 interupts delta
와 델타의 차이 사이의 시간을 (jiffies로 생각합니다) 나타냅니다 delta2
.
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
추가 된 엔트로피의 추정값은 기본적으로 델타의 밑이 2 인 로그의 바닥 (루프 이전의 초기 비트 시프트 때문에 멈춤이 아님) 인 것으로 보입니다. 이것은 직관적으로 이해가되지만 공식적으로 올바른 것으로 만들기 위해 어떤 가정이 필요한지 잘 모르겠습니다.
첫 번째 질문은 "이 추정치의 추론은 무엇입니까?"입니다.
두 번째 질문은 delta = MIN(delta, delta2) ...
입니다. 이것은 무엇을 하는가? 왜이 델타의 최소값과 마지막 델타를 취합니까? 나는 이것이 무엇을 성취 해야하는지 모르겠습니다. 아마도 견적을 더 좋게 만들거나 아마도 더 보수적 일 것입니다.
편집 : 추정값을 지정 하는 논문을 찾았 지만 실제로는 그에 대한 합리적인 논증을 제시하지는 않습니다 (추정자가 충족 해야하는 비공식적 인 조건이 요약되어 있음).
의견에 나온 다른 자료들 :
- 위키 백과
/dev/random
와/dev/urandom
- 그것을 설명하려는 논문 (나는 그것에 대해 회의적입니다, 의견을보십시오)
/dev/random
위의 코드를 작성한 사람의 의견이 담긴 블로그 게시물 입니다./dev/random
엔트로피 풀 에 대한 secutity.SE 답변 .
/dev/random
불안정한 기초에 있습니다. Feeding / dev / random entropy pool? . 토마스가 당신의 질문에 대답하기를 바라면서 핑을했습니다.