暗号技術 技術ガイド

既存の文法ページと同じUIで、暗号技術の全体像を章立てで学べるガイドです。基礎から耐量子暗号までを段階的に整理しています。

暗号技術 200 キーワード章・節構成キーワード一覧

第1章 基礎概念

本章では、暗号技術を読むための最小語彙を揃えます。平文・暗号文・鍵の役割を区別し、以降の章で方式名を文脈で理解できる状態を目標にします。

01

暗号の基本語彙

第1章 基礎概念

本節では、暗号分野の最初の共通語彙として `暗号学` `平文` `暗号文` の関係を整理します。以降の章で方式や攻撃手法を学ぶ前提として、何を保護対象とし、どの状態のデータを扱っているかを正確に区別できることが重要です。

暗号とはなにか?基礎

暗号は『情報を隠す技術』と説明されがちですが、実務ではそれだけでは不十分です。

安全なシステムには、内容を第三者に読ませない機密性、途中で書き換えられていないことを確認する完全性、そして送信者や配布元が本物であると示す真正性が必要です。

機密性・完全性・真正性と代表対策の対応図
機密性は暗号化、完全性はMAC(Message Authentication Code)、真正性は電子署名で支えるのが基本構成です。

暗号技術はこの3つを組み合わせて、ネットワークや保存先が信用できない状況でも情報の価値を守るために使われます。

平文と暗号文の対応関係基礎

平文は保護したい元データ、暗号文は暗号アルゴリズムと鍵によって変換されたデータです。

平文から暗号文へ変換し復号する最小パイプライン図
平文 -> 暗号化 -> 暗号文 -> 復号 -> 平文 の基本フロー。鍵とノンスの管理が成立条件です。

重要なのは、同じ平文でも鍵やノンスが変わると暗号文の見た目が変化する点で、これによりパターン漏えいを抑えます。

受信側は正しい鍵と必要なパラメータを使って復号し、元の平文を再構成します。この流れを理解しておくと、後続の節で出てくるモードや鍵管理の必要性が自然につながります。

02

鍵と暗号操作の基礎

第1章 基礎概念

本節では、`鍵` と `鍵長` を中心に、`暗号化` と `復号` がどのように一対の操作として設計されるかを押さえます。共通鍵暗号・公開鍵暗号のどちらでも、秘密情報として保護すべき対象は `秘密鍵` であり、アルゴリズム自体の秘匿ではない点が実運用上の基本です。

鍵と鍵長の考え方基礎

鍵は、同じ暗号方式でも結果を分岐させる最重要パラメータです。

鍵長は候補数の大きさに直結し、総当たり攻撃の計算コストを押し上げますが、数字だけで安全性を判断するのは危険です。

送信者と受信者の鍵・平文・暗号文の役割図
送信者と受信者が保持する情報の違いを整理すると、秘密鍵管理の責任境界が明確になります。

実際の強度は、暗号方式の設計、実装品質、鍵の生成・保管・配布の運用を含めて決まります。つまり 256bit という値は必要条件のひとつであり、十分条件ではありません。

鍵長が長い = 常に安全 ではありません。鍵漏えい、乱数品質不足、脆弱なモード選択があると、理論上強い鍵長でも実システムは破られます。
暗号化と復号の基本フロー基礎

送信側は平文に対して暗号化を行い、受信側は対応する鍵情報で復号を行います。

このとき重要なのは、暗号化関数そのものを隠すのではなく、鍵を厳重に管理する設計思想です。

現代暗号はアルゴリズム公開を前提に検証されるため、運用上の焦点は鍵の漏えい防止、アクセス制御、ローテーション計画に置かれます。フロー理解と鍵管理は、切り離せない一体の設計課題です。

03

暗号方式の全体像

第1章 基礎概念

`ハイブリッド暗号` は、公開鍵暗号の鍵配送能力と共通鍵暗号の高速性を組み合わせる実践的な構成です。一般に最初に公開鍵暗号でセッション鍵を共有し、その後の大量データは共通鍵暗号で処理します。この分業を理解しておくと、TLS(Transport Layer Security)などの実プロトコルを読み解きやすくなります。

共通鍵暗号と公開鍵暗号の役割分担基礎

実サービスでは、公開鍵暗号だけ・共通鍵暗号だけで全処理を賄うことは稀です。

公開鍵暗号は鍵配送や相手認証に強い一方で計算コストが高く、共通鍵暗号は大量データを高速に処理できます。

公開鍵暗号と共通鍵暗号の責務分担図
鍵配送は公開鍵暗号、データ保護は共通鍵暗号という分業がハイブリッド暗号の基本です。

そこで現実的には、最初の安全な鍵共有に公開鍵暗号を使い、通信本体は共通鍵暗号で保護する分業が採用されます。この責務分担を理解すると、TLSの設計意図を読み解きやすくなります。

ハイブリッド暗号の処理手順基礎

ハイブリッド暗号の典型手順は、(1) 受信側の公開鍵を取得、(2) 送信側で一時的なセッション鍵を生成、(3) その鍵を公開鍵で暗号化して送信、(4) 以後の本文通信を共通鍵暗号で実行、という流れです。

ここでの要点は『公開鍵暗号は本文を直接守る主役ではなく、共通鍵を安全に渡す導入役』である点です。手順のどこで検証が必要かを意識すると、実装時の抜け漏れを減らせます。

公開鍵暗号で本文すべてを暗号化する設計は、性能面でも運用面でも非効率です。実装ではセッション鍵配送と本文暗号化を分離してください。

第2章 数学的基盤・理論モデル

本章では、公開鍵暗号の安全性を支える数学と言語を最小限で押さえます。式展開そのものより、どの問題が難しいから安全なのか、証明モデルに何を仮定しているかを読める状態を目標にします。

04

代数構造の基礎

第2章 数学的基盤・理論モデル

本節は、後続で登場する離散対数や楕円曲線暗号の前提語彙を揃える導入です。数学を厳密に証明するのではなく、暗号方式でなぜ群や有限体が便利なのかを理解することを目的にします。

群の基本性質基礎

群は、ある演算に対して 閉包 結合則 単位元 逆元 を満たす集合です。暗号で群が重要なのは、鍵交換や署名の計算を安定して定義でき、攻撃者と利用者が同じ演算規則を共有できるからです。特に離散対数系では、群構造があることで計算は実行できるのに逆問題だけが難しい、という非対称性を設計に取り込めます。

群の4性質と暗号での利用先を示す図
群の性質は、鍵交換や署名の計算規則を安定して定義するための土台になります。
有限体の直観基礎

有限体は、要素数が有限でありながら加減乗除に相当する演算が閉じる代数構造です。暗号実装では、AES(Advanced Encryption Standard)のバイト演算や楕円曲線上の点演算のように、計算範囲を一定に保って扱う場面で使われます。ポイントは、整数の通常演算とは規則が異なることを先に受け入れることです。有限体の規則を理解すると、実装コードの演算がなぜその形になるかを読み解きやすくなります。

05

計算困難性にもとづく安全性

第2章 数学的基盤・理論モデル

本節では、暗号の安全性が『絶対に解けない』ではなく『現実的コストで解けない』に基づくことを整理します。どの難問に安全性を還元しているかを読む視点を持つのが狙いです。

素因数分解問題とRSA基礎

RSA(Rivest-Shamir-Adleman)では、公開鍵暗号化や署名検証の計算は効率的に実行できますが、秘密鍵の導出につながる逆計算は素因数分解問題の困難性に依存します。つまり方式そのものの安全性ではなく、背後の難問が短時間で解けないことが前提です。暗号レビューでは、鍵長・パラメータ・実装方式がこの前提を崩していないかを確認する必要があります。理論と運用の接続点を意識することが重要です。

RSAの計算しやすい操作と困難な逆問題の対応図
公開鍵での処理は容易でも、秘密鍵導出につながる逆問題は困難という非対称性が安全性の核です。
離散対数問題と楕円曲線基礎

離散対数問題は、ある演算結果から指数成分を逆算する問題で、離散対数系暗号の安全性基盤です。楕円曲線版の離散対数問題(ECDLP)は、同等安全性をより短い鍵長で実現しやすい性質があり、現代プロトコルで広く採用されています。ただし鍵長だけで優劣を決めるのではなく、実装成熟度、ライブラリ品質、運用要件まで含めて方式を選ぶ必要があります。

06

安全性証明のモデル

第2章 数学的基盤・理論モデル

本節では、暗号論文でよく見る安全性証明を読み解くために、還元証明とモデル依存性の2点を押さえます。証明の有無だけでなく、どの前提で成立するかを確認する視点を身につけます。

還元証明の考え方応用

還元証明は『もし方式を破れる攻撃者がいるなら、既知の難問も解けてしまう』という形で安全性を示す手法です。ここで重要なのは、証明が攻撃可能性を完全否定するわけではなく、設定した攻撃モデル内で矛盾を作る論法だという点です。実務では証明対象、仮定、攻撃者能力の範囲を読み取り、実装と運用がその前提から外れていないかを確認する姿勢が必要です。

ランダムオラクルモデルの前提と限界応用

ランダムオラクルモデルは、ハッシュ関数を理想的なランダム関数として扱うことで、証明を比較的単純に記述できる枠組みです。設計初期の妥当性確認には有効ですが、実装時には具体的ハッシュ関数の性質やAPI利用方法が影響するため、モデルそのままの安全性を機械的に期待してはいけません。証明結果を『強い根拠』として使いつつ、実装レビューで前提との差分を埋めるのが実践的な使い方です。

理想モデルと実装現実のギャップを示す図
証明モデルの前提と実装現場の差分を可視化し、レビュー対象を明確化します。
証明済み = そのまま安全 ではありません。モデル外の実装差分(入力正規化、エラー処理、乱数不備)で脆弱性は成立し得ます。

第3章 共通鍵暗号(必須)

本章では、現場で最も利用頻度の高い共通鍵暗号を、方式分類・運用要件・モード選定まで通して整理します。アルゴリズム名の暗記ではなく、誤用を避けるための判断軸を身につけることが狙いです。

07

古典暗号からの導入

第3章 共通鍵暗号(必須)

本節では、古典暗号がなぜ破られたかを手がかりに、現代暗号で必要な性質を逆算して理解します。歴史の紹介ではなく、弱点から設計要件を抽出する視点を重視します。

古典暗号の仕組みと限界基礎

シフト暗号や単純置換暗号は、規則が明快で学習には適していますが、文字頻度やパターンが残るため統計的解析に弱いという欠点があります。攻撃者は暗号文だけを観測しても、言語の偏りを利用して平文候補を絞り込めます。この失敗から学べるのは、現代暗号には『見た目のランダム性』『鍵依存性』『再利用耐性』が不可欠だという点です。古典暗号は現代設計要件を理解するための反面教師です。

古典暗号で頻度分析が成立する様子を示す図
平文頻度の偏りが暗号文に残ると、統計解析の足掛かりになります。
ワンタイムパッドの理想性と運用困難基礎

ワンタイムパッドは、平文と同じ長さの真にランダムな鍵を一度だけ使う条件下で、情報理論的に解読不可能とされる理想方式です。しかし実運用では、大量鍵の安全配布、再利用防止、保管コストが極めて重く、一般システムには適用しづらいという問題があります。このギャップが、現代暗号で『理論安全性』と『運用可能性』の両立を重視する理由です。

08

共通鍵暗号の方式分類

第3章 共通鍵暗号(必須)

本節では、共通鍵暗号をブロック暗号とストリーム暗号に分け、処理モデルの違いが設計判断にどう効くかを整理します。方式名の暗記ではなく、用途選定の基準づくりが目的です。

ブロック暗号基礎

ブロック暗号は固定長ブロック単位でデータを処理する方式で、代表例はAESです。単体では長文データ全体の安全運用を保証できないため、CBCやGCMなどの動作モードを組み合わせて利用します。設計時には、並列化のしやすさ、改ざん検知の有無、実装ライブラリの成熟度を合わせて判断することが重要です。ブロック暗号は『方式 + モード』で初めて実用単位になります。

ブロック暗号とストリーム暗号の処理単位比較図
ブロック単位処理と逐次処理の差を先に押さえると、モード選定の理由が明確になります。
ストリーム暗号基礎

ストリーム暗号は、擬似乱数列(キーストリーム)を平文に逐次適用して暗号化する方式です。低遅延通信や逐次データ処理に適していますが、同一鍵・同一ノンス再利用が致命的な情報漏えいにつながるため運用規律が不可欠です。実装では鍵管理よりもノンス管理で事故が起きやすいので、生成・記録・再利用防止の仕組みをプロトコル設計段階で固定しておく必要があります。

同一鍵と同一ノンスの再利用は、平文差分を露出させる重大事故につながります。ノンス一意性を自動で担保する設計を採用してください。
09

安全に使うための周辺要素

第3章 共通鍵暗号(必須)

本節では、暗号方式そのものより実装で失敗しやすい要素を先に整理します。IV(Initialization Vector: 初期化ベクトル)やノンス、パディング、認証タグ検証の扱いを誤ると、強いアルゴリズムでも安全性が崩れる点を押さえます。

IV・ノンス・パディングの正しい扱い基礎

IVとノンスは多くのモードで暗号化ごとに変化させるべき値で、秘密である必要はなくても一意性や再利用禁止が重要です。パディングはブロック境界を揃えるための手続きで、PKCS#7(Public-Key Cryptography Standards #7)のような規則を送受信で一致させないと復号失敗や脆弱性の温床になります。つまり周辺パラメータは補助情報ではなく、安全性条件そのものです。暗号API呼び出し時に暗黙仕様を残さず、明示的に固定することが大切です。

IV・ノンス・パディング・AEADの関係図
方式本体より先に、周辺パラメータの要件を固定することが実装事故を防ぎます。
IVとノンスを『秘密だから管理する』のではなく、『再利用禁止だから管理する』と理解してください。要件を混同すると事故が起きます。
AEADの設計意義基礎

AEAD(Authenticated Encryption with Associated Data)は、機密性と完全性を一体で提供するための暗号構成です。従来の『暗号化だけ実施して改ざん検知は別処理』という設計では、実装順序や検証漏れで脆弱性が生まれやすくなります。AEADを採用すると、暗号文と追加認証データをまとめて検証でき、実装者が守るべき手順が明確になります。ただし最終的な安全性は、タグ検証失敗時に平文を絶対に利用しない運用まで含めて成立します。

認証タグ検証前に復号結果を利用しないでください。エラーハンドリング順序の誤りは、改ざん受理やオラクル化の原因になります。
10

主要アルゴリズム

第3章 共通鍵暗号(必須)

本節では、歴史的方式から現行推奨までを同じ表で俯瞰し、何を新規採用し、何を移行対象にすべきかを整理します。名前を知るだけでなく、推奨度と用途の関係を明確化します。

ブロック暗号の代表方式基礎

共通鍵暗号の実務では、現在はAES(Advanced Encryption Standard)が事実上の標準です。DES(Data Encryption Standard)や3DES(Triple DES)は歴史的価値はあるものの、新規採用は避けるべき段階にあります。CamelliaやTwofishなども設計上は重要ですが、採用判断では標準化状況、ライブラリ品質、運用チームの知見を合わせて評価する必要があります。方式比較では理論強度だけでなく、保守性と移行可能性を同じ重みで扱うことが現場では重要です。

主要共通鍵アルゴリズムの推奨状況タイムライン
歴史的方式と現行推奨を同時に見ると、新規採用と移行対象の判断がしやすくなります。
ストリーム暗号とAEAD構成基礎

モバイルやソフトウェア実装では、ChaCha20-Poly1305のようなAEAD構成が実用性と安全性のバランスを取りやすい選択肢です。ChaCha20で機密性を確保し、Poly1305で改ざん検知を行う分業が明確で、適切なライブラリを使えば実装ミスも抑えやすくなります。重要なのは、方式名だけでなく、どの構成で提供されるかまで含めて採用を判断することです。

11

動作モード

第3章 共通鍵暗号(必須)

本節では、同じ暗号アルゴリズムでもモード選択が安全性と運用性を大きく左右することを確認します。方式よりモードで事故が起きる現実を前提に、比較軸を整理します。

主要モードの比較基礎

CBCやCTRは歴史的に広く使われてきましたが、改ざん耐性を別途設計する必要があります。GCMやCCMはAEADとして機密性と完全性を同時に扱えるため、実装負荷を下げつつ安全性要件を満たしやすいのが利点です。比較時は、並列化性能、タグ検証の必須性、ノンス管理要件を同時に確認してください。モードは暗号の『利用規約』であり、誤選択は方式の強さを無効化します。

主要暗号モードの性質比較マトリクス
機密性だけでなく、改ざん検知・並列化・運用容易性で比較するのが実践的です。
非推奨・用途限定モード基礎

ECBは同一平文ブロックが同一暗号文になるため、パターン漏えいを招きやすく新規利用には不向きです。XTSはストレージ暗号化向けに設計された用途限定モードであり、通信路保護や汎用AEADの代替にはなりません。設計時に『使えるか』ではなく『どこまでが設計対象か』を先に固定し、モードの適用範囲を超えた利用を避けることが、長期運用での事故防止につながります。

XTSは主にディスク暗号化用途です。通信データ保護に流用すると、完全性要件を満たせない設計になる可能性があります。
12

暗号内部構造

第3章 共通鍵暗号(必須)

本節では、暗号アルゴリズム内部で何が起きているかを、設計意図の観点から確認します。実装の細部暗記ではなく、混同・拡散とラウンド構造が攻撃耐性にどう効くかを理解します。

SPNとFeistel構造応用

SPN(置換拡大ネットワーク)とFeistel構造は、現代暗号で広く使われる二つの代表的設計です。SPNは置換と線形変換を重ねて入力差分を全体へ拡散し、Feistelは左右ブロックを反復的に混ぜることで復号設計を対称化しやすい利点があります。どちらが優れているかより、攻撃モデル・実装制約・既存資産との整合で選ばれる点が重要です。構造理解は方式比較の土台になります。

SPNとFeistelのラウンド処理比較図
構造の違いは実装形と安全性評価の観点を変えるため、方式比較時に最初に確認します。
混同・拡散と鍵スケジュール応用

暗号内部の目的は、入力と鍵の関係を複雑化して攻撃者が規則を追跡しにくくすることです。Sボックスは非線形性を導入して 混同 を担い、線形層や混同行列は局所差分を全体へ広げる 拡散 を担います。さらに鍵スケジュールでラウンドごとに異なる鍵素材を供給することで、単純な逆算や差分追跡を難しくします。要素単体ではなく、反復組み合わせで強度が成立する点が重要です。

第4章 ハッシュ・MAC(Message Authentication Code)・鍵導出

本章では、暗号化と混同されやすいハッシュと認証、鍵導出を分けて整理します。何を守る処理なのかを明確化し、実装で誤用しやすいポイントを先に潰す構成です。

13

ハッシュの基礎

第4章 ハッシュ・MAC(Message Authentication Code)・鍵導出

本節では、ハッシュ関数が暗号化とは別目的の技術である点を明確にします。復号不能という表面的な共通点ではなく、衝突耐性や一方向性がどの利用場面に効くかを整理します。

ハッシュ関数の性質基礎

ハッシュ関数は任意長入力を固定長出力へ写像する関数で、同じ入力から同じ出力が得られる決定性を持ちます。暗号用途では、逆算しにくい 一方向性 と、異なる入力で同一出力を作りにくい 衝突耐性 が重要です。これらの性質は改ざん検知や署名前処理の基盤になります。したがってハッシュは秘密化の道具ではなく、整合性確認と証拠性を支える道具として理解する必要があります。

ハッシュ関数の主要性質を示す概念図
決定性・一方向性・衝突耐性の三点を満たすことで、検証用途に使えるハッシュになります。
メッセージダイジェストの用途基礎

メッセージダイジェストは、ファイルやメッセージの同一性を短い値で確認するために使われます。配布元が公開したダイジェストと受信側で再計算した値を比較すれば、転送途中の破損や改ざんを検出できます。ただしダイジェスト単体では送信者認証までは保証できません。なりすまし対策が必要な場面では、署名やMACと組み合わせて利用する前提を明示することが重要です。

14

主要ハッシュアルゴリズム

第4章 ハッシュ・MAC(Message Authentication Code)・鍵導出

本節では、現行推奨アルゴリズムと歴史的方式を整理し、何を新規採用すべきかを明確にします。実装時は理論性能だけでなく標準化状況とライブラリ成熟度を合わせて評価します。

SHAファミリの位置づけ基礎

SHA-1は衝突攻撃の実現により新規用途では非推奨で、現在はSHA-2系(特にSHA-256/384)が実務の主流です。SHA-3は設計系統が異なるため多様性確保の観点でも有用で、長期運用では併用検討の価値があります。方式比較では『速いか』だけでなく、規格適合、ハードウェア支援、既存エコシステムとの整合を合わせて判断してください。運用現場では移行容易性が最終的な採用可否を左右します。

SHAファミリの系譜と推奨状況を示す図
SHA-1は歴史的方式、SHA-2が現行主流、SHA-3は代替系統として位置づけます。
そのほかの方式の使い分け基礎

BLAKE2/BLAKE3は高速性や実装容易性で評価される場面が多く、性能重視のシステムで採用候補になります。一方、RIPEMD-160のように既存プロトコル互換のために残る方式もあります。重要なのは、既存互換の必要性と将来運用コストを分けて判断することです。新規設計では標準性と監査対応を優先し、互換要件がある場合のみ限定的に旧方式を維持する方針が安全です。

15

メッセージ認証コード

第4章 ハッシュ・MAC(Message Authentication Code)・鍵導出

本節では、ハッシュ値比較だけでは認証にならない理由を示し、鍵付き認証方式であるMACの役割を整理します。設計時には攻撃者が検証値を偽造できる余地を先に潰すことが重要です。

MACの基本基礎

MACは共有鍵を知る当事者だけが生成できる検証値で、メッセージ完全性と送信者正当性を同時に確認できます。ハッシュ値をそのまま付ける方式では攻撃者も再計算できるため認証になりません。鍵付き構成にすることで、検証値の偽造コストを攻撃者に強制できます。実装では鍵管理と検証失敗時処理を同時に設計し、ログや再送設計に認証失敗の扱いを明示することが重要です。

ハッシュだけを送っても認証にはなりません。鍵付き の検証値であることを仕様で明示してください。
HMAC/KMAC/CMACの使い分け基礎

HMAC(Hash-based Message Authentication Code)は既存ハッシュ基盤で実装しやすく、互換性が高い選択肢です。CMAC(Cipher-based Message Authentication Code)はブロック暗号基盤で構築するため、AES中心の環境で統一しやすい利点があります。KMAC(Keccak Message Authentication Code)はSHA-3系に基づき拡張性を持たせやすい方式です。選定時は『現在利用している暗号基盤』『規格要件』『将来移行のしやすさ』を同時に評価し、単純な速度比較だけで決めないことが長期運用では重要です。

MAC方式選定の分岐フロー図
利用中基盤と規格要件から方式を選ぶと、運用と監査の整合が取りやすくなります。
16

鍵導出

第4章 ハッシュ・MAC(Message Authentication Code)・鍵導出

本節では、マスター秘密を用途別に安全分離する鍵導出の考え方を扱います。鍵使い回しを避ける設計がプロトコル全体の事故耐性を高める点を確認します。

鍵導出関数の役割基礎

鍵導出関数(KDF)は、共有秘密やマスター鍵から用途別サブ鍵を生成する仕組みです。暗号化鍵、MAC鍵、IV素材を同一値で兼用すると、想定外の相関が生じて安全性を崩す可能性があります。KDFを使えば文脈情報(ラベル、セッションID、方向情報)を入力に含め、鍵用途を明確に分離できます。これは理論的な美しさではなく、運用事故時の影響範囲を局所化するための実践的設計です。

マスター秘密から用途別鍵を導出する鍵ツリー図
鍵用途を分離すると、1箇所の問題が全機能へ連鎖するリスクを下げられます。
プロトコルでの鍵分離基礎

プロトコル設計では、送信方向と受信方向で別鍵を使う、暗号化鍵と認証鍵を分ける、再接続ごとに新しいセッション鍵を導出する、といった分離戦略が基本です。これにより、ある機能で鍵漏えいが起きても被害を限定できます。実装では導出ラベルとバージョン管理を仕様化し、将来のアルゴリズム移行時にも同じ構造で置換できるようにしておくと運用が安定します。

第5章 乱数・パスワード保護

本章では、乱数品質とパスワード保護の実務論点を扱います。方式名より運用パラメータと管理手順が安全性を左右するため、攻撃者視点で設計条件を確認します。

17

乱数生成の基礎

第5章 乱数・パスワード保護

本節では、暗号強度を決める隠れた要因として乱数品質を扱います。方式が強くても乱数が弱ければ全体が破綻するため、生成源とシード管理を設計対象に含めることが重要です。

乱数の品質要件基礎

暗号用途の乱数には、攻撃者が過去出力を観測しても次の値を予測しにくい 予測困難性 が必要です。一般用途PRNG(Pseudo Random Number Generator)は統計的見た目が良くても内部状態推定に弱い場合があり、鍵生成やノンス生成には不適切です。特に鍵生成にはCSPRNG(Cryptographically Secure Pseudo Random Number Generator)を使う前提が重要です。乱数品質は方式選定後に足す機能ではなく、設計初期から脅威モデルに組み込むべき基盤要件です。特に仮想化環境や初期起動時のエントロピー不足を想定した運用設計が重要です。

CSPRNGとシード管理基礎

CSPRNGは初期シード品質に強く依存するため、シード生成源、再播種タイミング、障害時フォールバックを仕様化しておく必要があります。運用では、起動直後の低エントロピー状態やコンテナ複製時の状態共有が典型的な事故要因です。乱数生成APIを統一し、アプリ側で独自PRNGを混在させないことが管理上の第一歩です。乱数管理は実装者個人ではなく、プラットフォーム責務として設計するのが安全です。

エントロピー入力からCSPRNG出力までのフロー図
シード品質と再播種設計を明示すると、乱数由来の事故を予防しやすくなります。
テスト用固定シードを本番経路に混入させないでください。再現性要件と安全性要件は実行環境で分離する必要があります。
18

パスワード防御の基本要素

第5章 乱数・パスワード保護

本節では、パスワード保護を構成するソルト・ペッパー・パスフレーズ設計を分けて整理します。単一対策ではなく複数層で攻撃コストを上げる視点を重視します。

ソルトとペッパー基礎

ソルトはユーザごとに異なる公開値で、同一パスワードでも異なるハッシュを生成し、レインボーテーブル攻撃を無効化します。ペッパーはサーバ側で別管理する秘密値で、DB漏えい時のオフライン解析コストを追加で引き上げます。両者は役割が異なり、どちらか一方では防御層が不足します。設計時は保存場所、ローテーション手順、障害時復旧方法まで含めて運用設計を行うことが重要です。

ソルトとペッパーの配置と役割を示す図
ソルトはDB側、ペッパーはアプリ秘密管理側で扱うと防御層を分離できます。
パスフレーズ設計基礎

強いパスワード設計では、記号ルールの複雑さだけでなく、長さと利用者が継続できる運用性を重視する必要があります。短く複雑な文字列は再利用やメモ書きを誘発しやすく、実際の安全性を下げることがあります。パスフレーズ方式は長さを確保しつつ記憶負担を抑えやすいため、現場運用と相性が良い選択肢です。ルール策定時は利用者行動を前提に現実的な強度を設計してください。

19

パスワードハッシュ手法

第5章 乱数・パスワード保護

本節では、主要方式の違いを性能ではなく攻撃耐性と運用更新の観点で比較します。初期設定だけで終わらせず、ハードウェア進化に合わせてパラメータを見直す運用まで扱います。

主要方式の比較基礎

Argon2はメモリハード性を重視した現行有力方式で、GPU並列攻撃コストを上げやすい特性があります。scryptも同様にメモリ依存を持ち、bcryptは長年実績がある一方で調整軸が限定的です。PBKDF2(Password-Based Key Derivation Function 2)は互換性が高い反面、高速ハードウェア耐性では不利な場面があります。選定時は既存資産との互換、監査要件、移行計画を含めて評価し、単純な速度比較だけで決めないことが重要です。

主要パスワードハッシュ方式の比較図
攻撃耐性・運用性・互換性を同時評価すると、移行しやすい方式選定ができます。
パラメータ設定と再ハッシュ基礎

パスワードハッシュの安全性は方式名だけでなく、コスト係数やメモリ設定などのパラメータに強く依存します。初期導入時に十分でも、計算資源の進化で攻撃コストは相対的に低下するため、定期見直しが必要です。実装ではログイン成功時の段階的再ハッシュや、旧設定から新設定への移行計画を事前に準備すると、サービス停止なく強度を引き上げられます。

導入時のパラメータを固定したまま放置しないでください。再評価基準と更新タイミングを運用手順として文書化することが重要です。

第6章 公開鍵暗号(必須)

本章では、鍵配送と署名を担う公開鍵暗号を実務視点で整理します。方式名の列挙ではなく、どの用途でどの安全前提を置くかを判断できる状態を目標にします。

20

公開鍵暗号の基礎概念

第6章 公開鍵暗号(必須)

本節では、公開鍵方式が鍵配送問題をどう解くかを整理します。暗号化/復号と署名/検証の対応関係を区別し、プロトコル設計で責務境界を誤らないことを目的にします。

公開鍵と秘密鍵の関係基礎

公開鍵暗号では、暗号化と復号、署名と検証で鍵の使い方が逆向きになります。暗号化は公開鍵で行い復号は秘密鍵で行う一方、署名は秘密鍵で生成し公開鍵で検証します。この対称性を理解すると、仕様書で『どの鍵で何をするか』を読み違えにくくなります。実務では鍵用途を明示的に分離し、暗号化鍵と署名鍵を混在させない運用が重要です。

暗号化復号と署名検証の鍵利用を対比した2レーン図
公開鍵と秘密鍵は用途ごとに役割が反転するため、鍵種別の混同を防ぐ設計が必要です。
鍵交換と鍵同意基礎

鍵交換は片側が生成した鍵素材を安全に相手へ渡す文脈で使われ、鍵同意は双方計算で共通秘密を導く文脈で使われます。言葉を混同すると、攻撃前提や責任境界の説明が曖昧になります。特にプロトコル設計では、鍵素材の生成主体、改ざん検知の位置、認証の有無を分けて記述することが重要です。概念の区別は実装詳細ではなく、脅威モデルを正しく置くための前提です。

鍵交換と鍵同意を同一視すると、誰が何を保証する設計なのかが曖昧になり、レビュー時に欠陥を見落としやすくなります。
21

RSA系方式

第6章 公開鍵暗号(必須)

本節では、RSAを暗号化用途と署名用途で分けて整理します。教科書的記述と実務安全設計の差分を明確化し、パディング方式を含めた安全条件を押さえます。

RSA暗号化とOAEP基礎

RSAを暗号化に使う場合、素朴な教科書RSAは決定的であり同一平文から同一暗号文が得られるため、実運用では不適切です。OAEP(Optimal Asymmetric Encryption Padding)はランダム性を導入してこの問題を緩和し、選択平文攻撃への耐性を高めます。実装ではライブラリ既定値を盲信せず、OAEPパラメータと鍵長、互換対象を仕様に明記してください。RSAは方式名だけでは安全性が決まらず、前処理設計が本体です。

素朴RSAとOAEP前処理の違いを示す比較図
RSA暗号化の安全性は鍵長だけでなく、パディング方式の選択に強く依存します。
素朴RSAを直接実装しないでください。暗号化用途はRSA-OAEPなどの安全なパディング前提で設計する必要があります。
RSA署名とPSS基礎

RSA署名では、旧来方式との互換を理由に古いパディングが残るケースがありますが、新規設計ではRSA-PSS(Probabilistic Signature Scheme)を優先するのが一般的です。PSSはランダム化要素を持つため、署名の安全余裕を高めやすい特性があります。運用では署名対象データの正規化、ハッシュ方式、鍵用途分離を同時に管理することが重要です。署名アルゴリズム単体より、署名対象の定義不備が障害原因になる点に注意してください。

22

離散対数・楕円曲線方式

第6章 公開鍵暗号(必須)

本節では、離散対数系から楕円曲線系への実務的な流れを整理します。方式間の数学差分より、署名用途と鍵合意用途の責務分離を理解することを重視します。

離散対数系の基本方式応用

離散対数系には、暗号化寄りのElGamal、署名寄りのDSA(Digital Signature Algorithm)、鍵共有寄りのDiffie-Hellmanなど、目的別の代表方式があります。いずれも『計算は容易だが逆問題は難しい』性質を利用しますが、提供する機能は同一ではありません。方式選定時は、機密性を守るのか、認証付き鍵合意を行うのか、署名証跡を残すのかを先に決めることが重要です。数学的同族性より機能責務で分類すると設計が安定します。

楕円曲線方式の実務利用応用

現代実装では、署名にEd25519/ECDSA(Elliptic Curve Digital Signature Algorithm)、鍵合意にX25519/ECDH(Elliptic Curve Diffie-Hellman)を使う構成が広く採用されています。楕円曲線方式は短鍵で高い安全水準を狙いやすく、通信量や計算効率の面で実装利点があります。一方で、方式ごとに検証互換や実装成熟度が異なるため、既存ライブラリと標準要件を合わせて評価する必要があります。用途別マップで責務を分けると、誤用や実装混同を減らせます。

楕円曲線方式を署名系と鍵合意系に分けた用途マップ
方式名ではなく用途軸で整理すると、実装時の選定ミスを減らせます。
23

電子署名の発展形

第6章 公開鍵暗号(必須)

本節では、基本署名の運用要件を確認したうえで、高度署名技術の位置づけを示します。匿名性・共同署名・検証効率など、目的駆動で方式を選ぶ視点を整理します。

署名と検証の基本応用

署名技術は、完全性確認だけでなく、送信者の否認防止や監査証跡の確保に使われます。安全運用には、署名対象データの正規化、文脈ラベル固定、検証失敗時のハンドリング定義が必要です。ここが曖昧だと同一内容でも検証不一致が発生し、設計上の真正性が失われます。方式選定以前に、何を署名対象として固定するかを仕様で厳密化することが重要です。

署名対象作成から検証までのパイプライン図
署名方式より先に、対象データと検証条件を固定する設計が不可欠です。
署名対象の正規化ルールを定義しないと、真正データでも検証失敗や混同が発生し、障害原因になります。
高度署名のユースケース応用

Schnorr系の集約署名は検証効率や通信量削減に利点があり、しきい値署名は鍵管理を分散して単一点障害を減らす目的で使われます。リング署名やブラインド署名は匿名性や選挙・投票のような文脈で価値を持ちます。重要なのは『高度』という語に引きずられず、必要な性質を明文化して方式を選ぶことです。要件外の機能を持つ方式は運用複雑性だけを増やす可能性があります。

24

公開鍵暗号の応用技術

第6章 公開鍵暗号(必須)

本節では、応用暗号を『何を可能にするか』の観点で整理します。鍵共有、アクセス制御、委譲という目的軸で読むことで、研究用語と実装要件の接続を明確にします。

鍵共有とアクセス制御応用

IDベース暗号や属性ベース暗号は、従来の証明書配布を単純化したり、属性条件で復号可否を制御したりする目的で利用されます。これらは単なる方式追加ではなく、認可設計そのものに影響する技術です。採用時は鍵発行主体の信頼性、属性更新の遅延、撤回時の再配布コストを先に評価する必要があります。暗号方式の美しさだけでなく、運用ワークフローとの整合が成否を分けます。

属性ベース暗号と委譲型再暗号化の概念モデル図
アクセス条件と委譲経路を分離して設計すると、権限管理の見通しが良くなります。
委譲と再暗号化応用

代理再暗号化は、平文を開示せずに復号権限を別主体へ移す設計を可能にします。データ共有基盤や委託処理で有効ですが、再暗号化鍵の管理失敗は広範囲漏えいに直結します。設計時には委譲可能範囲、期限、監査証跡を暗号方式と同格で扱ってください。応用暗号は機能追加の道具である一方、責任境界を複雑化しやすいため、運用モデルを先に固定することが重要です。

第7章 公開鍵基盤(必須)

本章では、公開鍵を信頼可能にするPKI(Public Key Infrastructure)運用を扱います。証明書の読み取りから失効確認、信頼連鎖の事故対応まで、運用で破綻しやすい点を中心に整理します。

25

証明書と認証基盤

第7章 公開鍵基盤(必須)

本節では、公開鍵を信頼するための証明書構造とPKI(Public Key Infrastructure)階層を整理します。証明書は単なる鍵配布ファイルではなく、運用責任を含む信頼オブジェクトとして読む必要があります。

X.509証明書の読み方基礎

X.509証明書を読む際は、サブジェクト名だけでなく、発行者、有効期限、鍵用途拡張、SANなどを一体で確認する必要があります。証明書トラブルの多くは、CN一致だけ見て用途制約や失効状態を見落とす運用に起因します。実装では検証ライブラリ任せにせず、期待する識別子と用途を仕様化し、異常時の拒否条件を明示してください。証明書は文字列一致ではなく、ポリシー検証対象です。

X.509証明書の主要フィールドを示す解剖図
証明書検証では、名前一致だけでなく用途拡張と発行者連鎖を合わせて確認します。
CAとPKIの構造基礎

PKIでは、ルートCAが信頼の起点となり、中間CAを通じてエンドエンティティ証明書を発行する階層構造が一般的です。この分離は鍵保護レベルと運用責任を分担するために設計されています。ルート鍵を頻繁運用しないことで漏えいリスクを下げる一方、中間CA事故時の影響範囲評価と失効対応手順を事前整備する必要があります。階層は形式ではなく、被害局所化の仕組みです。

26

失効管理と証明書検証

第7章 公開鍵基盤(必須)

本節では、証明書検証を有効期限チェックで終わらせないための失効管理を扱います。漏えい・誤発行を前提に、CRL(Certificate Revocation List)とOCSP(Online Certificate Status Protocol)をどう運用へ組み込むかを整理します。

失効確認の仕組み基礎

証明書が有効期限内でも、秘密鍵漏えいや誤発行が発生すれば直ちに失効確認が必要です。CRLは一括配布で実装しやすい一方、即時性に課題があります。OCSPは問い合わせ型で鮮度を高めやすい反面、可用性とプライバシー設計が重要になります。実運用では両者を補完的に扱い、障害時のフェイル方針を明示してください。失効確認を省略したTLS検証は、設計上の前提を欠いた状態です。

CRL方式とOCSP方式の失効確認フロー比較図
CRLは配布型、OCSPは照会型として特性が異なるため、可用性要件に合わせた併用設計が有効です。
有効期限内であっても安全とは限りません。失効確認を省略すると、漏えい鍵証明書を受け入れるリスクが残ります。
フィンガープリント検証基礎

フィンガープリント検証は、初回接続や高機密チャネルで信頼起点を補強するために使われます。証明書チェーンが正しくても、想定外中間者が関与する可能性を排除するには別経路照合が有効です。特にTOFU(Trust On First Use)型の運用では、初回確認手順の品質がその後の安全性を大きく左右します。運用では表示形式の統一、照合失敗時の手順、更新時再確認の導線を明確化してください。検証値の桁落ちやUI省略は、利用者が確認できない設計欠陥につながります。

27

信頼モデルの運用

第7章 公開鍵基盤(必須)

本節では、理論上の信頼連鎖を現場運用へ落とす際の破綻パターンを確認します。証明書誤発行やローテーション事故を前提に、障害時の回復手順を設計へ組み込みます。

信頼の連鎖と破綻パターン応用

信頼連鎖は、ルートCAから中間CAを経由して末端証明書へ信頼を委譲するモデルですが、どこか一段で事故が起きると影響は連鎖的に広がります。典型例は誤発行、中間CA鍵漏えい、失効配布遅延です。運用設計では、事故検知から証明書差し替えまでの時間軸を定義し、監査ログで追跡できる状態を保つ必要があります。信頼モデルは静的図ではなく、障害対応計画と一体で成立します。

信頼連鎖における事故伝播ポイントを示す図
連鎖のどこで事故が起きるかを可視化すると、監視設計と復旧優先順位を定義しやすくなります。
公開鍵ピンニング運用応用

公開鍵ピンニングは中間者攻撃耐性を高める一方、更新計画が不十分だと正規証明書更新時に自己障害を起こします。実装ではバックアップピンの準備、段階展開、失敗時解除手順を事前定義する必要があります。特にモバイルアプリ配布では更新遅延が長引くため、固定化しすぎない運用戦略が重要です。防御強化策は常に可用性とのトレードオフで評価してください。

ローテーション戦略のないピンニングは、攻撃防止より先に可用性事故を引き起こす可能性があります。

第8章 鍵管理・認証・運用設計

本章では、暗号方式そのものより運用設計で差が出る領域を扱います。鍵ライフサイクル、認証設計、前方秘匿性、暗号アジリティを横断して、長期運用に耐える設計原則を整理します。

28

鍵ライフサイクル管理

第8章 鍵管理・認証・運用設計

本節では、鍵を生成して廃棄するまでの一連工程を運用設計として扱います。暗号方式が強くても、鍵配布や失効の手順が曖昧なら安全性は維持できないため、責任境界と監査性を前提に整理します。

鍵ライフサイクル基礎

鍵ライフサイクルは、生成・配布・保管・利用・失効・廃棄を連続工程として管理する考え方です。どこか一工程だけ強化しても、他工程が弱ければ全体安全性は崩れます。実務では工程ごとに担当者、操作ログ、承認条件を定義し、異常時に追跡できる状態を維持することが重要です。鍵管理は暗号アルゴリズム選定の後工程ではなく、設計初期から固定すべき基盤要件です。

鍵ライフサイクル各工程を循環で示す図
鍵管理は単発作業ではなく、生成から廃棄までを継続監視する運用プロセスです。
継続運用の要点基礎

継続運用では、定期ローテーション、障害対応時の鍵エスクロー、短寿命セッション鍵の使い分けを同時に設計する必要があります。ローテーション頻度は業界規制だけでなく、漏えい検知能力と運用負荷のバランスで決定します。さらに復旧手順が未整備だと、鍵更新が停止し実質固定鍵運用に陥ります。更新手順と復旧手順を同じ粒度で文書化することが重要です。

29

認証方式の設計

第8章 鍵管理・認証・運用設計

本節では、認証強度と利用者負荷のバランスを設計視点で整理します。単に要素数を増やすのではなく、攻撃者モデルに応じて要素を重ねる考え方を扱います。

認証要素の組み合わせ基礎

認証要素は『知識』『所持』『生体』の異なるカテゴリを重ねることで、単一漏えいに対する耐性を高めます。例えばパスワード漏えいに対して所持要素を追加すれば、攻撃成立条件を増やせます。ただし要素追加だけでは不十分で、回復フローや紛失時対応を設計しないと運用事故が増えます。強度向上と利用者体験を同時に設計し、迂回運用が生まれない形へ落とし込むことが重要です。

知識所持生体の認証要素を重ねる概念図
カテゴリの異なる要素を組み合わせることで、攻撃者が同時突破すべき条件を増やせます。
チャレンジレスポンス設計基礎

チャレンジレスポンス方式は、毎回異なるチャレンジ値を使って再送攻撃を防ぐ設計です。実装では乱数品質、チャレンジ有効期限、時刻同期ずれ、再試行制御を同時に管理する必要があります。これらを省略すると『方式は正しいのに運用で破られる』状態が起きます。仕様書には検証失敗時のログ項目とアカウント保護動作まで明記し、監査可能な設計にすることが重要です。

チャレンジ値の再利用や長すぎる有効期限は、リプレイ攻撃耐性を大きく損ないます。
30

安全な設計原則

第8章 鍵管理・認証・運用設計

本節では、暗号方式選定より先に守るべき設計原則を扱います。前方秘匿性、鍵分離、鍵確認を実装要件として明示し、将来の鍵漏えい影響を局所化する考え方を整理します。

前方秘匿性応用

前方秘匿性は、長期鍵が後で漏えいしても過去セッションを復号されにくくする性質です。これを実現するには、セッションごとの一時鍵合意と鍵破棄を前提とした設計が必要です。TLSを使っているだけで自動的に成立するわけではなく、鍵交換方式や実装設定で性質が変わります。実装時は対象プロトコルがPFS(Perfect Forward Secrecy)条件を満たすかを明示的に確認し、設定監査に組み込むことが重要です。

長期鍵漏えい前後で復号影響範囲を示す時系列図
PFSを満たす設計では、長期鍵漏えい後も過去通信の復号範囲を限定できます。
TLS利用だけで前方秘匿性が保証されるわけではありません。鍵交換方式と設定を必ず確認してください。
鍵分離と鍵確認応用

鍵分離は暗号化鍵・署名鍵・MAC鍵を用途別に分け、相互干渉を防ぐための原則です。鍵確認は導出した共有鍵が正しい相手との間で一致しているかを検証し、中間者混入を検出するために必要です。両者は独立した要件であり、片方だけでは防御層が不足します。プロトコル設計では鍵ラベル、方向情報、検証手順を明文化し、レビュー時に確認可能な形へ固定することが重要です。

31

データ保護運用

第8章 鍵管理・認証・運用設計

本節では、データ平面と鍵平面を分離した運用設計を扱います。エンベロープ暗号やトークン化を通じて、漏えい時の影響局所化と将来移行容易性を同時に確保する考え方を整理します。

保護方式の実装パターン応用

エンベロープ暗号は、データをDEK(Data Encryption Key)で保護し、そのDEKをKEK(Key Encryption Key)で包む二層構成で管理性を高める方式です。鍵ラッピングを併用すると、鍵更新時に全データ再暗号化を避けやすくなります。トークン化は元データを代替値へ置換し、機密データ接触面を最小化するのに有効です。方式選定時は性能だけでなく、鍵管理システムとの統合と監査要件適合を合わせて評価してください。

DEKとKEKを分離したエンベロープ暗号アーキテクチャ図
データ平面と鍵平面を分離すると、更新と監査の運用負荷を下げやすくなります。
暗号アジリティ応用

暗号アジリティは、方式脆弱化や規格更新時に安全停止せず移行できる設計能力です。アルゴリズム識別子を固定値で埋め込むと、将来移行時にデータ再処理や互換障害が集中しやすくなります。設計段階でバージョン識別子、複数方式併用期間、移行監視指標を定義しておくと、段階的移行が可能になります。初期コストを抑えすぎると後年の移行負債が急増する点に注意が必要です。

アルゴリズム識別子の固定埋め込みは、将来の安全更新を妨げる代表的な設計負債です。

第9章 通信プロトコル・セキュアチャネル

本章では、通信路を守るためのプロトコルを実務観点で比較します。TLS(Transport Layer Security)/HTTPS(Hypertext Transfer Protocol Secure)、リモート接続、メール暗号を通して、鍵管理と認証検証がどう実装に落ちるかを確認します。

32

Webとトランスポート層

第9章 通信プロトコル・セキュアチャネル

本節では、Web通信を守るTLS(Transport Layer Security)/HTTPS(Hypertext Transfer Protocol Secure)を手順ベースで整理します。鍵合意、証明書検証、運用設定の関係を分けて理解し、通信路保護の成立条件を明確化します。

TLSハンドシェイク基礎

TLSハンドシェイクでは、クライアントとサーバが暗号スイート交渉、鍵合意、証明書検証を順に実行してセッションを確立します。重要なのは『共有鍵ができたこと』と『相手が正当であること』を別々に検証する点です。証明書検証を省略すると、暗号化通信であっても中間者攻撃を防げません。手順のどこで検証が行われるかを理解することが運用トラブル回避に直結します。

TLS 1.3の標準的なサーバ認証ハンドシェイク図
鍵合意と認証検証を分けて見ると、通信路保護の成立条件を確認しやすくなります。
鍵合意成功だけで安全とは判断できません。証明書検証とホスト名検証を必ず実施してください。
HTTPS運用基礎

HTTPS運用では、証明書自動更新、TLS設定強度、HTTPからHTTPSへの強制リダイレクト、HSTS(HTTP Strict Transport Security)設定、混在コンテンツ排除を継続的に管理する必要があります。いずれかを欠くと、暗号化通信でも実際の保護強度は低下します。運用ではチェックリストを定常化し、更新失敗や設定退行を早期検知できる監視を組み込むことが重要です。技術導入時より継続運用時の品質管理が安全性を左右します。

HTTPS運用の主要チェック項目を示す図
証明書・設定・コンテンツの三領域を同時監視すると、実運用での抜け漏れを減らせます。
33

リモート接続とトンネル

第9章 通信プロトコル・セキュアチャネル

本節では、SSH(Secure Shell)とVPN(Virtual Private Network)系方式を比較し、どのレイヤで何を保護するかを整理します。方式名の好みではなく、運用要件と管理負荷から選定する視点を扱います。

SSHの基本運用基礎

SSH運用では、公開鍵認証の徹底、ホスト鍵検証、管理者権限分離、監査ログ保持が基本要件です。特に初回接続時のホスト鍵確認を省略すると、中間者攻撃の検出機会を失います。鍵配布を自動化する場合でも、信頼起点の確認手順は残す必要があります。日常運用では利便性圧力で検証手順が省略されやすいため、手順をツール化して逸脱を減らすことが重要です。

初回接続のホスト鍵確認を省略し続ける運用は、MITM(Man-in-the-Middle)耐性を事実上失わせます。
IPsec/WireGuard/VPN比較基礎

IPsecは標準化と相互接続性に強みがあり、WireGuardは構成の簡潔さと運用容易性で評価されます。VPN選定では暗号強度だけでなく、鍵配布方式、再接続特性、運用チームの習熟度を合わせて判断する必要があります。ネットワーク層保護とアプリ層保護の役割を分離し、過剰な重複や保護漏れを避ける設計が重要です。比較軸を明示すると導入後の運用負債を抑えられます。

SSH IPsec WireGuardをレイヤと運用性で比較する図
方式選定は強度だけでなく、導入コストと運用継続性の比較で決めるのが実務的です。
34

メールとデータ交換

第9章 通信プロトコル・セキュアチャネル

本節では、メール暗号化で使われるPGP(Pretty Good Privacy)系とS/MIME(Secure/Multipurpose Internet Mail Extensions)の信頼モデル差分を整理します。暗号方式より鍵配布と運用責任の違いが実導入の難易度を左右する点を確認します。

PGP/OpenPGP応用

PGP/OpenPGPは利用者間署名で信頼を広げるWeb of Trust的運用が可能ですが、鍵配布や失効通知を利用者主体で維持する負荷が高くなりやすい特徴があります。分散的で柔軟な反面、組織全体で統制されたポリシー適用は難しくなることがあります。実運用では鍵管理教育と署名検証手順を整備し、形だけの暗号化に陥らないようにすることが重要です。

OpenPGPのWeb of TrustとS/MIMEのCAモデル比較図
メール暗号の実装難易度は方式名より、信頼モデルと鍵配布運用で大きく変わります。
S/MIME応用

S/MIMEはPKIベースで組織的に運用しやすく、企業環境で統一ポリシーを適用しやすい利点があります。一方で証明書発行・更新・失効管理の運用負荷は小さくありません。導入時はメールクライアント互換性、証明書ライフサイクル、利用者向け失敗時手順を同時に準備する必要があります。中央集権モデルの利点を活かすには、運用チームの継続管理能力が前提になります。

第10章 攻撃手法・脅威モデル

本章では、攻撃者が持つ能力を前提に暗号安全性を読む視点を整理します。理論モデルと実装攻撃をつなぎ、どこで防御設計を置くべきかを明確にします。

35

暗号解読の基本攻撃

第10章 攻撃手法・脅威モデル

本節では、既知平文攻撃・選択平文攻撃・選択暗号文攻撃を比較し、攻撃者能力の差が安全性定義にどう影響するかを整理します。評価指標を読み解く前提語彙を揃えることが目的です。

攻撃モデルの種類応用

暗号評価では、攻撃者がどの情報にアクセスできるかで難易度が大きく変わります。既知平文攻撃(KPA: Known Plaintext Attack)は過去の平文と暗号文対を知る想定、選択平文攻撃(CPA: Chosen Plaintext Attack)は任意平文を暗号化させられる想定、選択暗号文攻撃(CCA: Chosen Ciphertext Attack)は任意暗号文を復号オラクルへ問い合わせる想定です。後者ほど攻撃者能力が高く、防御側はより強い安全性定義を満たす必要があります。

KPA CPA CCAの攻撃者能力差を階段で示す図
攻撃者能力が一段上がるごとに、要求される安全性保証も厳しくなります。
安全性定義との関係応用

IND-CPA(Indistinguishability under Chosen Plaintext Attack)は選択平文環境で暗号文から平文識別が困難であることを示し、IND-CCA(Indistinguishability under Chosen Ciphertext Attack)はさらに選択暗号文環境でも同様の困難性を要求します。方式比較時に定義名だけを見るのではなく、どの攻撃能力を含むモデルで証明されているかを確認することが重要です。実装用途が高リスクであるほど、より強いモデルで検証された方式を優先する判断が求められます。

36

通信経路への攻撃

第10章 攻撃手法・脅威モデル

本節では、通信路で頻発するリプレイ攻撃と中間者攻撃を扱います。鍵合意だけで安心せず、認証と再送防止をどこで検証するかを設計観点で整理します。

リプレイ攻撃対策基礎

リプレイ攻撃は、正規通信を盗聴した攻撃者がそのまま再送することで権限行使を試みる手法です。対策としてノンス、タイムスタンプ、メッセージ番号、短寿命セッションを組み合わせ、同一要求の再実行を拒否できる状態を作ります。単一の時刻チェックだけでは時計ずれや再送条件の抜けが残るため、複数条件で再利用を封じる設計が必要です。

中間者攻撃対策基礎

中間者攻撃(MITM: Man-in-the-Middle)では攻撃者が通信の間に入り、双方と別々に鍵合意を成立させることで内容改ざんや盗聴を行います。これを防ぐには、鍵合意結果だけでなく証明書連鎖、ホスト名、鍵指紋などの認証情報を検証し、相手同一性を確認する必要があります。認証検証を省略すると、暗号化通信であっても攻撃者と安全に通信してしまう状態になります。

認証検証ありなしでMITM成立可否を比較する図
鍵合意と相手認証を分離して確認することで、中間者混入を検出できます。
鍵交換の成功だけでは安全性は成立しません。必ず認証チェックを同時に実施してください。
37

認証情報への攻撃

第10章 攻撃手法・脅威モデル

本節では、漏えい後に成立するオフライン攻撃と、サービスに対して継続試行するオンライン攻撃を区別して整理します。防御設計の配置ポイントを明確にすることが狙いです。

オフライン攻撃基礎

オフライン攻撃では、攻撃者が漏えいしたハッシュ値を手元環境で高速に照合し、辞書や総当たりで元パスワードを探索します。サーバ側の試行回数制限が効かないため、パスワードハッシュ方式、ソルト、計算コスト設定が防御の中心になります。漏えい前提で設計し、推測コストを継続的に引き上げる運用が重要です。

漏えい後のオフライン攻撃フローと防御点を示す図
攻撃が手元で進む前提を置き、ハッシュ方式とコスト設定で時間を稼ぐ設計が必要です。
オンライン攻撃基礎

オンライン攻撃は認証API(Application Programming Interface)へ継続試行を行うため、レート制限、段階的遅延、アカウントロック、異常通知、監査ログが主要対策になります。単一IP制限だけでは分散試行に弱いため、アカウント単位とネットワーク単位を組み合わせた検知が必要です。防御は認証画面だけでなく、パスワード再発行や連携APIまで含めて統一することが重要です。

38

実装依存の攻撃

第10章 攻撃手法・脅威モデル

本節では、理論的に安全な方式でも実装差分で破られる代表例を扱います。アルゴリズム選定だけでは守れない領域を明確化し、実装規約の必要性を整理します。

サイドチャネル系攻撃応用

サイドチャネル攻撃は、処理時間、消費電力、例外挙動、電磁波など本来公開しない副次情報から秘密を推定する手法です。方式が理論的に安全でも、実装が条件分岐やデータ依存時間差を持つと情報漏えいが発生します。特に暗号ライブラリを利用していても、呼び出し側の分岐やログ出力で漏えい面を作る場合があるため、実装全体で評価する必要があります。

実装周辺から漏えいするサイドチャネル面を示す図
暗号関数内部だけでなく、前後処理やエラーパスも攻撃面として監査対象に含めます。
実装上の防御策応用

防御策としては、定数時間比較、例外メッセージ統一、失敗応答の時間平準化、機密分岐の削減、入力検証順序の固定化が有効です。パディングオラクル対策では、エラー種別を外部へ漏らさず一貫した応答に統一する必要があります。安全なライブラリ選定に加え、呼び出し側のログ・再試行・例外設計まで含めて統制することが重要です。

ライブラリ利用だけで安全とは限りません。呼び出し側のエラーハンドリング差が情報漏えいを生むことがあります。
39

ハッシュに対する攻撃

第10章 攻撃手法・脅威モデル

本節では、衝突探索と長さ拡張攻撃を中心に、ハッシュ利用時の典型的誤用を整理します。ハッシュを認証に転用する際の設計境界を明確にすることが目的です。

衝突系攻撃応用

衝突攻撃は同一ハッシュ値を与える別入力を探索する手法で、誕生日攻撃は探索空間の確率特性を使って必要試行回数を下げます。これにより署名対象や整合性検証の前提が崩れる可能性があります。実務では非推奨ハッシュの排除、出力長の妥当性評価、利用目的ごとの安全余裕確認を継続することが重要です。

長さ拡張攻撃応用

長さ拡張攻撃は、特定構造のハッシュで hash(secret || message) の形を認証値として使うと、秘密を知らずに拡張メッセージの正当値を作れる問題です。単純連結で認証を実装すると成立するため、認証用途ではHMACのような専用構成を使う必要があります。誤用は実装しやすい一方で検出しづらいため、設計レビューで明示的に禁止することが重要です。

長さ拡張攻撃が成立する構成とHMACの対比図
ハッシュ利用の境界を誤ると認証破綻が起きるため、用途ごとに安全構成を固定する必要があります。
hash(secret || message) をそのまま認証値に使わないでください。認証用途はHMACなど専用構成を採用してください。

第11章 ゼロ知識証明・高度暗号

本章では、秘密を明かさず検証する技術と高度暗号の基礎部品を扱います。方式名の暗記ではなく、どの性質を達成するための仕組みかを中心に整理します。

40

ゼロ知識証明の体系

第11章 ゼロ知識証明・高度暗号

本節では、秘密情報を開示せず主張だけを検証するゼロ知識証明の基本を整理します。完全性・健全性・ゼロ知識性の3性質を軸に、主要方式の位置づけを理解することが目的です。

ゼロ知識証明の基礎応用

ゼロ知識証明は、証明者が秘密そのものを開示せず、主張が正しいことだけを検証者へ示す仕組みです。完全性は正しい主張が受理される性質、健全性は誤った主張が受理されにくい性質、ゼロ知識性は検証過程で秘密が漏れない性質を指します。三つの条件を同時に満たすことで、プライバシー保護と検証可能性を両立できます。

証明者検証者秘密情報の関係を示すゼロ知識証明概念図
秘密を明かさず主張のみを検証するため、プライバシーと監査性を同時に確保できます。
主要方式と応用応用

zk-SNARK(Zero-Knowledge Succinct Non-interactive Argument of Knowledge)、zk-STARK(Zero-Knowledge Scalable Transparent Argument of Knowledge)、Bulletproofsは、証明サイズ、検証速度、信頼設定要否、実装複雑性に違いがあります。用途選定では方式名の流行より、検証回数、オンチェーンコスト、監査要件、実装成熟度を同時に評価することが重要です。ロールアップ等の実装では、証明生成コストと運用可用性のバランスが最終的な採用可否を左右します。

41

コミットメントと関連構造

第11章 ゼロ知識証明・高度暗号

本節では、ゼロ知識や検証プロトコルを支える基礎部品としてコミットメント、メルクル木、ハッシュチェーンを整理します。性質と利用場面の対応を明確にすることを重視します。

コミットメントの役割応用

コミットメントは、値を隠したまま後で開示可能にする仕組みで、隠蔽性と束縛性の両立が核心です。隠蔽性は開示前に値を推定されにくい性質、束縛性はコミット後に別値へすり替えにくい性質を指します。ペダーセンコミットメントやビットコミットメントは、この二性質を用途に応じて実装する代表例です。プロトコル設計では開示条件と検証条件を明示することが重要です。

木構造と連鎖構造応用

メルクル木は大量データ集合の一部包含を短い証明で検証できる構造で、ハッシュチェーンは時系列整合性を連結的に保証する構造です。両者は用途が異なり、前者は部分検証効率、後者は順序改ざん検出に強みがあります。検証対象が集合か時系列かを先に切り分けると、適切な構造選定がしやすくなります。

コミットメントメルクル木ハッシュチェーンの関係比較図
検証対象の性質に合わせて構造を選ぶと、証明サイズと検証コストを最適化しやすくなります。
42

安全計算と秘密共有

第11章 ゼロ知識証明・高度暗号

本節では、秘密を分散して保持しながら協調計算する考え方を整理します。単一障害点を減らしつつ可用性を保つためのしきい値設計を中心に扱います。

秘密分散の基礎応用

秘密分散は、秘密情報を複数断片へ分け、一定数以上が揃わないと復元できないようにする方式です。シャミア秘密分散では n 個中 k 個で復元可能な閾値を設定し、漏えい耐性と可用性を両立します。単一鍵保管のリスクを下げられる一方、断片配布先の管理不備や復元手順未整備があると運用事故につながるため、手順設計を同時に行う必要があります。

n個中k個で復元する秘密分散のしきい値モデル図
漏えい耐性と可用性の両立には、適切なしきい値設定と復元運用手順が必要です。
マルチパーティ計算応用

マルチパーティ計算は、複数主体が各自の入力を秘匿したまま共同計算結果だけを得る枠組みです。データ共有制約が強い領域で有効ですが、通信回数、計算コスト、参加者同期待ち、故障時処理などの運用制約が大きくなりやすい特徴があります。実導入では理論安全性だけでなく、実行レイテンシと障害復旧手順を含めて評価することが重要です。

43

高機能暗号

第11章 ゼロ知識証明・高度暗号

本節では、平文化せず演算や制御を行う高機能暗号を扱います。準同型暗号と機能暗号の目的差分を明確にし、現実的な適用条件を整理します。

準同型暗号応用

準同型暗号は、暗号文のまま演算を行い、復号後に平文演算と一致する結果を得る技術です。部分準同型は特定演算に限定される一方、完全準同型は任意計算を理論上可能にしますが計算コストが大きくなりやすい課題があります。実装では要求される演算種別、応答時間、コスト上限を先に定義し、適用範囲を限定して導入することが重要です。

平文演算と暗号文演算の対応を示す準同型暗号概念図
平文化せずに計算できる利点と計算コスト増加のトレードオフを同時に評価する必要があります。
機能暗号応用

機能暗号は、鍵ごとに復号可能な情報範囲を制御し、データ全体を開示せず必要結果だけを取り出す発想です。アクセス制御と暗号処理を一体化できる利点がある反面、鍵設計と権限モデルが複雑化しやすい点に注意が必要です。導入時は権限変更頻度、監査証跡、誤設定時の影響範囲を明示し、運用チームが管理可能な粒度へ要件を落とし込むことが重要です。

第12章 耐量子暗号

本章では、量子計算時代を見据えた暗号移行を扱います。影響範囲の把握から格子問題の基礎、主要方式の比較、移行ロードマップまでを実務観点で整理します。

44

耐量子暗号の全体像

第12章 耐量子暗号

本節では、量子計算が既存暗号へ与える影響を整理し、なぜ今から移行準備が必要かを明確にします。方式選定の前に、保護対象データの寿命と運用制約を把握することを目的にします。

何が脅かされるか応用

量子計算の実用化が進むと、RSAや楕円曲線暗号の安全前提が大きく揺らぐ可能性があります。一方で対称鍵暗号やハッシュは影響の受け方が異なり、鍵長見直しで継続利用できる領域もあります。重要なのは『すべてが同時に破られる』と捉えるのではなく、方式ごとの影響度とデータ寿命を結びつけて優先順位を決めることです。

量子計算が既存暗号方式へ与える影響度ヒートマップ図
方式ごとの影響差を可視化すると、移行優先順位を現実的に決めやすくなります。
移行戦略の基本応用

耐量子移行は、標準確定後に一括更新する作業ではなく、資産棚卸し、利用方式の可視化、依存ライブラリ確認、互換性検証を段階的に進める継続プロセスです。長期保存データを抱える領域では、移行準備を先送りすると将来的な再暗号化コストと業務停止リスクが急増します。今の段階から観測可能な移行指標を設計することが重要です。

標準確定後の一括移行を前提にすると、資産把握と互換検証が間に合わず、移行遅延が恒常化しやすくなります。
45

格子にもとづく基礎

第12章 耐量子暗号

本節では、耐量子方式の中核となる格子問題を導入します。LWE(Learning With Errors)系やNTRU(Nth Degree Truncated Polynomial Ring Units)系の違いを直観的に整理し、安全性と実装性のトレードオフを読むための土台を作ります。

代表的な格子問題応用

格子暗号では、LWEやRing-LWE、SIS(Short Integer Solution)、NTRUといった計算困難問題を安全性の根拠として利用します。これらは数理構造や演算効率が異なり、鍵交換系と署名系で採用される問題設定も変わります。方式名だけで理解するのではなく、どの問題に還元される安全性かを把握することが、実装時の比較検討で重要になります。

LWE Ring-LWE SIS NTRUの関係と用途を示す概念マップ
問題設定と用途の対応を先に整理すると、方式比較の軸が明確になります。
安全性と実装性応用

耐量子方式の評価では、安全性だけでなく鍵サイズ、署名サイズ、計算量、実装複雑性、サイドチャネル耐性を同時に確認する必要があります。理論上強い方式でも、通信量や実装難度が運用制約を超えると実導入は困難になります。設計時は対象システムの性能限界と監査要件を先に定義し、適合する方式へ絞り込むのが現実的です。

46

主要方式と標準化動向

第12章 耐量子暗号

本節では、主要な耐量子方式の比較と移行ロードマップを扱います。技術比較だけでなく、監査・運用更新を含めた段階導入の設計を重視します。

主要アルゴリズムの比較応用

主要方式を比較する際は、鍵サイズ、署名サイズ、生成/検証速度、実装成熟度、ライブラリ供給状況を同時に評価します。鍵共有系と署名系で最適解は異なるため、単一指標での優劣判断は適切ではありません。導入対象のネットワーク帯域、端末性能、更新頻度を前提に比較軸を固定すると、現場で採用可能な候補を絞りやすくなります。

主要耐量子アルゴリズムをサイズ速度成熟度で比較する図
比較軸を固定して評価すると、用途に応じた方式選定を説明しやすくなります。
移行ロードマップ応用

実運用の移行は、(1) 資産可視化、(2) ハイブリッド構成での段階導入、(3) 標準方式への本格切替、(4) 監査・運用手順更新、という複線進行で設計する必要があります。技術切替だけ先行すると、監査証跡や運用手順が追従せず、移行完了判定が曖昧になります。技術・運用・監査の3レーンを同時に管理することが成功条件です。

技術移行運用更新監査対応を並走させる年次ロードマップ図
3レーンで進捗を管理すると、方式移行と組織運用のズレを早期に検出できます。
移行完了を技術指標だけで判断すると、監査対応や運用手順が未整備のまま残るリスクがあります。
🏠