Sto cercando un modo efficace per crittografare più campi in un database con AES utilizzando un'unica chiave globale, utilizzata in un'applicazione web di grandi dimensioni.
Ovviamente per riutilizzare questa chiave, è necessario un IV casuale casuale per ogni campo che deve essere crittografato.
Preferirei non introdurre più campi nel database per memorizzare ciascuno di questi IV, quindi l'approccio programmatico sembra essere quello di ricavare questi IV in qualche modo.
Sto giocando con l'utilizzo di entrambi:
key = sha256(global_key + table_name)
iv = sha256(column_name + primary_key)
O anche semplicemente:
key = global_key
iv = sha256(table_name + column_name + primary_key)
Sono propenso al primo a generare chiavi per tabella.
Ho già letto che gli IV non hanno bisogno di essere tenuti segreti. Quindi sto lavorando sul assunto che una chiave derivata o IV (anche se l'algoritmo diventa noto), non è più insicuro di qualsiasi altro IV non segreto, purché l'originale la chiave rimane segreta .
La domanda è:
C'è un difetto fatale nel mio approccio? Sto introducendo qualche serio punto debole che, nel caso in cui un avversario ottenga una copia del database, renderebbe più facile per loro recuperare i dati in testo semplice?
Comprendo che potenzialmente sollecitare una parola risposta.
Suggerimenti per schemi alternativi / migliori molto graditi, così come riferimenti a opere esistenti e come implementano scenari simili.