Patent ID: 8712049

Claim:
A system for implementing dynamic pseudorandom keyboard remapping, comprising: a keyboard in communication with an operating system of a computing device; the operating system configured to send an initial pseudorandom number generator (PRNG) seed value, x 0 , to the keyboard, and to determine whether a response to the initial PRNG seed value x 0 is received from the keyboard by the operating system, and in the event a response is received, the operating system is configured to send a selected PRNG algorithm, f(x), to the keyboard; the keyboard configured to apply the selected PRNG algorithm f(x) to the initial PRNG seed value x 0 so as to generate a first pseudorandomly generated value, x 1 , responsive to a first keystroke received by the keyboard; the keyboard further configured to encrypt an original keyboard scan code corresponding to each of a plurality of keyboard keys, using a mapping algorithm, wherein the mapping algorithm encrypts the original keyboard scan code by using both the original keyboard scan code and the first pseudorandomly generated value, x 1 , and transmits an encrypted scan code to the operating system such that each keystroke is encrypted with a different decodable remapping function; and the operating system further configured to decrypt the original keyboard scan code from the encrypted scan code generated by the keyboard, wherein the operating system also uses the same mapping algorithm used by the keyboard, the same PRNG algorithm f(x) sent to and used by the keyboard, and the same initial seed value x 0 sent to and used by the keyboard; wherein the keyboard is further configured to, for each subsequent keystroke received by the keyboard following the first keystroke, generate subsequent pseudorandom numbers using the selected PRNG algorithm f(x) and a previous generated pseudorandom number in accordance with the expression f(x[n])=x[n+1], wherein the mapping algorithm encrypts the original keyboard scan code by using both the original keyboard scan code and a current one of the subsequent pseudorandom numbers.