2011-04-29 4 views
22

SecRandomCopyBytesiOS에 구현하는 것이 OS X 구현과 다른 경우 주로 이에 관심이 있습니다. (모바일 장치는 데스크톱 컴퓨터보다 더 많은 엔트로피의 더 쉽게 사용할 수있는 자료를 가지고 있기 때문에 나는 그것이 않는다는 것을 가정한다.)SecRandomCopyBytes가 얼마나 좋은가요?

사람에 대한 정보를 가지고 있는가 :

SecRandomCopyBytes으로부터 엔트로피를 얻을 수
  1. ?
  2. 좋은 난수를 생성하는 속도는 어느 정도입니까?
  3. 엔트로피가 충분하지 않으면 차단되거나 즉시 실패합니까?
  4. FIPS 140-2를 준수합니까? 아니면 다른 공식 인증에 포함 되었습니까?

설명서에는 이러한 사항이 포함되어 있지 않습니다.

나는 라디오, 나침반, 가속도계 및 기타 출처의 정보를 사용한다는 의견 만들을 수 있었지만 실제로 애플을 대표하는 사람들의 의견은 찾을 수 없었다.

답변

18

/dev/random은 SecurityServer의 엔트로피에 의해 공급됩니다. SecurityServer는 커널 이벤트 추적 (kdebug)에서 엔트로피를 수집합니다. 이 방법은 책 "Mac OS X Internals A Systems Approach"에 설명되어 있습니다.당신은 http://flylib.com/books/en/3.126.1.73/1/

엔트로피 수집에 대한 소스 코드를 예를 들어 온라인 그것에 대해 읽을 수있는 것은 여기에 있습니다 : http://www.opensource.apple.com/source/securityd/securityd-40600/src/entropy.cpp XNU - 1504.9.37 (글을 쓰는 등의 OS X에 대한 최신 버전), 커널 엔트로피 버퍼에서

타이밍 정보 만 사용하여 kernel_debug_internal()에 채워집니다. 이것은 엔트로피 버퍼가 쓰여지는 유일한 장소입니다.

if (entropy_flag && (kdebug_enable & KDEBUG_ENABLE_ENTROPY)) { 
    if (kd_entropy_indx < kd_entropy_count) { 
     kd_entropy_buffer [ kd_entropy_indx] = mach_absolute_time(); 
     kd_entropy_indx++; 
    } 

    if (kd_entropy_indx == kd_entropy_count) { 
     /* 
     * Disable entropy collection 
     */ 
     kdebug_enable &= ~KDEBUG_ENABLE_ENTROPY; 
     kdebug_slowcheck &= ~SLOW_ENTROPY; 
    } 
} 
+0

감사합니다. iOS에서 실제로 엔트로피를 수집하는 커널'syscall' 구현을 찾으려고 고심하고 있습니다. 최신 OS X에 대한 xnu 커널 버전 (1504.9.37)이 있지만 어떤 버전이 있는지 찾을 수 없습니다 (심지어 오픈 소스 일 경우). 아마 iOS가 사용하는 것일까? – James

+0

XNU-1504.9.37에서 검색 한 내용을 추가하여 답을 편집했습니다. – James

+0

http://www.opensource.apple.com/source/xnu/xnu-1504.9.37/bsd/kern/kdebug.c – jm666

1

iOS SDK는이 기능이 보안 임의 데이터를 검색하는 데 /dev/random의 출력을 사용함을 명시합니다. iOS는 자체 포팅 된 OSX의 포팅 버전이므로 Free-BSD가 핵심입니다. /dev/random하지 작동

http://www.mail-archive.com/[email protected]/msg00620.html

그러므로 내가 기대 : 당신이 /dev/random와 OSX를위한 seach 경우

당신은 OSX에서 엔트로피 수집에 대한 문제가 발생했습니다 (내 BE는) 것을 여러 글 찾기 OSX에서보다 낫다.

+1

OS X에서/dev/random에 관해 읽는 데 흥미로운 점은 의심의 여지가 있습니다. – James

4
  1. iOS documentation에 따르면, SecRandomCopyBytes/dev/random PRNG 단지 래퍼입니다. Unix의 대부분의 구현에서이 파일은 PRNG를 차단합니다. 그러나 this pagethe documentation에 따르면, OSX/iOS의 /dev/random은 실질적으로 차단하지 않는다는 점에서 대부분의 다른 Unix 구현에서 실제로 /dev/urandom처럼 작동합니다.

  2. 차단되지 않으므로 간단한 테스트를 사용하여 난수를 생성하는 비율을 신속하게 결정할 수 있어야합니다.

  3. /dev/random은 가능한 많은 소스에서 엔트로피를 얻으려고합니다. 따라서 iOS에서 엔트로피의 소스로 라디오와 가속도계를 사용한다고 믿는 것이 전적으로 합리적입니다. 그러나 나는 이것에 대한 소스를 찾을 수 없으며 documentation에서 "커널의 임의 지터 측정"에서 오는 것이라고 명시합니다.

  4. iPhone은 현재 in the process으로 FIPS 140-2 인증을받은 것으로 보입니다.

관련 문제