1. A method of storing digital data, comprising: partitioning the data into portions; taking a first hash of a first portion; taking a one-way function value of the first hash; comparing the one-way function value to an index of previously stored data portions; if the one-way function value is found in the index, updating the index; if the one-way function value is not found, encrypting the first portion using the first hash as a key; storing the encrypted first portion in storage; updating the index with an entry including the one-way function value and a location of the encrypted first portion in the storage; and repeating the method for a second portion of the data.