Le funzioni di crittografia e compressione di MariaDB sono sicure?

3
MariaDB [(none)]> SET @key_str = SHA2('Is it secure?',512);
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SET @crypt_str = AES_ENCRYPT('cleartext',@key_str);
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> select @crypt_str from dual;
+------------------+
| @crypt_str       |
+------------------+
| ���5��!$�l           |
+------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT AES_DECRYPT(@crypt_str,@key_str) from dual;
+----------------------------------+
| AES_DECRYPT(@crypt_str,@key_str) |
+----------------------------------+
| cleartext                        |
+----------------------------------+
1 row in set (0.01 sec)

Documenti in MariaDB KB Funzioni di crittografia, hashing e compressione, come ENCRYPT, DECRYPT , COMPRESSA, PASSWORD . MariaDB KB non scrive su quanto siano sicure quelle funzioni.

Raccomanda un'applicazione cloud nativa (fattore 12) per scaricare la crittografia nel database (nel mio caso MariaDB)? Il mio codice di esempio può essere migliorato per essere più sicuro (ma solo con le funzioni di MariaDB)?

Ho trovato una (forse) recensione distorta di un venditore di prodotti MyDiamo (desiderano vendere):

Why MySQL Internal Encryption Functions are not Sufficient

1. MySQL Internal Encryption Algorithms are not Safe

MySQL provides many algorithms such as AES, DES, SHA-1 and MD5 algorithms. Among these algorithms, MD5 and SHA-1 are proven to be not safe as they have been cracked. Also, for AES algorithms, the current MySQL 5.6 version generally available provides only the ECB operation mode which is also proven to be unsafe.

2. MySQL Internal Encryption Functions does not Provide Key Management

When encrypting data, not only is the encryption itself important, but also managing key is important. The importance of the key cannot be stressed strongly enough when encryption matters. Most encryption solutions however do not pay much attention to the key. When using MySQL internal encryption functions, the key is exposed to the source, thus no proper key management exists.

    
posta Ivanov 18.04.2018 - 08:11
fonte

1 risposta

2

Mentre MySQL attualmente fornisce altre modalità di crittografia, MariaDB sembra ancora supportare solo la modalità ECB non protetta . In MySQL, puoi impostare la modalità CBC leggermente migliore con:

SET @@session.block_encryption_mode = 'aes-256-cbc';

Se non puoi farlo su MariaDB, allora non supporta nessuna modalità alternativa. Anche su MySQL dove è supportato, CBC non è una grande modalità. Ciò che è veramente necessario è crittografia autenticata . Dal momento che né MySQL né MariaDB supportano questo, dovrebbe essere l'applicazione che utilizza il DB.

Anche l'hashing della password è scadente. Per impostazione predefinita, sei (sfortunatamente) incoraggiato dalla documentazione ad hash la password con SHA-1 o SHA-2, che sono hash veloci ma non sono progettati per essere un KDF. A causa della velocità, possono essere attaccati in modo molto efficace. Questo pericolo è amplificato perché non viene usato il sale di default. A meno che la "password" non sia una stringa generata casualmente, ciò è inadeguato per motivi di sicurezza. Devi utilizzare un KDF sicuro , che non è fornito in modo nativo.

Per quanto riguarda le funzioni di compressione, cosa li renderebbe sicuri o insicuri? Usano qualsiasi libreria di compressione con MariaDB compilata e restituiscono solo dati compressi. La sicurezza in termini di esecuzione arbitraria del codice dovrebbe riguardare principalmente la libreria collegata utilizzata (ad es. Zlib).

Do you recommend a cloud native app (12 factor) to offload Encryption to the database (in my case MariaDB)? Can my example code be improved to be more secure (but only with MariaDB functions)?

Sfortunatamente, le raccomandazioni sui prodotti sono fuori tema per questo sito. Dovresti progettare l'applicazione che utilizza il database in modo tale da supportare la crittografia solida e autenticata con un solido KDF. Se hai solo bisogno di crittografare tutti del tuo database con la stessa chiave e di occuparti solo della sicurezza dei dati in sicurezza, puoi semplicemente mettere i file del database in una directory crittografata.

    
risposta data 18.04.2018 - 08:51
fonte

Leggi altre domande sui tag