HMAC: Keyed-Hashing for Message Authentication メッセージ認証のための鍵付ハッシング

■式
H(K XOR opad, H(K XOR ipad, text))
ipad = バイト値 0x36 を 64 回繰り返した文字列
opad = バイト値 0x5C を 64 回繰り返した文字列

  1 #!/usr/bin/perl
  2
  3 use strict;
  4 use warnings;
  5
  6 use Digest::MD5 qw(md5_hex);
  7 use Digest::SHA1 qw(sha1_hex);
  8 use Digest::HMAC_MD5 qw(hmac_md5_hex);
  9 use Digest::HMAC_SHA1 qw(hmac_sha1_hex);
 10 use Benchmark;
 11 my $count   = 1000000;
 12 my $sec_key = 'oniichan doite soitsu korosenai akosan ha majo nanoyo';
 13 timethese($count,
 14     {
 15         'MD5_HEX' => sub { md5_hex(rand()); },
 16         'SHA1_HEX' => sub { sha1_hex(rand()); },
 17         'HMAC_MD5' => sub { hmac_md5_hex(rand(), $sec_key); },
 18         'HMAC_SHA1' => sub { hmac_sha1_hex(rand(), $sec_key);},
 19     }
 20 );
Benchmark: timing 1000000 iterations of HMAC_MD5, HMAC_SHA1, MD5_HEX, SHA1_HEX...
  HMAC_MD5:  7 wallclock secs ( 7.62 usr +  0.00 sys =  7.62 CPU) @ 131233.60/s (n=1000000)
 HMAC_SHA1:  9 wallclock secs ( 9.02 usr +  0.00 sys =  9.02 CPU) @ 110864.75/s (n=1000000)
   MD5_HEX:  3 wallclock secs ( 2.11 usr +  0.00 sys =  2.11 CPU) @ 473933.65/s (n=1000000)
  SHA1_HEX:  3 wallclock secs ( 2.87 usr +  0.00 sys =  2.87 CPU) @ 348432.06/s (n=1000000)

遅いといえば遅いですが、気になるほどでもないのかなと判断。