2012-02-10 30 views
6

Tôi có thể tìm máy phát số giả ngẫu nhiên an toàn được ngành công nghiệp chấp nhận cho Mục tiêu-C ở đâu? Có tích hợp sẵn vào OS X SDK không?Tạo các số ngẫu nhiên một cách an toàn trong mục tiêu-C

Câu hỏi của tôi về cơ bản giống như this one, ngoại trừ việc tôi đang tìm kiếm bảo mật PRNG.

EDIT:

Cảm ơn mọi người đã trợ giúp. Dưới đây là một đơn giản một-liner để thực hiện/dev/phương pháp ngẫu nhiên:

-(NSData *)getRandomBytes:(NSUInteger)length { 
    return [[NSFileHandle fileHandleForReadingAtPath:@"/dev/random"] readDataOfLength:length]; 
} 

Trả lời

4

Security.framework có một cơ sở để thực hiện điều này, được gọi là SecRandomCopyBytes(). Mặc dù nó thực sự về cơ bản chỉ cần sao chép từ /dev/random.

+0

là SecRandomCopyBytes [hỗ trợ trong OSX] (http://stackoverflow.com/questions/6510638/encrypt-nsstring-using-aes-128-and-a -Chìa khóa)? – pepsi

+0

Có vẻ như SecRandomCopyBytes đã được thêm vào trong Lion (https://developer.apple.com/library/mac/#releasenotes/General/MacOSXLionAPIDiffs/Security.html). Tôi muốn hỗ trợ 10.6 .. bất kỳ lựa chọn thay thế nào? – pepsi

+0

@pepsi: Chỉ đọc từ '/ dev/random' như thế nào? –

3

Bạn có thể sử dụng

int SecRandomCopyBytes (
    SecRandomRef rnd, 
    size_t count, 
    uint8_t *bytes 
);. 

function này có sẵn trong Security/Security.h khung. Chức năng này đọc từ/dev/random để lấy một mảng các byte ngẫu nhiên an toàn mã hóa.

/dev/ngẫu nhiên là giao diện chặn chỉ trả về ngẫu nhiên nhiều dữ liệu như hệ thống sở hữu tại bất kỳ thời điểm cụ thể nào. Khi hệ thống hết ngẫu nhiên, không thể tìm nạp thêm nữa cho đến khi được tạo thêm (bằng cách nghe tiếng người dùng trên bàn phím hoặc hệ điều hành tập hợp ngẫu nhiên thực sự)./dev/urandom là giao diện không bị chặn luôn trả về số lượng dữ liệu được yêu cầu, bằng cách sử dụng trình tạo giả ngẫu nhiên ngay cả khi tính ngẫu nhiên thực sự bị cạn kiệt. OS X cũng có cả hai, tuy nhiên chúng hoạt động giống như/dev/urandom trên Linux.

Random Numbers
random(4) Mac OS X Manual Page
How good is SecRandomCopyBytes?

Các vấn đề liên quan