第3章 計画されたセキュリティ機能
破られにくい暗号技術と擬似乱数の使用

ファイル内のデータや、ネットワーク上を流れるデータについて、その秘匿性(confidentiality)やインテグリティ(integrity)を確保するためのセキュリティ機能には暗号技術等が利用される。

暗号技術には、共通鍵暗号技術の他、公開鍵暗号技術があるが、今日の暗号技術は、両者を組み合わせて統合的に利用されることが一般化していることに加えて、ハッシュ関数や擬似乱数生成技術も組み合わされて利用されることがある。(例えば、今日のセキュア・プロトコルは、鍵交換機能には擬似乱数生成技術と組み合わされて公開鍵暗号技術が使われており、暗号化機能には共通鍵暗号技術暗号機能が利用されている。)

また、各暗号技術分野には、複数のアルゴリズムが考案されており、それぞれに安全性や実装性の観点から特徴をもつ。

セキュリティ要件に応じた設計

(1) 暗号アルゴリズムの選択

要件が求めるセキュリティ機能を設計する際には、その要件に適合する暗号技術をアルゴリズム名のレベルで意識して選択する必要がある。その際には、「CRYPTREC暗号リスト」を参照していただきたい。

(2) セキュリティ関連APIの把握

一方、今日のソフトウェア開発環境においては、暗号技術について、多くのライブラリ関数が提供されている。アプリケーション・ソフトウェアを開発する場合、暗号技術や擬似乱数生成技術をスクラッチから開発する必要は無い。ソフトウェアを開発する観点からは、APIについての知識を深めておく必要がある。

図3-3: 暗合技術の交換可能性を確保

セキュリティ関連のAPIについては、IPAのサイトにはセキュリティ関連APIについての調査があるので、参考になる。



実装

(1) 暗号アルゴリズムの交換可能性を留意する

各暗号アルゴリズムの安全性には技術的な有効期限がある。例えば、今日、ハッシュ関数として、まだ使われているMD5については、その衝突困難性は容易に再現可能なものとなってしまっている。このように、暗号技術の安全性は、新たな解読方法の発見や、CPUの能力の向上によって、変化するのでCRYPTRECやNISTのサイトをチェックすることが奨められる。

また、このような暗号アルゴリズムや、ハッシュ関数を実装するソフトウェアについては、交換可能性を確保するように留意する必要がある。

(2) 擬似乱数生成ロジックについて留意する

擬似乱数生成ロジックにおいては、最初に投入されるシード(種)の選択が重要であり、これに基づいて撹拌・平滑化が行われる必要がある。アプリケーション・ソフトウェアを開発する際にも必要とされることがあるが、安直な実装が散見される。

乱雑性については、その検定が行われているので、参照されたい。

また、最近では、CPUが命令としてもつ擬似乱数生成機能を利用するためのライブラリ関数が提供されているので、吟味して利用することができる。