Currently, applications exist for semiconductor devices to include an on-chip random number generator for generating a unique identifier for security applications. The unique identifier should be generated in a manner where it would be difficult if not impossible to re-create the number in a similar device, even if that similar device originates from the same wafer. The number would be fixed and unchanged over the lifetime of the device.
The prevalence of programmable non-volatile memory, either in stand-alone chips, or semiconductor devices with embedded non-volatile memory, make it an ideal candidate for providing unique identifier numbers. For example, U.S. Pat. No. 7,142,452 describes exploiting the inherent randomness involved in the fabrication of non-volatile memory arrays as a secure lock. Specifically, the initial bit value (i.e. program state) of each memory cell is unknown and varied after fabrication. If each cell has just two programming states (programmed and unprogrammed), just one 32 bit pattern of cells provides the odds that another pattern will match it to be two to the power of 32, which is over 4 billion. Therefore, numerical identifier numbers based on initial programming state could be generated.
While the initial programming state provides some randomness, in most cases it does not provide true randomness as most cells are either programmed or not programmed. It is difficult to achieve near 50/50 odds of any given cell being either in a programmed or non-programmed state. Therefore, the initial programming state alone would not provide truly unique identifier numbers without using an excessive number of memory cells.
There is a need to exploit the inherent randomness of non-volatile memory array fabrication so generate truly unique identifier number.