# US 10,481,872 B2 · Cryptographically secure random number generator

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,481,872 B2
- Document ID: US10481872B2
- Status: Granted
- Kind: B2
- Application number: 15/689,118
- Filed: 2017-08-29
- Published: 2019-02-28
- Granted: 2019-11-19
- Earliest claimed: 2017-08-29
- Assignees: Colossio, Inc.
- Applicants: Colossio, Inc.
- Inventors: Joseph A. Jaroch
- Web page: https://patentgrep.com/patent/US10481872B2

## CPC

- G06F 7/588: {Random number generators, i.e. based on natural stochastic processes}
- G06F 7/58: Random or pseudo-random number generators
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Various aspects of the subject technology relate to systems, methods, and non-transitory machine-readable medium for generating random numbers are disclosed herein. Entropic data is collected from a computer system and the entropic data is stored as raw data in an assigned entropy pool. The entropic data is encrypted using a globally incrementing counter as an encryption key and the encrypted bytes are returned as a random number.

## Claims

### Claim 1

A computer-implemented method, comprising:
receiving a first request for generating a random number;
collecting entropic data generated from an entropy source of a plurality of entropy sources in a client computing device;
storing the collected entopic data in a first pool, wherein each entropy source is assigned to a corresponding pool, the stored entropic data is raw data;
encrypting, using a counter, the entropic data from the first pool with a hash of entropic data from a second pool wherein the second pool is randomly selected;
providing the encrypted data to the client computing device, wherein the encrypted data is a random number;
comparing the encrypted data with a history of past encrypted data stored in a data cloud;
determining that the encrypted data is identical to one of the past encrypted data;
based on the determination, generating a new random number; and
providing the generated random number to the client computing device.

### Claim 2 (depends on 1)

The computer-implemented method of claim 1, wherein the entropic data is generated based on a user action associated with the entropy source.

### Claim 3 (depends on 2)

The computer-implemented method of claim 2, further comprising:
providing a timestamp at a starting time of the user action and an ending time of the user action associated with the entropy source; and
storing information regarding the timestamp in the first pool.

### Claim 4 (depends on 1)

The computer-implemented method of claim 1, further comprising:
sending a query for collecting additional entropic data to the corresponding entropy source of the client computing device; and
in response to the query, collecting the additional entropic data, wherein the additional entropic data is different from the entropic data.

### Claim 5 (depends on 1)

The computer-implemented method of claim 1, further comprising:
selecting the first pool from a plurality of pools for the first request, wherein the selected first pool for the first request is different from a pool for a second request.

### Claim 6 (depends on 1)

The computer-implemented method of claim 1, further comprising:
matching the entropic data with existing data stored in the first pool;
determining that the entropic data matches with the existing data stored in the first pool; and
removing the matched entropic data from the first pool.

### Claim 7 (depends on 1)

The computer-implemented method of claim 1, further comprising:
determining that the encrypted data has been replicated by a third party application using a replicating process; and
de-duplicating the replicated encrypted data by performing a reverse replicating process.

### Claim 8 (depends on 1)

The computer-implemented method of claim 1, further comprising:
determining a current position of a read pointer of the counter for the first pool;
determining a prime number nearest to a square root of a number of requested bytes;
encrypting bytes at the current position of the read pointer with the hash of bytes from the second pool; and
incrementing the current position of the read pointer of the counter by a prime number of bytes.

### Claim 9 (depends on 1)

The computer-implemented method of claim 1, further comprising:
inserting a trampoline hook on a random number generator function; and
creating a thread to monitor unhooking of the random number generator function.

### Claim 10

A system comprising:
one or more processors;
a computer-readable storage medium coupled to the one or more processors, the computer-readable storage medium including instructions that, when executed by the one or more processors, cause the one or more processors to perform a random number generator function comprising:
receive a first request for generating a random number;
collect entropic data generated from an entropy source of a plurality of entropy sources in the client computing device;
store the collected entopic data in a first pool, wherein each entropy source is assigned to a corresponding pool, the stored entropic data is raw data;
incorporate the entropic data from at least one second pool into the first pool;
encrypt, using a counter, the entropic data from the first pool with a hash of entropic data from the at least one second pool;
provide the encrypted data to the client computing device, wherein the encrypted data is the random number;
inserting a trampoline hook on the random number generator function; and
creating a thread to monitor unhooking of the random number generator function.

### Claim 11 (depends on 10)

The system of claim 10, wherein the entropic data is generated based on a user action associated with the entropy source.

### Claim 12 (depends on 11)

The system of claim 11, wherein the instructions further cause the one or more processors to:
provide a timestamp at a starting time of the user action and an ending time of the user action associated with the entropy source; and
store information regarding the timestamp at the first pool.

### Claim 13 (depends on 10)

The system of claim 10, wherein the instructions further cause the one or more processors to:
send a query for collecting additional entropic data to the corresponding entropy source of the client computing device; and
in response to the query, collect the additional entropic data, wherein the additional entropic data is different from the entropic data.

### Claim 14 (depends on 10)

The system of claim 10, wherein the instructions further cause the one or more processors to:
select the first pool from a plurality of pools for the first request, wherein the selected first pool for the first request is different from a pool for a second request.

### Claim 15

A non-transitory machine-readable medium comprising instructions stored therein, which when executed by a machine, cause the machine to perform operations comprising:
receiving a first request for generating a random number;
collecting entropic data generated from a plurality of entropy sources in the client computing device;
storing the collected entopic data in a plurality of pools, wherein each pool is assigned to a corresponding entropy source, the stored entropic data is raw data;
encrypting, using a counter, the entropic data from a first pool of the plurality of pools with a hash of entropic data from a second pool of the plurality of pools;
providing the encrypted data to the client computing device, wherein the encrypted data is a random number;
determining a current position of a read pointer of the counter for the first pool;
determining a prime number nearest to a square root of a number of requested bytes;
encrypting bytes at the current position of the read pointer with a hash of bytes from the second pool; and
incrementing the current position of the read pointer of the counter by a prime number of bytes.

### Claim 16 (depends on 15)

The non-transitory machine-readable medium of claim 15, the operations further comprising:
matching the entropic data with existing data stored in the first pool;
determining that the entropic data matches with the existing data stored in the first pool; and
removing the matched entropic data from the first pool.

### Claim 17 (depends on 15)

The non-transitory machine-readable medium of claim 15, the operations further comprising:
comparing the hash with the history of past hashes stored in the data cloud;
determining that the hash is identical to one of the past hashes;
based on the determination, generating a new random data; and
providing the generated new random data to the client computing device.

### Claim 18 (depends on 15)

The non-transitory machine-readable medium of claim 15, the operations further comprising:
inserting a trampoline hook on a random number generator function; and
creating a thread to monitor unhooking of the random number generator function.
