A method of controlling access to a resource via a computing device, the computing device comprising: a memory storing a first set of data and a second set of data, the first set of data being encrypted using a first key, and the second set of data being different from the first set of data; and a code value generator configured to generate a sequence of code values, wherein the first set of data comprises a second key, and said second set of data comprises at least a first encrypted version of the first key, the first encrypted version of the first key having been encrypted at least partly on the basis of a first one of said sequence of code values and said second key, the method comprising: receiving, at the computing device, a first input, and providing a first code value on the basis of the first input; performing a first decryption process at least partly on the basis of the first code value, the first decryption process comprising decryption of said first encrypted version of the first key; and responsive to successful decryption of said first encrypted version of the first key: performing a second decryption process, the second decryption process being performed on the basis of the first key decrypted during the first decryption process, wherein the second decryption process comprises decryption of at least some of said first set of data; providing access to said resource on the basis of the first key decrypted during the first decryption process; in response to said decryption of at least some of said first set of data, providing at least a second encrypted version of said first key, said second encrypted version of said first key having been encrypted at least partly on the basis of a second one of said sequence of code values and said second key; and storing said second encrypted version of said first key in said memory as data of said second set of data. a memory storing a first set of data and a second set of data, the first set of data being encrypted using a first key, and the second set of data being different from the first set of data; and a code value generator configured to generate a sequence of code values, wherein the first set of data comprises a second key, and said second set of data comprises at least a first encrypted version of the first key, the first encrypted version of the first key having been encrypted at least partly on the basis of a first one of said sequence of code values and said second key, the method comprising: receiving, at the computing device, a first input, and providing a first code value on the basis of the first input; performing a first decryption process at least partly on the basis of the first code value, the first decryption process comprising decryption of said first encrypted version of the first key; and responsive to successful decryption of said first encrypted version of the first key: performing a second decryption process, the second decryption process being performed on the basis of the first key decrypted during the first decryption process, wherein the second decryption process comprises decryption of at least some of said first set of data; providing access to said resource on the basis of the first key decrypted during the first decryption process; in response to said decryption of at least some of said first set of data, providing at least a second encrypted version of said first key, said second encrypted version of said first key having been encrypted at least partly on the basis of a second one of said sequence of code values and said second key; and storing said second encrypted version of said first key in said memory as data of said second set of data. receiving, at the computing device, a first input, and providing a first code value on the basis of the first input; performing a first decryption process at least partly on the basis of the first code value, the first decryption process comprising decryption of said first encrypted version of the first key; and responsive to successful decryption of said first encrypted version of the first key: performing a second decryption process, the second decryption process being performed on the basis of the first key decrypted during the first decryption process, wherein the second decryption process comprises decryption of at least some of said first set of data; providing access to said resource on the basis of the first key decrypted during the first decryption process; in response to said decryption of at least some of said first set of data, providing at least a second encrypted version of said first key, said second encrypted version of said first key having been encrypted at least partly on the basis of a second one of said sequence of code values and said second key; and storing said second encrypted version of said first key in said memory as data of said second set of data. performing a second decryption process, the second decryption process being performed on the basis of the first key decrypted during the first decryption process, wherein the second decryption process comprises decryption of at least some of said first set of data; providing access to said resource on the basis of the first key decrypted during the first decryption process; in response to said decryption of at least some of said first set of data, providing at least a second encrypted version of said first key, said second encrypted version of said first key having been encrypted at least partly on the basis of a second one of said sequence of code values and said second key; and storing said second encrypted version of said first key in said memory as data of said second set of data.