I'm tasked with creating database tables in Oracle which contain encrypted strings (i.e., the columns are RAW). The strings are encrypted by the application (using AES, 128-bit key) and stored in Oracle, then later retrieved from Oracle and decrypted (i.e., Oracle itself never sees the unencrypted strings).
I've come across this one column that will be one of two strings. I'm worried that someone will notice and presumably figure out what those two values to figure out the AES key.
For example, if someone sees that the column is either Ciphertext #1 or #2:
- Ciphertext #1:
- BF,4F,8B,FE, 60,D8,33,56, 1B,F2,35,72, 49,20,DE,C6.
- Ciphertext #2:
- BC,E8,54,BD, F4,B3,36,3B, DD,70,76,45, 29,28,50,07.
and knows the corresponding Plaintexts:
- Plaintext #1 ("Detroit"):
- 44,00,65,00, 74,00,72,00, 6F,00,69,00, 74,00,00,00.
- Plaintext #2 ("Chicago"):
- 43,00,68,00, 69,00,63,00, 61,00,67,00, 6F,00,00,00.
can he deduce that the encryption key is "Buffalo"?
- 42,00,75,00, 66,00,66,00, 61,00,6C,00, 6F,00,00,00.
I'm thinking that there should be only one 128-bit key that could convert Plaintext #1 to Ciphertext #1. Does this mean I should go to a 192-bit or 256-bit key instead, or find some other solution?
(As an aside, here are two other ciphertexts for the same plaintexts but with a different key.)
- Ciphertext #1 A ("Detroit"):
- E4,28,29,E3, 6E,C2,64,FA, A1,F4,F4,96, FC,18,4A,C5.
- Ciphertext #2 A ("Chicago"):
- EA,87,30,F0, AC,44,5D,ED, FD,EB,A8,79, 83,59,53,B7.
[Related question: When using AES and CBC, can the IV be a hash of the plaintext?]