A computer implemented method of providing an immutable chain of data blocks storing immutable data for subsequent access by third party data requesting entities, comprising: receiving (s.3.2), from a data providing client device, data to be stored in the immutable chain, the data to be stored having one or more data fields relating to individual items of data that have semantic meaning and that may be accessed individually, and at least one temporal specification field defining a date and/or time at which the individual items of data were generated; individually encrypting (s.3.6) the individual items of data with their own respective encryption keys, such that a different respective encryption key is used for different respective individual items of data received from the same data providing client device; encrypting (3.8) corresponding respective decryption keys to the respective encryption keys with a further encryption key; forming a data block (s.3.10) including the encrypted individual items of data and the encrypted respective decryption keys; and storing (s.3.12) the data block within the immutable chain of data blocks as a new block therein; the method further comprising: receiving (s.4.4) a data access request from a third party data requesting entity, the data access request defining the individual items of data that are required, and a temporal specification defining the temporal point or range at which the data is requested; searching (s.4.6) through the immutable chain to identify those data blocks that meet the temporal specification; accessing the identified data blocks to retrieve the encrypted respective decryption keys therein; decrypting the encrypted respective decryption keys; generating (4.8) a response message to the third party data requesting entity including information identifying the identified data blocks, and further including the respective decryption keys for the individual items of data that are requested; and sending (4.10) the response message to the third party data requesting entity. receiving (s.3.2), from a data providing client device, data to be stored in the immutable chain, the data to be stored having one or more data fields relating to individual items of data that have semantic meaning and that may be accessed individually, and at least one temporal specification field defining a date and/or time at which the individual items of data were generated; individually encrypting (s.3.6) the individual items of data with their own respective encryption keys, such that a different respective encryption key is used for different respective individual items of data received from the same data providing client device; encrypting (3.8) corresponding respective decryption keys to the respective encryption keys with a further encryption key; forming a data block (s.3.10) including the encrypted individual items of data and the encrypted respective decryption keys; and storing (s.3.12) the data block within the immutable chain of data blocks as a new block therein; the method further comprising: receiving (s.4.4) a data access request from a third party data requesting entity, the data access request defining the individual items of data that are required, and a temporal specification defining the temporal point or range at which the data is requested; searching (s.4.6) through the immutable chain to identify those data blocks that meet the temporal specification; accessing the identified data blocks to retrieve the encrypted respective decryption keys therein; decrypting the encrypted respective decryption keys; generating (4.8) a response message to the third party data requesting entity including information identifying the identified data blocks, and further including the respective decryption keys for the individual items of data that are requested; and sending (4.10) the response message to the third party data requesting entity. receiving (s.4.4) a data access request from a third party data requesting entity, the data access request defining the individual items of data that are required, and a temporal specification defining the temporal point or range at which the data is requested; searching (s.4.6) through the immutable chain to identify those data blocks that meet the temporal specification; accessing the identified data blocks to retrieve the encrypted respective decryption keys therein; decrypting the encrypted respective decryption keys; generating (4.8) a response message to the third party data requesting entity including information identifying the identified data blocks, and further including the respective decryption keys for the individual items of data that are requested; and sending (4.10) the response message to the third party data requesting entity.