HMACとは 認証の仕組みと実装

HMACとは、Hash Based Message Authentication Codeの略で、公開鍵、秘密鍵、ハッシュを組み合わせることで、ハッカーが情報を解凍できないようにするメッセージ認証の暗号化技術の1つです。

HMACを使用することで、メッセージなどのデータの暗号化と、得られる情報の整合性チェックの両方が可能になります。

HMACの仕組み

2人の当事者間で通信する場合を考えてみましょう。それぞれが接続の内容を非公開にしたいと考えていたとします。その場合、またインターネットを信頼していないため、受信したパケットが改ざんされていないことを確認する方法が必要です。このようなとき、HMACは有効な解決策となります。

HMAC鍵は、以下の2つの部分で構成されます。

  1. 暗号鍵:暗号化アルゴリズムはデータを変更し、受信者は再び読み取り可能にするために特定のコードまたは鍵を必要とします。HMACは2つの鍵セットに依存しています。1つは公開鍵、1つは秘密鍵です。
  2. ハッシュ関数:ハッシュアルゴリズムは、メッセージをもう一度変更(ダイジェスト)します。HMACは、SHA-1、MD5、RIPEMD-128/60などの汎用の暗号化ハッシュ関数を使用します。

このシステムを使用する両当事者は、次について同意する必要があります。

  • 公開鍵:両者は連絡を取り合う方法を持っている必要があります。公開鍵は住所のようなものであり、送信者はメッセージをカスタマイズして作成できます。
  • 秘密鍵:両者は受け取るメッセージを復号化する方法を持っている必要があります。秘密鍵はこのタスクを処理し、秘密かつ隠された状態であり続けます。
  • アルゴリズム:両者は、すべてのメッセージを処理する1つのハッシュ関数を選択する必要があります。

処理が完了したメッセージは不可逆であるとみなされ、ハッキングにも耐性があります。このメッセージを傍受しても、その長さを推測することさえできません。この処理によって、鍵またはコードなしではメッセージの内容が絶対的に役に立たないものになります。

HMACテスターツールは、このような機能の仕組みを示すのに役立ちます。以下のような入力を処理する場合を考えてみましょう。

  • 潜在的なメッセージ:I would like to buy 100 units. 
  • 秘密鍵:666
  • アルゴリズム:MD5

結果のメッセージは「fd9f18089206e67b163771a3883185ab.」となります。 

簡単な変換プロセスのように見えますが、複雑な数学を基盤としています。HMACが数学的にどのように表されるかを示すには、以下のような図が使用されます。

この数学を理解することは、開発者にとって重要です。自分の仕事がどのようなもので、それがどのような保護を提供するかについて説明を求められた場合、言葉で説明するよりも図で示した方が効果的であることが往々にしてあります。

しかし、平均的なコンピューターユーザーの場合、このような数学を理解する必要はないかもしれません。メッセージが保護されていると知ることができれば、おそらくそれで十分でしょう。

HMAC

HMACの実装方法

一個人またはWeb開発者がHMACを使用するには、3つの重要なアイテムが必要となります。また、これらのアイテムについて受信者との間で合意する必要があるため、同じツールを同時に使用することになります。

HMACを使用するには、次の3つのアイテムが必要です。

  1. 公開鍵
  2. 秘密鍵
  3. ハッシュツール

すべてのユーザーの3つのアイテムをすべて知っているのが、自分のサーバーだけであることが重要です。また、そのデータは厳格に保護されなければなりません。メンバーの公開鍵と秘密鍵を知っている人は、サーバーを乗っ取ったり、不正なデータを送信したりすることができます。

Webサイトとコーディングの環境はそれぞれ異なりますが、例を使用することで理解しやすくなります。Googleからの動的広告を介してWebサイトにアクセスするトラフィックに対して、HMACを使用するケースを考えてみましょう。この場合、以下を実行します。

  • Ad Managerでトークンを構築します。訪問と時刻の詳細を指定します。Googleの認証鍵を使用して「秘密鍵」を作成します。
  • 実装します。新しいトークンをAuthorizationリクエストヘッダー内に含めるか、あるいはクエリ文字列またはフォームデータパラメーターとして渡すことができます。

Googleは、このプロセスを迅速かつ簡単なものにしています。開発者は、わずか数分で簡単なチュートリアルにアクセスしてコードをコピーできます。

Google広告の訪問者には、コードの暗記やデコードは求められません。ユーザーのサーバーはWebサイト内のコーディング要件を理解し、トークンの設定と変換はユーザーに一切認識されません。

それでも、この環境をデプロイする前には入念にテストすべきです。コーディングエラーを発見した場合は、サイトへのアクセスをブロックすべきです。放置すると、アクセスが不正行為として識別されることになります。公開する前に、複数のデバイスでシステムをテストすることをお勧めします。

HMACを使うべき状況とは?

ほとんどの企業には機密情報があります。たとえば、何らかの支払いを受けている場合は、クレジットカードのデータがあるでしょう。また、従業員がいれば、社会保障番号の情報が窃取される可能性があります。これらの情報を保護するのにHMACは役立ちます。

しかし、さらに深い問題を抱えている企業もあります。医療などの規制が厳しい環境にある場合、または軍需品などの企業秘密を扱う場合は、従来のセキュリティ対策にとどまらない対策を導入する意義が十分にあります。

可能な限り慎重に資産を保護していることを証明するために、追加の手段を講じる必要がある企業にとって、二重認証の保護機能を備えたHMACは理想的であると言えます。

HMACを使用するOktaの支援

Oktaは、お客様の成功を支援するためには、カスタマイズされたセキュリティソリューションが重要であると考えます。セキュリティを維持するために、OktaがHMAC署名アルゴリズムを使用する方法について、ご確認ください。

参考文献

HMAC: Keyed-Hashing for Message Authentication(1997年2月、Network Working Group) 

HMAC and Key Derivation(Practical Cryptography for Developers) 

HMAC Generator/Tester Tool(FreeFormatter) 

How API Request Signing Works (And How to Implement HMAC in NodeJS)(2016年、Andrew Hoang) 

Implement HMAC Authentication (Beta)(Google Ad Managerヘルプ)