前回の講座: [sitecard subtitle=PKI講座第4回 url=https://pkiwithadcs.com/public_key_encryption/ target=] ここまでに、データの暗号化方式について紹[…]
前回は、データの改ざん検知に利用することができるハッシュ アルゴリズムの概要について説明しました。
ただし、ハッシュアルゴリズムでは、送られてきたデータが改ざんされていないことは証明できます。しかしながら、ハッシュアルゴリズムの機能だけでは、データの送信元の正当性までは証明することはできません。
これの欠点を補う仕組みとして、「デジタル署名」という仕組みがあります。
今回は、「デジタル署名」について、概要を紹介したいと思います。
デジタル署名とは
デジタル署名とは、あるデータにに対して (1) データが改ざんされていないこと(データの完全性の保証)、(2) 正当な人からメッセージが送られてきている(送信元の認証)を実現するための技術です。
例えば、上図のように、「ねこまる」が exe の実行ファイル、「わるまる」が msi のインストーラーを Web サーバー上で公開していたとします。もし、身元不明のユーザーが作成した実行ファイルやインストーラーは、不正プログラムである可能性があり、実行した際にコンピューター内のデータを削除や搾取、プログラムの書き換えなどの問題が発生してしまったら大変です。そのため、インターネット上にある実行ファイル、インストーラーなどは気軽に実行するのは危険です。
前回、ハッシュ アルゴリズムの技術を用いてデータの改ざん検知が行えるようになるという話をしました。しかしながら、ハッシュ アルゴリズムの技術では、送信者が送ったデータが書き換えられていないことの保証はできているけれども、送信者のなりすましされてデータが送信された場合、受信者はそのデータが信頼できるものなのか判断することができません。
デジタル署名の技術では、ハッシュアルゴリズムと公開鍵暗号化方式の技術を組み合わせて、データが改ざんされていないことを保証しつつ、送信元が正しい相手であることを保証することができます。この技術により、インターネット上の脅威である “改ざん” と “なりすまし” に対処することができます。
一般的には、インターネット上に公開されている実行ファイルやインストーラーには、コード署名(デジタル署名の一種)が付与されています。コード署名により、製作元の身元保証を行っているため、そのプログラムが不正なものではないことを証明しています。
それでは、デジタル技術の詳細を見てみましょう。
デジタル署名の仕組み
デジタル署名は、データの完全性の保証と送信元の認証を実現するために、ハッシュアルゴリズムと公開鍵暗号化方式を組み合わせた技術です。
デジタル署名を生成する仕組みの詳細は、公開鍵暗号化方式のアルゴリズムの種類によって異なってきますが、今回は一番シンプルでわかりやすい RSA のデジタル署名の仕組みを紹介します。
デジタル署名の作成方法
RSA デジタル署名では、①送信するデータの任意のハッシュ アルゴリズムでハッシュ値を算出し、②そのハッシュ値を秘密鍵で暗号化したデータを作成します。この作成したデータのことを “デジタル署名” と呼びます。
データの送信者は、送信するデータと一緒にデジタル署名を付与して送信します。
デジタル署名を付与することで、そのデータが間違いなく本人が作成したものであり、なおかつ、データの内容を誰からも改ざんされていないことを証明することができます。また、データの送信者である「ねこまる」は、受信者の「ねこねこ」がデジタル署名を検証できるように、平文+デジタル署名と一緒に、検証に利用できる公開鍵も送信しています。
デジタル署名の検証方法
デジタル署名を検証して送信されてきたデータが正当なものであるかを確認するためには、デジタル署名の生成に使用した秘密鍵のキーペアとなる公開鍵が必要となります。
まず、① 公開鍵でデジタル署名のデータを復号して、元データのハッシュ値を得ます。② 次に自身も送信されてきたデータを、同じハッシュ アルゴリズムを利用してハッシュ値を生成して、デジタル署名とのハッシュ値の比較して、一致するかを確認します。
(デジタル署名のデータ構造に、実際のデジタル署名のデータのみではなく、デジタル署名の生成に利用した「ハッシュアルゴリズム」、「公開鍵暗号化方式」の種類の情報が付与されています。そのため、適切なアルゴリズムを指定して検証を行うことができます。)
ハッシュ アルゴリズムは “ハッシュ値が同じ = 元データが同じ” であることを保証する技術であるため、ハッシュ値が一致 (データの改ざんの検知)していれば、秘密鍵を持つ人(送信元の認証)が送ったデータが改ざんされていないという事実が担保できることになります。
つまり、デジタル署名により、公開鍵をもつ送信者が送ったデータであり、なおかつデータが改ざんされていないことを保証することができます。
デジタル署名の正当性を担保するには?
デジタル署名はデータの送信者の公開鍵をもっていれば、データの送信元の認証とデータの完全性が保証することができる技術です。ただし、”データの送信者の公開鍵が正当なものであること” が保証されていることが前提条件となっています。
ある人の公開鍵を本人から直接受け取るという形式をとることは少なく、多くの場合は、インターネット上で公開されている公開鍵を使ってデジタル署名の検証を行う形となります。そのため、公開鍵暗号化方式やデジタル署名などの技術を利用できるようにするには、公開鍵の正当性を保証するための仕組みが必要です。
PKI 講座4回目の ”公開鍵暗号化方式とは?” の記事にも記載しましたが、公開鍵を保証する仕組みがあれば、鍵の正当性も確認できるため、誤って悪意のある第三者が偽った公開鍵を利用してしまう恐れもありません。この公開鍵の正当性を保証する仕組みが “デジタル証明書” と呼ばれる技術になります。
次回は、公開鍵の正当性を保証する技術である「デジタル証明書」について説明します。
前回の講座 [sitecard subtitle=PKI講座第6回 url=https://pkiwithadcs.com/digital_signing/ target=] 前回は、公開鍵暗号化方式とハッシュアルゴリズ[…]