【セキュリティ】メッセージ認証コード・デジタル署名の仕組みについて解説します




このページでは、情報セキュリティで重要な「署名」と「メッセージ認証コード」の仕組みについて解説していきます。これを理解するためには、暗号通信について理解しておく必要があるので、まだ不安があるかたは下記の記事で内容を確認してください。

【セキュリティ】共通鍵暗号・公開鍵暗号の仕組みについて解説します

2019年10月29日

目次

はじめに

暗号技術は「機密性」を保つための手段でした。機密性というのは、特定の人だけが情報にアクセス出来るが、それ以外の人は見ることが出来ないという状況のことを言います。

一方で、今回の記事で説明するのは「完全性」を維持するための技術になります。完全性というのは、送信者からの情報が何者かによって改ざんされていないことを指します。

さらに言えば、メッセージ認証コードについては送信者の「認証」(正しい相手から送られてきていることの確認)を行うことも出来ます。また、デジタル署名は「認証」「否認(自分が行った行為を、行っていないと否定すること)」「第三者証明」も可能になります。

まずは、これらの技術を理解する上でのポイントになる「ハッシュ関数」について解説します。

ハッシュ関数

ハッシュ関数とは

ハッシュ関数とは、あるデータから、決まった長さ(固定長)のビット列を出力する関数を指します。出力されたビット列のことを「ハッシュ値」と呼び、ハッシュ関数およびハッシュ値はビットコインなどのブロックチェーンでも使用されています。

ハッシュ関数の性質として、データの一部分が変わっただけでも、大きく異なるハッシュ値を出力するという点があります。そのため、改ざんがたった1文字だけだったとしても、ハッシュ値が大きくずれます。

また、ハッシュ値は不可逆性をもち、ハッシュ値から元のデータを復元することが出来ないので、パスワード保存にも使われています。

この性質を利用して、送るデータと一緒に、そのデータから生成したハッシュ値を送信することで、改ざんの検知が可能になります。すなわち、受信者側でデータをハッシュ化してみて、セットになって送られてきたハッシュ値と異なっていれば改ざんされているということになります。

代表的なハッシュ関数としては、「MD5(Message Digest Algorithm)」や「SHA(Secure Hash Algorithm)-256」などが存在します。ちなみにビットコインにはSHA-256が使われています。

ハッシュ関数のみの問題点

しかし、ハッシュ関数で改ざんを検知することは出来たとしてもなりすましを検知することはできません。受信者にとっては、ハッシュ化だけだと送信者が本当に適切な人物なのかが分からないのです。そこで、「メッセージ認証コード」という技術が使われます。

メッセージ認証コード

メッセージ認証コードとは

メッセージ認証コード

メッセージ認証コードとは、ハッシュ値を「共通鍵」で暗号化することによって、送信者がなりすましをしていないか検知する仕組みです。

まず、送信者と受信者で共通鍵を用意しておきます。

手順

①送信者は平文からハッシュ値を生成

②次にそのハッシュ値を暗号化

③平文と暗号化されたハッシュ値を受信者に送信

④受信者は送られてきた平文をハッシュ化してハッシュ値を取得

⑤ハッシュ値を共通鍵で復号

⑥④で取り出したハッシュ値と比較

比較の結果、ハッシュ値が異なっていれば平文が改ざんされた可能性があるということになります。

メッセージ認証コードのデメリット

まず、共通鍵の受け渡しを安全に行わなければいけない点があります。また、改ざん検知と相手の認証は出来ますが、否認の防止や第三者証明(第三者に、誰が誰にデータを送ったか証明すること)が出来ません。

なぜならば、共通鍵を複数人で共有したときに、同じ鍵を持っている人が複数人いるからです。そのため、デジタル署名という技術が使われます。

デジタル署名

デジタル署名とは

デジタル署名

デジタル署名とは、共通鍵でやりとりしていたハッシュ値を「公開鍵」で行う技術です。

手順

①送信者は公開鍵を公開

②平文からハッシュ値を計算

③ハッシュ値を暗号化

④平文と暗号化されたハッシュ値を受信者に送信

⑤受信者は平文からハッシュ値を取得

⑥送られてきた暗号化されたハッシュ値を公開鍵で復号

⑦④と⑥で得られたハッシュ値を比較

ここで、③を見てみましょう。送信者がハッシュ値を暗号化する際に使う秘密鍵は送信者しか持っていません。そのため、否認の防止やや第三者証明を行うことが出来るのです。

さいごに

さて、ハッシュ関数・メッセージ認証コード・デジタル署名について解説してきました。しかし、これらの技術を使ってもまだ解決していない問題があります。

それは「なりすましていない相手の鍵を利用しているという前提がある」ことです。例えば、個人間であればそれを確認できるかもしれませんが、銀行のページのふりをして、口座番号やパスワードを入力させようとしている偽サイトが存在します。

では、そのような問題を解決するためにはどのようにすればいいのでしょうか?それが次回紹介する「デジタル証明書」「SSL」といった技術になります。