A method for authenticating a user, comprising the steps of: at a server computer: generating a symbol arrangement; generating a series of a plurality of authentication instructions with associated human intelligible text representing the series of instructions and computer-executable code for performing the series of instructions on a machine, wherein at least some of the instructions relate to performing actions on the symbol arrangement and wherein applying the series of instructions on the symbol arrangement yields a non-ambiguous instruction series result; executing the computer-executable code for performing the series of instructions on a machine, thereby obtaining the instruction series result; and transmitting the symbol arrangement and the human intelligible text representing the series of instructions from the server computer to a user computer; at the user computer (110a, 110b, 110c, 110d, 110f): displaying the symbol arrangement and the human intelligible text representing the series of instructions on the display of the user computer; receiving a user input; and transmitting the result of the user input from the user computer to the server computer; at the server computer: comparing the received result of the user input with the instruction series result; and authenticating the user if the received result of the user input corresponds to the instruction series result. generating a symbol arrangement; generating a series of a plurality of authentication instructions with associated human intelligible text representing the series of instructions and computer-executable code for performing the series of instructions on a machine, wherein at least some of the instructions relate to performing actions on the symbol arrangement and wherein applying the series of instructions on the symbol arrangement yields a non-ambiguous instruction series result; executing the computer-executable code for performing the series of instructions on a machine, thereby obtaining the instruction series result; and performing the series of instructions on a machine, wherein at least some of the instructions relate to performing actions on the symbol arrangement and wherein applying the series of instructions on the symbol arrangement yields a non-ambiguous instruction series result; executing the computer-executable code for performing the series of instructions on a machine, thereby obtaining the instruction series result; and transmitting the symbol arrangement and the human intelligible text representing the series of instructions from the server computer to a user computer; at the user computer (110a, 110b, 110c, 110d, 110f): displaying the symbol arrangement and the human intelligible text representing the series of instructions on the display of the user computer; receiving a user input; and transmitting the result of the user input from the user computer to the server computer; at the server computer: comparing the received result of the user input with the instruction series result; and authenticating the user if the received result of the user input corresponds to the instruction series result. comparing the received result of the user input with the instruction series result; and authenticating the user if the received result of the user input corresponds to the instruction series result.