Alice operates an online service that stores user data on a cloud-based database. Alice is worried about the possibility of someone making off with the database, so wants to encrypt certain data to ensure recovery in that eventuality is impossible.
Alice is mainly concerned about data that are sensitive in their own right, such as those that identify an individual, or are tokens such as CC numbers.
- Social security numbers
- Addresses of residence
- Phone numbers
- Credit card numbers
Alice knows chosen-plaintext attacks are a concern, so uses a per-user key to prevent an attacker from loading the database with known-plaintexts.
However, Alice thinks ciphertext indistinguishability is a non-issue because knowing two ciphertexts equal doesn't usually lead to knowing the actual plaintext.
Is Alice safe in assuming data benefits from this kind of encryption and is secure from cryptography? (i.e. Wholesale data breach.)
One problem I can think of is:
- If a user's phone number and credit card number are coincidentally identical, attacker can gleam this information from the encrypted database. They then only need to obtain the former to also get the latter.
- If the first 16 bytes of the user's address is somehow identical to their social security number, again, the attacker can determine this from the encrypted database.
Are there any other problems?
Furthermore, is using
AES-CBC this way any safer than using