From owner-freebsd-questions@FreeBSD.ORG Tue Sep 23 15:51:33 2008 Return-Path: Delivered-To: questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 862B31065670 for ; Tue, 23 Sep 2008 15:51:33 +0000 (UTC) (envelope-from Lowell@Be-Well.Ilk.Org) Received: from mail4.sea5.speakeasy.net (mail4.sea5.speakeasy.net [69.17.117.6]) by mx1.freebsd.org (Postfix) with ESMTP id 5F8C18FC15 for ; Tue, 23 Sep 2008 15:51:33 +0000 (UTC) (envelope-from Lowell@Be-Well.Ilk.Org) Received: (qmail 3194 invoked from network); 23 Sep 2008 15:24:53 -0000 Received: from dsl092-078-145.bos1.dsl.speakeasy.net (HELO be-well.ilk.org) ([66.92.78.145]) (envelope-sender ) by mail4.sea5.speakeasy.net (qmail-ldap-1.03) with SMTP for ; 23 Sep 2008 15:24:53 -0000 Received: by be-well.ilk.org (Postfix, from userid 1147) id B548828476; Tue, 23 Sep 2008 11:24:52 -0400 (EDT) Resent-To: questions@freebsd.org Resent-From: Lowell Gilbert Resent-Date: Tue, 23 Sep 2008 11:24:52 -0400 Resent-Message-ID: <44k5d2rikb.fsf@be-well.ilk.org> X-From-Line: nobody Tue Sep 23 10:29:18 2008 To: Robert Huff References: <18648.30321.369520.631459@jerusalem.litteratus.org> From: Lowell Gilbert In-Reply-To: <18648.30321.369520.631459@jerusalem.litteratus.org> (Robert Huff's message of "Tue\, 23 Sep 2008 00\:54\:09 -0400") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.2 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Lines: 36 Cc: questions@freebsd.org Subject: Re: using /dev/random X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Tue, 23 Sep 2008 15:51:33 -0000 X-List-Received-Date: Tue, 23 Sep 2008 15:51:33 -0000 Robert Huff writes: > What is the canonical way to get data from /dev/random? > Specifically: having opened the file, how do I read the stream? > I'm currently using > > > union { > float f; > char c[4]; > } foo; > > foo.f = 0.0; > > fscanf(rand_fp,"%4c",foo.c); > > > which doesn't seem to produce anywhere near "random bytes" as > promised by the man page. Have you turned off the "seeded" variable? You'll fall back to a software pseudorandom sequence if you don't. Most computers don't have all that much real random data ("entropy") to work with, and if you need a lot of random data, you're more or less forced to use a good pseudorandom generator. "Good" can vary a bit depending on application, but random(3) is generally more than good enough for monte carlo style simulation purposes. Cryptography is another story. I have a hardware random number generator on my server, which helps with performance in some cases... -- Lowell Gilbert, embedded/networking software engineer, Boston area http://be-well.ilk.org/~lowell/