The following paper was distributed at the Key Escrow Encryption Meeting held on September 6-7, 1995 at NIST.
It is important to understand that key in this context is related to the number of bits needed to decrypt a message which are not available over the communications channel. For some encryption algorithms the key is defined to be a number of bits which are kept secret and a number of bits which are transmitted in the clear (message key / initialization vector / salt). This criterion only specifies the number of secret bits.
One way to do this would be for the encryption program to store the ciphertext file name and the first n (e.g. 16) bytes of cipher for the last k (e.g. 8) encryptions. When the encryption routine is called, the program checks to see if the input file name is in the ciphertext file list or the first n bytes of the file match any of the k cipher text streams stored. Likewise, a plaintext header could be appended to each ciphertext file which says the file is encrypted. The encryption program would look for this header before encryption; if found, the program would not proceed with the encryption. These are just examples of what could be done. Each vendor's constraints will be different.
One way of doing this is for each user to have a Public and Private Escrow Key. The public escrow key is bound in a certificate signed by the Escrow Agent(s). This certificate would contain a key ID, the escrow agents's ID and the Public Escrow key. A header of the encrypted message could contain this certificate along with the message key, encrypted using the Public Escrow key. If the product is not escrowed during manufacture, the software will check to see if it has a valid escrow key prior to encrypting messages.
Following the example for criterion #3, the certificate that contained the user's escrow key would also contain the identity of the escrow agents holding the corresponding private escrow key.
Probably the most important aspect of this criterion is that source code for a product should not be available. Also it is important that the cryptography be integrated into the application in some nontrivial way. One way of achieving this criterion is for the application to store a hash or checksum of the cryptographic code in several places and check the cryptographic code several times during its use. One can prevent a static patch by making the hash or checksums dependent on a program ID code or something else that is unique about that copy of the software. Perhaps one of the best ways to defeat hackers from "patching around" the escrow would be a commitment from vendors to make each new release of the software be immune to existing static patches and patch programs.
If one follows the steps outlined under criterion #3, a receiving program could verify the escrow certificate contained in the message header, extract the escrow public key, and verify that the encrypted message decryption key is also found in the header. If it is not there, decryption does not proceed.
The message header could contain the decryption key encrypted under both the sender's public escrow key and the recipient's public escrow key. Then access to either the sender's or recipient's private escrow key would allow access to the decryption key.
If the public and private escrow keys are unique to users, then the escrow agents could turn over the private escrow keys to the authorized parties. The private escrow key would allow access to keys encrypted with the corresponding public escrow key and not require repeated involvement with the escrow agents.
Following the example in criterion #3, the software could accept the load of a new escrow certificate. The software could store a "root" public key which is used to verify a certificate containing the escrow agent public key which in turn is used to sign the individual user's escrow certificate. Hence the header might contain both the escrow agent certificate signed by the root and the user certificate signed by the escrow agent(s). Once escrowed, the software could store the ID of the escrow agents and not accept loads of new escrow keys except from those agents.
Following the example in criterion #9, if the "root" authority only signed the certificates of escrow agents (foreign and domestic) approved by the U.S. Government then only keys escrowed by approved escrow agents will be accepted as valid by the software packages.