見出し画像

誰かがデータを改ざんしたのでは?という疑いを解決するスゴイ関数:ハッシュ関数

はい、こんにちは!松井真也です。

シリーズ「毎日あなたが安全にウェブ利用できるスゴイ仕組み:SSL/TLS」の第5回でございます!

前回は、SSL/TLSによる暗号化についてお話ししました。公開鍵暗号方式と共通鍵暗号方式を上手に組み合わせるのでしたね!

さて、今回は、SSL/TLSで使用する暗号方式のうち、「改ざん検知」と「サーバ認証」を行う「ハッシュ関数」の基本についてお話しします。現代の暗号は、公開鍵暗号方式、共通鍵暗号方式、そしてハッシュ関数の3トップで成り立っています。ハッシュ関数についても、やはり知っておきましょう!

ハッシュ関数の驚くべき特徴

SSL/TLSプロトコルにおいて、ハッシュ関数は「データの整合性」と「認証」の両方にとても重要な役割を果たしています。

でも、そもそも「ハッシュ関数」ってなんなのよ?という気もしますね。一応簡単に解説しましょう。

ハッシュ関数は、一方向性の関数の一つです。ある任意の長さの入力値(メッセージ)から、固定長の出力値(「ハッシュ値」「メッセージダイジェスト」)を生成します。

これには、重要な特徴があります。

  • 同じ入力からは常に同じ出力が生成される。

  • 同一のハッシュ値が出力される、入力値の組み合わせを見つけるのが難しい。(衝突発見困難性)

  • あるハッシュ値と同じハッシュ値を出力する、別の入力値を探すことが難しい。(第2原像計算困難性)

  • 元のデータからハッシュ値を逆算することが難しい。(原像計算困難性)

といったところです。

これらの性質をうまく利用するんですね。

メッセージ認証コード(MAC)と改ざん検出

メッセージ認証コード(MAC)は、このハッシュ関数を応用します。ネットワークカードに焼き付いている物理アドレスのことではないですよ!

これは、データが改ざんされていないことを確認するために使用されます。

具体的には、送信するデータと共通鍵からMACを生成し、このMACをデータと一緒に送信します。受信側では、共通鍵と受け取ったデータを用いてMACを再計算し、送信されたMACと比較します。(共通鍵をどのように作り交換するかは前回の記事をご覧ください!)

もし両者が一致すれば、データは途中で改ざんされていないと認証されます。このプロセスにより、通信中にデータが第三者によって改変されるリスクが極めて低くなります。

デジタル証明書の検証

ハッシュ関数には、もう一つ重要な使い方があります。サーバなどのデジタル証明書の検証です。

デジタル証明書は、ウェブサイトの身元を証明する重要な手段です。SSL/TLSセッションを開始する際、サーバはクライアントに自身のデジタル証明書を送信します。

この証明書には、サーバの公開鍵、発行者の情報、有効期限、その他の属性が含まれていますが、特に重要なのが証明書のハッシュ値です。「そもそも、サーバが送りつけて来たこの証明書は、信用していいの?」って思っちゃいますよね?

そこで、クライアントは証明書に記載された発行者(証明機関、CA)の公開鍵を使って、証明書のハッシュ値を検証します。ハッシュ値が一致すれば、「証明書は、そのCAが確かに発行し改ざんされていないぞ!」とされ、安全な通信が始められます。「そのCA自体が信用できるか?」という重要な問題があるのですが、それはここではいったん保留しておきます…。

かように、ハッシュ関数の使用は、SSL/TLS全体でセキュリティの基盤を形成し、データの信頼性を保つための重要な要素となっています。

このおかげで、私たちはオンラインでの取引やコミュニケーションがより安全にできるんですね!


はい、本日はここまで。今回は、SSL/TLSで使用されるハッシュ関数についてお話ししました!

次回は、SSL/TLSの接続フローについてご紹介しましょう。

では!

この記事が気に入ったらサポートをしてみませんか?