Mal angenommen du würdest die Blobs auf dem Client mit AES256 verschlüsseln.
AES gibt es mit 128, 192 und 256 Bit - das entspricht einer Schlüssellänge von 8, 12 oder 16 Bytes.
Dann würde ich den Key für AES so berechnen:
key := SHA256(password+tabellenname+primaryschluesselfeld);
Somit erhält jeder einzelne Blob einen eigenen Schlüssel.
Ein Angreifer könnte z.B. einen Blob aus einem best. Record kopieren und in einen anderen Record einfügen.
username | blob |
administrator | ethert8h88z5w45h8dfb8hsfdh.... |
guest | jerwgw34t43guefguhw5gurefgsdfgsdf... |
service | jieg4589gw485gsdufghuwreguherg... |
Er weiß zwar nicht was sich hinter den Blobs verbirgt, aber wenn er den Blob vom adninistrator beim guest einfügt könnte das ja ganz interessant werden...
Das Ergebnis wäre allerdings Datenmüll weil dann der berechnete Schlüssel nicht passt.
Eine Änderung des Primärschlüssels darf deine Anwendung natürlich nicht vorsehen; sonst wären die Blobs nicht mehr zu entschlüsseln.
Anstelle des Primärschlüssels kann man auch andere eindeutige Felder in den Schlüssel einbringen.