A method for protecting data for access by a plurality of users. A server
encrypts data using a master key and a symmetric encryption algorithm.
For each authorized user, a key encryption key (KEK) is derived from a
passphrase, and the master key is encrypted using the KEK. The server
posts the encrypted data and an ancillary file that includes, for each
user, a user identifier and the master key encrypted according to the
user's KEK. To access the data, a user enters the passphrase into a
client, which re-derives the user's KEK, and finds, in the ancillary
file, the master key encrypted using the user's KEK. The client decrypts
the master key and then decrypts the data. A KEK may be derived from a
natural language passphrase by hashing the passphrase, concatenating the
result and a predetermined text, hashing the concatenation, and
truncating.