해시 함수 | MiB/초 | cycl./hash | cycl./map | 크기 | 품질 문제 |
---|---|---|---|---|---|
아무것도 하지마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, 테스트 실패 |
sumhash32 | 42877.79 | 12.23 | - | 863 | UB, 테스트 실패 |
곱셈_시프트 | 8026.77 | 26.05 | 226.80 (8) | 345 | 잘못된 시드 및 0xffffff0, 대부분의 테스트 실패 |
pair_multiply_shift | 3716.95 | 40.22 | 186.34 (3) | 609 | 대부분의 테스트에 실패 |
------------- | |||||
crc32 | 383.12 | 134.21 | 257.50 (11) | 422 | 안전하지 않음, 8590x 충돌, distrib, 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% 분포 |
샤1_64 | 353.03 | 1385.80 | 1759.94 (5) | 5126 | 온전함, 순환적 낮음32, 36.6% 분포 |
샤1-160 | 364.95 | 1470.55 | 1794.16 (13) | 5126 | 빗살/순환적 낮음32 |
샤2-224 | 147.13 | 1354.81 | 1589.92 (12) | 빗 로우32 | |
샤2-224_64 | 147.60 | 1360.10 | 1620.93 (13) | 주기적 낮음32 | |
샤2-256 | 147.80 | 1374.90 | 1606.06 (16) | ||
샤2-256_64 | 148.01 | 1376.34 | 1624.71 (16) | ||
샤니 | 1601.21 | 174.16 | 397.28 (6) | 989 | 안전하지 않음, 온전함, 순열, 0, 시스템별 |
sha1ni_32 | 1576.17 | 174.04 | 405.56 (6) | 989 | 기계별 |
sha2ni-256 | 1527.38 | 184.35 | 404.40 (4) | 4241 | 안전하지 않음, 온전함, 순열, 0, 시스템별 |
sha2ni-256_64 | 1501.85 | 186.20 | 407.96 (5) | 4241 | 0, 기계별 |
blake3_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) | ||
edonr256 | 847.85 | 305.79 | 510.01 (4) | ||
blake2s-128 | 295.30 | 698.09 | 1059.24 (51) | ||
blake2s-160 | 215.01 | 1026.74 | 1239.54 (11) | ||
blake2s-224 | 207.06 | 1063.86 | 1236.50 (20) | ||
blake2s-256 | 215.28 | 1014.88 | 1230.38 (28) | ||
blake2s-256_64 | 211.52 | 1044.22 | 1228.43 (8) | ||
blake2b-160 | 356.08 | 1236.84 | 1458.15 (12) | ||
blake2b-224 | 356.59 | 1228.50 | 1425.87 (16) | ||
blake2b-256 | 355.97 | 1232.22 | 1443.31 (19) | ||
blake2b-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) | 펄린노이즈 | |
샤3-256_64 | 100.57 | 3909.00 | 4174.63 (16) | 펄린노이즈 | |
해시2 | 2773.89 | 64.35 | 282.30 (3) | 445 | 순열, 2바이트, 0, 시드 |
폴리_1_메르센 | 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_pclmul | - | - | - | 안전하지 않음, 100% 편향, 충돌, 배포, BIC, 머신별(x86 SSE4.2+PCLMUL) | |
o1해시 | 11629440.57 | 18.15 | 199.35 (2) | 101 | 안전하지 않음, 시드 없음, 0, 모든 테스트 실패 |
피보나치 | 16878.32 | 22.94 | 803.18 (15) | 1692년 | UB, 0, 모든 테스트 실패 |
FNV1a | 760.52 | 73.83 | 254.29 (5) | 204 | 잘못된 시드, 0, 모든 테스트 실패 |
FNV1A_Totenschiff | 6274.78 | 26.23 | 251.13 (2) | 270 | UB, 0, 모든 테스트 실패 |
FNV1A_Pippip_Yurii | 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 | 안전하지 않음, 0, UB, 잘못된 시드, 모든 테스트 실패 |
k-해시64 | 2451.88 | 48.66 | 249.44 (2) | 609 | 안전하지 않음, 0, 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, 모든 테스트 실패 |
x17 | 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% 편향, 모든 테스트 실패 |
젠킨스OOAT_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) | Avalanche, Seed, SSSE3에만 해당. 깨진 MSVC | |
피어슨해시128 | 434.23 | 121.34 | 221.03 (7) | Avalanche, Seed, SSSE3에만 해당. 깨진 MSVC | |
피어슨해시256 | 444.08 | 119.11 | 229.75 (4) | Avalanche, Seed, 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 | 편향, 충돌, distr, BIC LongNeighbors |
조디해시64 | 4813.10 | 40.72 | 239.22 (6) | 118 | 편향, 충돌, distr, BIC, LongNeighbors |
조회3 | 2475.35 | 39.65 | 240.10 (3) | 341 | UB, 28% 바이어스, 충돌, 30% distr, BIC |
초고속 | 2058.22 | 49.56 | 254.12 (3) | 210 | UB, 잘못된 시드 0, 91% 바이어스, 5273.01x 충돌, 37% distr, 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개의 잘못된 시드, 511x 충돌, Diff, BIC |
중얼거림2 | 3089.18 | 41.22 | 238.42 (4) | 358 | UB, 1개의 잘못된 시드, 1.7% 바이어스, 81x coll, 1.7% distrib, 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개, 순간 치2 69 |
Murmur3C | 4833.18 | 56.87 | 250.47 (6) | 859 | UB, LongNeighbors, 텍스트, DiffDist |
mirhash32low | 6145.39 | 36.95 | 235.09 (4) | 1112 | UB, 불량 시드 4개, Cyclic, LongNeighbors, 기계별(32/64 다름) |
PMPML_32 | 6639.68 | 45.33 | 257.45 (3) | 1084 | 눈사태 >512, 시드 미포함: Seed, BIC, MomentChi2, PerlinNoise |
PMPML_64 | 9833.77 | 50.00 | 251.64 (6) | 1305 | 시드 미포함: 시드, MomentChi2, BIC |
xxHash32 | 5865.17 | 49.20 | 242.74 (3) | 738 | LongNeighbors, 4비트 diff와의 충돌, MomentChi2 220 |
메트로해시64 | 14741.56 | 39.44 | 215.76 (2) | 624 | UB, 롱네이버스, BIC |
Metrohash64_1 | 14298.77 | 40.31 | 223.25 (4) | 624 | UB, LongNeighbors, BIC, MomentChi2 |
Metrohash64crc_1 | 6929.69 | 44.65 | 223.68 (3) | 632 | UB, 순환 8/8바이트, DiffDist, BIC, MomentChi2, 시스템별(SSE4.2/NEON) |
Metrohash64crc_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, LongNeighbors, BIC, MomentChi2 |
cmetrohash64_1 | 14151.73 | 40.90 | 211.89 (2) | 652 | UB, LongNeighbors, BIC, MomentChi2 |
City64noSeed | 14209.19 | 31.80 | 225.90 (5) | 1038 | 눈사태, 스파스, 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 | Sparse, LongNeighbors, 머신별(x64 AES-NI) |
야옹해시 | 29969.40 | 64.96 | 274.29 (4) | 1764년 | 희소, 반전 가능, 머신별(x64 AES-NI) |
야옹Hash64low | 29485.59 | 65.98 | 278.05 (3) | 1764년 | 희소, 반전 가능, 머신별(x64 AES-NI) |
야옹Hash32low | 26944.58 | 65.95 | 292.79 (9) | 1764년 | 희소, 반전 가능, 머신별(x64 AES-NI) |
------------------------- | |||||
tifuhash_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 | |
discohash2-128 | 4094.73 | 236.61 | 433.35 (4) | 1294 | |
디스코농 | 3698.45 | 399.67 | 597.78 (9) | 나쁜 씨앗 | |
채스키 | 1143.05 | 113.70 | 294.43 (4) | 1609 | 펄린노이즈 |
SipHash | 943.53 | 147.15 | 338.74 (4) | 1071 | |
HalfSip해시 | 1141.57 | 79.65 | 263.96 (3) | 700 | 0 |
좋은OAAT | 743.81 | 85.62 | 231.22 (3) | 237 | |
피어슨bhash64 | 1794.83 | 97.80 | 268.90 (8) | 683 | |
피어슨bhash128 | 1691.62 | 104.57 | 272.38 (4) | 1134 | |
피어슨bhash256 | 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 | |
SipHash13 | 1812.75 | 106.56 | 310.76 (5) | 778 | 0.9% 편견 |
TSip | 4233.17 | 53.31 | 249.19 (3) | 519 | !msvc |
시해시 | 8261.80 | 58.94 | 256.08 (4) | 871 | 펄린노이즈, !msvc |
seahash32low | 8266.17 | 58.90 | 290.21 (16) | 871 | PerlinNoise 32, !msvc |
충돌 | 18703.04 | 70.19 | 282.12 (6) | 1809년 | PerlinNoise, 시스템별(x64 SSE4.2) |
고속도로Hash64 | 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 다름) |
MUMlow | 9261.89 | 17.36 | 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개의 불량 시드, LongNeighbors, 시스템별(32/64는 다름) |
미르해쉬스트릭트 | 3549.01 | 49.99 | 224.91 (2) | 1112 | |
mirhashstrict32low | 3441.35 | 50.60 | 247.19 (3) | 1112 | 1개의 나쁜 씨앗, MomentChi2 9 |
fasthash32 | 6128.28 | 40.30 | 241.64 (4) | 566 | UB |
fasthash64 | 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 | |
FarmHash32 | 21755.58 | 47.54 | 258.35 (3) | 11489 | 머신별(x64 SSE4/AVX) |
농장Hash64 | 12845.53 | 47.11 | 251.58 (3) | 3758 | |
FarmHash128 | 13913.65 | 70.25 | 263.06 (3) | 163 | |
farmhash32_c | 21601.86 | 47.38 | 273.00 (3) | 762 | 머신별(x64 SSE4/AVX) |
farmhash64_c | 12834.10 | 47.23 | 246.20 (2) | 3688 | |
farmhash128_c | 13753.24 | 68.96 | 263.76 (3) | 1890년 | |
Metrohash64_2 | 14316.37 | 40.23 | 218.28 (3) | 627 | UB, LongNeighbors |
cmetrohash64_2 | 14294.26 | 40.76 | 221.40 (4) | 655 | 긴 이웃 |
메트로해시128 | 15634.66 | 73.28 | 261.23 (4) | 773 | UB, LongNeighbors |
Metrohash128_1 | 15806.97 | 72.30 | 260.90 (4) | 773 | UB, LongNeighbors |
메트로해시128_2 | 15822.60 | 72.30 | 255.34 (3) | 773 | UB, LongNeighbors |
Metrohash128crc_1 | 8009.23 | 78.72 | 281.55 (13) | 723 | UB, 기계별(SSE4.2/NEON) |
Metrohash128crc_2 | 7878.22 | 79.90 | 275.22 (4) | 723 | UB, 기계별(SSE4.2/NEON) |
xxHash64 | 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 비트 7w. 36비트, BIC |
xxh3low | 17093.19 | 30.57 | 242.07 (7) | 756 | |
xxh128 | 18802.16 | 32.37 | 234.30 (4) | 1012 | |
xxh128low | 18833.05 | 32.30 | 234.68 (3) | 1012 | |
t1ha2_atonce | 13854.44 | 37.92 | 233.54 (2) | 541 | 0 낮음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) |
wyhash32 | 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 | |
umash32 | 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 | |
halftime_hash64 | 4735.63 | 99.90 | 315.34 (3) | 2911 | |
halftime_hash128 | 17534.53 | 97.97 | 311.10 (4) | 2462 | |
halftime_hash256 | 18003.39 | 99.46 | 315.09 (3) | 2622 | |
halftime_hash512 | 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-hashv32 | 9181.87 | 52.76 | 245.14 (3) | 1280 | |
k-hashv64 | 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 라이젠 3 3200U 3.5GHz
맥 에어 i7-4650
Cortex-A53 2GHz(소니 XPeria L4)
일부 SSE 지원 해시와 빠른 Intel/arm 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, ... )
halftime_hash128
스푸키32
펜기해시
nmhash32
mx3
MUM/mir( 32/64비트 아치에서는 다른 결과, 필터링할 불량 시드가 많음 )
fasthash32
기호 테이블 또는 해시 테이블의 해시 함수는 일반적으로 32비트 해시를 사용하고, 데이터베이스, 파일 시스템 및 파일 체크섬의 경우 일반적으로 64 또는 128비트를 사용하며, 암호화의 경우 이제 256비트로 시작합니다.
perl5의 일반적인 중간 키 크기는 20이며, 가장 일반적인 것은 4입니다. 다른 모든 동적 언어와 비슷합니다. github.com/rurban/perl-hash-stats를 참조하세요.
해시 테이블에서 사용될 때 명령 캐시는 일반적으로 여기에서 측정된 CPU 및 처리량을 능가합니다. 내 테스트에서는 가장 작은 FNV1A
Perl 5 해시 테이블을 사용하는 가장 빠른 crc32_hw1
능가했습니다. 더 나쁜 해시 함수로 인해 더 많은 충돌이 발생하더라도 전반적인 속도 이점과 인라인 기능이 약간 더 나쁜 품질을 능가합니다. 가장 간단한 다중 해싱(bernstein, FNV*, x17, sdbm)이 항상 "더 나은" 해시 함수를 능가한다는 것을 확인하는 최고의 해시 테이블 전략에 대한 간략한 개요는 해싱 방법의 7차원 분석 및 쿼리 처리에 대한 영향을 참조하세요. (Tabulation, Murmur, Farm, ...) 해시 테이블에 사용되는 경우.
여기서 테스트한 빠른 해시 함수는 파일 다이제스트 및 더 큰 데이터베이스의 경우 빠른 것으로 권장되지만 32비트 해시 테이블의 경우에는 권장되지 않습니다. "품질 문제"는 덜 균일한 분포로 이어집니다. 즉, 더 많은 충돌과 더 나쁜 성능을 초래하지만 실제 보안 공격과 거의 관련이 없으며 �
에 대한 2차 온전성 AppendZeroes 테스트만 보안과 관련이 있습니다.
MiB/초: 262144바이트 키를 사용한 정렬 0-7에 대한 대량 키 속도 테스트의 평균입니다. 높을수록 좋습니다.
cycl./hash: 1~31바이트 키에 대한 작은 키 속도 테스트의 평균입니다. 작을수록 좋습니다.
cycl./map: 빠른 C++ hashmap 가져오기 쿼리를 사용하여 /usr/dict/words에 대한 Hashmap 테스트 결과이며 표준 편차는 괄호 안에 표시됩니다. 이는 실제로 해시 함수의 비선형성을 테스트합니다(크기 참조). 작을수록 좋습니다.
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 또는 Hash Function Lounge에 대한 SipHash에 설명된 해시 테이블 공격은 여기에 포함되지 않습니다. GH #186에서 알려진 몇 가지 공격을 나열합니다.
이러한 공격 회피는 해시 함수의 문제가 아니라 해시 테이블 충돌 해결 방식의 문제일 뿐입니다. 예를 들어 언어(잘못된) 기능, 부채널 공격, 충돌 타이밍 및 독립적인 정렬 순서 등에서 시드를 감지하면 모든 단일 해시 함수를 공격할 수 있으므로 충돌을 방지해야 합니다. 최악의 경우 O(n)의 처리 방식, 즉 연결된 목록과의 별도 연결입니다. 연결된 목록 연결은 높은 로드율을 허용하지만 캐시에는 매우 비우호적입니다. 유일하게 권장되는 연결 목록 구성표는 키나 해시를 배열에 인라인하는 것입니다. 요즘에는 Cuckoo Hashing을 사용하지 않는 한 부하율이 ~50%가 되어야 하는 경우에도 모두가 빠른 개방 주소 지정을 사용합니다.
즉 Python 3.4, Ruby, Rust, systemd, OpenDNS, Haskell 및 OpenBSD에서 해시 테이블에 SipHash를 사용하는 것은 순수한 보안 극장입니다. SipHash는 보안 목적으로 충분히 안전하지 않으며 일반적인 사용에는 충분히 빠르지 않습니다. ~32,000개의 충돌을 무차별적으로 생성하려면 이러한 모든 해시에 대해 2~4m가 필요합니다. 가장 느린 siphash는 최대 4m, 기타 일반적으로 최대 2m30s가 필요하며 모든 해시 기능을 사용하는 실제 16k 충돌 공격의 경우 10초 미만입니다. Murmur를 사용하는 것은 최악의 경우에도 일반적으로 단순한 Mult보다 느립니다. 입증 가능한 보안은 균일한 해싱(예: 2-5개의 독립적인 Mult 또는 Tabulation)이거나 보장된 대수 충돌 방식(트리) 또는 선형 충돌 방식(예: swisstable/folly-F14, Robin Hood 또는 Cuckoo 해싱과 충돌 계산 포함)을 사용하는 것입니다.
보안에 관한 한 가지 추가 참고 사항: 요즘에는 실제 해시 테이블 충돌 공격(예: 14-20비트)에 대해 Z3(또는 더 빠른 것)과 같은 솔버에서 SHA1도 해결할 수 있습니다. 여기서 테스트된 160비트 미만의 모든 해시 함수는 전혀 "안전한" 것으로 간주될 수 없습니다.
바이너리 키를 이용한 '�' 취약점 공격은 2차 Sanity Zero 테스트에서 테스트되었습니다.
우리의 암호화 해시는 추가된 size_t 시드를 사용하여 강화되고 초기 상태에 혼합되며 제로 패딩이 필요한 버전은 패딩에 대한 AppendedZeroes와의 충돌을 방지하기 위해 len도 추가하여 강화됩니다. libtomcrypt 구현에서는 이미 이를 제공하지만 다른 구현에서는 그렇지 않을 수도 있습니다. 그렇지 않으면 이러한 암호화 해시 함수는 패딩이나 잘못된 시드에 의한 충돌을 일으키는 것이 쉽지 않기 때문에 일반적인 작업에 적합하지 않습니다.
공식 NIST 해시 함수 테스트 모음은 비트의 약한 범위를 검색하기 위해 광범위한 통계 테스트를 수행하지 않습니다. 또한 암호화폐는 무작위 32비트 시드에 대해 여기에서 수행하는 초기 상태를 변경하지 않습니다. 암호화폐는 대부분 초기 고정 상태 및 타이밍/사이드 채널 공격을 변경하지 않고 되돌릴 수 없는 키 -> 해시 기능에 관심을 갖습니다.
NIST CAVP(암호화 알고리즘 검증 프로그램)에는 FIPS 승인 및 NIST 권장 암호화 알고리즘 구현 테스트가 포함됩니다. NIST SHA-3 경쟁 중에 SHA-3 경쟁 테스트 모음의 KAT 및 MCT가 SHA-2에 대한 CAVP 테스트를 기반으로 했기 때문에 테스트 방법론은 "CAVP"에서 차용되었습니다. 또한 SHA-2용 CAVP에는 없는 "매우 긴 메시지 테스트"에서는 제출자가 1GiB 길이의 메시지에 해당하는 해시 값을 생성해야 했습니다. "NIST - CAVP(암호화 알고리즘 검증 프로그램)," 2017년 6월. 사용 가능: http://csrc.nist.gov/groups/STM/cavp(테스트 소스 코드는 제공되지 않으며 대략적인 설명만 제공됨)
다른 두 개의 독립적인 제3자 테스트 모음에서는 SHA3 후보에서 광범위한 버그와 약점을 발견했습니다. "암호화 해시 함수 구현에서 버그 찾기", Nicky Mouha, Mohammad S Raunak, D. Richard Kuhn 및 Raghu Kacker, 2017. https://eprint.iacr.org/2017/891.pdf
어쩌면 독립적인 연구자들이 더 나은 공개 SHA-4 라운드를 수행하기 위해 함께 모여서 더 나은, 더 많은 테스트 방법, 테스트용 오픈 소스 코드를 기반으로 하고 명백한 버그를 탐지하기 위해 valgrind, address-sanitizer 및 ubsan과 같은 표준 업계 관행을 사용해야 할 수도 있습니다. .
나쁜 씨앗
해시 함수는 일반적으로 임의의 시드로 초기화됩니다. 그러나 일부 시드 값은 키에 관계없이 잘못된 해시 함수로 이어질 수 있습니다. 무작위 시드가 있는 일반적인 경우 이러한 불량 시드가 발생할 확률은 2^32 또는 2^64와 같이 매우 낮습니다. 실제 응용 프로그램에서는 잘못된 시드가 존재하는지 확인하고 다른 시드를 선택해야 합니다. 예를 들어 Hashes.h
의 mirhash_seed_init()
및 mirhash_bad_seeds()
참조하세요. 초기화 중에 이 시드를 건너뛰어도 잘못된 시드는 실제로 문제가 되지 않습니다. 여전히 GOOD이거나 권장되는 해시 함수일 수 있습니다. 그러나 충돌로 이어지는 잘못된 시드 0
은 버그, 즉 잘못된 해시 함수로 간주됩니다.
0을 곱할 경우 내부 비밀을 테스트합니다. 이를 "블라인딩 곱셈"이라고도 합니다. main.cpp
우리가 테스트하는 각 해시 함수에 대한 몇 가지 비밀이 나열되어 있습니다. <hash>_bad_seeds()
함수는 확인된 불량 시드를 나열합니다.
crc, 대부분의 FNV1 변종, fletcher, Jenkins에 대해서는 특별한 주의가 필요합니다. GOOD 해시를 사용하면 mirhash, MUM, wyhash와 같은 대부분의 MUM 변형이 가능합니다.
이와 별도로 공격자가 시드를 알면 DDOS 공격으로 이어질 것입니다. power2 해시테이블에 암호화 해시가 있는 경우에도 마찬가지입니다.
일반적인 정의되지 않은 동작( UB ) 문제:
잘못 정렬됨
많은 단어별 해시(안전한 바이트별 처리와 반대)는 입력 버퍼에서 적절한 단어 정렬을 확인하지 않으며 이는 ubsan 또는 Sparc에서는 실패합니다. 단어는 int32_t
또는 int64_t
이상입니다. 일부 오래된 RISC 하드웨어에서는 이것이 BUS 오류가 됩니다. CPU 플래그를 설정하여 Intel HW가 이러한 버스 오류를 생성하도록 할 수도 있습니다. 그러나 일반적으로 잘못 정렬된 액세스를 사용하는 것은 괜찮습니다.
여기에는 mx3, Spooky, mirhash( 엄격하지는 않음 ), MUM, fasthash, Murmur3*, Murmur2*, Metrohash*(cmetro* 제외), Crap8, Beamsplitter, Lookup3, fletcher4, fletcher2, 모든 sanmayce FNV1a_ 변형(FNV1a_YT, FNV1A_Pippip_Yurii, FNV1A_Totenschiff, ...), 피보나치.
일반적인 완화 방법은 호출자에서 버퍼 정렬을 확인하거나 잘못 정렬된 접두사에 대한 전처리 루프를 제공하거나 전체 버퍼를 새로 정렬된 영역에 복사하는 것입니다. 추가 코드를 #ifdef HAVE_ALIGNED_ACCESS_REQUIRED
안에 넣으세요.
oob - 범위를 벗어났습니다.
일부 해시 함수는 길이를 넘어 단어 크기까지 액세스할 수 있는 패딩된 입력 버퍼를 가정합니다. 두 번째 루프나 나머지 부분에 대한 스위치 테이블이 필요하지 않기 때문에 더 빠른 루프 처리가 가능하지만 협력적인 호출 환경이 필요하므로 부정 행위로 간주됩니다.
부호 있는 정수 오버플로
단순한 유형 오류인 이 해시는 정의되지 않고 일관되지 않은 동작을 피하기 위해 내부적으로 부호 없는 정수 유형을 사용해야 합니다. 즉, SuperFastHash: 부호 있는 정수 오버플로: -2147483641 + -113은 'int' 유형으로 표현할 수 없습니다.
이동 지수 오버플로
포함: FNV1A_Pippip_Yurii, FNV1A_Totenschiff, pair_multiply_shift, sumhash32 이동 지수 64는 64비트 유형 'long unsigned int'에 비해 너무 큽니다.