Ho un'app per Android che si basa internamente su un database SQLite che archivia dati utente crittografati. I dati vengono crittografati utilizzando AES-256, con una chiave generata dall'algoritmo PBKDF2-HMACSHA256. L'applicazione ha la necessità di rilevare la manipolazione dei dati tramite metodi dannosi o non dannosi (ad esempio, danneggiamento dei dati o qualcuno che manomette intenzionalmente il database).
Per quanto posso dire ho due opzioni solide su come generare in modo sicuro un hash per rappresentare questi dati. O posso fare affidamento su un algoritmo HMAC-SHA256 con chiave con la stessa password utilizzata per generare la chiave AES-256 per generare le firme dei dati in ogni riga del database. In alternativa, potrei generare un normale hash SHA-256 dei dati decrittografati memorizzati in memoria prima di ricodificarlo per aggiornare la riga del database. Quindi, in teoria, solo l'utente autenticato con la chiave corretta può decifrare i dati e quindi solo quell'utente può generare questa "firma".
Ecco la mia domanda: usare HMAC-SHA256 causerà complicazioni con esattamente come mantenere la password in modo sicuro come chiave o in qualche modo per sfruttare la chiave SHA-256 come chiave HMAC. In entrambi i casi, sembra non necessariamente doloroso e la complessità è in generale, una novità negativa per i sistemi sicuri. Sarebbe ugualmente sicuro fare affidamento su un normale hash SHA-256 di dati decrittografati come sarebbe utilizzare un algoritmo di hash in stile HMAC? Come in, sono altrettanto difficili / impossibili da falsificare una firma.