US20020108045A1 - Preventing unauthorized updates to a non-volatile memory - Google Patents
Preventing unauthorized updates to a non-volatile memory Download PDFInfo
- Publication number
- US20020108045A1 US20020108045A1 US10/113,506 US11350602A US2002108045A1 US 20020108045 A1 US20020108045 A1 US 20020108045A1 US 11350602 A US11350602 A US 11350602A US 2002108045 A1 US2002108045 A1 US 2002108045A1
- Authority
- US
- United States
- Prior art keywords
- sequence
- values
- encoded
- circuitry
- memory device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Definitions
- the present invention relates to the field of memory management, and more particularly to securing updates to a non-volatile memory used to store program code.
- BIOS basic input/output system
- the BIOS code is usually the lowest layer of software in a computer system and acts as an interface between system hardware and higher-layer software.
- the BIOS typically includes routines for managing system startup and for controlling various hardware components such as a wait-state generator, hardware timers, interrupt controllers and so forth.
- BIOS routines interact extensively with system hardware, they are often invoked at a privilege level that allows unrestricted memory and I/O access. This makes the BIOS space (i.e., the memory space allocated to the BIOS) a particularly likely candidate for malicious attack. If unauthorized code (e.g., a computer virus) is substituted for BIOS code, the unauthorized code will likely be able to access a broad range of system devices that privilege-level protections would otherwise prevent. As a result, a successful attack on the BIOS space can result in considerable damage to a computer system, including the loss of sensitive information.
- BIOS space i.e., the memory space allocated to the BIOS
- flash memory devices e.g., flash electrically-erasable, programmable read-only memory (flash EEPROM)
- flash EEPROM flash electrically-erasable, programmable read-only memory
- flash EEPROM flash electrically-erasable, programmable read-only memory
- FIG. 1 is a data flow diagram that illustrates one prior-art technique for preventing unauthorized access to the BIOS space.
- program code 10 is obtained in a computer system that includes a processor 22 , a system memory 11 , an updatable, non-volatile memory device 12 , a bus 20 and an interrupt generator 28 .
- write circuitry 26 within the processor 22 transfers the program code 10 across bus 20 along with commands to the flash device 12 to write the program code into a predetermined space within storage array 18 .
- the interrupt generator 28 snoops the signals transferred across the bus 20 and can therefore detect when a write access to the flash device 12 is being attempted.
- the interrupt generator 28 asserts an interrupt 29 to interrupt the processor 22 .
- the processor 22 invokes an interrupt service routine 27 (typically stored in system memory 11 ) to validate the source of the data write, for example, by determining whether a predetermined value is present in the program code 10 (e.g., header or trailer information).
- interrupt service routine (ISR) 27 determines that the attempted write access to the flash device 12 is valid, the ISR 27 is exited and transfer of the program code 10 is resumed. To prevent repeated interrupt generation after the initial validation operation, the interrupt generator 28 may be disabled until after the transfer is complete.
- the vector to the ISR 27 can be changed so that when the interrupt from the interrupt generator 28 is received, a substitute ISR is invoked. This substitute ISR may then disable the interrupt generator without validating the program code 10 that is attempting to write to the flash device 12 . Unauthorized program code may then be written to the flash memory device 12 .
- an attacker may access the code of ISR 27 to learn the authenticating value (or set of values) that is expected in the program code 10 and where the authenticating value is stored. The attacker can then store the authenticating value in unauthorized program code so that the ISR 27 erroneously validates the unauthorized program code. Again, the unauthorized program code may be written to the flash memory device 12 .
- An apparatus and method for preventing unauthorized updates to a non-volatile memory are disclosed.
- a sequence of encoded values is received in a non-volatile memory device.
- the sequence of encoded values is decoded in a decoding circuit in the non-volatile memory device to generate a sequence of decoded values and the sequence of decoded values is stored in the non-volatile memory device.
- FIG. 1 is a data flow diagram that illustrates one prior-art technique for preventing unauthorized access to a BIOS space
- FIG. 2 is a data flow diagram that illustrates a method of updating contents of a non-volatile memory device according to one embodiment
- FIG. 3 diagrams one embodiment of a method for generating the encoded program code that restricts access to the encoding technique
- FIG. 4 is a diagram of a flash memory device according to one embodiment
- FIG. 5 is a diagram illustrating the components of a keystream-based encoding/decoding system according to one embodiment.
- FIG. 6 depicts one embodiment of a keystream generator 89 that is used to decode an encoded image.
- computer security is increased by writing pre-encoded program code to an enhanced-security, non-volatile memory device.
- a software developer encodes the program code using a predetermined encoding technique.
- a decoding circuit within the non-volatile memory device decodes the program code before it is stored in the device's non-volatile storage array.
- the decoded program code may then be fetched and executed in a conventional manner.
- FIG. 2 is a data flow diagram that illustrates a method of updating contents of a non-volatile memory device according to one embodiment.
- Program code 10 is encoded according to a predetermined encoding technique and then published for distribution as encoded program code 50 .
- any number of different encoding techniques may be used to generate the encoded program code 50 .
- the program code is occasionally referred to as BIOS code in the following description.
- Application of the present invention is not limited to securing BIOS code, however, and the program code may generally be any program code or data for which enhanced security is desired.
- the encoded program code 50 is transferred to a computer system 21 that includes a processor 22 , a non-volatile memory device 32 a system memory 11 and a bus 20 .
- the non-volatile memory device 32 is shown in FIG. 2 and described in the following description as a flash memory device, although any non-volatile memory device that can-be erased and reprogrammed in-circuit may be used.
- the encoded program code 50 After the encoded program code 50 has been received in the computer system 21 (e.g., stored in the system memory 11 ), writing circuitry 26 in the processor 22 is used to transfer the encoded program code 50 to the flash memory device 32 via the bus 20 .
- the encoded program code is transferred to the flash memory device 32 one word at a time in response to execution of program code 51 .
- the word-size of each word transferred is determined by the width of the data portion of the bus 20 or by the software used to control the transfer 51 , or both.
- the encoded program code 50 is received by the flash memory device 32 as a stream of data words.
- the flash device includes writing circuitry 36 , reading circuitry 14 , a storage array 18 and decoding logic 38 .
- the writing circuitry 36 within the flash memory device 32 transfers the encoded program code 50 to decoding logic 38 .
- the decoding logic 38 decodes the encoded program code 50 to recover the original program code 10 .
- the decoded program code (i.e., recovered program code 10 ) is then stored in the storage array 18 .
- reading circuitry 24 within the processor 22 may fetch the decoded program code via the reading circuitry 14 in the flash memory device 32 .
- the decoded program code may then be executed by the processor 22 in a conventional manner.
- FIG. 3 diagrams one embodiment of a method for generating the encoded program code (e.g., encoded program code 50 of FIG. 2) that restricts access to the encoding technique to authenticated software developers.
- a software developer 54 presents authentication information to a non-volatile memory component manufacturer 57 in a request to be authenticated as a legitimate software developer.
- the authentication information may include, but is not limited to, documents affirming the identity of the software developer, information obtained by visiting the software developer's site to assure its legitimacy and security procedures, and so forth.
- the memory component manufacturer 57 grants the software developer 54 access to the encoding device or encoding computer program at step 45 .
- the memory component manufacturer 57 grants access to the encoding device or program by encoding program code on behalf of the software developer 54 . In this way, the memory component manufacturer 57 maintains possession of the encoding device or program, thus enhancing system security.
- the memory component manufacturer 57 may release the encoding device or program to the software developer 54 to allow the software developer 54 to perform the encoding operation.
- the program code is encoded into an encoded image (e.g., encoded program code 50 of FIG. 2) by the software developer 54 or by the memory component manufacturer 57 on the software developer's behalf.
- the software developer 54 releases the encoded image for publication.
- a consumer 55 obtains the encoded image of the software developer's program code, for example, by downloading the encoded image from a website or by purchasing a computer-readable medium having the encoded image stored thereon (e.g., CD-ROM or diskette) from a retailer.
- the consumer 55 executes a program (e.g., program code 51 of FIG. 2) to transfer the encoded image to a non-volatile memory device 32 that contains decoding logic 38 .
- the decoding logic 38 restores the encoded program code to its executable form so that the program code may be fetched and executed.
- FIG. 4 is a diagram of a flash memory device 32 according to one embodiment.
- the flash memory device 32 includes input and output buffers 61 and 63 , control logic 65 , decoding logic 38 , an address buffer 67 , an address counter 69 , block select logic 80 , word select logic 82 , gating/sensing circuitry 70 and a storage array 18 arranged in blocks 0 to N ⁇ 1.
- the flash memory device 32 may include other components that are not shown (e.g., page buffers and page buffer control circuitry).
- the flash memory device 32 receives and outputs data on an N-bit wide data bus 71 , receives addresses on an M-bit wide address bus 73 and receives control signals output enable 74 , write enable 75 and chip enable 76 on a control bus 72 .
- the control bus 72 , address bus 73 and data bus 71 are included in the bus 20 shown in FIG. 2.
- the control logic 65 receives the output enable 74 , write enable 75 and chip enable signals 76 and issues control signals to the output buffer 61 , input buffer 63 and address buffer 67 in response. For example, when the write enable signal and the chip enable signals are asserted, the control logic 65 issues control signals to enable an input value from the data bus 71 into the input buffer 63 and an address from the address bus 73 into the address buffer 67 . The input value is then delivered from the input buffer 63 to either the decoding logic 38 or the control logic 65 based on whether the input value is a command or data. For example, if a data transfer was completed in the preceding transfer cycle, the next input value may be assumed to be a command and is therefore delivered to the control logic 65 .
- Input values that are part of a commanded data transfer are delivered to the decoding logic 38 and then to the gating/sensing circuitry 70 .
- the gating/sensing circuitry 70 programs (writes) each decoded value received from the decoding logic 38 in the storage array 18 .
- control logic 65 will cause the address from the address buffer 67 to be stored in the address counter 69 and will then signal the address counter 69 to increment the address as each data value is written to the storage array 18 .
- the block select logic 80 and word select logic 82 receive each incremental address from the address counter 69 and decode the address to select a block within the storage array 18 and a location within the selected block, respectively, at which a decoded data value is stored.
- the gating/sensing circuitry 70 is used to perform the actual programming (writing) and sensing (reading) operations.
- a value is output from the addressed location (as selected by the block select logic 80 and word select logic 82 ), amplified by the gating/sensing circuitry 70 and driven onto the data bus 71 by the output buffer 61 , all under control of the control logic 65 .
- the control logic 65 For each unit of program code received from the data bus 71 and buffered in the input buffer 63 , the control logic 65 signals the decoding logic 38 to generate a new decoding value that is applied to decode the unit of program code. Each decoded program code value is supplied to the gating/sensing circuitry 70 which programs the decoded program code value into a respective storage location selected by the block select logic 80 and the word select logic 82 .
- a keystream is generated by a logic element called a keystream generator which may be implemented in software or by a wide variety of circuits.
- FIG. 5 is a diagram illustrating the components of a keystream-based encoding/decoding system according to one embodiment.
- a program code sequence 10 is exclusive-or'd (e.g., by exclusive-or gate 85 ) word-by-word with a keystream 84 to produce an encoded image 50 .
- a keystream generator 89 within the decoding logic 38 applies the same keystream 84 that was used to produce the encoded image 50 to the recover the original program code sequence 10 .
- the following illustrates the logical equivalence between a code sequence that has been twice exclusively-or'd with the same keystream and the original code sequence:
- the encoded image 50 is produced by executing a computer program to generate the keystream 84 and to XOR the individual keystream values with respective words of the program code sequence. Because the decoding logic is implemented in hardware, a circuit-based keystream generator 89 is used in one embodiment to generate the keystream 84 applied to decode the encoded image 50 .
- FIG. 6 depicts one embodiment of a keystream generator 89 that is used to decode an encoded image.
- the keystream generator 89 is one of a class of pseudo-random-sequence generators known as a linear feedback shift register (LFSR).
- the LFSR 89 includes two components: a shift register 91 and a feedback function 93 . With each shifting of the shift register 91 , a new most-significant bit 94 is output as part of the keystream, and an input bit 95 is inserted at the beginning of the shift register 91 .
- the shift register is shifted in response to a control signal (e.g., from control logic 65 of FIG. 4) that is asserted with each new program code value received.
- Other clocking sources may be used to shift the contents of shift register 91 in alternative embodiments.
- the feedback function 93 is typically an exclusive-or combination of bits at selected bit positions of the shift register 91 . These selected bit positions are referred to as taps. By appropriate selection of the taps, the LFSR 89 can be made to output a keystream that does not repeat until after 2 n ⁇ 1 key bits have been generated, n being the number of bits in the shift register 91 . In alternate embodiments, other circuits may be used to generate the keystream, including, but not limited to, combinations of LFSRs in which the output of one or more LFSRs are logically combined, used to select between outputs of other LFSRs, used to clock other LFSRs, and so forth.
- a single bitstream generated by a keystream generator 89 is applied to decode a sequence of program code values.
- a single bit output by the keystream generator 89 may be applied to each bit of a program code word so that a word filled with all 1 's or all 0 's would be used to decode each word of program code. This is shown in FIG. 6 by the exclusive-or combination (element 86 ) of the most significant bit of the shift register 91 with each of the N-bits of a word of incoming program code.
- the keystream generator may be clocked so that N bits of the keystream are generated and respectively applied to each of the N-bits of an encoded word of program code.
- each of the bits in an N-shift register could be respectively applied to the N-bits of an encoded word of program code.
- the shift register would then be clocked (i.e., shifted) N times to generate a new N-bit keyword for application to the next word of program code.
- N separate bitstreams may be generated by a keystream generator to produce a keyword made up of N different key bits. This may be accomplished, for example by providing N differently designed LFSR circuits that operate in parallel to generate the N-bit keyword, or by providing N identically designed LFSR circuits that are seeded differently (e.g., the shift registers of the individual LFSRs may be initialized to different values).
- a transfer protocol may be defined in which one or more predetermined values are appended to the beginning of a program code sequence to seed the LFSR circuits.
- the seed values act to initialize the keystream generator to a predetermined state before the output of the keystream generator is applied to the succeeding program values.
- Logic may be included in the decoding logic to suppress storage of the seed values in the non-volatile storage array or the starting address at which the program code is to be stored may be adjusted to account for storage of the seed values.
- Another non-volatile memory device comprises storage elements, reading circuitry to retrieve encoded data from the storage elements and to output the data on a data path, and decoding circuitry coupled to the reading circuitry to decode the encoded data retrieved from the storage elements before the reading circuitry outputs the data on the data path.
- a sequence of encoded values is stored in storage elements of a non-volatile memory device.
- the encoded sequence of values is retrieved from the storage elements in response to a read request.
- the encoded sequence of values is decoded in a decoding circuit within the non-volatile memory device to generate a sequence of decoded values.
- the sequence of decoded values is output.
Abstract
An apparatus and method for preventing unauthorized updates to a non-volatile memory. A sequence of encoded values is received in a non-volatile memory device and decoded by a decoding circuit in the non-volatile memory device to generate a sequence of decoded values. The sequence of decoded values is stored in the non-volatile memory device.
Description
- The present invention relates to the field of memory management, and more particularly to securing updates to a non-volatile memory used to store program code.
- Many computer systems include a non-volatile memory to store basic input/output system (BIOS) program code. The BIOS code is usually the lowest layer of software in a computer system and acts as an interface between system hardware and higher-layer software. For example, the BIOS typically includes routines for managing system startup and for controlling various hardware components such as a wait-state generator, hardware timers, interrupt controllers and so forth.
- Because BIOS routines interact extensively with system hardware, they are often invoked at a privilege level that allows unrestricted memory and I/O access. This makes the BIOS space (i.e., the memory space allocated to the BIOS) a particularly likely candidate for malicious attack. If unauthorized code (e.g., a computer virus) is substituted for BIOS code, the unauthorized code will likely be able to access a broad range of system devices that privilege-level protections would otherwise prevent. As a result, a successful attack on the BIOS space can result in considerable damage to a computer system, including the loss of sensitive information.
- In modern computer systems, flash memory devices (e.g., flash electrically-erasable, programmable read-only memory (flash EEPROM)) are often used to store BIOS code. By sending the appropriate commands, flash devices can be erased and reprogrammed. While this makes it easier to install updated BIOS software, it also opens the door to malicious attack on the BIOS space. For example, some BIOS developers post updated BIOS code on sites of the World Wide Web (“the web”) from which they can be downloaded and installed. One seeking to introduce unauthorized code into the BIOS space (i.e., an “attacker”) could modify the posted BIOS code or even intercept and modify the code during download. Alternatively an attacker might masquerade as a legitimate BIOS developer to induce a computer user to download and install unauthenticated code. For example, the attacker could post unauthenticated code on a website and represent the code as being provided by a legitimate developer.
- FIG. 1 is a data flow diagram that illustrates one prior-art technique for preventing unauthorized access to the BIOS space. Initially,
program code 10 is obtained in a computer system that includes a processor 22, asystem memory 11, an updatable,non-volatile memory device 12, a bus 20 and aninterrupt generator 28. When adata transfer program 19 is executed, writecircuitry 26 within the processor 22 transfers theprogram code 10 across bus 20 along with commands to theflash device 12 to write the program code into a predetermined space withinstorage array 18. Theinterrupt generator 28 snoops the signals transferred across the bus 20 and can therefore detect when a write access to theflash device 12 is being attempted. In response to detecting a write access attempt, theinterrupt generator 28 asserts aninterrupt 29 to interrupt the processor 22. In response to the interrupt, the processor 22 invokes an interrupt service routine 27 (typically stored in system memory 11) to validate the source of the data write, for example, by determining whether a predetermined value is present in the program code 10 (e.g., header or trailer information). - If the interrupt service routine (ISR)27 determines that the attempted write access to the
flash device 12 is valid, theISR 27 is exited and transfer of theprogram code 10 is resumed. To prevent repeated interrupt generation after the initial validation operation, theinterrupt generator 28 may be disabled until after the transfer is complete. - One disadvantage of the above-described technique is that it is relatively easy to circumvent. For example, the vector to the
ISR 27 can be changed so that when the interrupt from theinterrupt generator 28 is received, a substitute ISR is invoked. This substitute ISR may then disable the interrupt generator without validating theprogram code 10 that is attempting to write to theflash device 12. Unauthorized program code may then be written to theflash memory device 12. Alternatively, an attacker may access the code ofISR 27 to learn the authenticating value (or set of values) that is expected in theprogram code 10 and where the authenticating value is stored. The attacker can then store the authenticating value in unauthorized program code so that theISR 27 erroneously validates the unauthorized program code. Again, the unauthorized program code may be written to theflash memory device 12. - An apparatus and method for preventing unauthorized updates to a non-volatile memory are disclosed. A sequence of encoded values is received in a non-volatile memory device. The sequence of encoded values is decoded in a decoding circuit in the non-volatile memory device to generate a sequence of decoded values and the sequence of decoded values is stored in the non-volatile memory device.
- Other features and advantages of the invention will be apparent from the accompanying drawings and from the detailed description that follows below.
- The present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings in which like references indicate similar elements and in which:
- FIG. 1 is a data flow diagram that illustrates one prior-art technique for preventing unauthorized access to a BIOS space;
- FIG. 2 is a data flow diagram that illustrates a method of updating contents of a non-volatile memory device according to one embodiment;
- FIG. 3 diagrams one embodiment of a method for generating the encoded program code that restricts access to the encoding technique;
- FIG. 4 is a diagram of a flash memory device according to one embodiment;
- FIG. 5 is a diagram illustrating the components of a keystream-based encoding/decoding system according to one embodiment; and
- FIG. 6 depicts one embodiment of a
keystream generator 89 that is used to decode an encoded image. - According to embodiments of the present invention, computer security is increased by writing pre-encoded program code to an enhanced-security, non-volatile memory device. Prior to publishing program code, a software developer encodes the program code using a predetermined encoding technique. When the published, encoded program code is obtained by a consumer and written to the enhanced-security, non-volatile memory device, a decoding circuit within the non-volatile memory device decodes the program code before it is stored in the device's non-volatile storage array. The decoded program code may then be fetched and executed in a conventional manner.
- If an attacker attempts to transfer unauthorized, unencoded program code to the non-volatile memory device, the decoding circuit will garble the unauthorized code to prevent its execution. While this does not prevent overwriting of contents of the non-volatile memory, it does prevent the storage of program code which, if executed, could result in a loss of valuable or sensitive data. Thus, it is an intended advantage of the present invention to provide enhanced computer security by preventing unauthorized program code from being successfully stored in a non-volatile memory device. Other features and advantages of the present invention will be apparent from the following description and the accompanying drawings.
- FIG. 2 is a data flow diagram that illustrates a method of updating contents of a non-volatile memory device according to one embodiment.
Program code 10 is encoded according to a predetermined encoding technique and then published for distribution as encodedprogram code 50. As discussed below, any number of different encoding techniques may be used to generate the encodedprogram code 50. Also, because an important application of the present invention is to prevent the BIOS space from being written with unauthorized program code, the program code is occasionally referred to as BIOS code in the following description. Application of the present invention is not limited to securing BIOS code, however, and the program code may generally be any program code or data for which enhanced security is desired. - After the
program code 10 has been encoded, the encodedprogram code 50 is transferred to acomputer system 21 that includes a processor 22, a non-volatile memory device 32 asystem memory 11 and a bus 20. Thenon-volatile memory device 32 is shown in FIG. 2 and described in the following description as a flash memory device, although any non-volatile memory device that can-be erased and reprogrammed in-circuit may be used. - After the encoded
program code 50 has been received in the computer system 21 (e.g., stored in the system memory 11),writing circuitry 26 in the processor 22 is used to transfer the encodedprogram code 50 to theflash memory device 32 via the bus 20. The encoded program code is transferred to theflash memory device 32 one word at a time in response to execution ofprogram code 51. The word-size of each word transferred is determined by the width of the data portion of the bus 20 or by the software used to control thetransfer 51, or both. In any case, the encodedprogram code 50 is received by theflash memory device 32 as a stream of data words. - In one embodiment, the flash device includes writing
circuitry 36, readingcircuitry 14, astorage array 18 anddecoding logic 38. The writingcircuitry 36 within theflash memory device 32 transfers the encodedprogram code 50 todecoding logic 38. Thedecoding logic 38 decodes the encodedprogram code 50 to recover theoriginal program code 10. The decoded program code (i.e., recovered program code 10) is then stored in thestorage array 18. Under software control, readingcircuitry 24 within the processor 22 may fetch the decoded program code via the readingcircuitry 14 in theflash memory device 32. The decoded program code may then be executed by the processor 22 in a conventional manner. - According to one embodiment, access to the technique for encoding program code is restricted to authenticated software developers to prevent unauthorized persons from circumventing the security mechanism described above. FIG. 3 diagrams one embodiment of a method for generating the encoded program code (e.g., encoded
program code 50 of FIG. 2) that restricts access to the encoding technique to authenticated software developers. Atstep 41, asoftware developer 54 presents authentication information to a non-volatilememory component manufacturer 57 in a request to be authenticated as a legitimate software developer. The authentication information may include, but is not limited to, documents affirming the identity of the software developer, information obtained by visiting the software developer's site to assure its legitimacy and security procedures, and so forth. If thesoftware developer 54 is authenticated atstep 43, then thememory component manufacturer 57 grants thesoftware developer 54 access to the encoding device or encoding computer program atstep 45. According to one embodiment, thememory component manufacturer 57 grants access to the encoding device or program by encoding program code on behalf of thesoftware developer 54. In this way, thememory component manufacturer 57 maintains possession of the encoding device or program, thus enhancing system security. In an alternate embodiment, thememory component manufacturer 57 may release the encoding device or program to thesoftware developer 54 to allow thesoftware developer 54 to perform the encoding operation. - At
step 47, the program code is encoded into an encoded image (e.g., encodedprogram code 50 of FIG. 2) by thesoftware developer 54 or by thememory component manufacturer 57 on the software developer's behalf. Atstep 49, thesoftware developer 54 releases the encoded image for publication. Atstep 51, aconsumer 55 obtains the encoded image of the software developer's program code, for example, by downloading the encoded image from a website or by purchasing a computer-readable medium having the encoded image stored thereon (e.g., CD-ROM or diskette) from a retailer. Atstep 53, theconsumer 55 executes a program (e.g.,program code 51 of FIG. 2) to transfer the encoded image to anon-volatile memory device 32 that contains decodinglogic 38. Thedecoding logic 38 restores the encoded program code to its executable form so that the program code may be fetched and executed. - FIG. 4 is a diagram of a
flash memory device 32 according to one embodiment. Theflash memory device 32 includes input andoutput buffers control logic 65, decodinglogic 38, anaddress buffer 67, anaddress counter 69, blockselect logic 80, wordselect logic 82, gating/sensing circuitry 70 and astorage array 18 arranged in blocks 0 to N−1. Theflash memory device 32 may include other components that are not shown (e.g., page buffers and page buffer control circuitry). Theflash memory device 32 receives and outputs data on an N-bit wide data bus 71, receives addresses on an M-bitwide address bus 73 and receives control signals output enable 74, write enable 75 and chip enable 76 on acontrol bus 72. In one embodiment, thecontrol bus 72,address bus 73 and data bus 71 are included in the bus 20 shown in FIG. 2. - The
control logic 65 receives the output enable 74, write enable 75 and chip enablesignals 76 and issues control signals to theoutput buffer 61,input buffer 63 andaddress buffer 67 in response. For example, when the write enable signal and the chip enable signals are asserted, thecontrol logic 65 issues control signals to enable an input value from the data bus 71 into theinput buffer 63 and an address from theaddress bus 73 into theaddress buffer 67. The input value is then delivered from theinput buffer 63 to either thedecoding logic 38 or thecontrol logic 65 based on whether the input value is a command or data. For example, if a data transfer was completed in the preceding transfer cycle, the next input value may be assumed to be a command and is therefore delivered to thecontrol logic 65. Input values that are part of a commanded data transfer are delivered to thedecoding logic 38 and then to the gating/sensing circuitry 70. The gating/sensing circuitry 70 programs (writes) each decoded value received from thedecoding logic 38 in thestorage array 18. - Assuming that a command to write a sequence of values (e.g., program code) has been received in the
control logic 65, thecontrol logic 65 will cause the address from theaddress buffer 67 to be stored in theaddress counter 69 and will then signal theaddress counter 69 to increment the address as each data value is written to thestorage array 18. The blockselect logic 80 and wordselect logic 82 receive each incremental address from theaddress counter 69 and decode the address to select a block within thestorage array 18 and a location within the selected block, respectively, at which a decoded data value is stored. The gating/sensing circuitry 70 is used to perform the actual programming (writing) and sensing (reading) operations. When a command is received to read data from thestorage array 18, a value is output from the addressed location (as selected by the blockselect logic 80 and word select logic 82), amplified by the gating/sensing circuitry 70 and driven onto the data bus 71 by theoutput buffer 61, all under control of thecontrol logic 65. - For each unit of program code received from the data bus71 and buffered in the
input buffer 63, thecontrol logic 65 signals thedecoding logic 38 to generate a new decoding value that is applied to decode the unit of program code. Each decoded program code value is supplied to the gating/sensing circuitry 70 which programs the decoded program code value into a respective storage location selected by the blockselect logic 80 and the wordselect logic 82. - The sequence of decoding values generated by the
decoding logic 38 and applied to decode an incoming program code sequence is referred to as a keystream. A keystream is generated by a logic element called a keystream generator which may be implemented in software or by a wide variety of circuits. - FIG. 5 is a diagram illustrating the components of a keystream-based encoding/decoding system according to one embodiment. As shown, a
program code sequence 10 is exclusive-or'd (e.g., by exclusive-or gate 85) word-by-word with akeystream 84 to produce an encodedimage 50. When the encodedimage 50 is transferred to a non-volatile memory device that includes decoding logic 38 (e.g., thenon-volatile memory device 32 of FIG. 4), akeystream generator 89 within thedecoding logic 38 applies thesame keystream 84 that was used to produce the encodedimage 50 to the recover the originalprogram code sequence 10. The following illustrates the logical equivalence between a code sequence that has been twice exclusively-or'd with the same keystream and the original code sequence: - (CODE XOR KEY) XOR KEY=CODE XOR (KEY XOR KEY)=CODE XOR 0=CODE
- According to one embodiment, the encoded
image 50 is produced by executing a computer program to generate thekeystream 84 and to XOR the individual keystream values with respective words of the program code sequence. Because the decoding logic is implemented in hardware, a circuit-basedkeystream generator 89 is used in one embodiment to generate thekeystream 84 applied to decode the encodedimage 50. - FIG. 6 depicts one embodiment of a
keystream generator 89 that is used to decode an encoded image. Thekeystream generator 89 is one of a class of pseudo-random-sequence generators known as a linear feedback shift register (LFSR). TheLFSR 89 includes two components: ashift register 91 and afeedback function 93. With each shifting of theshift register 91, a new most-significant bit 94 is output as part of the keystream, and aninput bit 95 is inserted at the beginning of theshift register 91. In one embodiment, the shift register is shifted in response to a control signal (e.g., fromcontrol logic 65 of FIG. 4) that is asserted with each new program code value received. Other clocking sources may be used to shift the contents ofshift register 91 in alternative embodiments. - The
feedback function 93 is typically an exclusive-or combination of bits at selected bit positions of theshift register 91. These selected bit positions are referred to as taps. By appropriate selection of the taps, theLFSR 89 can be made to output a keystream that does not repeat until after 2 n−1 key bits have been generated, n being the number of bits in theshift register 91. In alternate embodiments, other circuits may be used to generate the keystream, including, but not limited to, combinations of LFSRs in which the output of one or more LFSRs are logically combined, used to select between outputs of other LFSRs, used to clock other LFSRs, and so forth. - According to one embodiment, a single bitstream generated by a
keystream generator 89 is applied to decode a sequence of program code values. A single bit output by thekeystream generator 89 may be applied to each bit of a program code word so that a word filled with all 1's or all 0's would be used to decode each word of program code. This is shown in FIG. 6 by the exclusive-or combination (element 86) of the most significant bit of theshift register 91 with each of the N-bits of a word of incoming program code. Alternatively, the keystream generator may be clocked so that N bits of the keystream are generated and respectively applied to each of the N-bits of an encoded word of program code. For example, each of the bits in an N-shift register could be respectively applied to the N-bits of an encoded word of program code. The shift register would then be clocked (i.e., shifted) N times to generate a new N-bit keyword for application to the next word of program code. - In another embodiment, N separate bitstreams may be generated by a keystream generator to produce a keyword made up of N different key bits. This may be accomplished, for example by providing N differently designed LFSR circuits that operate in parallel to generate the N-bit keyword, or by providing N identically designed LFSR circuits that are seeded differently (e.g., the shift registers of the individual LFSRs may be initialized to different values).
- According to yet another embodiment, a transfer protocol may be defined in which one or more predetermined values are appended to the beginning of a program code sequence to seed the LFSR circuits. When the seed value prefix is received in the non-volatile memory, the seed values act to initialize the keystream generator to a predetermined state before the output of the keystream generator is applied to the succeeding program values. Logic may be included in the decoding logic to suppress storage of the seed values in the non-volatile storage array or the starting address at which the program code is to be stored may be adjusted to account for storage of the seed values.
- Another non-volatile memory device comprises storage elements, reading circuitry to retrieve encoded data from the storage elements and to output the data on a data path, and decoding circuitry coupled to the reading circuitry to decode the encoded data retrieved from the storage elements before the reading circuitry outputs the data on the data path.
- A sequence of encoded values is stored in storage elements of a non-volatile memory device. The encoded sequence of values is retrieved from the storage elements in response to a read request. The encoded sequence of values is decoded in a decoding circuit within the non-volatile memory device to generate a sequence of decoded values. The sequence of decoded values is output.
- In the foregoing specification, the invention has been described with reference to specific exemplary embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention as set forth in the appended claims. The specification and drawings are, accordingly to be regarded in an illustrative rather than a restrictive sense.
Claims (53)
1. A method comprising the steps of:
receiving a sequence of encoded values in a non-volatile memory device;
decoding the sequence of encoded values in a decoding circuit within the non-volatile memory device to generate a sequence of decoded values; and
storing the sequence of decoded values in the non-volatile memory device.
2. The method of claim 1 further comprising the step of encoding a sequence of processor instructions to generate the sequence of encoded values.
3. The method of claim 2 wherein the step of encoding a sequence of processor instructions includes the step of encoding Basic Input/Output Services (BIOS) program code, the BIOS program code including program code for booting a computer system.
4. The method of claim 2 wherein the step of encoding a sequence of processor instructions includes the step of logically combining the sequence of processor instructions with a sequence of values generated by a first sequence generator.
5. The method of claim 4 wherein the step of logically combining includes the step of combining the sequence of processor instructions with the sequence of values generated by the sequence generator in one or more exclusive OR operations.
6. The method of claim 4 wherein the step of decoding the sequence of encoded values includes the step of logically combining the sequence of encoded values with a sequence of values generated by a second sequence generator.
7. The method of claim 6 wherein the sequence of values generated by the second sequence generator is the same as the sequence of values generated by the first sequence generator.
8. The method of claim 1 wherein the non-volatile memory device is an electrically erasable, programmable read-only memory (EEPROM).
9. The method of claim 8 wherein the EEPROM is a flash EEPROM.
10. A non-volatile memory device comprising:
storage elements;
writing circuitry to receive encoded data from a data path and to store the data in the storage elements; and
decoding circuitry coupled to the writing circuitry to decode the encoded data received from the data path before the writing circuitry stores the data in the storage elements.
11. The non-volatile memory device of claim 10 wherein the decoding circuitry includes:
a sequence generator to generate a sequence of values; and
logic to combine the sequence of values with the encoded data to decode the encoded data.
12. The non-volatile memory device of claim 11 wherein the sequence generator is a pseudo-random sequence generator.
13. The non-volatile memory device of claim 11 wherein the logic to combine the sequence of values includes logic to combine the sequence of values with the encoded data received from the data path in one or more exclusive OR operations.
14. The non-volatile memory device of claim 10 wherein the encoded data is encoded program code.
15. The non-volatile memory device of claim 10 wherein the non-volatile memory device is a flash electrically erasable, programmable read-only memory (flash EPROM).
16. An apparatus comprising:
storage means for storing data;
writing means for receiving encoded data from a data path and storing the data in the storage means; and
decoding means coupled to the writing means for decoding the data received from the data path before the writing means stores the data in the storage means.
17. The apparatus of claim 16 wherein the decoding means includes:
means for generating a sequence of values; and
means for combining the sequence of values with the encoded data to decode the encoded data.
18. A computer system comprising:
a processor;
a datapath coupled to the processor and
a flash electrically erasable, programmable read-only memory (flash EPROM) coupled to the datapath, the flash EPROM including
storage elements,
writing circuitry to receive encoded data from the processor via the data path and to store the data in the storage elements, and
decoding circuitry coupled to the writing circuitry to decode the encoded data received from the processor before the writing circuitry stores the data in the storage elements.
19. The computer system of claim 18 wherein the decoding circuitry includes:
a sequence generator to generate a sequence of values; and
logic to combine the sequence of values with the encoded data to decode the encoded data.
20. A method comprising the steps of:
storing a sequence of encoded values in storage elements of a non-volatile memory device;
retrieving the encoded sequence of values from the storage elements in response to a read request;
decoding the encoded sequence of values in a decoding circuit within the non-volatile memory device to generate a sequence of decoded values; and
outputting the sequence of decoded values.
21. A non-volatile memory device comprising: storage elements;
reading circuitry to retrieve encoded data from the storage elements and to output the data on a data path; and
decoding circuitry coupled to the reading circuitry to decode the encoded data retrieved from the storage elements before the reading circuitry outputs the data on the data path.
22. A method comprising:
receiving an encoded sequence of values by a non-volatile memory device;
storing the encoded sequence of values in the non-volatile memory device; and
decoding the stored encoded sequence of values by the non-volatile memory device.
23. The method of claim 22 , wherein the receiving comprises receiving encoded program code.
24. The method of claim 22 , wherein the receiving comprises receiving encoded basic input/output system (BIOS) program code.
25. The method of claim 22 , comprising encoding a sequence of values to generate the encoded sequence of values.
26. The method of claim 25 , wherein the encoding comprises combining the sequence of values and another sequence of values.
27. The method of claim 26 , wherein the combining comprises performing an exclusive-OR operation.
28. The method of claim 22 , wherein the decoding comprises combining values of the stored encoded sequence of values and another sequence of values.
29. The method of claim 28 , wherein the combining comprises performing an exclusive-OR operation.
30. The method of claim 22 , wherein the decoding comprises combining values of the stored encoded sequence of values and another sequence of values used to generate the stored encoded sequence of values.
31. The method of claim 22 , wherein the decoding comprises retrieving the stored encoded sequence of values in response to a read request and decoding the retrieved encoded sequence of values.
32. The method of claim 22 , wherein the non-volatile memory device comprises an electrically erasable, programmable read-only memory (EEPROM) device.
33. The method of claim 22 , wherein the non-volatile memory device comprises a flash electrically erasable, programmable read-only memory (EEPROM) device.
34. An apparatus comprising:
non-volatile storage elements;
circuitry to store an encoded sequence of values in the non-volatile storage elements; and
circuitry to decode the stored encoded sequence of values.
35. The apparatus of claim 34 , wherein the encoded sequence of values comprises encoded program code.
36. The apparatus of claim 34 , wherein the encoded sequence of values comprises encoded basic input/output system (BIOS) program code.
37. The apparatus of claim 34 , wherein the circuitry to decode comprises a sequence generator to generate another sequence of values and circuitry to combine the generated sequence of values and values of the stored encoded sequence of values.
38. The apparatus of claim 37 , wherein the sequence generator comprises a pseudo-random sequence generator.
39. The apparatus of claim 37 , wherein the circuitry to combine comprises an exclusive-OR gate.
40. The apparatus of claim 37 , the sequence generator to generate another sequence of values used to generate the encoded sequence of values.
41. The apparatus of claim 34 , comprising circuitry to retrieve the stored encoded sequence of values from the non-volatile storage elements in response to a read request.
42. The apparatus of claim 34 , wherein the non-volatile storage elements comprise electrically erasable, programmable read-only memory (EEPROM) storage elements.
43. The apparatus of claim 34 , wherein the non-volatile storage elements comprise flash electrically erasable, programmable read-only memory (EEPROM) storage elements.
44. A system comprising:
a processor;
a datapath coupled to the processor; and
a non-volatile memory device coupled to the datapath, the non-volatile memory device comprising non-volatile storage elements, circuitry to store in the non-volatile storage elements an encoded sequence of values received from the processor, and circuitry to decode the stored encoded sequence of values.
45. The system of claim 44 , wherein the encoded sequence of values comprises encoded program code.
46. The system of claim 44 , wherein the encoded sequence of values comprises encoded basic input/output system (BIOS) program code.
47. The system of claim 44 , wherein the circuitry to decode comprises a sequence generator to generate another sequence of values and circuitry to combine the generated sequence of values and values of the stored encoded sequence of values.
48. The system of claim 47 , wherein the sequence generator comprises a pseudo-random sequence generator.
49. The system of claim 47 , wherein the circuitry to combine comprises an exclusive-OR gate.
50. The system of claim 47 , the sequence generator to generate another sequence of values used to generate the encoded sequence of values.
51. The system of claim 44 , comprising circuitry to retrieve the stored encoded sequence of values from the non-volatile storage elements in response to a read request.
52. The system of claim 44 , wherein the non-volatile storage elements comprise electrically erasable, programmable read-only memory (EEPROM) storage elements.
53. The system of claim 44 , wherein the non-volatile storage elements comprise flash electrically erasable, programmable read-only memory (EEPROM) storage elements.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/113,506 US20020108045A1 (en) | 1999-01-22 | 2002-03-29 | Preventing unauthorized updates to a non-volatile memory |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/235,959 US6408387B1 (en) | 1999-01-22 | 1999-01-22 | Preventing unauthorized updates to a non-volatile memory |
US10/113,506 US20020108045A1 (en) | 1999-01-22 | 2002-03-29 | Preventing unauthorized updates to a non-volatile memory |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/235,959 Division US6408387B1 (en) | 1999-01-22 | 1999-01-22 | Preventing unauthorized updates to a non-volatile memory |
Publications (1)
Publication Number | Publication Date |
---|---|
US20020108045A1 true US20020108045A1 (en) | 2002-08-08 |
Family
ID=22887562
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/235,959 Expired - Lifetime US6408387B1 (en) | 1999-01-22 | 1999-01-22 | Preventing unauthorized updates to a non-volatile memory |
US10/113,506 Abandoned US20020108045A1 (en) | 1999-01-22 | 2002-03-29 | Preventing unauthorized updates to a non-volatile memory |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/235,959 Expired - Lifetime US6408387B1 (en) | 1999-01-22 | 1999-01-22 | Preventing unauthorized updates to a non-volatile memory |
Country Status (1)
Country | Link |
---|---|
US (2) | US6408387B1 (en) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030200454A1 (en) * | 2002-04-18 | 2003-10-23 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US20060212858A1 (en) * | 2005-03-15 | 2006-09-21 | Mitsuhisa Kamei | Computer readable medium on which is stored a program for preventing the unauthorized use of program data |
US20080175381A1 (en) * | 2004-07-15 | 2008-07-24 | International Business Machines Corporation | E-fuses for storing security version data |
US20090125985A1 (en) * | 2007-11-14 | 2009-05-14 | Traenkenschuh John L | Verifying electronic control unit code |
US20090126028A1 (en) * | 2007-11-14 | 2009-05-14 | Traenkenschuh John L | Securing electronic control unit code |
US20120191901A1 (en) * | 2011-01-21 | 2012-07-26 | John Peter Norair | Method and apparatus for memory management |
US8843693B2 (en) | 2011-05-17 | 2014-09-23 | SanDisk Technologies, Inc. | Non-volatile memory and method with improved data scrambling |
US8929961B2 (en) | 2011-07-15 | 2015-01-06 | Blackbird Technology Holdings, Inc. | Protective case for adding wireless functionality to a handheld electronic device |
US9166894B2 (en) | 2011-03-02 | 2015-10-20 | Blackbird Technology Holdings, Inc. | Method and apparatus for rapid group synchronization |
US9357425B2 (en) | 2010-10-06 | 2016-05-31 | Blackbird Technology Holdings, Inc. | Method and apparatus for adaptive searching of distributed datasets |
US9379808B2 (en) | 2010-10-06 | 2016-06-28 | Blackbird Technology Holdings, Inc. | Method and apparatus for low-power, long-range networking |
US9817641B1 (en) * | 2009-02-04 | 2017-11-14 | Sprint Communications Company L.P. | Facilitating application development using protected components |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW452733B (en) * | 1999-11-26 | 2001-09-01 | Inventec Corp | Method for preventing BIOS from viruses infection |
US6711675B1 (en) * | 2000-02-11 | 2004-03-23 | Intel Corporation | Protected boot flow |
US7039814B2 (en) * | 2001-03-07 | 2006-05-02 | Sony Corporation | Method for securing software via late stage processor instruction decryption |
US20030135744A1 (en) * | 2002-01-11 | 2003-07-17 | International Business Machines Corporation | Method and system for programming a non-volatile device in a data processing system |
US20050213768A1 (en) * | 2004-03-24 | 2005-09-29 | Durham David M | Shared cryptographic key in networks with an embedded agent |
US7653727B2 (en) * | 2004-03-24 | 2010-01-26 | Intel Corporation | Cooperative embedded agents |
US7594269B2 (en) * | 2004-10-29 | 2009-09-22 | Intel Corporation | Platform-based identification of host software circumvention |
US7739517B2 (en) * | 2005-03-31 | 2010-06-15 | Intel Corporation | Hardware-based authentication of a software program |
US7330328B2 (en) * | 2006-02-17 | 2008-02-12 | Seagate Technology Llc | Random number generation using back electromotive force (BEMF) values |
DE112006004173T5 (en) * | 2006-12-15 | 2009-11-12 | Agere Systems, Inc. | Protecting a programmable memory against unauthorized modification |
US8548263B2 (en) * | 2011-01-19 | 2013-10-01 | Microsoft Corporation | Delayed image decoding |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4694412A (en) * | 1982-09-22 | 1987-09-15 | Intel Corporation | Random number generator for use in an authenticated read-only memory |
US5778070A (en) * | 1996-06-28 | 1998-07-07 | Intel Corporation | Method and apparatus for protecting flash memory |
US5835594A (en) * | 1996-02-09 | 1998-11-10 | Intel Corporation | Methods and apparatus for preventing unauthorized write access to a protected non-volatile storage |
US5844986A (en) * | 1996-09-30 | 1998-12-01 | Intel Corporation | Secure BIOS |
US6026016A (en) * | 1998-05-11 | 2000-02-15 | Intel Corporation | Methods and apparatus for hardware block locking in a nonvolatile memory |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525599A (en) * | 1982-05-21 | 1985-06-25 | General Computer Corporation | Software protection methods and apparatus |
US4562306A (en) * | 1983-09-14 | 1985-12-31 | Chou Wayne W | Method and apparatus for protecting computer software utilizing an active coded hardware device |
US6028445A (en) * | 1997-12-30 | 2000-02-22 | Xilinx, Inc. | Decoder structure and method for FPGA configuration |
-
1999
- 1999-01-22 US US09/235,959 patent/US6408387B1/en not_active Expired - Lifetime
-
2002
- 2002-03-29 US US10/113,506 patent/US20020108045A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4694412A (en) * | 1982-09-22 | 1987-09-15 | Intel Corporation | Random number generator for use in an authenticated read-only memory |
US5835594A (en) * | 1996-02-09 | 1998-11-10 | Intel Corporation | Methods and apparatus for preventing unauthorized write access to a protected non-volatile storage |
US5778070A (en) * | 1996-06-28 | 1998-07-07 | Intel Corporation | Method and apparatus for protecting flash memory |
US5844986A (en) * | 1996-09-30 | 1998-12-01 | Intel Corporation | Secure BIOS |
US6026016A (en) * | 1998-05-11 | 2000-02-15 | Intel Corporation | Methods and apparatus for hardware block locking in a nonvolatile memory |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003090402A1 (en) * | 2002-04-18 | 2003-10-30 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US20040083375A1 (en) * | 2002-04-18 | 2004-04-29 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US6957335B2 (en) | 2002-04-18 | 2005-10-18 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US7356707B2 (en) * | 2002-04-18 | 2008-04-08 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US20030200454A1 (en) * | 2002-04-18 | 2003-10-23 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US20080175381A1 (en) * | 2004-07-15 | 2008-07-24 | International Business Machines Corporation | E-fuses for storing security version data |
US20080310622A1 (en) * | 2004-07-15 | 2008-12-18 | International Business Machines | E-fuses for storing security version data |
US8042176B2 (en) * | 2005-03-15 | 2011-10-18 | Fuji Xerox Co., Ltd. | Computer readable medium on which is stored a program for preventing the unauthorized use of program data |
US20060212858A1 (en) * | 2005-03-15 | 2006-09-21 | Mitsuhisa Kamei | Computer readable medium on which is stored a program for preventing the unauthorized use of program data |
US8321933B2 (en) * | 2007-11-14 | 2012-11-27 | Caterpillar Inc. | Securing electronic control unit code |
US20090126028A1 (en) * | 2007-11-14 | 2009-05-14 | Traenkenschuh John L | Securing electronic control unit code |
US20090125985A1 (en) * | 2007-11-14 | 2009-05-14 | Traenkenschuh John L | Verifying electronic control unit code |
US8484752B2 (en) | 2007-11-14 | 2013-07-09 | Caterpillar Inc. | Verifying authenticity of electronic control unit code |
US9817641B1 (en) * | 2009-02-04 | 2017-11-14 | Sprint Communications Company L.P. | Facilitating application development using protected components |
US9357425B2 (en) | 2010-10-06 | 2016-05-31 | Blackbird Technology Holdings, Inc. | Method and apparatus for adaptive searching of distributed datasets |
US9379808B2 (en) | 2010-10-06 | 2016-06-28 | Blackbird Technology Holdings, Inc. | Method and apparatus for low-power, long-range networking |
US9104548B2 (en) * | 2011-01-21 | 2015-08-11 | Blackbird Technology Holdings, Inc. | Method and apparatus for memory management |
US20120191901A1 (en) * | 2011-01-21 | 2012-07-26 | John Peter Norair | Method and apparatus for memory management |
US9166894B2 (en) | 2011-03-02 | 2015-10-20 | Blackbird Technology Holdings, Inc. | Method and apparatus for rapid group synchronization |
US9325634B2 (en) | 2011-03-02 | 2016-04-26 | Blackbird Technology Holdings, Inc. | Method and apparatus for adaptive traffic management in a resource-constrained network |
US9414342B2 (en) | 2011-03-02 | 2016-08-09 | Blackbird Technology Holdings, Inc. | Method and apparatus for query-based congestion control |
US8843693B2 (en) | 2011-05-17 | 2014-09-23 | SanDisk Technologies, Inc. | Non-volatile memory and method with improved data scrambling |
US8929961B2 (en) | 2011-07-15 | 2015-01-06 | Blackbird Technology Holdings, Inc. | Protective case for adding wireless functionality to a handheld electronic device |
US9425847B2 (en) | 2011-07-15 | 2016-08-23 | Blackbird Technology Holdings, Inc. | Protective case for adding wireless functionality to a handheld electronic device |
Also Published As
Publication number | Publication date |
---|---|
US6408387B1 (en) | 2002-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6408387B1 (en) | Preventing unauthorized updates to a non-volatile memory | |
US9762399B2 (en) | System and method for validating program execution at run-time using control flow signatures | |
US9767271B2 (en) | System and method for validating program execution at run-time | |
US6160734A (en) | Method for ensuring security of program data in one-time programmable memory | |
CN110502932B (en) | Processing system, related integrated circuit and method | |
US6223284B1 (en) | Method and apparatus for remote ROM flashing and security management for a computer system | |
US8719595B2 (en) | Semiconductor device including encryption section, semiconductor device including external interface, and content reproduction method | |
EP2854066B1 (en) | System and method for firmware integrity verification using multiple keys and OTP memory | |
RU2541196C2 (en) | Method of providing software integrity | |
US20090204803A1 (en) | Handling of secure storage key in always on domain | |
WO1999059288A1 (en) | A method and apparatus for hardware block locking in a nonvolatile memory | |
JP2002025278A (en) | Semiconductor storage device | |
US20090193261A1 (en) | Apparatus and method for authenticating a flash program | |
US20170170969A1 (en) | Systems, methods, software, and components using tamper-proof real-time clock | |
JP2003521034A (en) | Microprocessor system and method of operating the same | |
US8397081B2 (en) | Device and method for securing software | |
Milenković et al. | Using instruction block signatures to counter code injection attacks | |
EP1465038B1 (en) | Memory security device for flexible software environment | |
US20080086781A1 (en) | Method and system for glitch protection in a secure system | |
US20090204801A1 (en) | Mechanism for secure download of code to a locked system | |
CN113626791A (en) | Memory module authentication extensions | |
US20230400996A1 (en) | Apparatus, Device, and Method for a Memory Controller, Memory Controller, and System | |
JP2002055725A (en) | Bios chip for managing code and method for managing the same code | |
JP2013073472A (en) | Microcomputer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |