共有

はじめに

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

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

なぜデータを暗号化するのか?

ロールベースアクセス制御(RBAC)は、データベースの特権乱用を防ぐための優れた手段です。しかし、この機能は、システムを保護する際に考慮すべき脆弱性の一部しかカバーしていません。RBACは、悪意のあるアクターがネットワークを盗聴したり、データ窃盗を行ったり、データベースホストのメモリにアクセスしたりするケースには対処しません。

2019年の時点でも、世界経済フォーラムは、デジタル宇宙全体におけるデータ単位の量が2020年までに44ゼタバイトに達すると予測しました。この予測された数字は、観測可能な宇宙の星の数の40倍を超えていました。本ガイド執筆時である2022年現在、その数字は間違いなく増加しており、暗号化の重要性は明らかです。

簡単に言えば、暗号化とは、データにアクセスする権限のない者には読み取れないようにデータを符号化する行為です。暗号化「キー」を知っている認可された人物のみがデータを読み取り、理解できます。効果的に実装された暗号化方法は、侵害されたアクセスによるデータ盗難に対して完全なセキュリティを提供すべきです。

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

暗号化の種類

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

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

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

転送中の暗号化

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

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

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

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

Asymmetric Encryption

非対称暗号化の欠点は、対称暗号化よりも時間がかかり、達成するためにより多くのリソースを消費することです。データがデバイス間やネットワーク間で積極的に移動していない場合、これらのトレードオフを行う必要はなく、対称暗号化で十分なセキュリティが提供されます。

非対称暗号化の潜在的なリスクは、秘密鍵が悪者の手に渡った場合、すべてのメッセージが読み取られてしまうことです。MongoDBは、前方秘匿性暗号スイートを通じて追加のセキュリティを提供します。これらは、サーバーの秘密鍵によって保護される一時的なセッションキーを作成します。このセッションキーは決して送信されず、サーバーの秘密鍵が侵害されたとしても、過去のセッションがその侵害された秘密鍵によって復号化されることはありません。MongoDBは、一時的Diffie-Hellman(DHE)一時的楕円曲線Diffie-Hellman(ECDHE)の両方のアルゴリズムをサポートしています。

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

保存データの暗号化

保存データの暗号化は、転送中ではなくアイドル状態にあるデータを保護します。保存データが暗号化されている状態を最もよく視覚化するには、銀行支店の金庫に保管されている安全な現金を想像してください。それはもはや別の支店に転送中ではなく、一箇所に静止しています。この静止状態は、非対称暗号化が解決する転送中の非安全性を回避するため、対称暗号化は強力な方法です。

Symmetric Encryption

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

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

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

MongoDBは、AWSAzure、およびGoogle Cloud Platformのキー管理サービスをサポートしています。これは、MongoDBの暗号化キーだけに頼らず、生成された暗号化キーの所有権を自分で管理したい人にとって素晴らしい機能です。

使用中の暗号化

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

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

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

保存データの暗号化およびクライアント側フィールドレベル暗号化において、対称鍵が侵害されるリスクは常に存在します。重要なインターネットアカウントのパスワードと同様に、暗号化キーも定期的に変更すべきです。この実践を暗号化キーのローテーションと呼びます。

暗号化キーのローテーションは、侵害されたキーに対する確実な保護ではないものの、リスクを強力に制限するため、データベース管理者にとって考慮すべき重要な事項です。キーが侵害された場合、機密データへのアクセスにはすでに古くなっている可能性が高いです。これは維持するための別のタスクですが、それを実行せずにとらわれ、やっておけばよかったと後悔するよりも、導入して必要としない方が良い実践です。

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

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

結論

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

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

著者について
Alex Emerich

アレックス・エメリック

アレックスは典型的なバードウォッチング好き、ヒップホップ好き、本好きで、データベースに関する執筆も楽しんでいます。現在ベルリンに住んでおり、レオポルド・ブルームのように目的もなく街を歩き回る姿を見かけることができます。
© . All rights reserved.