Method and apparatus for improved pseudo-random number generation
AssigneeNokia Corporation
InventorMarkku-Juhani Saarinen
Life of this patent
Estimating the term…
Abstract
A pseudo-random number generator (PRNG) for a cryptographic processing system is disclosed in which the PRNG is reseeded at each instance of input entropy and in which a standard timestamp variable used in determining random sequence outputs is replaced with a running counter. The method employed by the PRNG demonstrates increased resistance to iterative-guessing attacks and chosen-input attacks than those of previous technologies. The PRNG is suitable for use in, for example, a mobile telephone system for accomplishing secure communications.
Claims83
A method for seeding a pseudo-random number generator (PRNG), comprising:
- storing a plurality of state variables in an output buffer for use by a PRNG in determining a random number,
- receiving successive input entropy signals;
- clearing the output buffer upon receipt of each of said successive input entropy signals;
- and
- calculating new state variables after receipt of each of said successive input entropy signals.
9 The method of claim 8, wherein said hash comprises at least one of:
- a Secure Hash Algorithm-1 (SHA-1) and a Message Digest-5 (MD-5) algorithm.
A computer-readable medium encoded with processing instructions for implementing a method for seeding a pseudo-random number generator (PRNG), the comprising:
- storing a plurality of state variables in an output buffer for use by a PRNG in determining a random number;
- receiving successive input entropy signals;
- clearing the output buffer upon receipt of each of said successive input entropy signals;
- and
- calculating new state variables after receipt of each of said successive input entropy signals.
An apparatus for seeding a pseudo-random number generator (PRNG), comprising:
- means for storing a plurality of state variables in an output buffer for use by a PRNG in determining a random number;
- means for receiving successive input entropy signals;
- means for clearing the output buffer upon receipt of each of said successive input entropy signals;
- and
- means for calculating new state variables after receipt of each of said successive input entropy signals.
An apparatus for seeding a pseudo-random number generator (PRNG), comprising:
- a processor;
- and
- a memory in communication with the processor, the memory for storing a plurality of processing instructions enabling the processor to:
- store a plurality of state variables in an output buffer for use by a PRNG in determining a random number;
- receive successive input entropy signals;
- clear the output buffer upon receipt of each of said successive input entropy signals;
- and
- calculate new state variables after receipt of each of said successive input entropy signals
A method for seeding a pseudo-random number generator (PRNG) in an initial state for securely generating a random number, comprising.
- receiving an input seed;
- concatenating the input seed with a first constant;
- determining a first output based on a hash of the concatenated input seed and the first constant;
- concatenating the input seed with a second constant;
- determining a second output based on a hash of the concatenated input seed and the second constant;
- determining a key based on at least a portion of the first output, the key for determining a random number;
- determining a counter variable based on a portion of the second output, the counter variable for determining a random number;
- and
- storing the key and the counter variable in an output buffer.
A computer-readable medium encoded with processing instructions for implementing a method for seeding a pseudo-random number generator (PRNG) in an initial state for securely generating a random number, the method comprising:
- receiving an input seed;
- concatenating the input seed with a first constant;
- determining a first output based on a hash of the concatenated input seed and the first constant;
- concatenating the input seed with a second constant;
- determining a second output based on a hash of the concatenated input seed and the second constant;
- determining a key based on at least a portion of the first output, the key for determining a random number;
- determining a counter variable based on a portion of the second output, the counter variable for determining a random number;
- and
- storing the key and the counter variable in an output buffer.
An apparatus for seeding a pseudo-random number generator (PRNG) in an initial state for securely generating a random number, comprising:
- means for receiving an input seed;
- means for concatenating the input seed with a first constant;
- means for determining a first output based on a hash of the concatenated input seed and the first constant;
- means for concatenating the input seed with a second constant;
- means for determining a second output based on a hash of the concatenated input seed and the second constant;
- means for determining a key based on at least a portion of the first output, the key for determining a random number;
- means for determining a counter variable based on a portion of the second output, the counter variable for determining a random number;
- and
- means for storing the key and the counter variable in an output buffer.
An apparatus for seeding a pseudo-random number generator (PRNG) in an initial state for securely generating a random number, comprising:
- a processor;
- and a memory in communication with the processor, the memory for storing a plurality of processing instructions enabling the processor to:
- receive an input seed;
- concatenate the input seed with a first constant;
- determine a first output based on a hash of the concatenated input seed and the first constant;
- concatenate the input seed with a second constant;
- determine a second output based on a hash of the concatenated input seed and the second constant;
- determine a key based on at least a portion of the first output, the key for determining a random number;
- determine a counter variable based on a portion of the second output, the counter variable for determining a random number;
- and
- store the key and the counter variable in an output buffer.
A method for generating state variables for a pseudo-random number generator (PRNG) after an initial state for securely generating a random number, comprising:
- storing first state variables including a first key, a first seed value and a first counter variable in an output buffer;
- receiving an input seed;
- clearing the buffer storing the previous output based on said receiving;
- and
- determining second state variables including a second key, a second seed value, and a second counter variable, based upon the first state variables and the input seed, after said clearing
A computer-readable medium encoded with processing instructions for implementing a method for generating state variables for a pseudo-random number generator (PRNG) after an initial state for securely generating a random number, the method comprising:
- storing first state variables including a first key, a first seed value and a first counter variable in an output buffer;
- receiving an input seed;
- clearing the buffer storing the previous output based on said receiving;
- and
- determining second state variables including a second key, a second seed value, and a second counter variable, based upon the first state variables and the input seed, after said clearing.
An apparatus for generating state variables for a pseudo-random number generator (PRNG) after an initial state for securely generating a random number, comprising:
- means for storing first state variables including a first key, a first seed value and a first counter variable in an output buffer;
- means for receiving an input seed;
- means for clearing the buffer storing the previous output based on said receiving;
- and
- means for determining second state variables including a second key, a second seed value, and a second counter variable, based upon the first state variables and the input seed, after said clearing.
An apparatus for generating state variables for a pseudo-random number generator (PRNG) after an initial state for securely generating a random number, comprising:
- a processor;
- and
- a memory in communication with the processor, the memory for storing a plurality of processing instructions enabling the processor to:
- store first state variables including a first key, a first seed value and a first counter variable in an output buffer;
- receive an input seed,
- clear the buffer storing the previous output based on said receiving;
- and
- determine second state variables including a second key, a second seed value, and a second counter variable, based upon the first state variables and the input seed, after said clearing.
A method for determining a random number using a pseudo-random number generator (PRNG) in an initial state, comprising:
- storing state variables in an output buffer, the state variables including a first key, a first seed value, and a first counter variable;
- determining a second counter variable by summing the first counter variable with a constant;
- encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- and
- encrypting the second encrypted result using the first key and the block cipher to generate a random number.
A computer-readable medium encoded with processing instructions for implementing a method for determining a random number using a pseudo-random number generator (PRNG) in an initial state, the method comprising:
- storing state variables in an output buffer, the state variables including a first key, a first seed value, and a first counter variable;
- determining a second counter variable by summing the first counter variable with a constant;
- encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- and
- encrypting the second encrypted result using the first key and the block cipher to generate a random number.
An apparatus for determining a random number using a pseudo-random number generator (PRNG) in an initial state, comprising:
- means for storing state variables in an output buffer, the state variables including a first key, a first seed value, and a first counter variable;
- means for determining a second counter variable by summing the first counter variable with a constant;
- means for encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- means for performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- and
- means for encrypting the second encrypted result using the first key and the block cipher to generate a random number.
An apparatus for determining a random number using a pseudo-random number generator (PRNG) in an initial state, comprising:
- a processor, and
- a memory in communication with the processor, the memory for storing a plurality of processing instructions enabling the processor to:
- store state variables for a PRNG in an output buffer, the state variables including a first key, a first seed value, and a first counter variable;
- determine a second counter variable by summing the first counter variable with a constant;
- encrypt said second counter variable using the first key and a block cipher to generate a first encrypted result;
- perform an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- and
- encrypt the second encrypted result using the first key and the block cipher to generate a random number.
A method for generating a random number, comprising:
- storing a key and a counter variable in an output buffer, wherein the counter variable is not a timestamp variable;
- and
- generating a random number based on at least the key and the counter variable.
A computer-readable medium encoded with processing instructions for implementing a method for generating a random number, the method comprising:
- storing a key and a counter variable in an output buffer, wherein the counter variable is not a timestamp variable;
- and
- generating a random number based on at least the key and the counter variable.
An apparatus for generating a random number, comprising:
- mans for storing a key and a counter variable in an output buffer, wherein the counter variable is not a timestamp variable, and
- means for generating a random number based on at least the key and the counter variable.
An apparatus for generating a random number, comprising:
- a processor;
- and
- a memory in communication with the processor, the memory for storing a plurality of processing instructions for enabling the processor to:
- store a key and a counter variable in an output buffer, wherein the counter variable is not a timestamp variable;
- and
- generate a first random number based on at least the key and the counter variable.
A method for determining a sequential output of random numbers using a pseudo-random number generator in an initial state, comprising:
- storing initial state variables in an output buffer, the initial state variables including a first key, a first seed value, and a first counter variable;
- determining a second counter variable by summing the first counter variable with a constant;
- encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- encrypting the second encrypted result using the first key and the block cipher to generate a random number;
- determining a second seed value including
- encrypting said second counter variable using the key and the block cipher to generate a third encrypted result;
- performing an exclusive-or operation of the third encrypted result with the random number to determine a fourth encrypted result;
- and
- encrypting the fourth encrypted result using the key and the block cipher to determine the second seed value for generating a subsequent random number;
- determining a third counter variable by summing the second counter variable with the constant;
- encrypting said third counter variable using the key and the block cipher to generate a fifth encrypted result;
- performing an exclusive-or operation of the fifth encrypted result with the second seed value to generate a sixth encrypted result;
- and
- encrypting the sixth encrypted result using the first key and the block cipher to generate a second random number.
A computer-readable medium encoded with processing instructions for implementing a method for determining a sequential output of random numbers using a pseudo-random number generator in an initial state, the method comprising:
- storing initial state variables in an output buffer, the initial state variables including a first key, a first seed value, and a first counter variable;
- determining a second counter variable by summing the first counter variable with a constant;
- encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- encrypting the second encrypted result using the first key and the block cipher to generate a random number;
- determining a second seed value including:
- encrypting said second counter variable using the key and the block cipher to generate a third encrypted result,
- performing an exclusive-or operation of the third encrypted result with the random number to determine a fourth encrypted result;
- and
- encrypting the fourth encrypted result using the key and the block cipher to determine the second seed value for generating a subsequent random number;
- determining a third counter variable by summing the second counter variable with the constant;
- encrypting said third counter variable using the key and the block cipher to generate a fifth encrypted result;
- performing an exclusive-or operation of the fifth encrypted result with the second seed value to generate a sixth encrypted result;
- and
- encrypting the sixth encrypted result using the first key and the block cipher to generate a second random number.
An apparatus for determining a sequential output of random numbers using a pseudo-random number generator in an initial state, comprising:
- means for storing initial state variables in an output buffer, the initial state variables including a first key, a first seed value, and a first counter variable;
- means for determining a second counter variable by summing the first counter variable with a constant;
- means for encrypting said second counter variable using the first key and a block cipher to generate a first encrypted result;
- means for performing an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- means for encrypting the second encrypted result using the first key and the block cipher to generate a random number;
- means for determining a second seed value including:
- means for encrypting said second counter variable using the key and the block cipher to generate a third encrypted result;
- means for performing an exclusive-or operation of the third encrypted result with the random number to determine a fourth encrypted result;
- and
- means for encrypting the fourth encrypted result using the key and the block cipher to determine the second seed value for generating a subsequent random number;
- means for determining a third counter variable by summing the second counter variable with the constant;
- means for encrypting said third counter variable using the key and the block cipher to generate a fifth encrypted result;
- means for performing an exclusive-or operation of the fifth encrypted result with the second seed value to generate a sixth encrypted result;
- and
- means for encrypting the sixth encrypted result using the first key and the block cipher to generate a second random number.
An apparatus for determining a sequential output of random numbers using a pseudo-random number generator in an initial states comprising:
- a processor;
- and
- a memory in communication with the processor, the memory for storing a plurality of processing instructions for enabling the processor to:
- store initial state variables in an output buffer, the initial state variables including a first keys a first seed value, and a first counter variable;
- determine a second counter variable by summing the first counter variable with a constant;
- encrypt said second counter variable using the first key and a block cipher to generate a first encrypted result;
- perform an exclusive-or operation of the first encrypted result with the first seed value to generate a second encrypted result;
- encrypt the second encrypted result using the first key and the block cipher to generate a random number;
- determine a second seed value including:
- encrypt said second counter variable using the key and the block cipher to generate a third encrypted result;
- perform an exclusive-or operation of the third encrypted result with the random number to determine a fourth encrypted result;
- and
- encrypt the fourth encrypted result using the key and the block cipher to determine the second seed value for generating a subsequent random number;
- determine a third counter variable by summing the second counter variable with the constant;
- encrypt said third counter variable using the key and the block cipher to generate a fifth encrypted result;
- perform an exclusive-or operation of the fifth encrypted result with the second seed value to generate a sixth encrypted result;
- and
- encrypt the sixth encrypted result using the first key and the block cipher to generate a second random number.
A method for seeding a pseudo-random number generator (PRNG), comprising:
- storing a plurality of state variables in an output buffer for use by a PRNG in determining a random number;
- receiving successive groups of input entropy signals;
- clearing the output buffer upon receipt of each of said successive input entropy signals;
- and
- calculating new state variables after receipt of each of said groups of input entropy signals.
Dependencies are inferred from the claim text.