⑤セキュリティプロトコルの必要性の続きです。
書籍 1.4.3章 暗号技術に対する攻撃 以降で掲題の解説がありますが、ここでは記事内容を基に私の解釈による暗号技術の注意点としてまとめてみます。
暗号技術に対する攻撃方法
1.暗号鍵に対する攻撃
暗号鍵の探索空間(=暗号がとりうる値の総数?)が小さければ総当たり攻撃が有効となる。たとえばSHAで生成するビット数は大きい方がより安全、という事だと思います。
攻撃者は大量の計算資源と時間が必要ではありますが、たとえば(よく言われるように)量子コンピューターのような革命的な技術イノベーションが発生すれば根本的に現在の暗号化技術は危うくなるのかもしれません。
2.プロトコルなど暗号を使用する際の複雑性
暗号技術そのものは単純かつ用途が特化されているため攻撃者は推測がしやすい側面もあると思われます。実際に暗号化を使用する際には、鍵交換や署名などいろいな要素技術の組合せますが、このような複雑さが増すとより攻撃れやすい、という事もあります。中でもプロトコルは大変複雑な為攻撃されやすい、とも言えます。
3.プロトコルの実装に対する攻撃
ここで言う実装、とはプログラミングやプログラム・プロトコルなどのアーキテクチャー・設計、というような意味と理解しました。エンドユーザーレベルが開発したプログラムのバグや不適切な設計はもとより、利用する言語やライブラリー、ミドルウェア、OSの脆弱性もこの範疇に入ると思います。
暗号ライブラリーの多くはC言語のような低レベルの言語で書かれており、(中にはパフォーマンス目的でアセンブラで書かれているものもあり)、一般的にいえば脆弱性が潜んでいる可能性はあるといえます。バグ以外にも、ライブラリーや関数など様々な技術を間違った使用方法を避けて実装するには高度なスキルが必要です。
たとえば経験の浅いプログラマーがナイーブな実装をすると(※この場合のナイーブ、とはセキュリティ的な考慮をせずに機能だけを考えて単純に実装してしまう、というような意味合いだと理解しました)、タイミング攻撃(timing attack=処理の時間を観察することで暗号を破る)を仕掛けられる可能性があります。
4.暗号技術以外の脆弱性に対する攻撃
これにはプログラムなどソフトウェアの実装以外にも、鍵の運用管理などが含まれます。
よく言われることとして 暗号は攻撃されずに迂回(バイパス)される という事が言われます。暗号化技術が鞏固でもそれ以外のソフトウェアスタックの脆弱性を攻撃されるという意味です。
あるいは、運用面を含めて暗号化の秘密鍵・公開鍵を不正に取得する攻撃も含まれます。簡単にサーバーに侵入して鍵を手に入れるコストが安いならソフトウェア的な様々な攻撃を組み立てるよりも容易・安価と言える場合もありそうです。
暗号技術に対する攻撃の回避方法
基本ルールとして以下が考えられます。
1.確立されたプロトコルを使用する (独自に暗号方式を設計するのはリスクが高い)
2.高レベルのライブラリーを使う。暗号処理を直接操作するコードは自身では書かない
3.確立された暗号を十分な鍵長で使う。私個人の理解で言い換えるとパフォーマンスその他考慮して許容される限り長い鍵長の暗号を採用する、という意味だと思います。
暗号強度(暗号の強度)
暗号強度とは暗号を破るのに必要な操作の回数で測定します。この暗号強度をビット安全性(bits of security)と呼びます
共通鍵暗号化方式を使用する操作の強度は、「ビット安全性が増えると指数関数的に指数関数的に上がります。つまり鍵長を1ビット増やせば2倍強力になるということです。」となっていますが、意訳すると鍵長が長いほどビット安全性が指数関数的に向上する、という意味かと思います。
暗号化強度は長期間での強度についても考慮が必要
原書ではいくつかの鍵暗号化方式のビット安全性の説明がありますがスキップします。(原著お読みください)
暗号化は、実際利用する現在、だけを考慮しがちですが、暗号化してデータを保存する、のようなケース例では長期における暗号強度も劣らず重要です。
暗号に対する攻撃は、大勢の人数で(小さなコンピューティングリソースでも無数に集めれば)アタックする、より新しいハードウェア(処理能力の高いハードウェア)を利用で相対的な強度が徐々に低下する、とも言えそうです。
CRYPTREC による暗号化強度表
原著ではさらにNISTによる等価安全性の表も掲載していますが、より新しい時点でのデータ(だと思います)、
CRYPTREC=電子政府推奨暗号の安全性を評価・監視し、暗号技術の適切な実装法・運用法を調査・検討する日本政府のプロジェクトによる暗号化強度の表を見つけたので以下引用します。
出典:暗号強度要件(アルゴリズム及び鍵長選択)に関する設定基準 2022.03
暗号技術の組合せによるセキュリティ強度の考え方
これもCRYPTERECの上記PDF中からの引用です。

ネットワーク攻撃の分類
ネットワーク攻撃において、送信者―受信者の間でやり取りする通信を横取りする攻撃を中間者攻撃(MTM攻撃 man-in-the-middle attack)とよびます。
さらに攻撃者が単に両社のデータ(会話)を聞いているだけの場合、受動的ネットワーク攻撃(受動的攻撃)と呼び、攻撃者が積極的に通信内容の操作や何らかの方法で通信両者の通信に影響を及ぼす場合、能動的ネットワーク攻撃(能動的攻撃)と呼びます。
アクセスの奪取
仮に、攻撃者がネットワーク(例 海底ケーブル)や中間ノード(例 ルーター)にアクセスできればネットワーク上の通信パケットを見たり、妨害が可能になります。これらは通信会社と結託する、ネットワーク機器を乗っ取る等の方法で実現できます。
最も簡単なネットワーク攻撃の方法としては、犠牲者が利用するネットワークに介在して、通信データが攻撃者のノードを通過するように仕向けることです。
たとえば、認証の無い無線ネットワークなどが該当するかもしれません。
原著で記載されている攻撃の例を列記します。
ARPスプーフィング ARP spoofing
ARP(Adress Resolution Protocol)はMACアドレス(NICに割当された製造番号S/N)とIPアドレス間の変換を行うプロトコルで、攻撃者は任意のIPアドレスを特定のMACアドレスに結び付けて経路を操作する事が出来ます。
WPADハイジャック(WPAD Hijacking)
WPAD(Web Proxy Auto-Discovery)プロトコルはブラウザーがhttpプロキシーの設定を自動取得する際に使用しているプロトコルで、DHCPやDNS等を使用している場合もある。攻撃者はローカルネットワーク上にプロクシーを起動して、プロキシーを探しているクライアントに攻撃者のプロクシーのアドレスを通知することで攻撃を可能とします。
DNSハイジャック(DNS hijacking)
DNSの管理組織(レジストラー)と共謀する等でドメイン名を乗っ取ったり、DNS(サーバー?)の設定を変更することで通信者のトラフィックを正規のルートではないサイトへ流して攻撃者が乗っ取ります。
DNSキャッシュポイゾニング(DNS CACHE POISONING)
DNSサーバーのキャッシュの脆弱性を悪用して、不正なドメイン情報をDNSキャッシュに登録し攻撃をしかける。そのDNSサーバーを利用する全利用者に影響が及ぶ
BGP経路ハイジャック(BGP route hijacking)
BGP(Border Gateway Protocol)はインターネット上のルーターが利用する経路制御プロトコルで、ルーターが問い合わせるIPネットワークがどこにあるかをルーターが見つける際に利用している。どこかのルーターが不正な経路を受け入れてしまうと、そのIPネットワークに対する通信が不正なサイト=攻撃者にリダイレクトされてしまう。
受動的な攻撃
**受動的な攻撃が最も有効なのはトラフィックが暗号化されていない場合です。実例として2013年に世界中の政府機関がインターネットトラフィックを継続的にモニター収集していた件が紹介されています。(一例として?)英国諜報機関GCHQが英国の全インターネットトラフィックを記録して3日間保管していた、という件が紹介されています。
上記からの重要なデータについてはより長期間保管されている可能性を指摘し、「IETFが『広範囲なモニタリングは攻撃に他ならない、よって可能な限り暗号化によって防御すべき』という宣言を出した」と紹介しています。
受動的攻撃は暗号化されたトラフィックであっても将来的に安全とは言い切れない場合がある。技術革新(コンピューターの性能向上、暗号化技術の脆弱性の発見など)で暗号データの復号化が容易になってしまうケースなどを指摘しています。
原書ではとくにRSAベースの鍵暗号化アルゴリズムについて触れています。TLS1.3以前に利用されていたRSAベースの鍵暗号化アルゴリズムでは、サーバー側のRSA鍵を使う事で以前にやり取りされた通信も復号できてしまう特性(脆弱性?)があります。RSA以外の鍵交換アルゴリズムではこのような事は無い為「前方秘匿性(Foward secrecy)がある」と呼びます。
また暗号化されていないトラフィックは依然多く、それらをまとめて収集する事は完全に自動でできてしまうため受動的攻撃のきけんせいが高い、としています。暗号化の導入状況を観察する方法としてGoogleのTransparency Report を紹介しています。
能動的な攻撃
こちらの記事にまとめました。


