Pythonと暗号学的ハッシュ関数に関するあれこれ2019-11-25Pythonと暗号学的ハッシュ関数に関するあれこれPG:python・文法・Tips今回はPythonで暗号学的ハッシュ関数を扱う話題です。ハッシュ関数とはハッシュ関数とは、ざっくり言えば、「あるデータを元に、それを代表する数値(要約値またはハッシュ値と言う)を得るための関数」です。ハッシュ関数などの種類があります。どれも「同一性の確認に使う」点では同じなのですが、対象コンテンツとアルゴリズムが違います。今回とりあげる、暗号学的ハッシュ関数は「パスワード」や「ブロックチェーン」や「デジタル証明書」などのセキュリティ確保に利用するもので、「任意の長さの入力を(通常は)固定長の出力に変換」します。ja.wikipedia.orgPythonの暗号学的ハッシュ関数ライブラリ暗号学的ハッシュ関数は、よく使われるだけに、当然のように、Pythonでも標準で対応しています。docs.python.org暗号学的ハッシュ関数には、様々な種類のアルゴリズムがあります。それぞれ特徴があり、アウトプットの長さも様々です。こちらの記事にも沢山紹介されてますが、TigerとかpanamaとかHAVALとか、一度も使ったことがないようなものも多いです。MD5、BREAK2b、BREAK2s、shake128、shake256・・などのアルゴリズムに対応していて、簡単に使えるようになっています。hashlib.md5()m.update(b"a")print(m.hexdigest())こんな感じで「a」1文字に対するハッシュ値が求められます。この結果は0cc175b9c0f1b6a831c399e269772661になります。入力は1文字なのに、HEX(16進数)で32文字=128ビット長の結果です。このへんが暗号学的ハッシュ関数の面白いところです。1文字の入力でも固定長128ビット(MD5の場合)。入力が数百メガバイトあるようなファイルが入力になっても固定長128ビット。