Patent ID: 9594918
Date: 2017-03-14
CPC Classifications: G06F,H04L

Claim:
1. A method of operating a computer to protect digital data stored therein, comprising: in a first operation, receiving a first input password and applying a key derivation function to a first value of a function input to generate a first derived key as a first value of a function output, the first value of the function input being equal to or derived from the first input password, and combining by, a hardware processor, the first derived key with the digital data to generate a protected record stored in the computer; and in a subsequent second operation, receiving a second input password and applying the key derivation function to a second value of the function input to generate a second derived key as a second value of the function output, the second value of the function input being equal to or derived from the second input password, and processing the protected record using the second derived key to selectively permit user access to the digital data when the second derived key matches the first derived key; wherein applying the key derivation function includes performing a first predetermined number of iterations of a two-stage core hashing operation, a first stage of the core hashing operation including creating an ordered array of initialized memory blocks by recursive block hashing and saving beginning with a first memory block created by first hashing of a core input value, the ordered array including a last-created memory block and having a size equal to a second predetermined number of memory blocks, a second stage of the core hashing operation including creating a core output value by recursive block selecting and block hashing beginning with the last-created memory block, successive recursions selecting from among blocks of the ordered array of initialized memory blocks according to contents of respective hashed block results of respective immediately preceding recursions, the iterations of the two-stage core hashing operation including (1) a first iteration with the function input being taken as the core input value, (2) a last iteration with the core output value being taken as the function output, and (3) one or more intermediate iterations with the core input value being the core output value from a respective immediately preceding iteration and the core output value being the core input value to a respective immediately succeeding iteration.