ハッシュ関数 | MiB/秒 | 循環/ハッシュ | サイクル/マップ | サイズ | 品質の問題 |
---|---|---|---|---|---|
何もしない32 | 11149460.06 | 4.00 | - | 13 | 不正なシード 0、テスト NOP |
何もしない64 | 11787676.42 | 4.00 | - | 13 | 不正なシード 0、テスト NOP |
何もしない128 | 11745060.76 | 4.06 | - | 13 | 不正なシード 0、テスト NOP |
NOP_OAAT_read64 | 11372846.37 | 14.00 | - | 47 | テストNOP |
バッドハッシュ | 769.94 | 73.97 | - | 47 | 不正なシード 0、テスト失敗 |
サムハッシュ | 10699.57 | 29.53 | - | 363 | 不正なシード 0、テスト失敗 |
サムハッシュ32 | 42877.79 | 12月23日 | - | 863 | UB、テスト失敗 |
乗算_シフト | 8026.77 | 5月26日 | 226.80 (8) | 345 | 不正なシードと 0xfffffff0、ほとんどのテストに失敗します |
ペア_乗算_シフト | 3716.95 | 40.22 | 186.34 (3) | 609 | ほとんどのテストに失敗する |
------------------------ | |||||
crc32 | 383.12 | 134.21 | 257.50 (11) | 422 | 安全でない、8590x コリジョン、配布、PerlinNoise |
md5_32 | 350.53 | 644.31 | 894.12 (10) | 4419 | |
md5_64 | 351.01 | 656.67 | 897.43 (12) | 4419 | |
MD5-128 | 350.89 | 681.88 | 894.03 (13) | 4419 | |
しゃ1_32 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | 正気度、循環低値 32、36.6% 分布 |
sha1_64 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | 正気度、循環低値 32、36.6% 分布 |
しゃ1-160 | 364.95 | 1470.55 | 1794.16 (13) | 5126 | コーム/サイクリック Low32 |
しゃ2-224 | 147.13 | 1354.81 | 1589.92 (12) | コームロー32 | |
sha2-224_64 | 147.60 | 1360.10 | 1620.93 (13) | 周期的低値32 | |
しゃ2-256 | 147.80 | 1374.90 | 1606.06 (16) | ||
sha2-256_64 | 148.01 | 1376.34 | 1624.71 (16) | ||
シャニ | 1601.21 | 174.16 | 397.28 (6) | 989 | 安全でない、健全性、順列、ゼロ、マシン固有 |
しゃ1に_32 | 1576.17 | 174.04 | 405.56 (6) | 989 | マシン固有の |
しゃ2に-256 | 1527.38 | 184.35 | 404.40 (4) | 4241 | 安全でない、健全性、順列、ゼロ、マシン固有 |
シャ2ニ-256_64 | 1501.85 | 186.20 | 407.96 (5) | 4241 | ゼロ、マシン固有 |
ブレイク3_c | 1288.84 | 357.69 | 582.89 (6) | 32ビットの移植性がない | |
rmd128 | 290.90 | 710.49 | 965.55 (6) | ||
rmd160 | 202.16 | 1045.79 | 1287.74 (16) | サイクリックhi32 | |
rmd256 | 364.81 | 584.86 | 835.02 (11) | ||
edonr224 | 864.69 | 303.42 | 526.94 (6) | ||
エドンr256 | 847.85 | 305.79 | 510.01 (4) | ||
ブレイク2S-128 | 295.30 | 698.09 | 1059.24 (51) | ||
ブレイク2S-160 | 215.01 | 1026.74 | 1239.54 (11) | ||
ブレイク2S-224 | 207.06 | 1063.86 | 1236.50 (20) | ||
ブレイク2S-256 | 215.28 | 1014.88 | 1230.38 (28) | ||
ブレイク2s-256_64 | 211.52 | 1044.22 | 1228.43 (8) | ||
ブレイク2B-160 | 356.08 | 1236.84 | 1458.15 (12) | ||
ブレイク2b-224 | 356.59 | 1228.50 | 1425.87 (16) | ||
ブレイク2b-256 | 355.97 | 1232.22 | 1443.31 (19) | ||
ブレイク2b-256_64 | 356.97 | 1222.76 | 1435.03 (9) | ||
asconhashv12 | 144.98 | 885.02 | 1324.23 (38) | 4341 | |
asconhashv12_64 | 159.68 | 386.90 | 480.86 (4) | 6490 | |
しゃ3-256 | 100.58 | 3877.18 | 4159.79 (37) | パーリンノイズ | |
sha3-256_64 | 100.57 | 3909.00 | 4174.63 (16) | パーリンノイズ | |
ハッシェ2 | 2773.89 | 64.35 | 282.30 (3) | 445 | 順列、2バイト、ゼロ、シード |
Poly_1_mersenne | 1369.21 | 61.59 | 248.86 (4) | 479 | ほとんどのテストに失敗する |
ポリ_2_メルセンヌ | 1364.03 | 70.30 | 261.00 (6) | 479 | |
ポリ_3_メルセンヌ | 1342.82 | 80.22 | 268.79 (2) | 479 | |
ポリ_4_メルセンヌ | 1343.19 | 89.13 | 277.52 (3) | 479 | |
集計32 | 5781.16 | 40.00 | 241.79 (10) | 848 | 衝突 |
集計 | 7875.01 | 39.95 | 249.49 (3) | 554 | |
crc32_hw | 6244.38 | 41.23 | 226.80 (2) | 653 | 安全でない、100% バイアス、衝突、分散、BIC、マシン固有 (SSE4.2/NEON) |
crc32_hw1 | 7569.29 | 49.07 | 233.75 (3) | 671 | 安全でない、100% バイアス、衝突、分散、BIC、マシン固有 (x86 SSE4.2) |
crc64_hw | 6143.62 | 40.48 | 223.13 (2) | 652 | 安全でない、100% バイアス、衝突、分散、BIC、マシン固有 (SSE4.2/NEON) |
crc32_pclml | - | - | - | 安全でない、100% バイアス、衝突、分散、BIC、マシン固有 (x86 SSE4.2+PCLMUL) | |
o1ハッシュ | 11629440.57 | 18.15 | 199.35 (2) | 101 | 安全ではない、シードなし、ゼロ、すべてのテストに失敗する |
フィボナッチ | 16878.32 | 22.94 | 803.18 (15) | 1692年 | UB、ゼロ、すべてのテストに失敗します |
FNV1a | 760.52 | 73.83 | 254.29 (5) | 204 | 不正なシード、ゼロ、すべてのテストに失敗します |
FNV1A_トーテンシフ | 6274.78 | 26.23 | 251.13 (2) | 270 | UB、ゼロ、すべてのテストに失敗します |
FNV1A_ピピップ_ユリイ | 6172.14 | 27.55 | 244.80 (2) | 147 | UB、正気、すべてのテストに失敗します |
FNV1a_YT | 13486.49 | 30.50 | 237.43 (4) | 321 | 不正なシード、UB、すべてのテストに失敗します |
FNV2 | 6171.60 | 32.20 | 208.59 (4) | 278 | すべてのテストに失敗する |
FNV64 | 774.37 | 72.43 | 201.15 (2) | 79 | すべてのテストに失敗する |
FNV128 | 390.14 | 136.42 | 289.00 (3) | 171 | すべてのテストに失敗する |
k-ハッシュ32 | 2230.42 | 53.05 | 264.64 (3) | 808 | 安全ではありません、ゼロ、UB、不正なシード、すべてのテストに失敗します |
k-ハッシュ64 | 2451.88 | 48.66 | 249.44 (2) | 609 | 安全ではありません、ゼロ、UB、不正なシード、すべてのテストに失敗します |
フレッチャー2 | 15552.61 | 20.61 | 335.31 (3) | 248 | 不正なシード 0、UB、すべてのテストに失敗します |
フレッチャー4 | 15556.93 | 20.60 | 358.60 (3) | 371 | 不正なシード 0、UB、すべてのテストに失敗します |
バーンスタイン | 1045.97 | 58.31 | 225.78 (3) | 41 | 不正なシード 0、すべてのテストに失敗します |
sdbm | 784.83 | 68.57 | 222.68 (5) | 41 | 不正なシード 0、すべてのテストに失敗します |
×17 | 748.75 | 74.13 | 236.00 (10) | 79 | 99.98% のバイアス、すべてのテストに不合格 |
自由 | 628.66 | 84.95 | 225.07 (4) | 37 | 安全ではない、100% のバイアス、すべてのテストに失敗、悪いシード |
gcc | 611.69 | 86.47 | 231.51 (5) | 39 | 安全ではない、100% のバイアス、すべてのテストに失敗、悪いシード |
ジェンキンスOOAT | 627.64 | 107.04 | 252.79 (3) | 153 | 悪いシード 0、53.5% のバイアス、すべてのテストに不合格 |
JenkinsOOAT_perl | 608.10 | 94.17 | 254.09 (4) | 65 | 不良シード 0、1.5 ~ 11.5% のバイアス、7.2 倍の衝突、BIC、LongNeighbors |
マイクロOAAT | 701.35 | 76.68 | 251.01 (3) | 68 | 100% バイアス、分配、BIC |
ピアソンハッシュ64 | 434.17 | 124.14 | 230.79 (4) | アバランチ、シード、SSSE3のみ。壊れたMSVC | |
ピアソンハッシュ128 | 434.23 | 121.34 | 221.03 (7) | アバランチ、シード、SSSE3のみ。壊れたMSVC | |
ピアソンハッシュ256 | 444.08 | 119.11 | 229.75 (4) | アバランチ、シード、SSSE3のみ。壊れたMSVC | |
VHASH_32 | 13053.40 | 65.84 | 289.86 (3) | 1231 | 正気、シード、MomentChi2 |
VHASH_64 | 13465.50 | 63.88 | 286.38 (5) | 1231 | 正気、シード、スパース |
ファーシュ32 | 27038.23 | 66.88 | 278.89 (5) | 944 | 安全でない: AppendedZeroes、衝突+バイアス、MomentChi2、LongNeighbors |
ファーシュ64 | 13829.32 | 112.46 | 332.59 (3) | 944 | 安全でない: AppendedZeroes、衝突+バイアス、MomentChi2、LongNeighbors |
ファーシュ128 | 6878.88 | 233.35 | 384.85 (3) | 944 | 安全でない: AppendedZeroes、衝突 + バイアス、permut、combin、2bytes、zeroes、PerlinNoise |
ファーシュ256 | 3467.37 | 440.40 | 593.57 (5) | 944 | 安全でない: AppendedZeroes、衝突 + バイアス、permut、combin、2bytes、zeroes、PerlinNoise |
ジョディハッシュ32 | 1794.34 | 41.12 | 235.12 (4) | 102 | バイアス、衝突、分散、BIC LongNeighbors |
ジョディハッシュ64 | 4813.10 | 40.72 | 239.22 (6) | 118 | バイアス、衝突、分散、BIC、LongNeighbors |
ルックアップ3 | 2475.35 | 39.65 | 240.10 (3) | 341 | UB、28% バイアス、衝突、30% 分散、BIC |
超高速 | 2058.22 | 49.56 | 254.12 (3) | 210 | UB、不良シード 0、91% バイアス、5273.01x コリジョン、37% 分散、BIC |
ムルムルOAAT | 506.66 | 103.33 | 236.89 (3) | 47 | 不良シード 0、衝突、99.998% 分散、BIC、LongNeighbors |
クラップ8 | 3041.14 | 37.25 | 247.87 (4) | 342 | UB、2.42% バイアス、衝突、2% 分布 |
ささやき1 | 2027.85 | 48.51 | 253.34 (3) | 358 | UB、1 つの不良シード、511 回のコリジョン、差分、BIC |
つぶやき2 | 3089.18 | 41.22 | 238.42 (4) | 358 | UB、1 不良シード、1.7% バイアス、81x コール、1.7% ディストリビュート、BIC |
つぶやき2A | 3087.98 | 45.90 | 238.54 (4) | 407 | UB、不良シード 1 個、バイアス 12.7%、LongNeighbors |
つぶやき2B | 5919.38 | 38.18 | 215.96 (3) | 433 | UB、1.8% バイアス、コリジョン、3.4% ディストリビュート、BIC |
マームル2C | 3810.98 | 49.09 | 218.51 (3) | 444 | UB、2^32 の不良シード、91% のバイアス、衝突、distr、BIC、LongNeighbors |
つぶやき3A | 2982.67 | 49.08 | 245.78 (4) | 351 | UB、悪いシード 1 個、モーメント Chi2 69 |
PMurHash32 | 3005.85 | 48.88 | 242.38 (3) | 1862年 | 1 悪いシード、モーメント Chi2 69 |
マームル3C | 4833.18 | 56.87 | 250.47 (6) | 859 | UB、LongNeighbors、テキスト、DiffDist |
ミルハッシュ32低 | 6145.39 | 36.95 | 235.09 (4) | 1112 | UB、4 つの不良シード、サイクリック、LongNeighbors、マシン固有 (32/64 は異なります) |
PMPML_32 | 6639.68 | 45.33 | 257.45 (3) | 1084 | Avalanche >512、シードなし: Seed、BIC、MomentChi2、PerlinNoise |
PMPML_64 | 9833.77 | 50.00 | 251.64 (6) | 1305 | シードなし: シード、MomentChi2、BIC |
xxハッシュ32 | 5865.17 | 49.20 | 242.74 (3) | 738 | LongNeighbors、4bit diff との衝突、MomentChi2 220 |
メトロハッシュ64 | 14741.56 | 39.44 | 215.76 (2) | 624 | UB、ロングネイバーズ、BIC |
メトロハッシュ64_1 | 14298.77 | 40.31 | 223.25 (4) | 624 | UB、ロングネイバーズ、BIC、MomentChi2 |
メトロハッシュ64crc_1 | 6929.69 | 44.65 | 223.68 (3) | 632 | UB、Cyclic 8/8 バイト、DiffDist、BIC、MomentChi2、マシン固有 (SSE4.2/NEON) |
メトロハッシュ64crc_2 | 8150.65 | 43.72 | 219.45 (5) | 632 | UB、サイクリック 8/8 バイト、DiffDist、BIC、マシン固有 (SSE4.2/NEON) |
cmetrohash64_1o | 14921.73 | 38.95 | 213.25 (2) | 3506 | UB、ロングネイバーズ、BIC、MomentChi2 |
cmetrohash64_1 | 14151.73 | 40.90 | 211.89 (2) | 652 | UB、ロングネイバーズ、BIC、MomentChi2 |
City64のシード | 14209.19 | 31.80 | 225.90 (5) | 1038 | Avalanche、Sparse、TwoBytes、MomentChi2、シード |
シティ64 | 13887.84 | 46.32 | 239.77 (3) | 1120 | スパース、2バイト |
t1ha1_64le | 13442.64 | 31.41 | 219.58 (3) | 517 | 雪崩 |
t1ha1_64be | 11586.02 | 32.74 | 232.55 (3) | 555 | 雪崩 |
t1ha0_32le | 7401.21 | 48.27 | 238.99 (3) | 509 | まばらで長い隣人 |
t1ha0_32be | 6217.37 | 50.66 | 244.51 (3) | 533 | まばらで長い隣人 |
t1ha2_stream | 14011.63 | 80.72 | 275.17 (3) | 1665年 | スパース、順列、LongNeighbors |
t1ha2_stream128 | 13136.06 | 97.80 | 306.11 (7) | 1665年 | スパース、順列、LongNeighbors |
エースニハシュ | 5579.32 | 56.83 | 258.71 (5) | 1209 | マシン固有の多くのテストに失敗します (x64 AES-NI) |
ファルカシュ | 50631.69 | 123.02 | 322.14 (7) | 264 | スパース、LongNeighbor、マシン固有 (x64 AES-NI) |
ニャーハッシュ | 29969.40 | 64.96 | 274.29 (4) | 1764年 | スパース、反転可能、マシン固有 (x64 AES-NI) |
ニャーハッシュ64low | 29485.59 | 65.98 | 278.05 (3) | 1764年 | スパース、反転可能、マシン固有 (x64 AES-NI) |
ニャーハッシュ32low | 26944.58 | 65.95 | 292.79 (9) | 1764年 | スパース、反転可能、マシン固有 (x64 AES-NI) |
-------------------------------------- | |||||
ティフハッシュ_64 | 35.60 | 1679.52 | 1212.75 (15) | 276 | 周期的低値32 |
フロッピーハッシュ | 35.72 | 1868.92 | 1411.07 (7) | 623 | |
ビームスプリッター | 789.22 | 682.45 | 1150.33 (26) | 4203 | UB |
ディスコハッシュ1 | 4131.12 | 199.00 | 398.35 (5) | 1294 | |
ディスコハッシュ1-128 | 4072.95 | 234.17 | 438.43 (5) | 1294 | |
ディスコハッシュ2 | 3986.52 | 207.52 | 421.99 (2) | 1294 | |
ディスコハッシュ2-128 | 4094.73 | 236.61 | 433.35 (4) | 1294 | |
ディスコノン | 3698.45 | 399.67 | 597.78 (9) | 悪い種 | |
チャスキー | 1143.05 | 113.70 | 294.43 (4) | 1609年 | パーリンノイズ |
シップハッシュ | 943.53 | 147.15 | 338.74 (4) | 1071 | |
ハーフシップハッシュ | 1141.57 | 79.65 | 263.96 (3) | 700 | ゼロ |
グッドOAAT | 743.81 | 85.62 | 231.22 (3) | 237 | |
ピアソンバッシュ64 | 1794.83 | 97.80 | 268.90 (8) | 683 | |
ピアソンバッシュ128 | 1691.62 | 104.57 | 272.38 (4) | 1134 | |
ピアソンバッシュ256 | 1442.59 | 126.04 | 309.34 (4) | 844 | |
prvhash64_64m | 3077.18 | 47.31 | 241.92 (3) | 349 | |
prvhash64_64 | 3015.08 | 48.03 | 240.64 (3) | 384 | |
prvhash64_128 | 3353.81 | 67.64 | 266.32 (2) | 718 | |
prvhash64s_64 | 6591.34 | 273.50 | 464.65 (3) | 2640 | |
prvhash64s_128 | 6581.40 | 333.83 | 528.07 (5) | 2799 | |
シップハッシュ13 | 1812.75 | 106.56 | 310.76 (5) | 778 | 0.9%のバイアス |
ティーシップ | 4233.17 | 53.31 | 249.19 (3) | 519 | !msvc |
シーハッシュ | 8261.80 | 58.94 | 256.08 (4) | 871 | パーリンノイズ、!msvc |
シーハッシュ32低 | 8266.17 | 58.90 | 290.21 (16) | 871 | パーリンノイズ 32、!msvc |
衝突 | 18703.04 | 70.19 | 282.12 (6) | 1809年 | PerlinNoise、マシン固有 (x64 SSE4.2) |
ハイウェイハッシュ64 | 6242.58 | 99.55 | 248.41 (3) | 2546 | |
マームル3F | 7623.44 | 52.69 | 221.87 (3) | 699 | UB |
お母さん | 9563.99 | 34.99 | 228.55 (5) | 1912年 | UB、不良シードが多すぎる、マシン固有 (32/64 は異なります) |
マムロウ | 9261.89 | 36.17 | 247.66 (4) | 1912年 | UB、悪いシード 5 個 |
xmsx32 | 2039.10 | 46.39 | 249.30 (7) | 192 | 悪い種2個 |
ミルハシュ | 6139.07 | 37.02 | 209.47 (3) | 1112 | UB、2^36 不良シード、LongNeighbor、マシン固有 (32/64 は異なります) |
ミルハシュトリクト | 3549.01 | 49.99 | 224.91 (2) | 1112 | |
mirhashstrict32low | 3441.35 | 50.60 | 247.19 (3) | 1112 | 1 悪いシード、MomentChi2 9 |
ファストハッシュ32 | 6128.28 | 40.30 | 241.64 (4) | 566 | UB |
ファストハッシュ64 | 5818.92 | 38.70 | 220.74 (2) | 509 | UB |
エスニ | 31232.34 | 29.21 | 230.14 (4) | 519 | マシン固有 (x64 AES-NI) |
エースニーロー | 31221.14 | 29.64 | 226.18 (3) | 519 | マシン固有 (x64 AES-NI) |
MX3 | 9034.90 | 48.71 | 227.89 (2) | 734 | UB |
ペンギーハッシュ | 13428.80 | 74.24 | 275.42 (5) | 421 | |
シティ32 | 5551.28 | 54.40 | 261.64 (2) | 1319 | |
シティ64ロー | 13904.10 | 46.24 | 260.08 (3) | 1120 | |
シティ128 | 14031.96 | 89.09 | 290.05 (10) | 1841年 | |
市Crc128 | 7916.44 | 55.50 | 240.79 (2) | 295 | |
ファームハッシュ32 | 21755.58 | 47.54 | 258.35 (3) | 11489 | マシン固有 (x64 SSE4/AVX) |
ファームハッシュ64 | 12845.53 | 47.11 | 251.58 (3) | 3758 | |
ファームハッシュ128 | 13913.65 | 70.25 | 263.06 (3) | 163 | |
ファームハッシュ32_c | 21601.86 | 47.38 | 273.00 (3) | 762 | マシン固有 (x64 SSE4/AVX) |
ファームハッシュ64_c | 12834.10 | 47.23 | 246.20 (2) | 3688 | |
ファームハッシュ128_c | 13753.24 | 68.96 | 263.76 (3) | 1890年 | |
メトロハッシュ64_2 | 14316.37 | 40.23 | 218.28 (3) | 627 | UB、ロングネイバーズ |
cmetrohash64_2 | 14294.26 | 40.76 | 221.40 (4) | 655 | ロングネイバーズ |
メトロハッシュ128 | 15634.66 | 73.28 | 261.23 (4) | 773 | UB、ロングネイバーズ |
メトロハッシュ128_1 | 15806.97 | 72.30 | 260.90 (4) | 773 | UB、ロングネイバーズ |
メトロハッシュ128_2 | 15822.60 | 72.30 | 255.34 (3) | 773 | UB、ロングネイバーズ |
メトロハッシュ128crc_1 | 8009.23 | 78.72 | 281.55 (13) | 723 | UB、マシン固有 (SSE4.2/NEON) |
メトロハッシュ128crc_2 | 7878.22 | 79.90 | 275.22 (4) | 723 | UB、マシン固有 (SSE4.2/NEON) |
xxハッシュ64 | 12108.87 | 49.78 | 228.83 (2) | 1999年 | |
不気味な32 | 13108.95 | 56.27 | 255.36 (3) | 2221 | UB |
不気味64 | 13529.36 | 58.76 | 236.31 (3) | 2221 | UB |
不気味な128 | 11781.35 | 58.91 | 242.91 (3) | 2221 | UB |
不気味なV2_32 | 13529.16 | 55.55 | 248.37 (4) | 2069年 | |
不気味なV2_64 | 12678.82 | 56.71 | 243.21 (4) | 2069年 | |
不気味なV2_128 | 13512.82 | 58.33 | 244.56 (5) | 2069年 | |
あはし64 | 9862.62 | 27.32 | 181.68 (1) | 412 | さび |
xxh3 | 21033.55 | 29.48 | 226.77 (4) | 744 | DiffDist ビット 7 w。 36ビット、BIC |
xxh3low | 17093.19 | 30.57 | 242.07 (7) | 756 | |
xxh128 | 18802.16 | 32.37 | 234.30 (4) | 1012 | |
xxh128低 | 18833.05 | 32.30 | 234.68 (3) | 1012 | |
t1ha2_atonce | 13854.44 | 37.92 | 233.54 (2) | 541 | ゼロが低い3 |
t1ha2_atonce128 | 14148.42 | 55.70 | 253.74 (6) | 613 | ロングネイバーズ |
t1ha0_aes_noavx | 27231.59 | 37.70 | 236.10 (3) | 925 | LongNeighbors、マシン固有 (x86 AES-NI) |
t1ha0_aes_avx1 | 22714.85 | 48.12 | 226.52 (16) | 843 | LongNeighbors、マシン固有 (x64 AVX.txt) |
t1ha0_aes_avx2 | 56919.46 | 36.70 | 233.14 (2) | 792 | LongNeighbors、マシン固有 (x64 AVX2) |
ウィハッシュ32 | 2532.89 | 48.40 | 484.57 (1) | 426 | 4 つの不良シードと壊れたシード、32 ビット |
wyhash32low | 22393.77 | 4月29日 | 243.40 (3) | 474 | 悪い種5個 |
ウィハッシュ | 22540.23 | 28.87 | 236.16 (8) | 474 | |
ラピッドハッシュ | 23789.79 | 22.80 | 138.71 (7) | 574 | |
Rapidhash_unrolled | 23892.88 | 23.41 | 139.47 (12) | 782 | |
ウマシュ32 | 21427.57 | 42.12 | 255.55 (5) | 1530 | |
umash32_hi | 21483.12 | 42.65 | 251.09 (4) | 1530 | |
ウマシュ64 | 21690.08 | 41.67 | 238.01 (4) | 1530 | |
ウマシュ128 | 13211.88 | 43.37 | 237.40 (3) | 1530 | |
ハーフタイムハッシュ64 | 4735.63 | 99.90 | 315.34 (3) | 2911 | |
ハーフタイムハッシュ128 | 17534.53 | 97.97 | 311.10 (4) | 2462 | |
ハーフタイムハッシュ256 | 18003.39 | 99.46 | 315.09 (3) | 2622 | |
ハーフタイム_ハッシュ512 | 10890.15 | 118.05 | 333.45 (3) | 3550 | |
nmhash32 | 12969.62 | 55.88 | 265.69 (4) | 2445 | |
nmhash32x | 12775.08 | 42.66 | 246.05 (3) | 1494年 | |
k-ハッシュv32 | 9181.87 | 52.76 | 245.14 (3) | 1280 | |
k-ハッシュv64 | 7850.92 | 46.94 | 193.94 (1) | 1279 | |
コミハッシュ | 12242.78 | 33.02 | 236.07 (2) | 1323 | |
ポリマー | 9676.33 | 42.70 | 246.53 (3) | 1128 |
ソート可能なテーブルのバリアント:
デフォルトのAMD Ryzen 5 3350G 3.6GHz
インテル i5-2300 2.8GHz
インテル i5-2300 2.8GHz 32ビット
AMD Ryzen 3 3200U 3.5GHz
Mac Air i7-4650
Cortex-A53 2GHz (Sony XPeria L4)
いくつかの SSE 支援ハッシュと高速インテル/アーム CRC32-C、AES、SHA HW バリアントを追加しました。古い https://github.com/aappleby/smhasher/wiki、改良されたがメンテナンスされていないフォーク https://github.com/demerphq/smhasher、および新しい改良バージョン SMHasher3 https://gitlab.com/ も参照してください。 fwojcik/smhasher3.
したがって、品質に問題がない x86_64 での最速のハッシュ関数は次のとおりです。
Rapidhash (改良された wyhash)
xxh3low
ウィハッシュ
umash (ユニバーサルでも!)
あはし64
t1ha2_atonce
コミハッシュ
FarmHash (移植性がなく、マシン固有すぎます: 64 対 32 ビット、古い gcc、... )
ハーフタイムハッシュ128
不気味な32
ペンギーハッシュ
nmhash32
MX3
MUM/mir ( 32/64 ビット アーチでは異なる結果、フィルタリングして除外すべき不良シードが多数ある)
ファストハッシュ32
シンボル テーブルまたはハッシュ テーブルのハッシュ関数は通常 32 ビットのハッシュを使用し、データベース、ファイル システム、およびファイル チェックサムの場合は通常 64 または 128 ビットを使用し、暗号化の場合は 256 ビットから始まります。
perl5 の一般的なキー サイズの中央値は 20 で、最も一般的なのは 4 です。他のすべての動的言語でも同様です。 github.com/rurban/perl-hash-stats を参照してください。
ハッシュ テーブルで使用される場合、命令キャッシュは通常、ここで測定される CPU とスループットを上回ります。私のテストでは、最小のFNV1A
、Perl 5 ハッシュ テーブルを使用した最速のcrc32_hw1
を上回りました。たとえそれらの悪いハッシュ関数がより多くの衝突を引き起こすとしても、全体的な速度の利点とインライン機能は、わずかに悪い品質を上回ります。最適なハッシュ テーブル戦略の簡潔な概要については、たとえば「ハッシュ手法の 7 次元分析とクエリ処理への影響」を参照してください。これにより、最も単純な Mult ハッシュ (bernstein、FNV*、x17、sdbm) が常に「より優れた」ハッシュ関数に勝ることが確認されています。 (Tabulation、Murmur、Farm、...) ハッシュ テーブルで使用される場合。
ここでテストした高速ハッシュ関数は、ファイル ダイジェストやおそらくより大きなデータベースに対しては高速であるため推奨されますが、32 ビット ハッシュ テーブルに対してはそうではありません。 「品質の問題」は、不均一な分布、つまり衝突の増加とパフォーマンスの低下につながりますが、実際のセキュリティ攻撃に関連することはほとんどなく、 �
に対する 2 番目の健全性 AppendZeroes テストのみがセキュリティに関連します。
MiB/秒: 262144 バイトのキーを使用したアライメント 0 ~ 7 のバルク キー速度テストの平均。高いほど良いです。
cycl./hash: 1 ~ 31 バイト キーのスモール キー速度テストの平均。小さいほど良いです。
cycl./map: 高速 C++ ハッシュマップ取得クエリを使用した /usr/dict/words のハッシュマップ テストの結果 (括弧内は標準偏差)。これは、ハッシュ関数のインライン化を実際にテストします (サイズを参照)。小さいほど良いです。
size: AMD64 でのオブジェクト サイズ (バイト単位)。これは、ハッシュ テーブルなどのインライン化に影響します。小さいほど良いです。
品質の問題: リンク先のドキュメントで障害を参照してください。少ないほど良いです。
https://github.com/martinus/better-faster-stronger-mixer ミキサー。そして彼のブログでは最高の C++ ハッシュマップ ベンチマークが紹介されています。
http://nohatcoder.dk/2019-05-19-1.html では、新しい便利なハッシュ レベル分類 1 ~ 5 が提供されています。
http://www.strchr.com/hash_functions には、最もシンプルで高速なハッシュ関数の他のベンチマークと品質がリストされています。
http://bench.cr.yp.to/primitives-hash.html には、現在テストされているすべての安全なハッシュのベンチマークがリストされています。
http://valerieaurora.org/hash.html 暗号化ハッシュ関数の有効期間
City、Murmur、Perl JenkinsOAAT に対する SipHash または Hash Function Lounge で説明されているハッシュ テーブル攻撃は、ここには含まれていません。いくつかの既知の攻撃を GH #186 にリストします。
このような攻撃を回避できるのはハッシュ関数の問題ではなく、ハッシュ テーブルの衝突解決スキームだけの問題です。 言語 (誤) 機能、サイドチャネル攻撃、衝突タイミング、ソート順などからシードを検出すれば、あらゆるハッシュ関数を攻撃できるため、衝突を保護する必要があります。最悪の場合の O(n) からの処理スキーム、つまりリンクされたリストによる個別のチェーン。リンク リスト チェーンでは、高い負荷率が可能ですが、キャッシュには非常に適していません。 唯一推奨されるリンク リスト スキームは、キーまたはハッシュを配列にインライン化することです。現在では、Cuckoo Hashing を使用しない限り、たとえ負荷率が 50% 程度である必要がある場合でも、誰もが高速オープン アドレッシングを使用しています。
つまり、Python 3.4、ruby、rust、systemd、OpenDNS、Haskell、OpenBSD でのハッシュ テーブルに SipHash を使用することは、純粋なセキュリティ劇場です。 SipHash は、セキュリティ目的には十分安全ではなく、一般的な使用には十分な速度がありません。約 32,000 回の衝突をブルート フォースで生成するには、これらすべてのハッシュに 2 ~ 4 メートルが必要です。最も遅い siphash は最大 4 分を必要とし、その他の通常は最大 2 分 30 秒を必要とし、すべてのハッシュ関数を使用した実際の 16k コリジョン攻撃の場合は 10 秒未満です。 Murmur を使用すると、最悪の場合でも、通常は単純な Mult よりも遅くなります。 証明可能な安全性は、一様ハッシュ、つまり 2 ~ 5 の独立した Mult または Tabulation、または保証された対数衝突スキーム (ツリー) または線形衝突スキーム (swisstable/folly-F14、Robin Hood、衝突カウント付き Cuckoo ハッシュなど) を使用することのみです。
セキュリティに関してもう 1 つ注意してください。現在では、SHA1 でさえ、実用的なハッシュ テーブル衝突攻撃 (つまり 14 ~ 20 ビット) に対して、Z3 (またはより高速なソルバー) などのソルバーで解決できます。ここでテストされた 160 ビット未満のハッシュ関数はすべて、「安全」であるとはまったく考えられません。
バイナリ キーを使用した「�」脆弱性攻撃は、2 回目の Sanity Zero テストでテストされます。
私たちの暗号ハッシュは、追加された size_t シードで強化され、初期状態に混合されます。また、ゼロパディングを必要とするバージョンは、パディングの AppendedZeroes との衝突を防ぐために、len も追加することで強化されます。 libtomcrypt 実装ではすでにこれが提供されていますが、他の実装では提供されていない可能性があります。これがなければ、パディングや不正なシードによって衝突が発生するのは簡単であるため、このような暗号ハッシュ関数は通常のタスクには適していません。
公式の NIST ハッシュ関数テストスイートは、ビット内の弱い範囲を検索するための、このような広範な統計テストを実行しません。また、crypto は初期状態を変更しません。ここではランダムな 32 ビット シードに対して変更します。暗号は主に、初期の固定状態とタイミング/サイドチャネル攻撃を変更せずに、元に戻せないキー -> ハッシュ関数を考慮します。
NIST の「暗号アルゴリズム検証プログラム」(CAVP) には、FIPS 承認および NIST 推奨の暗号アルゴリズムの実装のテストが含まれます。 NIST SHA-3 コンテストでは、SHA-3 コンテスト テスト スイートの KAT と MCT が SHA-2 の CAVP テストに基づいていたため、テスト方法は「CAVP」から借用されました。これに加えて、SHA-2 の CAVP には存在しない「非常に長いメッセージ テスト」では、送信者は 1 GiB の長さのメッセージに対応するハッシュ値を生成する必要がありました。 「NIST - 暗号アルゴリズム検証プログラム (CAVP)」、2017 年 6 月。入手可能: http://csrc.nist.gov/groups/STM/cavp (テスト用のソース コードは提供されず、概要のみの説明)
他の 2 つの独立したサードパーティのテストスイートでは、SHA3 候補に多数のバグと弱点が見つかりました。 「暗号化ハッシュ関数の実装におけるバグの発見」、Nicky Mouha、Mohammad S Raunak、D. Richard Kuhn、Raghu Kacker、2017 年。 https://eprint.iacr.org/2017/891.pdf
おそらく、独立した研究者が団結して、より優れたより多くのテスト方法、テスト用のオープンソースコード、および明らかなバグを検出するための valgrind、アドレスサニタイザー、ubsan などの標準的な業界慣行に基づいて、より適切な公開 SHA-4 ラウンドを実施する必要があります。 。
悪い種
ハッシュ関数は通常、ランダム シードを使用して初期化されます。ただし、シード値によっては、キーに関係なく、不正なハッシュ関数が発生する可能性があります。ランダム シードの通常の場合、そのような悪いシードの確率は 2^32 または 2^64 のように非常に低くなります。実際のアプリケーションでは、不良シードが存在するかどうかを知り、別のシードを選択する必要があります。たとえば、 Hashes.h
のmirhash_seed_init()
およびmirhash_bad_seeds()
を参照してください。初期化中にこのシードをスキップしても、不正なシードは実際には問題にならないことに注意してください。これは依然として良好なハッシュ関数、または推奨されるハッシュ関数である可能性があります。しかし、衝突を引き起こす不正なシード0
はバグ、つまり不正なハッシュ関数とみなされます。
内部秘密が 0 で乗算されるかどうかをテストします。これは「ブラインド乗算」とも呼ばれます。 main.cpp
テスト対象となるハッシュ関数ごとにいくつかのシークレットがリストされています。関数<hash>_bad_seeds()
は、確認された不良シードをリストします。
crc、ほとんどの FNV1 バリアント、fletcher、Jenkins には特別な注意が必要です。また、GOOD ハッシュでは、mirhash、MUM、wyhash など、ほとんどの MUM バリアントが使用されます。
これとは別に、攻撃者がシードを知ると、DDOS 攻撃につながります。 power2 ハッシュテーブルの暗号ハッシュでも同様です。
典型的な未定義動作 ( UB ) の問題:
位置がずれている
多くのワード単位のハッシュ (安全なバイト単位の処理とは反対) は、入力バッファーで適切なワード アラインメントがチェックされないため、ubsan または Sparc では失敗します。 word がint32_t
またはint64_t
、あるいはそれ以上であること。 一部の古い RISC ハードウェアでは、これはバス エラーになります。CPU フラグを設定することで、インテル HW にそのようなバス エラーを生成させることもできます。ただし、通常は、不整列アクセスを使用しても問題ありません。
これらは次のとおりです: mx3、Spooky、mirhash (ただし厳密ではありません)、MUM、fasthash、Murmur3*、Murmur2*、metrohash* (cmetro* を除くすべて)、Crap8、beamsplitter、lookup3、fletcher4、fletcher2、すべての sanmayce FNV1a_ バリアント (FNV1a_YT、 FNV1A_ピピップ_ユリイ、 FNV1A_Totenschiff, ...)、フィボナッチ。
通常の軽減策は、呼び出し側でバッファのアライメントをチェックするか、アライメントされていないプレフィックスの前処理ループを提供するか、バッファ全体を新しいアライメントされた領域にコピーすることです。追加のコードを#ifdef HAVE_ALIGNED_ACCESS_REQUIRED
内に配置します。
oob - 範囲外
一部のハッシュ関数は、その長さを超えてワード サイズまでアクセスできるパディングされた入力バッファを前提としています。これにより、残りの 2 番目のループやスイッチ テーブルが必要ないため、より高速なループ処理が可能になりますが、協調的な呼び出し環境が必要なため、不正行為とみなされます。
符号付き整数のオーバーフロー
単純な型エラーです。未定義で一貫性のない動作を避けるために、このハッシュは内部で符号なし整数型を使用する必要があります。つまり、SuperFastHash: 符号付き整数オーバーフロー: -2147483641 + -113 は 'int' 型で表現できません
シフト指数のオーバーフロー
使用例: FNV1A_Pippip_Yurii、FNV1A_Totenschiff、pair_multiply_shift、sumhash32 シフト指数 64 は 64 ビット型 'long unsigned int' には大きすぎます