このコンテンツはこちらの英語コンテンツの機械翻訳です。
HMACとは、Hash Based Message Authentication Codeの略で、ハッシュ関数とシークレット鍵を組み合わせた暗号と認証の技術の1つです。
HMACを使用することで、署名や非対称暗号を使用するアプローチとは異なり、共有シークレットを用いて認証とデータが正しく本物であることの確認をすることができます。
HMACの仕組み
2人の当事者間で通信しますが、通信のプライバシーを保ちたいと考えていたとします。その場合に、インターネットを信頼していないため、受信したパケットが改ざんされていないことを確認する方法が必要です。このようなとき、HMACは有効な解決策となります。
HMACは、主に以下の2つの部分で構成されます。
- シークレット鍵:同じシークレット鍵を使用しているかを検証するため、特定のコードまたは鍵を必要とします。
- ハッシュ関数:ハッシュアルゴリズムでメッセージを2回変更(ダイジェスト)します。HMACは、SHA-1、MD5、RIPEMD-128/60などの汎用の暗号ハッシュ関数を使用します。
このシステムを使用する両当事者は、次について同意する必要があります。
- シークレット鍵:メッセージを処理する際に両者が同じ鍵を使用することが必要です。鍵は秘匿し、隠された状態にしておく必要があります。
- アルゴリズム:両者は、すべてのメッセージを処理する1つのハッシュ関数を選択する必要があります。
処理が完了したメッセージは不可逆であるとみなされ、ハッキングにも耐性があります。このメッセージを傍受しても、その長さを推測することさえできません。
HMACテスターツールは、このような機能の仕組みを示すのに役立ちます。以下のような入力を処理する場合を考えてみましょう。
- メッセージ:I would like to buy 100 units.
- 秘密鍵:666
- アルゴリズム:MD5
結果のメッセージは「76320c555ff8979f16df9539e53d4b69」となります。
簡単な変換プロセスのように見えますが、複雑な数学を基盤としています。HMACが数学的にどのように表されるかを示すには、以下のような図が使用されます。
この数学を理解することは、開発者にとって重要です。自分の仕事がどのようなもので、それがどのような保護を提供するかについて説明を求められた場合、言葉で説明するよりも図で示した方が効果的であることが往々にしてあります。
しかし、平均的なコンピューターユーザーの場合、このような数学を理解する必要はないかもしれません。メッセージが保護されていると知ることができれば、おそらくそれで十分でしょう。
HMACの実装方法
一個人またはWeb開発者がHMACを使用するには、2つの重要なアイテムが必要となります。また、これらのアイテムについて受信者との間で合意する必要があるため、同じツールを同時に使用することになります。
HMACを使用するには、次の2つが必要です。
- 共有シークレット鍵
- ハッシュツール
共有シークレット鍵を知っているのは自分のサーバーと受信者だけであることが重要です。また、厳格に保護されなければなりません。共有シークレット鍵を知っている人は、サーバーの代わりに不正なデータを送信したりすることができます。
Webサイトと開発の環境はそれぞれ異なりますが、例を使用することで理解しやすくなると思います。Googleのダイナミック広告挿入を利用するWebサイトで、広告リクエストの送信元をGoogleに対して証明するためにHMACを使用するケースを考えてみましょう。この場合、以下を実行します。
- Ad Managerでトークンを作成します。: 共有シークレットに相当するGoogleの認証鍵と訪問と時刻の詳細を指定して、トークンを作成します。
- 実装します。: 作成したトークンをAuthorizationリクエストヘッダー内に含めるか、あるいはクエリ文字列またはフォームデータのパラメーターとして渡すことができます。
Googleは、このプロセスを迅速かつ簡単なものにしています。開発者は、わずか数分で簡単なチュートリアルにアクセスしてコードをコピーできます。
Google広告の訪問者側では、鍵の保存やデコードなどの処理は求められません。また、訪問者がGoogleに送信する内容を変更すると、HMACの結果と一致しなくなるため、不正なデータがそのまま扱われることを防ぐことができます。
それでも、この環境をデプロイする前には入念にテストすべきです。コーディングエラーを発見した場合は、サイトへのアクセスをブロックすべきです。放置すると、アクセスが不正行為として識別されることになります。公開する前に、複数のデバイスでシステムをテストすることをお勧めします。
HMACを使うべき状況とは?
暗号化する必要はないが、送信者の確認とデータの改ざんを防ぎたい場合にHMACは役立ちます。鍵も共通の1つでよく、計算量も少なく抑えることができます。一般的なWebアプリケーションの開発で独自に採用することはあまりないかもしれませんが、TLS や JWT の中で利用されることも少なくありません。多くの場合、同じ要件に対して公開鍵暗号や楕円曲線暗号も使うことができるため、必要に応じて検討ください。
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ヘルプ)
以上の内容は、原文(英語)の機械翻訳であり、原文と内容に差異がある場合は、原文が優先されます。