デジタル時代において、個人や企業はデータ漏洩のリスクが増大しています。情報理論の文脈では、情報フローとは、ある変数 x
から別の変数 y
にデータを転送するプロセスを指します。いかなるシステムも機密情報の漏洩を望んでいません。機密情報は個人のプライバシーに関わるだけでなく、会社に多大な損失をもたらす可能性があります。
アクセス制御リスト、ファイアウォール、暗号化技術など、情報の開示を制限する方法は数多くあります。ただし、これらの方法は情報の公開をある程度制限するものの、情報が漏洩しないことを保証するものではありません。
テクノロジーの進歩に伴い、データセキュリティを確保する方法も大きく変化しました。たとえば、アクセス制御リストはファイルへの不正アクセスを防ぐことができますが、データが使用された後に何が起こるかを制御することはできません。同様に、暗号化技術は安全でないチャネルで情報を非公開に送信できますが、データが復号化されると、その機密性が脅かされます。したがって、情報フローの制御を理解することが特に重要になります。
情報フローは、明示的フローとバイパスフローの 2 つのカテゴリに大別できます。明示的なフローとは、秘密がパブリックに観測可能な変数に明示的に漏洩する場合です。例:
var l, h; l := h;
一方、サイドストリームは実行時間や電力消費などの特定の特性を利用して情報を漏洩します。たとえば、条件でh
が真の場合、時間のかかる作業が実行され、攻撃者はプログラムの実行にかかった時間に基づいてh
を推測できるようになります。 . の値。
暗黙的な情報フローもバイパス フローの一部です。プログラムの制御フローはプライベート データに基づいていますが、パブリック変数は何らかの秘密情報を暗示する場合があります。
非干渉とは、秘密の入力のみが異なる場合、攻撃者が出力に基づいて 2 つの計算を区別できないようにすることを重視するポリシーです。しかし、このポリシーは実際の手順に適用するには制限が厳しすぎます。
たとえば、パスワードをチェックするプログラムでは、必要に応じて、入力されたパスワードが正しいかどうかなど、何らかの秘密情報を公開する必要がある場合があります。これにより、入力されたパスワードが有効でなかった場合など、プログラムがパスワードを拒否した場合でも、攻撃者は有用な情報を取得できるようになります。
情報フロー制御メカニズムは、情報フロー ポリシーを適用するように設計されています。この目標を達成するために、情報フロー戦略を実装するためのいくつかの方法が提案されてきました。ランタイム メカニズムはオペレーティング システムおよびプログラミング言語レベルでデータにラベルを付けることができ、静的プログラム分析はプログラム内の情報フローが対応するポリシーに従っていることを保証します。
ただし、動的解析技術ではすべての実行パスを観察することはできないため、堅牢性と精度の両方を保証することはできません。これらの手法では、ポリシーの適用を妨げないようにするために、機密情報が漏洩する可能性のある実行を終了したり、情報が漏洩する可能性のある更新を無視したりすることがよく必要になります。
安全な型システムはプログラミング言語に重要な要素を追加し、すべての式に型 (ブール値や整数など) に加えて安全ラベルを付けることを可能にします。これを実行する利点は、型チェックを通じて、プログラムがチェックに合格した場合、フロー ポリシーが遵守されていることを保証できるため、不適切な情報フローを回避できることです。
たとえば、変数が高セキュリティ タイプとしてマークされている場合、その変数は低セキュリティ タイプの変数を変更してはならず、機密情報の漏洩を防ぐことができます。
実際のアプリケーションでは、非干渉ポリシーの厳格さにより、非実用的になります。したがって、制御された公開という目標を達成するために、情報の公開を許可する多くのスキームが提案されてきました。これらのスキームは、情報の機密解除としても知られています。堅牢な機密解除により、能動的な攻撃者がシステムを操作して受動的な攻撃者が知っている範囲を超えた秘密にアクセスできないようにする必要があります。
まとめ情報フロー制御は、現代のプログラミングとデータ保護においてますます重要になっています。しかし、実際のアプリケーションでデータセキュリティを効果的に確保する方法は、依然として取り組むべき課題です。これらの潜在的な脅威に対処する準備はできていますか?