A method for providing private storage of data on a server within a network, wherein the storage is persistent, encrypted, and anonymous, to a user having a client computer connected to the network, comprising:
- (a) providing to the user a client application, the client application being configured to:
- generate a first encryption key and a first decryption key;
- encrypt the data using the first encryption key;
- generate a data object identifier;
- create a data object comprising the data object identifier and the encrypted data;
- write the data object identifier to a user object;
- write the first decryption key to the user object;
- generate a user object encryption key based on information private to the user and reproducible in future sessions by the user, in a manner such that the private information cannot practicably be derived from the user object encryption key;
- encrypt the user object with the user object encryption key;
- generate a user object identifier based on information private to the user and reproducible in future sessions by the user, in a manner such that the private information cannot practicably be derived from the user object identifier;
- associate the user object identifier with the user object;
- send the data object to the server;
- and
- send the user object and user object identifier to the server;
- (b) responsive to receiving the data object from the user, storing the data object in a database under the control of the server, using the data object identifier as a locator;
- and
- (c) responsive to receiving the user object from the user, storing the user object in the database, using the user object identifier as a locator.