シェア

はじめに

今日の社会はデータによって動いています。組織が作成、保存、交換するデータは、最も価値のある資産です。データ暗号化は、組織の保護、ユーザーの保護、およびデータプライバシー規制の遵守のために、すべての組織にとって重要なプラクティスです。組織は、内部ユーザーが自分に関連するデータのみを表示できるようにする必要があります。さらに重要なことに、組織はデータ侵害や不正アクセスからデータを保護する必要があります。

データ暗号化の必要性は、機密情報を扱う組織にとってさらに重要です。この記事では、堅牢な認証および認可対策に加えて、データを暗号化する必要がある理由、MongoDBにおけるさまざまな暗号化の種類、および暗号化のベストプラクティスについて説明します。

データを暗号化する理由

ロールベースのアクセス制御(RBAC)は、データベースの権限の乱用を防ぐための優れた対策です。ただし、この機能は、システムのセキュリティを確保する際に考慮すべき脆弱性の一部のみを対象としています。RBAC は、悪意のある者がネットワークを盗聴したり、データを完全に盗んだり、データベースホストのメモリにアクセスしたりするインスタンスには対処しません。

ごく最近の 2019 年に、世界経済フォーラムは、デジタルユニバース全体のデータユニット量が2020 年までに 44 ゼタバイトに達すると予測しました。この予測数は、宇宙で観測可能な星の数を 40 倍も上回っています。このガイドの執筆時点である 2022 年現在、その数は間違いなく増加しており、暗号化の必要性は明らかです。

簡単に言えば、暗号化とは、データへのアクセス権限を持たない者にとってデータを判読不能にするためにデータをエンコードする行為です。暗号化「キー」を知っている権限のある人のみがデータを読み取り、理解できます。効果的に実装された暗号化方式は、侵害されたアクセスによるデータ盗難に対して完全なセキュリティを提供する必要があります。

暗号化は、最も基本的なレベルでは、暗号化者が文字、数字、記号を他の文字に置き換えて暗号を作成することによって機能します。暗号作成者でない人やゾディアックファンでない人のために説明すると、暗号とは、元のメッセージ(この場合は元のデータ)の代わりとなる文字のセットです。この暗号の作成者は、暗号化キー(暗号化方法を記述する数値)を保持します。最新の暗号化は、単純な文字の入れ替えよりもはるかに複雑です。最新の実装のほとんどは、プレーンテキストを受け取り、テキスト、画像、バイナリブロブ形式のチャンクまたはバイトストリームで構成される暗号文に変換します。コンピューターや人間は、このキーなしでは実際のデータを読み取ることができず、不正なデータは正しくレンダリングできません。

暗号化の種類

暗号化方式は通常、共通鍵暗号化と公開鍵暗号化の 2 つのカテゴリに分類されます。それぞれの定義は次のとおりです。

  • 共通鍵暗号化 - 暗号化キーと復号化キーが同じ(対称的)方式
  • 公開鍵暗号化 - 公開鍵暗号とも呼ばれる方式で、同一ではない 2 つの異なるキー(秘密鍵と公開鍵)を作成します。公開鍵は誰とでも共有でき、秘密鍵は権限のある人のみと共有できます。公開鍵は、秘密鍵でのみ復号化できるデータを暗号化するために使用できます。

どちらの方法にも、データステータスによっては固有の脆弱性がありますが、ネットワークの盗聴やデータ盗難など、RBAC が見逃した問題をカバーします。これが、MongoDB がデータ状態に応じて、データベース全体で両方の方法を採用している理由です。

転送中の暗号化

転送中の暗号化とは、データが一方の地点から別の地点に移動しているときにデータを保護することです。送信される前に、データはその「旅」のために暗号化され、受信ポイントで復号化および検証されます。最もわかりやすい視覚化は、データを、金庫を補充するために装甲車で銀行支店から別の銀行支店に輸送されるお金として想像することです。

MongoDB Atlas は、サーバーの証明書を設定することにより、アプリケーションクライアントとサーバー間、およびクラスタ内通信内の通信に、トランスポートレイヤーセキュリティ(TSL)とセキュアソケットレイヤー(SSL)をサポートしています。証明書は、秘密鍵の所有権の有効性を証明するために使用される電子文書です。証明書は、信頼できるネットワーク接続を介した転送のためにデータが暗号化されることを保証し、パケットスニッフィングや IP/DNS スプーフィングなどのネットワーク盗聴活動を防ぎます。

公開鍵を含めることで、MongoDB が公開鍵暗号化を利用して移動中のデータを保護していることがわかります。共通鍵暗号化では、暗号化キーを何らかのチャネルを介して当事者間で通信する必要があります。単一のキーは、送信中に安全な状態を維持する必要があり、この段階でリスクにさらされます。公開鍵暗号化は、理論的には公開鍵によってこの安全でない送信の問題を解決します。暗号化された通信は、事前の通信なしで行うことができます。

公開鍵で暗号化することにより、送信者のメッセージは、意図された受信者が秘密鍵を持っている場合にのみ復号化できます。公開鍵暗号は、秘密鍵を共有する必要がなく、署名を使用することで受信者がメッセージが信頼できる送信元からのものであることを確認できるため、転送中に有利です。

Asymmetric Encryption

公開鍵暗号化の欠点は、共通鍵暗号化よりも時間がかかり、それを実現するためにより多くのリソース消費が必要になることです。データがデバイス間またはネットワーク間をアクティブに移動していない場合、これらのトレードオフを行う必要はなく、共通鍵暗号化で十分なセキュリティが提供されます。

公開鍵暗号化の潜在的なリスクは、秘密鍵が誤った手に渡った場合、すべてのメッセージが読み取られる可能性があることです。MongoDB は、前方秘匿性暗号スイートを通じて追加のセキュリティを提供します。これらは、サーバーの秘密鍵によって保護される一時的なセッションキーを作成します。このセッションキーは送信されることはなく、サーバーの秘密鍵が侵害された場合でも、過去のセッションは侵害された秘密鍵によって復号化されないことが保証されます。MongoDB は、Ephemeral Diffie-Hellman (DHE) および Ephemeral Elliptic Curve Diffie-Hellman (ECDHE) アルゴリズムの両方をサポートしています。

MongoDB Atlas は、Let’s Encrypt の既知の証明書を使用して、TLS 対応クライアントがアクセスおよび認証コントロールに合格すると認証します。TLS プロトコルは、2 つ以上のコンピューターアプリケーション間で証明書を使用することにより、整合性と信頼性を提供します。MongoDB は、このプロトコルを使用することにより、不要な盗聴と改ざんを防ぐネットワーク全体で通信できます。クライアントの TLS 構成については、公式 MongoDB ドキュメントを参照してください。

保存時の暗号化

保存時の暗号化は、転送状態ではなくアイドル状態のデータを保護します。保存時に暗号化されたデータは、銀行支店の金庫に保管された保護されたお金のように視覚化できます。別の支店に輸送されるのではなく、単一の場所に静止しています。この静的な状態は、公開鍵暗号化が解決する送信のセキュリティ上の問題を回避するため、共通鍵暗号化は強力な方法です。

Symmetric Encryption

ディスク上の暗号化されたデータは、攻撃者が暗号化キーにアクセスできない限り、暗号化されたままになります。保存時の暗号化は、物理ドライブの紛失または盗難、またはデータベースファイルが露出した場合に機密データを保護します。

MongoDB 保存時の暗号化は、エンタープライズ機能です。これにより、ストレージ用に書き込まれたファイルが、承認されたプロセスまたはアプリケーションによって復号化された場合にのみアクセス可能になることを保証する保護レイヤーがデータベースに追加されます。

MongoDB Atlas には、クラスター内のすべてのノードでデフォルトでディスクの保存時の暗号化が組み込まれています。ただし、WiredTiger ストレージエンジンから追加の暗号化を有効にすることもできます。この機能を使用すると、優先するクラウドプロバイダーのキー管理サービス(KMS)を使用できます。KMS は、すべての暗号化キーの管理を一元化するユーティリティです。

MongoDB は、AWSAzure、および Google Cloud Platform キー管理サービスをサポートしています。これは、MongoDB の暗号化キーのみに依存したくない人や、生成された暗号化キーの所有権を制御したい人にとって優れた機能です。

使用中の暗号化

MongoDB 暗号化の最後の種類は、使用中の暗号化、クライアント側フィールドレベル暗号化(CSFLE)を提供する機能です。CSFLE を使用すると、エンジニアは暗号化しておく必要のあるドキュメントのフィールドを指定できます。機密データはクライアントによって暗号化/復号化され、暗号化された形式でのみサーバーとの間で通信されます。

この機能は、サーバーとネットワークの両方で必要な暗号化フィールドのセキュリティを保証し、適切なクライアントのみがアクセスできます。常に、機密データはデータベースホスト上およびネットワーク転送中に暗号化されます。セキュリティ責任はクライアントに移ります。CSFLE は、データベースの権限の乱用、ネットワークの盗聴、データ盗難、データベースホストのメモリアクセスなど、これまで説明してきたすべての脆弱性を防ぎます。

暗号化キーのローテーション

保存時の暗号化とクライアント側フィールドレベル暗号化では、共通鍵が侵害されるリスクが常にあります。重要なインターネットアカウントのパスワードと同様に、暗号化キーも定期的に変更する必要があります。このプラクティスが暗号化キーのローテーションです。

暗号化キーのローテーションは、データベース管理者にとって考慮すべき重要な事項です。侵害されたキーに対する確実な保護ではありませんが、リスクを大幅に制限します。キーが侵害された場合、機密データへのアクセスにはすでに古くなっている可能性が高くなります。維持するための別のタスクですが、何もしないで捕まって後悔するよりも、採用して不要になる方が良いプラクティスです。

MongoDB Atlas の保存時の暗号化と CSFLE には、使用している KMS クラウドプロバイダーごとに必要なキーをローテーションするための組み込みガイドがあります。

MongoDB を自己ホストしている場合は、手動キーローテーションを実行するためのガイドと、MongoDB の Ops Manager および Cloud Manager プラットフォームのガイドがあります。

結論

このガイドでは、データ暗号化の重要性の高まりと、多くのデータセキュリティの脆弱性について説明しました。データは、MongoDB であらゆる状態での安全性を確保するために暗号化されています。この状態は、アイドル状態、移動中、または使用中の場合があります。

デジタルユニバースにますます多くのデータが入力されるにつれて、それにアクセスしようとする脅威が増えています。すべての組織は、貴重な情報を保護するためにあらゆる予防措置を講じる必要があります。MongoDB は、必要になる前に十分に知っておくべき暗号化セキュリティ機能スイートを提供します。

著者について
Alex Emerich

Alex Emerich

Alex は、典型的なバードウォッチング、ヒップホップ好きの読書家であり、データベースに関する執筆も楽しんでいます。彼は現在ベルリンに住んでおり、レオポルド・ブルームのように目的もなく街を歩いている姿を見かけるかもしれません。