![smartmockupsldem49qd | Embarcadero RAD Studio Delphi C++Builder Blogs smartmockups ldem49qd](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/smartmockups_ldem49qd-6346909.jpg?resize=1140%2C694&ssl=1)
この記事は、ブルガリアに拠点を置くGatelink社のGeorgi T. Gerasimov氏の投稿です。彼は、暗号化作業を34ミリ秒未満で実行するという厳しい要件に対し、 デジタルデータ保護のためのWindowsアプリケーション開発で直面した課題について、詳細に解説する記事を執筆してくれました。開発要件に「デジタルデータのポスト量子保護」というフレーズが含まれているなら、それはコーディング上の困難な課題と言えるでしょう。
Table of Contents
課題の整理
2022年、当社はデジタルデータ保護のためのエンタープライズビジネスアプリケーションの設計、開発を請け負いました。このプリジェクトは、予算と開発期間の双方で制約がありました。
顧客要件は、柔軟かつ複雑で、実用的なソリューションを要求する既存の問題の詳細な分析に基づいて策定されました。そして、私たちが最初に直面した大きな課題は、初期要件が、重要情報保護のための標準プロトコルとコンフリクトしてしまうことでした。
課せられた制約は以下のように、取り消し不可の要件が含まれています。
- ポータブルデバイスなどの外部デバイスに、重要な情報を含むファイルを保存することは許可されている。
- マスター管理システムへのアクセス権限を持つエンドユーザーと従業員の双方によって用いられるユーザーパスワードと秘密鍵に、許可されていない従業員がアクセスできたとしても、情報は許可されていないアクセスから保護されなければならない。
- データベースへの各セキュアトランザクションは、34ミリ秒未満で処理されなければならない。
このプロジェクトの納期は、契約締結から90日と決まっていました。設計、開発、システム統合の遂行を注意深く行う必要があります。
慎重に計画を立案した結果、今回は、3つの独立したアプリケーションを作成することを決定しました。
- 重要情報を含むファイルへの不正アクセスからの保護に特化したシステム
- 安全なメッセージングのためのプラットフォームに依存しないアプリケーション
- データベース操作時に安全なトランザクション処理を可能とする安全な環境を確立できるハイブリッドアプリケーション
この記事では、重要情報を含むファイルの保護という最初のソリューションの開発で用いた問題解決アプローチを紹介します。
開発環境の選定理由
開発環境としてRAD Studioを選択した理由は、意のままに使用できる経験を有していたというだけでなく、このツールの実証済みのメリットによるものでした。
その正当な理由として挙げられる重要なポイントは、直感的なコードとアセンブラで記述されたモジュールを組み合わせられることでした。これは、RAD Studioの持つクロスプラットフォームプログラミングの可能性とともに、このツールが提供する最大のメリットのひとつです。
最終的な決定を後押ししたもうひとつのポイントは、利用可能なコンポーネントとプログラムライブラリの品質、技術ドキュメント、テスト、リファクタリング、ドキュメント化のための便利なツール、そして、Delphiによって開発されたアプリケーションの並外れた効率性と高度な信頼性です。
冒頭でも触れたように、顧客が提示した要件は、既知のすべてのセキュリティプロトコルの上をいくものでした。
今回のケースでは、実証済みの標準的な暗号化ソリューションと、デジタルデータのオブジェクトリレーショナル暗号化で知られている手法の双方を組み合わせる必要がありました。これは、相互に排他的な2つのアプローチを統合することを意味していたため、極めて深刻な課題でした。
大規模な情報配列を保護するためのハイブリッドソリューションの開発において、特に RAD StudioとDelphiが提供する重要性そのメリットを理解するために、「Contemporary forms of information protection(情報保護の現代的形態)」という記事からのテーマについて説明を加えさせてください。これは、暗号化メカニズムの生成に制御文字列を使用するオブジェクトリレーショナル暗号化でのファジーロジックの使用に関連したものです。
オブジェクトリレーショナル暗号化で使用される技術ソリューションは、次の入力データに基づいた組み合わせになります。
- 処理される情報の(運用上または戦略上の)性質
- データの保存と転送に使用されるデバイス(専用メディアまたはコンピューターネットワーク)
- 使用されるプログラミング言語
リストされている各指標は、技術的ソリューションを正しく選択する上で非常に重要です。オブジェクトリレーショナル暗号化のもう1つの特徴は、いつでも通常の形式で情報が表示されるとは限らないことです。
ファジーロジックを使用して数値情報を表現する典型的な例を見てみましょう。
例:
次のファジーセットを考えてみましょう。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-27_07-45-10-9686364.jpg?w=750&ssl=1)
この場合、数値7は数値3の40%、数値4の60%と表されます。それ以外のすべての数値は、0%です。
数値7の定義がこのように記述されている場合、数値とそのセットの間の接続を定義するのは簡単になりますが、次のセットについては、合理的に疑うことができます。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-27_07-44-13-8457034.jpg?w=750&ssl=1)
その理由は、赤字で示した「寄生要素」の存在です。この例では、寄生要素のシーケンスは特定のロジックに従いますが、実際のアプリケーションではランダムに分散されているため、専用のハードウェアやソフトウェアツールを使用して実行した場合でも、その後の暗号解読が大幅に複雑になります。また、例では、情報のノイズが有用な情報よりも大きいですが、これは必要条件と見なされるべきではありません。
最初のセットに「Seven」を追加して、次のような一連のシンボルに変換します。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-27_08-08-29-5310823.jpg?w=750&ssl=1)
記録された文字列は、以下のように定義することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
uses System.StrUtils, System.AnsiStrings; ... protected { Protected declarations } MyFuzzySetObject: AnsiString; { ... } MyFuzzySetObject:= '"Seven", [1, 3, 7], {< 0/1 >, < 0.4/3 >, <1/7> }'; // or ---> type MyFuzzySetObject = String; record S: String; ProtectedArray: Array [1..3] Of MyFuzzySetObject; end; |
2番目のケースでは、構造体レコードの要素として、AnsiString
型の変数を含めることはできません。これは、動的配列のケースにも当てはまります。
そのため、MyFuzzySet
型は、ファジーロジックを使用してあらゆる種類の情報(オーディオ、ビデオ、テキスト、バイナリなど)を記述できるようになっています。同じことが、特定の条件下でのAnsiString
型(あるいはString
型)変数にも当てはまります。ただし、いずれのアプローチも、情報を提示する方法としては、「従来型」のものと定義できます。
同じ情報を別の方法で表示するプログラムを見てみましょう。
例:
このケースでは、Delphiの組み込み文字列置換関数を使用して、数値7をファジーセットとして書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
uses System.StrUtils, System.AnsiStrings; { ... } protected { Protected declarations } S1, S2, S3, S4: AnsiString; { ... } S1:= ' "Seven", .......................................... '; S2:= '..........................................'; S3:= '[1, 3, 7], {< 0/1 >, < 0.4/3 >, <1/7>}'; S4:= AnsiReplaceStr (Str1, Str2, Str3); |
結果: { S4 = “Seven”, [1, 3, 7], {< 0/1 >, < 0.4/3 >, <1/7> } }
結果はまた同様です。
3つのケースでは、いずれも情報の性質は変わりませんが、その定義とその内部処理は、それぞれまったく異なる方法で実行されています。
ここで提示した例は、ハイテク攻撃に対する防御として使用されるオブジェクトリレーショナル暗号化の原理の一部を示しています。
客観的に言えば、このようなロジックは、制御文字列を使用するシステムの外部では、暗号証明として受け入れることはできません。これらに加え、実証済みの暗号プリミティブとRAD Studioが提供する機能を組み合わせて使用することで、デジタルデータのポスト量子保護のための非常に効果的なツールを広範に構築できるようになるのです。
実際の実装
私たちのアプローチと標準的なデジタルデータ保護ソリューションとの根本的な違いを理解するために、RAD Studioを利用して超短期間で、異なる物理メディアにある大量のファイルの効果的な暗号化を実現するアプリケーションの作成を成し遂げた、その手法を詳細に見ていきましょう。
定義
File Package Manager(FPM)は、ローカル、ネットワーク、サーバー、外部データメディアにあるファイルとフォルダーを暗号化するための特殊なアプリケーションです。
アプリケーションは、次のアクションが可能です。
- セキュアなEノートブック
- パッケージ内ファイルの暗号化
- パッケージ内ファイルの復号化
- 暗号プロセスはレポートを制御
- ファイルの整合性チェック(FIM コントロール)
- ファイル変更制御
- ファイルとディレクトリの現在のステータス確認
- パッケージなどに保存されたファイルの細断またはサニタイズ
パッケージのメタ情報が利用可能で物理的にアクセス可能なファイルの暗号化は、セッションの暗号化メカニズムに基づいて実行されます。
各暗号化メカニズムでは、実績ある一連の暗号化プリミティブを使用しています。暗号プリミティブの構成は自動的に行われます。必要に応じて、セキュリティプロトコルをハードウェアに依存させることができるため、セキュリティが大幅に向上します。
パッケージに保存されたファイルとフォルダーに対するすべての操作は、ファイルとフォルダーに物理アクセス可能な場合のみ実行されます。アクセス不可の場合(削除された、物理アクセス不可のネットワークドライブ、その他の理由など)は、パケットに反映され、これが検出された時刻(RTC – real-time control)が記録されます。
以下のビジュアルコンポーネントが、アプリケーション開発に使用されました。
- DCPcrypt-master – 標準暗号プリミティブがベース。ハッシュアルゴリズム、暗号アルゴリズム、ブロック連結モード、HMAC、PBKDF1、PBKDF2などをサポート
- Delphi Encryption Compendium, DEC – 標準暗号プリミティブ。ハッシュアルゴリズム、暗号アルゴリズム、ブロック連結モード、鍵派生アルゴリズム、CRCなどをサポート
- Fast Reports – 暗号化プロセスのレポートとドキュメント生成に使用。取得した結果をHTML、PDF、RTF、DOC、XLS、XMLなどさまざまな形式でエクスポート可能
- JAM Software – Windowsシェルを使用し、ファイルパッケージを管理するための直感的なユーザーインターフェイスを構築
- Konopka Signature VCL Controls – 直感的なインターフェイスの構築をサポート。エンドユーザーはアプリケーションの操作方法をすばやく学習可能に
これらのコンポーネントを選択したことで、個別のコンポーネント開発に要する時間を最小限に抑制できました。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-55-50-6023159.jpg?w=750&ssl=1)
そして、プログラミング言語Delphiのユニークな特長が、開発プロセスにおいてさらにメリットを享受することができました。
Delphiの豊富な機能とドキュメントを駆使して、私たちのチームは、グラフィックカード(特定のプロトコルに従うデジタル画像)を使用して制御文字列を生成するための実用的なアプリケーションを、72時間以内に作成することに成功しました。
Delphi では、疑似プロパティはDFM形式でシリアル化されたpublishedプロパティのように見えますが、実際にはまったく別のものです。
例えば、シリアル化されたコンポジションTImage
–TPicture
では、TPicture
オブジェクトは、そのPictureプロパティ経由でアクセスされます。
1 2 3 4 5 6 7 |
object ControlImage: TImage {. . .} Picture.Data = {0A544A504547496D616765 . . . E0FF000BFFD9} end; |
TPersistent
をTPicture
は継承しますが、そのpublicプロパティにDataはありません。情報をシリアル化するには、TPersistent
クラスでprotectedメソッドに設定されている疑似プロパティを、再定義対象クラスで利用する必要があります。
理解しておくべき重要な点は、制御文字列が、暗号化プロセスで使用されるユーザーパスワードや秘密鍵とは関係がないということです。その主な目的は、一連の基本暗号メカニズムを形成することです。そして、その暗号化メカニズムが、選択したファイルを暗号化/復号化するのに必要となる秘密鍵を生成するメカニズムになります。
暗号メカニズムは、共通の機能メカニズムに統合された一連の実績のある暗号プリミティブです。このアプローチにより、対称型暗号化の利点を維持しながら、その欠点を回避することが可能になりました。
大量の情報を含むファイルパッケージを暗号化するプロセスでは、次の3つのメインモードを使用します。
- SPM(Standard Protection Mode)
- PPM(Package Protection Mode)
- HPM(Hybrid Protection Mode)
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-56-59-1314693.jpg?w=750&ssl=1)
SPM(Standard Protection Mode)つまり「標準保護モード」では、ファイルパッケージに格納されているすべてのファイルの情報が、定義済みの一連の暗号化プリミティブ((暗号メカニズム)を使用して暗号化されます。つまり、各ファイルに対して同じセッションシークレットキーが生成されます。
このケースでは、暗号化メカニズムの構成はオペレーターによって実行され、パラメーターは専用モジュールに設定されます。使用された暗号プリミティブに関連するEノートブックやファイルパッケージに記録された情報は無視されます。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-57-53-5624897.jpg?w=750&ssl=1)
PPM(Package Protection Mode)つまり「パッケージ保護モード」では、ファイルバッチに格納されているファイルが、各ファイルのバッチに書き込まれた暗号化プリミティブを使用して生成される、暗号化メカニズムを使用して暗号化されます。
つまり、個々のファイルやファイルグループを異なる秘密鍵で暗号化し、異なる暗号プリミティブを使用することができます。
SPMとは異なり、PPMでは、ファイルパッケージに記録されている標準暗号プリミティブに関する情報に基づいて、セッション暗号化メカニズムが形成されます。この場合、暗号プリミティブの管理モジュールに含まれる暗号メカニズム情報は無視されます。ただしそれは、この情報をパケットに書き込んで暗号化プロセスで使用できないということではありません。その選択は、サイバーセキュリティの専門家に一任されます。
この方法は、SPMよりもパフォーマンスが低下しますが、暗号化プリミティブを適切に構成することで、保護レベルの大幅な向上が保証されます。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-58-33-2000219.jpg?w=750&ssl=1)
HPM(Hybrid Protection Mode)つまり「ハイブリッド暗号化モード」では、ファイルパッケージに格納されているファイルが、変更された暗号化メカニズムを使用して暗号化されます。このメカニズムは、各ファイルにセッション暗号化メカニズムを提供するだけでなく、秘密鍵の生成プロセスも管理します。
この方法は、オブジェクトリレーショナル暗号化のバリエーションです。その違いは、数値オブジェクトまたは制御文字列が、セッション秘密鍵の生成方法を選択する関数に置換されることです。
実際には、これが可能な限り高い保護レベルを保証するファイルパケット暗号化方式であると想定できます。その主なメリットは、暗号プリミティブを選択するメカニズムがユーザーから隠されていることです。この機能により、マスター管理者権限を持つユーザーが介入した場合でも、使用されているメカニズムの秘密パラメーターへのアクセスをブロックできます。
この方式は、「インサイダー攻撃」に対抗するための特殊な保護メカニズムの要素として使用されます。
この方法は、機密情報を扱う機関だけでなく、エンタープライズソリューションにも適したものですが、セキュリティファイルシステムの運用保守コストは最小限に抑制されています。
特定の問題
開発期間中、私たちのチームはいくつかの問題の解決に迫られました。しかし、その解決策は、私たちの技術的な実践経験を高めるものでした。
問題の多くは、エンドユーザーのアプリケーション操作方法や、提供された機能にエンドユーザーがどのように反応するかといった問題に関連していました。その1つは、ユーザーが暗号化されていないファイルを復号化しようとして、その結果、これらのファイルが破損されてしまう可能性があったことです。
こうした間違いを回避するために、別の非標準的なアプローチを選択しました。そのアプローチは、暗号化/復号化時にエンドユーザーの承認パネルを視覚的に目立つようにしたことです。この変更は一見取るに足らないことのように思えるかもしれませんが、運用プロセスにおいてはその重要性を証明し、顧客からも高く評価されました。
この問題を解決するために私たちが特に注意深く進めたのは、ソフトウェアの機能を提供するUIの決定についてでした。つまり、最初にソリューションのフロントサイドを開発し、その後バックエンドに進むようにしたのです。UIを設計するときには、これが日常的なビジネス処理のアプリケーションであるという事実を考慮し、ゼロエラーの可能性、ユーザーフレンドリーなインターフェイス、さらに疲労することなく継続的にアプリケーション上で作業できるような設計が必要とされるのです。
さらに私たちが直面した最も深刻な課題の1つは、たとえそれが最上位の管理者権限を持つユーザーによってエクスポートされた情報であっても、その保護された情報が許可された施設外からアクセスできないようにする手法でした。
開発期間が限られていること、継続的なQAテストやリアルタイムテストを実施できないことなどから、セッションのハードウェアバインディングをベースとしたモデルの採用を決定しました。暗号化/復号化が実行される前に、アプリケーションはエンドユーザーが使用するハードウェアアーキテクチャの自動チェックを実行します。取得した結果に基づき、制御文字列が生成されます。この文字列は、そのあとに続く暗号化プロセスを実装するために使用されるメカニズムを定義します。制御文字列チェックで不一致が検出された場合、プロセスブロッキングプロトコルがシステムによって自動的にトリガーされます。この保護メカニズムは、企業の情報インフラストラクチャのローカルワークステーションや単一ノードだけでなく、インフラストラクチャ全体 (サーバー、ストレージなど) にも関係します。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-59-26-5109579.jpg?w=750&ssl=1)
他の方法を用いた場合、長い研究開発期間と多くのテストを必要としましたが、この方式のシンプルさは、その複雑な問題に対する効果的なソリューションとなりました。このアプローチは、従業員のリモートワーク機能に必要なクライアントインフラストラクチャのリモートノード(顧客の本社、支社、各拠点の外部ノード)の制御と監視にも利用することができました。このケースでは、いくつかの追加コンポーネントを使用しています。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/01/2023-01-26_20-59-55-2988293.jpg?w=750&ssl=1)
提示したケースシナリオは、開発プロセス中に発生した問題のほんの一部です。実際には、より多くの複雑な問題に直面し、それらを解決することができました。そのため、非標準的なアプローチやオーソドックスではない手法を用い、さまざまな種類のソリューションをテストすることを余儀なくされました。これらはすべて、従来の方法論ではかなりの開発時間を必要とするものの、極めてデッドラインに対応するために選択されたものです。
最終的な結果分析
あらゆる困難な状況と限られた予算という厳しい制約にもかかわらず、プロジェクトは予定どおりに完了することができました。私たちのチームは、顧客からこのソリューションが受け入れられたことに満足しています。実際、このソフトウェアが35歳未満の若い従業員に好評だということに驚いています。
プロジェクトの終了後に経営陣と技術チームが下した非常に重要な結論は、機密情報を扱うべく設計されたエンタープライズアプリケーションは、既存の業界標準に厳密に準拠することが最も重要であるということでした。
今回の場合、NIST SP 800-60、FIPS 200、ISO 10116、ISO 9798-2、ISO 11770-2などの規格に加え、その設計方法に関する規格、公式文書とその後のプロセス管理なども含みます。
アプリケーションの開発と配置は、大規模かつ複雑なテクノロジーとビジネスを構成するパズルのわずかなピースに過ぎません。運用サポートと関連するコストは、このパズルの重要なピースであり、この点にも注意を払う必要があります。
残念ながら、この業界やIT専門家の中で過小評価されている問題があります。それは、グリーンITソリューションです。つまり、提供されるソフトウェアソリューションによって全体的なエネルギー消費に影響を与えるさまざまなプログラミング概念です。データ処理は、全体的なCPU負荷に影響するため、ワークステーションとサーバーの両方の電力消費レベルに影響します。このことは、中小企業にとってはわずかな差にすぎませんが、日常のビジネスプロセスで大量のエネルギーリソースを消費する大企業には無視できない問題です。
私たちが下したもう1つの結論は、情報保護のフォーカスは、インターネットとそれに含まれるさまざまな脅威だけに向けられるものではないということです。
現在、数多くの解決すべき問題があります。達成された結果や投資されたリソースにかかわらず、産業インテリジェンス、エンジニアリングスカウト、関連する活動が、日々のビジネス活動のアプローチを継続的に改善しているという事実を理解する必要があります。前述したように、IT業界は、最先端のコンセプトと長年にわたって実証されてきたソリューションの両方をベースとした現代的なソリューションの研究開発にリソース、資本、エネルギーを投資するべきです。こうしたニーズは、情報とビジネスプロセスの継続性が必須となる政府や大企業にとって重要なものです。
量子技術の出現により、デジタルデータを保護するための代替ソリューションを探す必要が生じています。この問題は、今後数十年で主流のテーマになるでしょう。このプロジェクトで得た経験から、RAD Studioを活用し、比較的短期間で限られた予算内でも、高度な効率性を備えた最新のポスト量子保護アプリケーションを構築できることが分かったのは収穫です。
参考文献
[1] Pfitzman B., Information Hiding Terminology, Information hiding: first international workshop, Cambridge, UK. Lecture Notes in Computer Science, Vol. 1174. Springer-Verlag, Berlin Heidelberg New York, 1996, pp. 347 – 350.
[2] Anderson R., Petitcolas F., On the Limits of Steganography, IEEE Journal on Selected Areas in Communications, Vol. 16, No. 4, May 1998, 474 – 481.
[3] Bender W., Gruhl D., Morimoto N., Lu A. Techniques for Data Hiding. IBM Systems Journal Vol. 35, No. 3&4. MIT Media Lab, 1996, 313 – 336.
[4] Petitcolas F., Anderson R., Kuhn M. Attacks on Copyright Marking Systems. Second Workshop on Information Hiding, Portland, Oregon, April. These proceedings, 1998.
[5] Johnson N.F., Jajodia S. Steganalysis of the image created using current steganography software, Proc. 2nd International Workshop on Information Hiding, 1998, LNCS, v.1525, 273 – 289.
[6] Kutter M., S. Voloshynovskiy, A. Herrigel. The Watermark Copy Attack. In Proceedings of SPIE: Security and Watermarking of Multimedia Content II, Vol. 3971, January 2000, San Jose, CA, USA.
[7] Gerasimov G.T, P.G.Gerasimov . Contemporary forms of information protection, Practical aspects of object-relational encryption, International Conference on Regional and National Security 2000.
[8] Герасимов Г.Т., П.Г.Герасимов, Contemporary forms of information protection, НАУЧНА КОНФЕРЕНЦИЯ 2018 “Политиката на Европейския съюз по защитата на информацията и личните данни”, стр.187- 195, https://www.aadcf.nvu.bg/scientific_events/papers_is/IS_2018.pdf
[9] File package Manager, FPM II spe, End-user online help, End-user online help
この記事は、Enterprise Article Showcaseへ投稿されたものです。RAD Studio、Delphi、C++Builderと関連技術を用いて構築した開発プロジェクトの成功事例をお持ちの方は、ぜひご連絡ください。詳細はこちらをご覧ください。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition