セキュリティを高めるためには、暗号だけでは足りない!
結論から言うと、セキュリティを高めるためには、「セキュリティの概念を理解した人間によって構成された強いシステム」が必要になります。
初めに
2025年10月のプロジェクトマネージャ試験受験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関して無知であるため、資格勉強の傍ら暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、そんなセキュリティ初心者による読書感想文です。
目的
暗号の世界を俯瞰し、全体像をつかむことを目的とします。
対象者
私と同様、セキュリティについて初学者の方や少しの知識はある方を対象としています。
送信者と受信者と盗聴者
一般的に、何かしらの情報を送信する人を送信者(Sender(= センダー))といい、受信する人を受信者(Receiver(= レシーバー))といいます。
さらに、送信者と受信者でやり取りする内容(情報)をメッセージ(Message(= メッセージ))といいます。
送信者から送信されたメッセージは様々な機器を経由し、受信者に届きます。
しかし、その途中では、盗聴者(Eavesdropper(= イーヴスドロッパー))によってメッセージ内容の盗聴という危険性があります。
暗号(Cryptography(= クリプトグラフィ))という技術
メッセージ内容の盗聴を防止するためには、メッセージ内容の暗号化(Encrypt(= エンクリプト))してから送る必要があります。
こうした暗号化により、暗号化前の平文(PlainText(= プレインテキスト))から暗号化後の暗号文(CipherText(= サイファテキスト))に変換することにより、盗聴されたとしても解読ができないようになります。
そして、暗号文を受信した受信者はメッセージを復号化(Decrypt(= デクリプト))することで平文に復号ができるわけです。
しかし、受信者以外が暗号文から平文を取得することもできるわけですが、この行為を暗号解読(cryptanalysis(= クリプトアナリシス))と呼び、解読や暗号解析とも呼びます。
さらに、暗号解読をする人を暗号解読者(cryptanalyst(= クリプトアナリスト))と呼びます。
暗号学者の道具箱
暗号は送信者による暗号化によって、機密性(Confidentiality(= コンフィデンシャリティ))を守ることができます。
しかし、「機密性」だけではなく、改ざんされていないことを確かめる「完全性(Integrity(= インテグリティ))」や本人であることを確かめる「認証(Authentication(= オーセンティケーション))」なども重要である。
共通鍵暗号と公開鍵暗号
暗号は、鍵の使い方によって、下記2種類に分類されます。
| 名称 | 英語表記 | 読み方 | 内容 | 備考 |
|---|---|---|---|---|
| 共通鍵暗号 | SymmetricCryptography | シンメトリッククリプトグラフィ | 暗号化と復号化で同じ鍵を使う方式 | 対称暗号とも呼ぶ |
| 公開鍵暗号 | PublicKeyCryptography | パブリックキークリプトグラフィ | 暗号化と復号化で異なる鍵を使う方式 | 非対称暗号とも呼ぶ |
さらに、これらの暗号方式を組み合わせたハイブリッド暗号システム(HybridCryptoSystem(= ハイブリッドクリプトシステム))も存在します。
一方向ハッシュ関数
インターネットからダウンロードした情報(データやソフトウェア等)は、インターネットを経由しているため、端末に届くまでの間に様々な脅威があります。
例えば、通信途中で攻撃者によって改ざんされることもあります。
改ざんされることによって想定される情報とは異なる情報が端末に届いてしまうため、改ざんされていないことを確認する必要があります。
これを確認するために、セキュリティを意識している提供者は、一方向ハッシュ関数(OneWayHashFunction(= ワンウェイハッシュファンクション))によって計算されたハッシュ値を公開しています。
このWeb上で公開されているハッシュ値とダウンロードした情報のハッシュ値を突き合わせることで、改ざんの有無を検証できます。
ハッシュ値が一致すれば、完全性を証明できます。
完全性はそれが正真正銘本物であるという性質を証明するものです。
そのため、仮に、ハッシュ値が不一致である場合、それは想定される情報ではないことを表します。
メッセージ認証コード
メッセージ認証コード(MessageAuthenticationCode(= メッセージオーセンティケーションコード))によって、メッセージが期待した通信相手から来たものであることを確かめられます。
これにより、完全性に加えて、認証も確認できます。
デジタル署名
インターネットの送信者は簡単に偽造することができるため、攻撃者が誰かになりすまし(Spoofing(= スプーフィング))している可能性も捨てられません。
たとえ、なりすましがなくとも、情報が通信途中で改ざんされている可能性もあります。
一方で、自身が送信したという事実を翻すような否認(Repudiation(= レピュディエーション))をされる可能性もあるわけです。
これらの「なりすまし」「改ざん」「否認」という脅威を防ぐ技術をデジタル署名(DigitalSignature(= デジタルシグネチャ))といいます。
疑似乱数生成器
安全な鍵を生成する重要な役割は、疑似乱数生成器(PRNG:PseudoRandomNumberGenerator(= シュードゥランダムナンバージェネレーター))が担い、乱数列を疑似的に生成するアルゴリズムです。
これにより、なんの意味もない乱数が機械的に生成され、鍵として利用可能となります。
ステガノグラフィ
一般的には、上述した暗号によって、情報を暗号化し内容を読めないようにします。
そのほかに、情報の存在そのものを消してしまうステガノグラフィ(Steganography)という技術も存在します。
つまり、情報を読めないように暗号化するのではなく、存在自体を消してしまおうという技術ですね。
例えば、ステガノグラフィを使った電子透かしは、ファイルの中に著作権者や購入者の情報を埋め込むことが可能です。
ただし、ステガノグラフィは一度法則がばれてしまうと使えないものとなるため、暗号化には向いていません。
そのため、これ単体で利用するというよりも、他の技術と併用する方法が用いられます。
暗号とセキュリティの常識
暗号はセキュリティを担保するうえで万能な技術のようですが、意外とそうではないようで・・・
こちらでは、初学者がつまずくポイントを挙げます。
- 秘密の暗号アルゴリズムを使うな
- 弱い暗号は暗号化しないよりも危険である
- どんな暗号もいつかは解読される
- 暗号はセキュリティのほんの一部である
秘密の暗号アルゴリズムを使うな
「自社独自の暗号アルゴリズムを開発し、それを秘密にしておけば安全」という考えは大きな誤りです。
したがって、セキュリティ高めるためには、強いとされる公開暗号アルゴリズムを使うべきです。
理由は下記の通り。
- 暗号アルゴリズムの秘密は必ず暴かれる
- 強い暗号アルゴリズムを生み出すのは非常に困難
暗号アルゴリズムの秘密は必ず暴かれる
結論、歴史的にどんな暗号アルゴリズムも暴かれなかった事例がないからです。
どんなに強いと自負する暗号アルゴリズムも暴かれたら、意味がないです。
しかし、公開されているアルゴリズムは最初から秘密ではないため、暴露されて強さが減じるという危険はありません。
その代わりに、鍵を秘密にし、セキュリティを担保する必要がありますが。
そして、暗号アルゴリズムを秘密にし、セキュリティを保とうとする行為は、隠すことによるセキュリティ(SecurityByObscurity(= セキュリティバイオブスキュリティ))と呼ばれ、危険かつ愚かなこととみなされます。
強い暗号アルゴリズムを生み出すのは非常に困難
強い暗号アルゴリズムと弱い暗号アルゴリズムを比較することは、大変難しく、暗号アルゴリズムの強さを証明することもできません。
暗号の強さの証明は、専門の暗号解読者たちが、何年も解読を試みて失敗したという事実のみ可能です。
したがって、「社内独自に開発した暗号が強い」という考えは、社内の能力を過大評価していると言えます。
弱い暗号は暗号化しないよりも危険である
「どんなに弱い暗号でも、暗号化しないよりはマシだろう」という考えも危険です。
なぜなら、弱い暗号は暗号していないも同然の状態であるのに対して、「暗号」という言葉によってユーザが誤った安心感を抱きやすいからです。
その結果、機密性の高い情報の扱いがぞんざいになってしまう危険が生じます。
どんな暗号もいつかは解読される
どんな暗号アルゴリズムで作った暗号文でも、すべての鍵をしらみつぶしに試すこと(例えば、ブルートフォース攻撃)によって、いつかは必ず解読できるからです。
つまり、暗号文の解読時間と秘密にしたい平文の価値のバランスが重要になります。
ただし、使い捨てパッド(OneTimePad(ワンタイムパッド))によって、絶対に解読されない暗号アルゴリズムも存在しますが、現実的ではありません。
暗号はセキュリティのほんの一部である
暗号の強さには無関係に、ソーシャルエンジニアリングなどによってセキュリティの脆弱性が狙われる危険性もあります。
したがって、高いセキュリティを保つためには、システムというものの性質を理解する必要があります。
そして、複雑なシステムはいくつもの鎖がつながった状態であり、鎖を引っ張るともっとも弱い鎖から切れます。
つまり、システムの強さとは、最も弱い鎖の強さに他ならないのです。
さらに、最も弱いリンクは暗号ではなく、人間であります。
したがって、セキュリティを高めるためには、「セキュリティの概念を理解した人間によって構成された強いシステム」が必要になります。


