A method for provisioning a plurality of integrated circuits with confidential data in a system comprising a manufacturer, a customer and a programming facility, the method comprising: the manufacturer embedding a customer identifier and a master transport key during manufacture of each integrated circuit, wherein the integrated circuits share the customer identifier; the manufacturer deriving a transport key for each integrated circuit by applying a first key derivation function to the customer identifier using the master transport key, the manufacturer sending the transport key to the customer, wherein the customer does not know the master transport key and is not able to derive the transport key; the customer using the transport key to encrypt confidential data; the customer sending the encrypted confidential data to the programming facility; the programming facility providing the encrypted confidential data to at least one of the integrated circuits, wherein the programming facility does not have access to the transport key, the key derivation function or the master transport key; deriving, in each of the at least one integrated circuits, the transport key based on the customer identifier and the master transport key, and decrypting, in each of the at least one integrated circuits, the encrypted confidential data with the derived transport key to obtain decrypted confidential data, deriving, in each of the at least one integrated circuits, a unique product key by applying a second key derivation function to an integrated circuit identifier, wherein the integrated circuit identifier was previously stored in the integrated circuit and is unique for each integrated circuit, encrypting, in each of the at least one integrated circuits, the decrypted confidential data with the unique product key to obtain re-encrypted confidential data, and storing the re-encrypted confidential data in a confidential data memory of each of the at least one integrated circuits, wherein the confidential data memory is a one-time programmable memory. the manufacturer embedding a customer identifier and a master transport key during manufacture of each integrated circuit, wherein the integrated circuits share the customer identifier; the manufacturer deriving a transport key for each integrated circuit by applying a first key derivation function to the customer identifier using the master transport key, the manufacturer sending the transport key to the customer, wherein the customer does not know the master transport key and is not able to derive the transport key; the customer using the transport key to encrypt confidential data; the customer sending the encrypted confidential data to the programming facility; the programming facility providing the encrypted confidential data to at least one of the integrated circuits, wherein the programming facility does not have access to the transport key, the key derivation function or the master transport key; deriving, in each of the at least one integrated circuits, the transport key based on the customer identifier and the master transport key, and decrypting, in each of the at least one integrated circuits, the encrypted confidential data with the derived transport key to obtain decrypted confidential data, deriving, in each of the at least one integrated circuits, a unique product key by applying a second key derivation function to an integrated circuit identifier, wherein the integrated circuit identifier was previously stored in the integrated circuit and is unique for each integrated circuit, encrypting, in each of the at least one integrated circuits, the decrypted confidential data with the unique product key to obtain re-encrypted confidential data, and storing the re-encrypted confidential data in a confidential data memory of each of the at least one integrated circuits, wherein the confidential data memory is a one-time programmable memory.