Qraft (クラフト)

ハッシュ

読み: はっしゅ

ハッシュ (ハッシュ関数) は、任意の長さの入力データを固定長の出力値 (ハッシュ値、ダイジェスト) に変換する関数です。同じ入力からは常に同じハッシュ値が得られますが、ハッシュ値から元のデータを逆算することは計算上不可能です (一方向性)。また、入力が 1 ビットでも変わるとハッシュ値が大きく変化します (雪崩効果)。代表的なアルゴリズムに SHA-256、SHA-3 があります。

入力を 1 文字変えるだけで、ハッシュ値は全く別の値になります (雪崩効果)。SHA-256 の出力から先頭 16 桁だけを抜き出すと、次のように見えます。

入力SHA-256 の先頭 16 桁
QR code2c24d35a117c162d
QR Code5a779155eadaaa3b
QR codesf24e1b51e717a757

QR コードの周辺技術でハッシュが活躍する場面は複数あります。QR コード決済では、取引データのハッシュ値を電子署名と組み合わせることで、決済情報の改ざんを検知します。EU のデジタル COVID 証明書でも、ワクチン接種データのハッシュに対して電子署名を施し、QR コードに格納していました。

TOTP (ワンタイムパスワード) の生成にもハッシュが使われています。秘密鍵と現在時刻を HMAC-SHA1 (ハッシュベースのメッセージ認証コード) で処理し、6 桁の認証コードを導出します。QR コードで秘密鍵を受け渡し、ハッシュ関数で認証コードを生成する、という連携です。

チェックサムもハッシュの一種と捉えられます。QR コードのフォーマット情報バージョン情報は BCH 符号で保護されていますが、これもデータの整合性を検証するという点でハッシュと同じ目的を持っています。「データが正しいことを短い値で検証する」という原理は、QR コードの内部構造からアプリケーション層まで一貫して使われている基盤技術です。

QR コードの周辺でハッシュが使われる場面を整理します。

場面ハッシュの使い方目的
QR コード決済取引データのハッシュ値を電子署名と組み合わせる決済情報の改ざんを検知する
EU のデジタル COVID 証明書ワクチン接種データのハッシュに電子署名を施し、QR コードに格納していたデータが改ざんされていないことを確認する
TOTP (ワンタイムパスワード)秘密鍵と現在時刻を HMAC-SHA1 で処理する6 桁の認証コードを導出する
QR コードのフォーマット情報・バージョン情報BCH 符号で保護するデータの整合性を検証する