暗号の必要性
私たちの日常生活において、暗号は至るところで使用されています。たとえば、オンラインで買い物をする際、広大なネットワークを介してパスワードを安全に送信するために暗号技術を使用しています。銀行のサーバーとEメールクライアントでも、暗号を使用してユーザーのパスワードを保存します。
暗号は、IoTで接続された世界で送信されるすべての情報を保護して、人々と機器および機器同士の認証をするために使用されています。
すべての暗号エンジン/機能が1日でも動作を停止したら、私たちが知っている現代の生活は停止してしまうでしょう。銀行取引は行われず、インターネットトラフィックは停止して、携帯電話も機能しなくなります。この時点で、すべての重要な情報が公開され、それが悪用されることですべての人が想像を絶する損害を被る可能性があります。
暗号はそのような事態の発生を防ぐ重要な手段です。暗号は、一連のルールを用いて情報と通信を保護することで、所定の人のみが情報を受け取り、それにアクセスして処理することができます。
以前の暗号のやり方
その昔、暗号は送信された情報を安全にセキュリティを保つ方法として、「隠蔽によるセキュリティ(security by obscurity)」を利用していました。この方式ではほぼすべての技術が秘密にされていたため、「隠蔽(obscurity)」という言葉が用いられていました。これにより、通信は安全になりましたが、大規模に導入することはあまり容易ではありませんでした。古典的な暗号方式では、二者間が安全なエコシステムにおいて通信できる時にのみ安全でした。
図1に古典的な暗号システムを示します。送信者と受信者は、最初に暗号化/復号化の事前共有鍵について合意します。その後、これらの鍵は後続の各メッセージを暗号化/復号化するために順次使用されます。
ワンタイムパッドは、一度だけ使用可能な事前共有鍵の使用を必要とする暗号方式です。暗号化と復号化に同一の鍵を使用する必要があります。「ワンタイムパッド」という用語は、使用した後に廃棄されるそれぞれの鍵がメモ帳(パッド)の1ページにあることをイメージした造語です。事前共有鍵を使い果たしたら、送信者と受信者は安全な場所で会って、一組の新しい鍵を安全に交換し、次の一連のメッセージ交換の間、それらの鍵を安全な場所に保管しておく必要があります。
しかし…
明らかに時代遅れの古典的な方式はもはや実行不可能です。電子通信、商取引、知的財産の巨大なシステムのセキュリティを海や大陸など全体にわたって確保する必要があり、悪意を持つ人々に傍受されないように保護する必要があります。
現代の暗号手法
では、短期間に数十億の取引が実行できるような巨大なシステムにおいて、どのように優れたレベルのセキュリティを実装すればよいのでしょうか。
ここで現代の暗号が登場します。それは私たちの日常生活にとって重要な安全だがアクセス可能(secure but accessible)な通信の重要な部分です。
次に、これがまさに私たちの周りで、日常的にどのように実現されているのかについて説明します。私たちは既知のアルゴリズムを用いて、絶え間なくやり取りされる大量の情報を保護しています。これらのアルゴリズムは標準規格に基づいており、開かれた環境で検証されているので、脆弱性を迅速に見つけて対処することができます。
図2は最新の暗号システムの概要を示しています。これらのシステムとアルゴリズムをもう少し詳しく見てみましょう。
現代の暗号システムの基本的な利用者は、使用するアルゴリズムの隠蔽に頼るのをやめて、鍵の秘密性に頼るということです。現代の暗号システムには、次のような4つの基本的な目標があります。
- 機密性:閲覧の許可を受けていない人には情報を開示しません。
- 識別と認証:いかなる情報でも交換する前に、送信者と受信者双方を識別して承認します。
- 完全性:情報は保管中または送信中に変更されてはいけません。変更はすべて検出することができる必要があります。
- 否認防止:ッセージの作成/送信を否認することはできません。これにより、取引の「デジタル」正当性とトレーサビリティを提供します。
現代の暗号システムは、上記のすべてまたは組み合わせを、さまざまな形態で対象となるアプリケーションに提供します。これらの目標のそれぞれについてもう少し詳しく検討し、その実現方法の基本的な考え方を理解しましょう。
機密性を確保するためには
機密性を確保するには、不正なアクセスから情報を保護する必要があります。これは、送信者と受信者のみが知っている鍵を用いた暗号アルゴリズムを使用して、送信するメッセージを暗号化することによって実現されます。傍受者は暗号化されたメッセージを取得することはできるかもしれませんが、それを解読することはできません。
図3は暗号の使用方法を示しています。この場合、送信者と受信者は、暗号化/復号化の鍵を共有するシステムを運用しています。両者はこの鍵を使用して、相互に交換するメッセージを暗号化/復号化します。悪意のある人がこのメッセージを傍受しても害はありません。その人はメッセージを復号化するための鍵を持っていないからです。
識別と認証
ここでの目標は、最初に対象またはユーザーを識別し、通信やその他の処理を開始する前にそれらを認証することです。送信者が受信者を認証したら、その後の通信を開始することができます。
認証の基本事項についてさらに確認したい場合は、以下の動画(セキュリティに関する短編映像:認証の基礎)を参照してください。
図4は一方向の認証の仕組みを示しています。銀行(送信者)は、自行のWebサイトの使用を許可する前に、簡単なユーザー名とパスワードの組み合わせを使用して顧客のPC (受信者)を認証します。実際のプロセスはこれよりもはるかに複雑ですが、この簡単な例で暗号の基本的な考え方を示すことができます。識別と認証は双方向のプロセスとすることもできます。その場合は、送信者と受信者双方がメッセージの交換を開始する前に相互に識別を行う必要があります。
完全性
通信ネットワークやデータリンクを介して送受信されるメッセージが転送中に改ざんされていないことをどのように確認すればよいのでしょうか。たとえば、メッセージを傍受してウイルスや悪意のあるプログラムを仕込み、受信者のPCやその他の機器を知らないうちに乗っ取ろうとすることが考えられます。こうした事態を防止するには、送信されたメッセージが変更されないようにすることが不可欠です。
図5に示すように、これを行うための1つの方法は、メッセージダイジェストを使用することです。送信者と受信者は、合意済みのメッセージダイジェストアルゴリズムを使用してメッセージダイジェスト出力を生成して検証します。メッセージが改ざんされた場合、メッセージダイジェストは一致せず、受信者は改ざんが行われたか、または転送エラーが発生したことを知ることができます。SHA-2や直近ではSHA-3など最新の暗号アプリケーションでは、さまざまなメッセージダイジェストアルゴリズムが使用されています。
否認防止
大量のメッセージが交換される通信システムでは、受け取ったメッセージから送信者をたどることができる必要があります。これは、送信者がメッセージを送信したことを否認しないようにするために必要です。契約を確定するためにペンと紙を用いて点線上の記入欄に署名する法的文書と同様に、デジタル分野では、デジタル署名が同様な目標を達成するために使用されます。
図6は、デジタル署名の生成、送信、および検証プロセスの概要を示しています。最初に送信者は発信するメッセージを指定して、メッセージ署名アルゴリズムによりメッセージと送信者の検証済みIDに関連したデジタル署名を生成します。次に、送信者はそのデジタル署名を元のメッセージに付加し、署名済みのメッセージを受信者に送信します。受信者は受信した署名済みメッセージを受け取り、元のメッセージとデジタル署名を分離します。その後、両方ともメッセージ検証アルゴリズムに入力されます。受信者はその結果に基づいて、メッセージが送信者によって署名されたことを確認することができます。
著者プロフィール
Zia A. SardarMaxim Integrated
アプリケーションエンジニア
Maximのテクニカルスタッフ主要メンバーで、同社入社以前は、AMDならびにATI Technologiesに勤務し、グラフィックスプロセッサやPCIeブリッジ製品を担当していた。
マサチューセッツ州ボストンのノースイースタン大学で理学修士号(コンピュータ工学)と理学士号(電気工学)を取得。