IP Library › Granted Patent US 10,140,095
Granted Patent B2
US 10,140,095 · App. 15/450,434 · Granted Nov 27, 2018

Collecting entropy from diverse sources

Inventors: Paul Timothy Dale (Moggill, AU); P. Denis Gauthier (Wights Mountain, AU)
Assignee: Oracle International Corporation
G06F7/582G06F7/58G06F7/588
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,140,095
App. No.
15/450,434
Granted
Nov 27, 2018
Kind
B2
Abstract

Methods and systems are disclosed for generating more random data or ensuring more random data than provided by single sources. Entropy is gathered among multiple random or pseudo-random sources at different frequencies. The entropy is pushed, pulled, or otherwise presented to a pseudo-random number generator when there is enough entropy. The determination of enough entropy can be through a modified Hamming distance. The frequencies of polling for entropy from the entropy sources can be jittered by a random amount.

Claims (59)

1. A method for generating entropy in a computing device, the method comprising:

setting a repeating first timer for a first frequency;

setting a repeating second timer for a second frequency;

collecting first bits from a first entropy source at the first frequency into a first accumulation buffer of a predetermined size, the predetermined size based on an amount of entropy per bit attributable to the first entropy source;

accepting the first bits into the first accumulation buffer;

presenting the first bits from the first accumulation buffer to a pseudo-random number generator as a first seed upon the first accumulation buffer becoming full, thereby providing a greater amount of sudden entropy than in a single collection of first bits;

periodically adjusting the first frequency;

gathering a specified number of second bits from a second entropy source at the second frequency, the specified number based on an amount of entropy per bit attributable to the second entropy source;

accepting the second bits into a second accumulation buffer upon the gathering, the second accumulation buffer having a different size than a size of the first accumulation buffer; and

presenting the second bits from the second accumulation buffer to the pseudo-random number generator as a second seed upon the second accumulation buffer becoming full,

wherein the first and second bits are alternatingly used to seed the pseudo-random number generator.

2. The method of claim 1 wherein the periodically adjusting of the first frequency is based on an output from the pseudo-random number generator.

3. The method of claim 1 wherein the periodically adjusting includes adding or subtracting up to 5% of the first frequency.

4. The method of claim 1 wherein a periodicity of periodically adjusting the first frequency is randomized.

5. The method of claim 1 further comprising:

periodically adjusting the second frequency based on an output from the pseudo-random number generator.

6. The method of claim 1 further comprising:

calculating a Hamming distance between successive collected first bits; and

accepting the collected first bits into the first accumulation buffer based on the calculated Hamming distance exceeding a minimum.

7. The method of claim 1 further comprising:

summing Hamming distances between successive collections of first bits into an accumulated value of entropy attributed to contents of the first accumulation buffer; and

providing the accumulated value of entropy to the pseudo-random number generator.

8. The method of claim 1 further comprising:

emptying the first accumulation buffer before a subsequent collection.

9. The method of claim 1 wherein first or second frequency is selected from the group consisting of once per 0.1287 seconds, 0.13 seconds, 0.1370 seconds, 0.15 seconds, 0.25 seconds, 0.715 seconds, 0.751 seconds, 0.753 seconds, 1.13 seconds, 1.27 seconds, 1.6626 seconds, 2 seconds, 2.222 seconds, 2.2427 seconds, 4.4 seconds, 4.9 seconds, 5.9 seconds, 9.81 seconds, 10.000 seconds, 11.913 seconds, and 15 seconds.

10. The method of claim 1 wherein the first or second entropy source is selected from the group consisting of: instantaneous or accumulated central processing unit (CPU) usage; physical or virtual memory usage; network traffic volume; least significant time values of a high resolution clock; an input/output (TO) statistic; an Intel x86 RDRAND instruction; an Intel x86 RDSEED instruction; an Intel Itanium ar.itc register; a UNIX or Linux /dev/random file; a UNIX or Linux/dev/urandom file; an OpenBSD, Solaris, or Linux getentropy system call; a Solaris or Linux getrandom system call; a Microsoft Windows CryptGenRandom function; a Linux/proc/diskstats file; a Linux/proc/interrupts file; a Linux /proc/meminfo file; a Linux/proc/net/dev file; a Linux/proc/timer_list file; a Linux/S390 /dev/prandom file; a BSD Unix/dev/srandom file; a Microsoft Windows win_processes module; and a user interface information source.

11. The method of claim 1 further comprising:

generating a random number through the pseudo-random number generator based on the first bits or second bits.

12. The method of claim 1 wherein the collecting of the first bits and the gathering of the specified number of second bits occur upon firing events of the respective timers.

13. The method of claim 1 wherein the pseudo-random number generator is configured to generate numbers, characters, and other symbols.

14. A non-transitory computer-readable medium for generating entropy in a computing device, comprising instructions stored thereon, that when executed on a processor, perform the steps of:

setting a repeating first timer for a first frequency;

setting a repeating second timer for a second frequency;

collecting first bits from a first entropy source at the first frequency into a first accumulation buffer of a predetermined size, the predetermined size based on an amount of entropy per bit attributable to the first entropy source;

accepting the first bits into the first accumulation buffer;

presenting the first bits from the first accumulation buffer to a pseudo-random number generator as a first seed upon the first accumulation buffer becoming full, thereby providing a greater amount of sudden entropy than in a single collection of first bits;

periodically adjusting the first frequency;

gathering a specified number of second bits from a second entropy source at the second frequency, the specified number based on an amount of entropy per bit attributable to the second entropy source;

accepting the second bits into a second accumulation buffer upon the gathering, the second accumulation buffer having a different size than a size of the first accumulation buffer; and

presenting the second bits from the second accumulation buffer to the pseudo-random number generator as a second seed upon the second accumulation buffer becoming full,

wherein the first and second bits are alternatingly used to seed the pseudo-random number generator.

15. The medium of claim 14 wherein the periodically adjusting of the first frequency is based on an output from the pseudo-random number generator.

16. The medium of claim 14 wherein the periodically adjusting includes adding or subtracting up to 5% of the first frequency.

17. The medium of claim 14 wherein a periodicity of periodically adjusting the first frequency is randomized.

18. A system for generating entropy in a computing device, the system comprising:

a memory; and

at least one processor operatively coupled to the memory and executing program code from the memory comprising:

program code for setting a repeating first timer for a first frequency;

program code for setting a repeating second timer for a second frequency;

collecting first bits from a first entropy source at the first frequency into a first accumulation buffer of a predetermined size, the predetermined size based on an amount of entropy per bit attributable to the first entropy source;

program code for accepting the first bits into the first accumulation buffer;

program code for presenting the first bits from the first accumulation buffer to a pseudo-random number generator as a first seed upon the first accumulation buffer becoming full, thereby providing a greater amount of sudden entropy than in a single collection of first bits;

program code for periodically adjusting the first frequency;

program code for gathering a specified number of second bits from a second entropy source at the second frequency, the specified number based on an amount of entropy per bit attributable to the second entropy source;

program code for accepting the second bits into a second accumulation buffer upon the gathering, the second accumulation buffer having a different size than a size of the first accumulation buffer; and

program code for presenting the second bits from the second accumulation buffer to the pseudo-random number generator as a second seed upon the second accumulation buffer becoming full,

wherein the first and second bits are alternatingly used to seed the pseudo-random number generator.

19. The system of claim 18 wherein the periodically adjusting of the first frequency is based on an output from the pseudo-random number generator.

20. The system of claim 18 wherein the periodically adjusting includes adding or subtracting up to 5% of the first frequency.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 6, 2017
From: DALE, PAUL TIMOTHY; GAUTHIER, P. DENIS
To: ORACLE INTERNATIONAL CORPORATION
Reel/Frame 041478/0360 →
Continuity (3)
Provisional Application 62395961 · Sep 16, 2016
Provisional Application 62377488 · Aug 19, 2016
Related Publication 20180052662A1 · Feb 22, 2018
Cited By (1)
US 12,705,025