Offline private key protocol

The Offline Private Key Protocol (OPKP) is a cryptographic protocol to prevent unauthorized access to back up or archive data. The protocol results in a public key that can be used to encrypt data and an offline private key that can later be used to decrypt that data.

The protocol is based on three rules regarding the key. An offline private key should:
 * not be stored with the encrypted data (obviously)
 * not be kept by the organization that physically stores the encrypted data, to ensure privacy
 * not be stored at the same system as the original data, to avoid the possibility that theft of only the private key would give access to all data at the storage provider; and to avoid that when the key would be needed to restore a backup, the key would be lost together with the data loss that made the restore necessary in the first place

To comply with these rules, the offline private key protocol uses a method of asymmetric key wrapping.

Security
As the protocol does not provide rules on the strength of the encryption methods and keys to be used, the security of the protocol depends on the actual cryptographic implementation. When used in combination with strong encryption methods, the protocol can provide extreme security.

Operation
Initially:
 * 1) a client program (program) on a system (local system) with data to back up or archive generates a random private key PRIV
 * 2) program creates a public key PUB based on PRIV
 * 3) program stores PUB on the local system
 * 4) program presents PRIV to user who can store the key, e.g. printed as a trusted paper key, or on a memory card
 * 5) program destroys PRIV on the local system

When archiving or creating a backup, for each session or file:
 * 1) program generates a one-time random key OTRK
 * 2) program encrypts data using OTRK and a symmetric encryption method
 * 3) program encrypts the (optionally padded) key OTRK using PUB to OTRKCR
 * 4) program stores the OTRKCR and the encrypted data to a server
 * 5) program destroys OTRK on the local system
 * 6) program destroys OTRKCR on the local system
 * 7) the server stores OTRKCR and stores the encrypted data

To restore backed up or archived data:
 * 1) user feeds PRIV into program
 * 2) program downloads data with the respective OTRKCR
 * 3) program decrypts OTRKCR using PRIV, giving OTRK
 * 4) program decrypts data using OTRK
 * 5) program destroys PRIV on the local system