高速ハッシュの登場とアプリケーションへのインパクト

ディスク性能と暗号性能の改善、広帯域化にともなうボトルネック化

インターネットの普及が始まった頃から、ネットワークを介したファイルの授受をする際にファイルの内容が壊れていないか確認するためにMD5などのハッシュが使われてきた。HTTPSやSSHなどの暗号通信で使用されるメッセージ認証(MAC, Message Authentication Code)でも、ネットワーク上でのデータの欠損や不整合、真正性を確認するための手段として用いられてきた。SHA1及びSHA2を含めこうした従来普及してきたハッシュ計算アルゴリズムは、現在の計算機で使用すると数Gbps程度の処理スループットとなる負荷がかかるアルゴリズムとなっている。

2010年頃までは、暗号処理による負荷が主に暗号通信のボトルネックとなっていたが、ハードウェアアクセラレーションの登場や回線の広帯域化(1Gbpsを超える回線の提供)などにより数Gbpsから10Gbps超えるスループットを発揮できるようになってきており、ハッシュ計算が暗号通信のボトルネックとなる可能性が高まってきた。また、SSDの普及によりディスク書き込み性能が向上し、ハッシュ計算を用いてデータの不整合を検査しつつファイルに書き込むようなアプリケーションでもハッシュ計算がボトルネックとなりつつある。

暗号通信における性能改善

MACと暗号処理との関係は関連記事「暗号標準(AES) ブロックチェインモードからカウンタモードへ」を参照されたいが、ハッシュベースのメッセージ認証(HMAC)を暗号通信で使用する場合は、上で述べたような従来のMD5やSHA1、SHA2アルゴリズムが使用されてきた。一方でAES-NIなどによるハードウェアアクセラレーションの登場により、ブロックモードの暗号処理(AES-CBCやAES-CTR)自体が大きく改善された結果、HMACで使用されるSHA2などのハッシュ計算がボトルネックとなるようになった。

こういった背景を踏まえて64bit計算機アーキテクチャ向けに高速にMACを計算するために設計されたのが、VMACである。ハッシュ計算のスループットは60Gbpsに達し、ハードウェアアクセラレーションと暗号ブロックモードにより改善された暗号処理のスループットに対して十分余裕のある設計となっている。

ファイル伝送アプリケーションにおける性能改善

これまで述べてきたハッシュ計算は暗号処理にまつわるものであったが、これらは暗号学的ハッシュ関数 (Cryptographic Hash Function)と呼ばれている。これらは、先に述べたメッセージ認証を含めデジタル署名など情報セキュリティの分野で広く利用されるセキュリティ技術で用いることを目的として設計されたものである。セキュリティ面での要求として暗号学的ないくつかの性質(弱衝突耐性、強衝突耐性や入力データの違いが小さくても計算結果が大きく変化すること)が求められるため、一般的(非暗号学的)なハッシュ関数の性質に加えこのような性質を含んでいる。一方で、セキュリティ上のこういった要求が不要な状況では、必要とされない性質である。

例えば、単にデータの一致性を確認する目的やハッシュテーブルなどで使用する場合は、こういった性質は不要であり、暗号学的ハッシュはその性質上処理負荷が高く、こういった目的での利用には不向きである。SSDの普及によるディスク性能の向上やmemcachedの様な巨大なハッシュテーブルへのアクセスなど処理性能への期待は年々高くなっており、この様な背景により次のような高速ハッシュと呼ばれるハッシュアルゴリズムが考案されてきた。

  • MurmurHash
  • CityHash
  • SipHash
  • xxHash

それぞれ、MurmurHashとSipHashは32Gbps程度のスループット、CityHashは160Gbps程度、xxHashは240Gbps程度とMD5やSHA1と比べて大きく改善されている。データの一致性を確認する目的でMD5やSHA1を使用すると、たとえ暗号通信が10Gbps以上の性能を発揮できたとしても、ハッシュ計算がボトルネックとなり性能が低下してしまうが、こういった高速ハッシュを利用することでそのボトルネックを解消することが可能となる。

※MurmurHashは、ハッシュ計算する際に計算に渡すデータの境界パターンが異なると、一連のデータが同じデータでも異なるハッシュ値を返すことがあるため、データ一致性の確認目的に使用することには向きません。

実測性能比較

次の条件で4種類のハッシュ計算(HMAC2種、VMAC1種、非暗号学ハッシュ1種)の性能を実測した。

  • ホストマシン Intel Core i7 8700 3.2GHz 32GB RAM / Windows 10
  • VMゲストマシン Fedora 36 Workstation
  • Crypto++とxxHashを使用
  • ゲストマシン上で8GBのデータのハッシュ計算処理を行い、時間を計測してスループットを計算
ハッシュ計算方法スループット
HmacMD5 (128bits)6.01 Gbps
HmacSHA256 (256bits)2.80 Gbps
VmacAES (128bits)65.0 Gbps
XXH3 (128bits)187 Gbps

関連記事

暗号標準(AES) ブロックチェインモードからカウンタモードへ

関連情報

MD5 – Wikipedia

VMAC – Wikipedia

暗号学的ハッシュ関数 – Wikipedia

ハッシュ関数 – Wikipedia

xxHash – GitHub

TOP