A method of generating an encryption key, the method comprising, running at a user device, a computer program, which controls the user device to: collect a plurality of environmental variables associated with varying environmental conditions (S302, 602) to which the user device is exposed; collect a plurality of further variables (S301, 501, 601) said further variables comprising one of: values physically input by a user to the user device; values generated by a server based on information previously provided by a user or by randomly generated data; define parameters of a plurality of scrambling functions using the further variables (S303, 603); calculate a plurality of scramble values, each scramble value comprising a combination of the environmental variables combined in accordance with one of the plurality of scrambling functions (S304, 604); combine the scramble values to produce a scramble code (S305, 605); generate the encryption key from the scramble code (S306, 606); and collect a plurality of new environmental variables; calculate a plurality of new scramble values, each new scramble value comprising a combination of the new environmental variables combined in accordance with one of the plurality of scrambling functions; combine the new scramble values to produce a new scramble code; and generate a new encryption key from the new scramble code and wherein each scrambling function uses an encryption grid such that prior to combination of the environmental variables, at least one environmental variable is translated from a first value to a second value using the encryption grid, each encryption grid populated with a series of values defined by one or more of the user input variables. collect a plurality of environmental variables associated with varying environmental conditions (S302, 602) to which the user device is exposed; collect a plurality of further variables (S301, 501, 601) said further variables comprising one of: values physically input by a user to the user device; values generated by a server based on information previously provided by a user or by randomly generated data; define parameters of a plurality of scrambling functions using the further variables (S303, 603); calculate a plurality of scramble values, each scramble value comprising a combination of the environmental variables combined in accordance with one of the plurality of scrambling functions (S304, 604); combine the scramble values to produce a scramble code (S305, 605); generate the encryption key from the scramble code (S306, 606); and collect a plurality of new environmental variables; calculate a plurality of new scramble values, each new scramble value comprising a combination of the new environmental variables combined in accordance with one of the plurality of scrambling functions; combine the new scramble values to produce a new scramble code; and generate a new encryption key from the new scramble code and wherein each scrambling function uses an encryption grid such that prior to combination of the environmental variables, at least one environmental variable is translated from a first value to a second value using the encryption grid, each encryption grid populated with a series of values defined by one or more of the user input variables.