The present invention relates generally to electrical circuits and, more particularly, to the security of programmable logic devices.
Programmable logic devices (PLDs), such as field programmable gate arrays (FPGAs) or complex programmable logic devices (CPLDs), may be programmed with configuration data to provide various user-defined features. For example, configuration data may be loaded from an external non-volatile memory, such as a flash memory, into volatile configuration memory of the PLD.
The particular configuration data bitstream loaded into the PLD may be proprietary in nature, and as a result, it is desirable for developers to maintain its secrecy. Because many conventional non-volatile memories permit configuration data bitstreams to be read by external devices, developers may choose to encrypt configuration data bitstreams before they are stored in external non-volatile memory and loaded into the PLD.
Configuration data is often encrypted and decrypted through the use of conventional security keys. For example, a configuration data bitstream may be encrypted using a particular security key and then stored in an external non-volatile memory in encrypted form. The encrypted configuration data bitstream may be loaded into the PLD from the external non-volatile memory and decrypted by the PLD using the appropriate security key stored onboard the PLD. The decrypted configuration data may then be loaded into volatile configuration memory of the PLD. In such applications, the security of the configuration data largely depends on maintaining the secrecy of the security key and the manner in which the security key is stored onboard the PLD.
However, existing approaches to onboard security key storage in PLDs is generally problematic. For example, in certain implementations, the security key may be stored in volatile SRAM cells onboard the PLD which are maintained by a battery. Nevertheless, the security key will be lost if there is a disruption in the power supplied to the SRAM cells as a result of, for example, a battery failure.
In other implementations, the security key may be stored in non-volatile memory onboard the PLD. Unfortunately, if such non-volatile memory exhibits a manufacturing defect, individual data bit values of the security key may be incorrectly stored. As a result, an erroneous security key may be used by the PLD, thereby preventing the PLD from properly decrypting incoming configuration data bitstreams.
Accordingly, there is a need for an improved approach to maintaining the secrecy of security keys stored in non-volatile memory. In addition, there is a need for an improved approach to the programming of security keys that reduces the likelihood of incorrect data bit values of the security key being stored in non-volatile memory.
In embodiment of the invention, a programmable logic device includes configuration memory adapted to be programmed with configuration data and a plurality of programmable fuses adapted to store a security key for use with configuration data. The security key includes a plurality of data bit values, wherein each data bit value of the security key is associated with a subset of a least three fuses each storing a bit. Each of a plurality of decoders is adapted to retrieve a data bit value of the security key by providing the bit value stored by a majority of the fuses of the associated subset as the data bit value of the security key.
In another embodiment of the invention, a method of decrypting an encrypted configuration data bitstream for a programmable logic device includes providing a plurality of programmable fuses that stores a security key comprising a plurality of data bit values, wherein each data bit value is associated with a respective subset of a least three fuses each storing a bit; retrieving the stored security key by providing the bit value stored by a majority of the fuses of each associated subset as a data bit value of the security key; and decrypting the encrypted configuration data bitstream with the retrieved security key.
The scope of the invention is defined by the claims, which are incorporated into this section by reference. A more complete understanding of embodiments of the present invention will be afforded to those skilled in the art, as well as a realization of additional advantages thereof, by a consideration of the following detailed description of one or more embodiments. Reference will be made to the appended sheets of drawings that will first be described briefly.
Embodiments of the present invention and their advantages are best understood by referring to the detailed description that follows. It should be appreciated that like reference numerals are used to identify like elements illustrated in one or more of the figures.
The various techniques disclosed herein are applicable to a wide variety of integrated circuits and applications. As an exemplary implementation, a programmable logic device having one-time-programmable (OTP) fuses will be utilized to illustrate the techniques in accordance with one or more embodiments of the present invention. However, it should be understood that this is not limiting and that the techniques disclosed herein may be implemented as desired, in accordance with one or more embodiments of the present invention, within various types of integrated circuits and fuses. Therefore, the techniques may be applied to integrated circuits other than PLDs and fuses other than OTP fuses, such as fuses implemented in flash or other non-volatile memory.
PLD 100 may receive configuration data bitstreams from an external non-volatile memory (not shown in
Configuration data bitstreams received through JTAG port 140, serial port 150, or parallel port 155 may be provided to PLD 100 in encrypted form. Accordingly, PLD 100 further includes a decryption engine 125 which may be used to decrypt configuration data through the use of a security key 115 (also referred to as a decipher key). In one embodiment, decryption engine 125 may be implemented to support one or more Advanced Encryption Standards (AES) (for example, 128-bit, 192-bit, and/or 256-bit encryption) as such encryption standards are understood by those skilled in the art.
Security key 115 may be programmed into various fuses of PLD 100 by a key programmer 110 as further described herein. Decryption engine 125 may use security key 115 to decrypt raw encrypted configuration data received by PLD 100 through JTAG port 140, serial port 150, or parallel port 155. As illustrated, security key 115 may be provided to key programmer 110 through JTAG port 140 and JTAG circuitry 170. PLD 100 may also be implemented with standard security features 120 to prevent readback through JTAG port 140, serial port 150, or parallel port 155 of configuration data currently programmed into configuration memory 190.
As illustrated in
Configuration data received through JTAG port 140, serial port 150, or parallel port 155 may be selectively provided to decryption engine 125 or a command decoder 165 through a multiplexer 160 under the control of select signals 145 (labeled CFG[0 . . . N]). In this regard, it will be appreciated that incoming configuration data may include various embedded commands which may be ascertained by command decoder 165 to provide appropriate control signals to other components of PLD 100 through a multiplexer 175.
Configuration data received through JTAG port 140, serial port 150, or parallel port 155 may also be provided to PLD 100 in compressed form. Accordingly, PLD 100 further includes a decompression engine 130. For example, decrypted configuration data processed by decryption engine 125 may, if in compressed form, be decompressed by a decompression engine 130 to obtain the configuration data to be programmed into configuration memory 190 of PLD 100.
As illustrated, unencrypted, uncompressed configuration data may be provided (e.g., via a multiplexer 135) to an error checking engine 180 and SRAM programmer 185. In one embodiment, error checking engine 180 may be configured to check incoming configuration data against cyclic redundancy codes (CRCs) embedded in the configuration data bitstream.
As will be appreciated by those skilled in the art, various manufacturing inconsistencies may cause individual OTP fuses 205 to exhibit underprogrammed or overprogrammed behavior. When such behavior occurs, incorrect data bit values may be stored in OTP fuses 205. However, in practice, the likelihood of such manufacturing inconsistencies occurring in two or more adjacent ones of OTP fuses 205 within PLD 100 is relatively unlikely. Therefore, in accordance with an aspect of the present invention, the effect of such manufacturing inconsistencies can be minimized by associating three or more of OTP fuses 205 with each data bit value of security key 115.
In this regard, OTP fuses 205 may be implemented to include security fuses 210, redundant fuses 220, and test fuses 230 arranged in a plurality of subsets (for example, n subsets as illustrated). Each subset of OTP fuses 205 may be associated with a single data bit value of security key 115 to permit a security key of n bits to be stored by OTP fuses 205. In one embodiment, individual fuses in each subset of OTP fuses 205 may be physically located in close proximity to each other (for example, adjacent to each other within key programmer 110). Although
Key programmer 110 further includes a plurality of decoders 240, wherein each decoder 240 is associated with a subset of OTP fuses 205. Decoders 240 may be configured to provide a majority rule output value based on data bit values stored by individual subsets of OTP fuses 205. For example, in one embodiment, the logical function of each one of decoders 240 may be expressed by the following Table 1:
As shown in Table 1 above, the output value provided by each decoder 240 will correspond to a 0 value when at least two of its associated OTP fuses 205 are storing a 0 value. Similarly, the output value provided by each decoder 240 will correspond to a 1 value when at least two of its associated OTP fuses 205 are storing a 1 value. Accordingly, in the event that an OTP fuse 205 (for example, a key fuse 210, a redundant fuse 220, or a test fuse 230) associated with a particular data bit value of security key 115 exhibits underprogramming or overprogramming, the actual data bit value of security key 115 may be provided by the associated decoder 240. It will be appreciated that decoders 240 may be implemented with any appropriate circuitry to provide the logical function set forth in Table 1 or other type of logical function to provide the correct data bit value.
Key programmer 110 further includes a shift register 250 and a hash circuit 255 which are collectively represented in
Security key 115 may be read into key programmer 110 through JTAG port 140 and JTAG circuitry 170 of
Key programmer 110 further includes a multiplexer 290 under the control of select signals 245. As illustrated, multiplexer 290 may selectively provide a programming voltage 215 (labeled VPP) to security fuses 210, redundant fuses 220, test fuses 230, or a key lock fuse 275. Programming voltage 215 may be implemented as any appropriate voltage for programming OTP fuses 205. For example, in one embodiment, programming voltage 215 may be approximately 3.3 volts. As also illustrated, programming voltage 215 may be selectively provided to multiplexer 290 in response to a program enable signal 295.
Key programmer 110 further includes key lock fuse 275 which may be implemented as an OTP fuse for storing a data bit value of a key lock register 270. After security key 115 has been successfully stored in OTP fuses 205, key lock register 270 and key lock fuse 275 may be programmed in order to prevent further programming of OTP fuses 205 and to activate decryption engine 125. It will be appreciated that logic 277 may prevent the readout of data bit values stored in shift register 250 after key lock register 270 is programmed.
In operation 330, the hashed version of security key 115 is read back into shift register 250 from hash circuit 255. Thereafter, shift register 250 attempts to program test fuses 230 with the hashed version of the security key 115. In this regard, it will be appreciated that programming voltage 215 may be provided to test fuses 230 through multiplexer 290 as previously discussed. In one embodiment, test fuses 230 may be programmed in a serial fashion.
In operation 340, shift register 250 reads the data bit values stored in test fuses 230 and passes them through logic 277 and multiplexer 280 to external processor 105 through JTAG port 140. External processor 105 may be provided with appropriate software for also performing the first hashing operation (i.e., the operation performed by hash circuit 255) on security key 115 and verifying that data bit values stored by test fuses 230 (i.e., data bit values passed back to external processor 105 from shift register 250) correspond to the hashed version of security key 115. Accordingly, in operation 350, external processor 105 verifies the data bit values read in operation 340 to determine whether they match the hashed version of security key 115.
The process of
Following the programming of OTP fuses 205, key lock register 270 and key lock fuse 275 may each be programmed to prevent subsequent readout of security key 115 from OTP fuses 205 or shift register 250. For example, it will be appreciated from
Data received through JTAG port 140 (for example, encrypted configuration data bitstream 510, commands, or unencrypted configuration data) may be read into a register 520 of PLD 100 through a multiplexer 590 in 128-bit blocks, and passed to decryption engine 125. As illustrated, data may also be passed directly to a multiplexer 595.
Data received through JTAG port 140 may also be passed to various other components 570 (labeled “Others”) of PLD 100 and/or out of JTAG port 140 (i.e., through a multiplexer 550) under the control of JTAG circuitry 170 to other devices as may be desired. In this regard, JTAG circuitry 170 may be configured to decode a JTAG bypass command received at a “TDI” pin of JTAG port 140. In response to the JTAG bypass command, JTAG circuitry 170 may provide appropriate select signals to multiplexers 550 and 590 to pass data received at TDI pin to a bypass register (i.e., implemented as one of components 570) and out a “TDO” pin of JTAG port 140 to be provided to another PLD or other device which may be connected with PLD 100. For example, in one embodiment, a plurality of PLDs may be connected with each other in a daisy chain fashion to permit configuration data bitstreams to be passed from an external memory through PLD 100 and on to a second PLD, as further described herein.
PLD 100 may also be provided with a bitstream engine 580 to facilitate the processing of data received through JTAG port 140. In operation, bitstream engine 580 may be configured to initially select a logical 0 input of multiplexer 595 in order to receive data provided at JTAG port 140. Bitstream engine 580 may also be configured to recognize various preamble codes associated with configuration data bitstreams. For example, in one embodiment, bitstream engine 580 may operate in a first mode to recognize a first preamble code associated with unencrypted configuration data bitstreams, and in a second mode to recognize a second preamble code associated with encrypted configuration data bitstreams.
If key lock fuse 275 is unprogrammed (i.e., security key 115 has not yet been programmed in OTP fuses 205), bitstream engine 580 may operate in the first mode. In this case, if bitstream engine 580 receives a first preamble code associated with an unencrypted configuration data bitstream, it may pass the unencrypted configuration data bitstream on to a data shift register 530 for programming into configuration memory 190 by SRAM programmer 185 (illustrated in
If, however, key lock fuse 275 is programmed, bitstream engine 580 may operate in the second mode. Accordingly, if bitstream engine 580 receives a preamble code associated with an encrypted configuration data bitstream (e.g., encrypted configuration data bitstream 510), then bitstream engine 580 may select a logical 1 input of multiplexer 595 to receive decrypted data from decryption engine 125.
In this regard, the second hashed version of security key 115 may be read from OTP fuses 205 and passed from shift register 250 to decryption engine 125 in the manner previously described in relation to
Error checking engine 180 performs error checking on configuration data received through multiplexer 595 and programs a pass/fail register 540 with appropriate values corresponding to the status of errors. As illustrated, the value of pass/fail register 540 may be provided to JTAG port 140.
Referring now to the embodiment of
The various components common to both
Also in the embodiment of
As illustrated, first and second encrypted configuration data bitstreams 510A and 510B, respectively, are stored in non-volatile memory 610. Each of first and second encrypted configuration data bitstreams 510A and 510B may be encrypted using a second hashed version of each of security keys 115A and 115B, respectively. First encrypted configuration data bitstream 510A may be loaded into PLD 100A through serial port 150A and decrypted by PLD 100A using security key 115A stored in OTP fuses of PLD 100A in the manner previously described herein. In addition, second encrypted configuration data bitstream 510B may be passed to PLD 100A through serial port 150A, passed on to PLD 100B through the daisy chain configuration of serial port 150A and serial port 150B, and decrypted by PLD 100B using security key 115B stored in OTP fuses of PLD 100B.
In view of the present disclosure, it will be appreciated that a PLD implemented in accordance with one or more of the various embodiments disclosed herein may support the programming and subsequent retrieval of security keys with high confidence. In particular, by storing each data bit value of the security key in a plurality of associated OTP fuses and reading back the bit value stored by a majority of the associated OTP fuses, the effects of overprogramming or underprogramming may be reduced. Advantageously, by storing a first hashed version of the security key and performing decryption using a second hashed version of the security key, the ability of third parties to readily discern the security key through inspection of the OTP fuses can also be impaired.
Embodiments described above illustrate but do not limit the invention. It should also be understood that numerous modifications and variations are possible in accordance with the principles of the present invention. Accordingly, the scope of the invention is defined only by the following claims.
This application is a continuation of U.S. application Ser. No. 11/498,645, filed Aug. 3, 2006, which is incorporated herein by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
6118869 | Kelem et al. | Sep 2000 | A |
6212639 | Erickson et al. | Apr 2001 | B1 |
6654889 | Trimberger | Nov 2003 | B1 |
6944083 | Pedlow, Jr. | Sep 2005 | B2 |
7284134 | Fujiwara et al. | Oct 2007 | B2 |
7339400 | Walstrum et al. | Mar 2008 | B1 |
20020199110 | Kean | Dec 2002 | A1 |
Number | Date | Country | |
---|---|---|---|
Parent | 11498645 | Aug 2006 | US |
Child | 12709685 | US |