業務ソフトに手を加えずに暗号化を実現する
ウィルス対策ソフトや情報漏えい防止用のソフトは、ユーザが利用するために積極的に起動して利用するブラウザやメールソフトなどとは対極にある、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。日立ソフトウェアエンジニアリング(株)が開発した秘文Advanced Edition(以下、秘文AE)もその1つで、Windowsプラットホームでの暗号化と情報漏えい防止という目標を達成するために開発していますが、もう1つ、エンドユーザの運用を極力妨害しないように、いかに目立たない存在となるかにも力を注いでいます。
秘文AEの機能の1つに暗号化があります。一般に、データの暗号化は暗号アルゴリズムと鍵さえあれば任意のデータ・ファイルを暗号化することが可能です。多くのアプリケーションでは、ファイルを金庫に入れるようにエンドユーザが意識してアプリケーションを通じて安全に保存する必要があります。逆に、ユーザに意識させずに暗号化し、人為的なミスによる暗号化漏れを防ぐためには、ファイルシステムに書き込む前に自動的に暗号化する必要があります。秘文AEが採ったアプローチは、フィルタドライバにより全てのアプリケーションのI/Oを捕捉することでファイルという論理的な単位での透過的な暗号化・復号をすることでした。基本的な機能をフィルタドライバに持たせることで、エンドユーザがMS-Wordで文章を保存しようと、メーラにより受信したデータが自動的に保存されようと、監視している秘文AEによって自動的に適切な暗号化・復号処理を実現できます。
自動的なファイル暗号化が抱える課題
フィルタドライバによりI/Oを捕捉することで、論理的にはアプリケーションに依存しない全ファイルの暗号化を実現することができます。しかし、自動的なファイル暗号化を実現しつつ、アプリケーションの動作に影響を与えないようにするためには、大きく以下の2つの課題があります。
- ランダムアクセスへの対応
- ファイルサイズ増加の回避
ランダムアクセスへの対応
アプリケーションのファイルI/Oは、ファイルの先頭から順番にアクセスされないケースがあります。性能等を考慮して秘文AEではブロック暗号を採用しましたが、このときに問題となるのが、暗号化処理のオーバーヘッドです。暗号アルゴリズムをCBC(Cipher Block Chaining)モードや、CFB(Cipher FeedBack)モード、OFB(Output FeedBack)モードなどの暗号ブロックのフィードバックが必要なモードで動作させると、ファイルのある場所の暗号化にはその直前の暗号化処理の結果が必要となります。つまり、ファイル途中に書き込みが発生すると、書き込み部分が変わってしまうため、その位置からファイルの最後までを再暗号する必要が出てきます。それも、書き込みが発生する都度です。これではアプリケーションから見えないどころか、性能劣化により余計に目立つ存在となってしまいます(読み込み時は、復号のみで再暗号化はありませんのでこのような問題はありません)。
この問題を解決するために、ファイルをある一定のサイズ(レコード)ごとに区切り、そのレコードを単位にして暗号化処理を行うようにします。こうすることで、書き込む際に復号と再暗号化する範囲が変更対象のデータを含むレコードの終端までに限定されるため、I/Oごとにファイル全体を処理する必要がなくなります。
アクセスのたびに暗号化・復号処理のオーバーヘッドとランダムアクセスを可能にするための前記処理のオーバーヘッドが発生しますが、レコードサイズの最適化により体感する処理の重さはある程度軽減することが可能です。
ファイルサイズ増加の回避
CBCモードのようなブロック単位で暗号化する方式の場合には、暗号化するデータをブロック長に合わせるためにパディングが必要となります。このパディングの影響でファイルサイズが増加してしまい、アプリケーションから見えない処理とはいえない状態となります。ここで問題となるのは、アプリケーションがファイルサイズを保持して整合性をチェックしているケースや、ファイルサイズ増加がウィルス対策ソフト等に検知され誤認識してしまうリスクがあるということです。このため、ファイルサイズの増加は回避する必要があります(これを回避できる暗号モードもありますが、性能等を考えるとCBCモードという結論になります)。
そこで、秘文AEでは、ファイル末尾のブロック長に満たない数バイトをCFBモードで1バイトづつ暗号化し、それ以外をCBCモードで暗号化することでファイルサイズ増加の問題を回避しています。CFBモードがCBCモードに比べて処理が遅いといっても最後の数バイトだけが対象となるのでオーバーヘッドは誤差レベルとなり全体の処理速度には影響を与えるほどではありません。
この方式を採用することで、ファイルの伸張や切り詰めでファイル末尾の暗号化・復号処理が複雑になりますが、アプリケーションから隠すには必要な処理なのです。
秘文AEの挑戦
秘文AEは、これらの暗号化・復号処理を駆使して、アプリケーションやユーザが意識することなくファイル暗号化を実現しています。フィルタドライバによる秘文AEの暗号化技術には以下のメリットがあります。
- 暗号化のし忘れがない(常に暗号化データとしてメディアに書き込まれている)
- アプリケーションを変更する必要がない(秘文AEが自動的にI/Oを処理するため、アプリケーションの改造やプラグインの組み込み等の手間が発生しない)
- ファイルシステムに依存しない暗号化・復号ができる(秘文AEはファイルシステムの上位でI/OをフィルタしているためNTFS、FAT32といった異なるファイルシステムに同時に対応できる)
- もちろん、外部記憶装置(外付けHDD、USBメモリ、リムーバブルメディア)にも対応できる
秘文AEでは、こうしたフィルタドライバでの暗号化技術で情報セキュリティの一翼を担う一方、持ち出し制御機能、ログ取得機能と組み合わせてトータルなセキュリティソリューションを提供しています。
著者について
秘文開発の初期から現在までトップテクニカルエンジニアとして活躍。現在も開発の第一線で秘文の発展に尽力している。
用語解説
- 秘文Advanced Edition(秘文AE)
日立ソフトが開発したセキュリティパッケージです。
http://hitachisoft.jp/products/hibun/ - フィルタドライバ
フィルタドライバは、ファイルに対する要求をフィルタ(途中で受信)し、機能を拡張したり置き換えたりすることができるドライバです。 - ブロック暗号
DESやAESに代表されるブロック暗号は、一定の長さのブロックごとに暗号化処理を行います。 - CBC(Cipher Block Chaining)
CBCモードはブロック暗号の暗号化処理の1つで、直前のブロックを暗号化した結果を次の暗号化処理の入力にするモードです。 - CFB(Cipher FeedBack)
CFBモードはブロック暗号の暗号化処理の1つで、ブロック長を任意に設定できるため、バイト・ビット単位で暗号化・復号することができます。 - OFB(Output FeedBack)
OFBモードはブロック暗号の暗号処理の1つで、初期ベクタを暗号化した結果を平文ブロックの暗号化処理に用いるモードです。初期ベクタは平文ブロックの暗号化処理のたびに更に暗号化します。 - 初期ベクタ(Initial Vector)
CBCモードでは、直前のブロックの暗号化結果が必要となりますが、1番最初のブロックを暗号化するために初期ベクタと呼ばれる外部から与えられた値を用います。 - パディング(Padding)
ブロック暗号では、ブロック長の倍数になるように適当な文字を足すことを意味します。