web-dev-qa-db-ja.com

MariaDBの暗号化および圧縮機能は安全ですか?

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)

MariaDB KBのドキュメント ENCRYPT、DECRYPT、COMPRESS、PASSWORDなどの暗号化、ハッシュ、圧縮関数 。 MariaDB KBは、これらの機能の安全性については触れていません。

クラウドネイティブアプリ(12要素)を使用して、暗号化をデータベース(私の場合はMariaDB)にオフロードしますか?私のサンプルコードをより安全になるように改善できますか(MariaDB関数でのみ)?

私は(たぶん) 偏ったレビュー 製品ベンダーMyDiamo(彼らは売りたい)を見つけました:

MySQLの内部暗号化機能では不十分な理由

1。 MySQL内部暗号化アルゴリズムは安全ではありません

MySQLは、AES、DES、SHA-1、MD5アルゴリズムなどの多くのアルゴリズムを提供します。これらのアルゴリズムの中で、MD5とSHA-1はクラックされているため安全ではないことが証明されています。また、AESアルゴリズムの場合、一般に利用可能な現在のMySQL 5.6バージョンは、安全でないことが証明されているECB操作モードのみを提供します。

2。 MySQL内部暗号化機能はキー管理を提供しません

データを暗号化する場合、暗号化自体が重要であるだけでなく、鍵の管理も重要です。暗号化が重要な場合、キーの重要性を十分に強調することはできません。ただし、ほとんどの暗号化ソリューションは、キーにあまり注意を払っていません。 MySQL内部暗号化関数を使用する場合、キーはソースに公開されるため、適切なキー管理は存在しません。

3
Ivanov

MySQLは現在他の暗号化モードを提供していますが、MariaDBは 安全でないECBモード のみをサポートしているようです。 MySQLでは、次のコマンドを使用して、モードを少し優れたCBCモードに設定できます。

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

MariaDBでこれを実行できない場合、代替モードはサポートされません。 MySQLがサポートされている場合でも、CBCは優れたモードではありません。本当に必要なのは 認証された暗号化 です。 MySQLもMariaDBもそれをサポートしていないため、DBを使用するアプリケーション次第です。

パスワードのハッシュも貧弱です。デフォルトでは、(残念ながら)ドキュメントでは、SHA-1またはSHA-2を使用してパスワードをハッシュすることをお勧めします。SHA-1またはSHA-2は高速ハッシュですが、KDFとして設計されていません。速度のせいで、非常に効果的に攻撃できます。デフォルトではソルトが使用されないため、この危険はさらに大きくなります。 「パスワード」がランダムに生成された文字列でない限り、これはセキュリティ上不十分です。ネイティブでは提供されない secure KDF を使用する必要があります。

圧縮機能に関して、それらを安全または非安全にするものは何ですか? MariaDBがコンパイルされた圧縮ライブラリを使用し、圧縮されたデータを返します。任意のコード実行に関するセキュリティは、主に使用されているリンクされたライブラリ(zlibなど)にある必要があります。

クラウドネイティブアプリ(12要素)を使用して、暗号化をデータベース(私の場合はMariaDB)にオフロードしますか?私のサンプルコードをより安全になるように改善できますか(MariaDB関数でのみ)?

残念ながら、製品の推奨事項はこのサイトのトピックから外れています。データベースを使用するアプリケーションは、強力なKDFによる確実な認証暗号化をサポートするように設計する必要があります。同じキーでデータベースのallを暗号化する必要があるだけで、保存データのセキュリティのみに関心がある場合は、データベースファイルを単に置くことができます。暗号化されたディレクトリ。

2
forest