🔏
Ruby で HMAC-SHA256
やりたいこと
Ruby で HMAC-SHA256 のハッシュ値を生成したい
変数
シークレットキー: "secret"
ハッシュ化対象文字列: "payload"
コード
require 'openssl'
secret = 'secret'
payload = 'payload'
hash = OpenSSL::HMAC.hexdigest(
OpenSSL::Digest.new('sha256'),
[secret].pack('H*'),
payload
)
Rails の場合、 require 'openssl' は不要
解説
-
OpenSSL::Digest.new('sha256')を使用してSHA-256ハッシュオブジェクトを作成 -
OpenSSL::HMAC.hexdigest関数に渡された秘密鍵とメッセージを使用して、HMACを計算 - 計算された
HMACは、16進数表現の文字列として返される
HMAC-SHA256 とは
HMAC-SHA256 (Hash-based Message Authentication Code with SHA-256)は、暗号学的ハッシュ関数である SHA-256 と、秘密鍵を使用してメッセージの認証情報(MAC)を生成するための認証プロトコル。
HMAC: ハッシュ情報を用いて認証情報を生成する認証方式
SHA-256: 256ビット(32バイト)の長さのハッシュ値を生成する関数
- 送信者は、メッセージに対して
HMAC-SHA256関数を適用し、その結果をメッセージと一緒に送信する - 受信者は、同じ秘密鍵を使用して受け取ったメッセージに
HMAC-SHA256関数を適用し、生成されたMACと送信者から受け取ったMACを比較する - もし
MACが一致しない場合、メッセージが改ざんされている可能性があるため、認証に失敗したと判断する
HMAC-SHA256 は、SHA-256 ハッシュ関数と秘密鍵を使用しているため、安全性が高いとされている。
参考
シークレットキーを16進数文字列にする理由
秘密鍵 (secret_key) をバイト配列として表現するため。
一般的に秘密鍵はバイトのシーケンスとして表現されるが、文字列として直接扱う場合には、16進数表現を使用する。
16進数表現に変換することで、バイト配列をより扱いやすい形式に変換することができる。
Discussion