暗号プリミティブは、コンピュータセキュリティシステムの暗号プロトコルを構築するためによく使用される、確立された低レベルの暗号アルゴリズムです。[ 1 ]これらのルーチンには、一方向ハッシュ関数や暗号化関数などが含まれますが、これらに限定されません。
暗号システムを構築する際、設計者は暗号プリミティブを最も基本的な構成要素として使用します。そのため、暗号プリミティブは、明確に定義された、非常に信頼性の高い方法で、特定のタスクを実行するように設計されています。
暗号プリミティブは構成要素として使用されるため、非常に信頼性が高く、仕様どおりに動作する必要があります。たとえば、暗号化ルーチンがX回のコンピュータ操作でのみ解読可能であると主張しているにもかかわらず、X回よりもはるかに少ない操作で解読された場合、その暗号プリミティブは機能不全に陥っています。暗号プリミティブに機能不全が発見されると、それを使用するほぼすべてのプロトコルが脆弱になります。暗号ルーチンの作成は非常に困難であり、信頼性をテストするには長い時間がかかるため、新しい暗号システムのニーズに合わせて新しい暗号プリミティブを設計することは、基本的に賢明でも安全でもありません。その理由は次のとおりです。
暗号プリミティブは、 TLS、SSL、SSHなど、あらゆる暗号システムの構成要素の一つです。暗号システムの設計者は、そのセキュリティを決定的に証明する立場にないため、使用するプリミティブを安全であるとみなさなければなりません。プロトコルで使用するのに最適なプリミティブを選択することで、通常は最高のセキュリティが得られます。しかし、あらゆる暗号システムには構成上の脆弱性が存在する可能性があり、それらを回避するのは設計者の責任です。
暗号プリミティブはそれ自体では機能がかなり限られているため、暗号システムとは言えません。例えば、単純な暗号化アルゴリズムでは認証メカニズムも明示的なメッセージ完全性チェックも提供されません。複数のセキュリティ要件に対応できるのは、セキュリティプロトコルで組み合わせた場合のみです。例えば、暗号化されているだけでなく改ざんからも保護されたメッセージ(つまり、機密性と完全性が保護されたメッセージ)を送信するには、 DESのようなエンコードルーチンとSHA-1のようなハッシュルーチンを組み合わせて使用できます。攻撃者が暗号化キーを知らない場合、メッセージのダイジェスト値が有効になるようにメッセージを改ざんすることはできません。
暗号プリミティブを組み合わせてセキュリティプロトコルを作成すること自体が、一つの専門分野です。ほとんどの悪用可能なエラー(つまり、暗号システムのセキュリティ上の脆弱性)は、プリミティブの設計エラー(常に慎重に選択されていると仮定した場合)ではなく、プリミティブの使用方法、つまりプロトコルの設計不良やバグのある実装、あるいは不十分な実装に起因します。プロトコルの数学的解析は、本稿執筆時点では成熟していません。BANロジックなどの自動化された方法で検証できる基本的な特性がいくつかあります。完全な検証方法(例えばSPI計算)もありますが、非常に煩雑で自動化できません。プロトコル設計は、深い知識と多くの実践を必要とする芸術であり、それでも間違いはよく起こります。実際のシステムの例は、OpenSSLの脆弱性ニュースページ(こちら)で見ることができます。