どのみちハッシュ関数、特にSHA-256の場合は「64回もRoundで攪拌して混ぜている」ので、その分散値は理想の64に、統計的にも簡単に達するのでは。そう思いがちです。
ところが、64ラウンドも回しているにもかかわらず、意図的に条件を選べば、特定ビットが反転しない(または反転しにくい)状態を作れるのです。実際に、その例が以下です。分散は89近くまで外れ、64ラウンドで攪拌したって、ビット反転率が0のままになっているビット、ありますよね。
まさに「人間がいじれる構造を過信するな」ですね。
===
Avalanche Analysis SHA256 Custom
(Tuning auxiliary functions to force the bit-flip probability of specific bits to zero) ===
Pairs : 600000
Hash bits : 256
Mean distance : 124.992350 (expected 128.000000)
Variance : 89.677398 (expected 64.000000)
Chi^2 (Binom 0.5) : 5528042351.103501 dof=122 approx p=0.000e+00
— Hamming distance histogram (k : count) —
0 : 0
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
125 : 26501
126 : 26760
127 : 26286
128 : 26103
129 : 25242
130 : 23938
131 : 22499
…
249 : 0
250 : 0
251 : 0
252 : 0
253 : 0
254 : 0
255 : 0
256 : 0
— Per-bit flip rate (MSB-first) —
bit[0] : 0.500523
bit[1] : 0.499662
bit[2] : 0.499370
bit[3] : 0.499370
bit[4] : 0.500528
bit[5] : 0.500148
bit[6] : 0.499962
bit[7] : 0.499413
bit[8] : 0.501157
bit[9] : 0.501667
bit[10] : 0.500522
bit[11] : 0.501263
bit[12] : 0.499768
bit[13] : 0.499553
bit[14] : 0.499872
bit[15] : 0.499608
bit[16] : 0.499510
bit[17] : 0.499948
bit[18] : 0.499587
bit[19] : 0.500190
bit[20] : 0.500135
bit[21] : 0.499722
bit[22] : 0.500307
bit[23] : 0.499820
bit[24] : 0.500820
bit[25] : 0.499908
bit[26] : 0.500737
bit[27] : 0.500605
bit[28] : 0.000000
bit[29] : 0.000000
bit[30] : 0.000000
bit[31] : 0.000000
bit[32] : 0.499550
bit[33] : 0.499665
bit[34] : 0.499812
bit[35] : 0.499830
bit[36] : 0.499532
bit[37] : 0.499852
bit[38] : 0.499840
bit[39] : 0.500285
bit[40] : 0.500353
bit[41] : 0.500058
bit[42] : 0.499597
bit[43] : 0.499148
bit[44] : 0.499948
bit[45] : 0.499692
bit[46] : 0.499478
bit[47] : 0.499458
bit[48] : 0.501047
bit[49] : 0.499290
bit[50] : 0.499585
bit[51] : 0.499908
bit[52] : 0.499772
bit[53] : 0.500337
bit[54] : 0.498828
bit[55] : 0.499563
bit[56] : 0.499012
bit[57] : 0.499978
bit[58] : 0.499567
bit[59] : 0.498927
bit[60] : 0.499067
bit[61] : 0.498523
bit[62] : 0.499512
bit[63] : 0.500605
bit[64] : 0.501822
bit[65] : 0.499865
bit[66] : 0.500417
bit[67] : 0.499817
bit[68] : 0.500460
bit[69] : 0.499337
bit[70] : 0.499543
bit[71] : 0.499028
bit[72] : 0.498778
bit[73] : 0.500203
bit[74] : 0.500175
bit[75] : 0.500028
bit[76] : 0.500048
bit[77] : 0.499815
bit[78] : 0.499477
bit[79] : 0.501237
bit[80] : 0.501157
bit[81] : 0.499103
bit[82] : 0.500878
bit[83] : 0.498997
bit[84] : 0.499177
bit[85] : 0.500372
bit[86] : 0.500342
bit[87] : 0.500747
bit[88] : 0.500792
bit[89] : 0.498802
bit[90] : 0.499917
bit[91] : 0.500555
bit[92] : 0.499102
bit[93] : 0.500737
bit[94] : 0.500605
bit[95] : 0.000000
bit[96] : 0.498945
bit[97] : 0.500270
bit[98] : 0.500687
bit[99] : 0.500267
bit[100] : 0.499957
bit[101] : 0.500620
bit[102] : 0.499617
bit[103] : 0.500440
bit[104] : 0.499913
bit[105] : 0.500105
bit[106] : 0.499612
bit[107] : 0.500678
bit[108] : 0.500755
bit[109] : 0.499670
bit[110] : 0.499420
bit[111] : 0.499118
bit[112] : 0.499132
bit[113] : 0.498732
bit[114] : 0.500287
bit[115] : 0.500437
bit[116] : 0.499553
bit[117] : 0.500565
bit[118] : 0.499112
bit[119] : 0.501123
bit[120] : 0.500470
bit[121] : 0.499237
bit[122] : 0.500980
bit[123] : 0.500513
bit[124] : 0.500457
bit[125] : 0.499607
bit[126] : 0.500737
bit[127] : 0.500605
bit[128] : 0.500540
bit[129] : 0.499360
bit[130] : 0.500173
bit[131] : 0.499137
bit[132] : 0.499085
bit[133] : 0.500875
bit[134] : 0.499543
bit[135] : 0.500135
bit[136] : 0.500718
bit[137] : 0.500398
bit[138] : 0.501037
bit[139] : 0.500075
bit[140] : 0.499730
bit[141] : 0.499168
bit[142] : 0.500400
bit[143] : 0.499560
bit[144] : 0.498857
bit[145] : 0.500363
bit[146] : 0.499935
bit[147] : 0.499107
bit[148] : 0.500668
bit[149] : 0.499252
bit[150] : 0.501363
bit[151] : 0.500778
bit[152] : 0.499433
bit[153] : 0.499327
bit[154] : 0.499537
bit[155] : 0.500375
bit[156] : 0.500158
bit[157] : 0.499512
bit[158] : 0.500605
bit[159] : 0.000000
bit[160] : 0.501098
bit[161] : 0.499793
bit[162] : 0.500980
bit[163] : 0.500248
bit[164] : 0.500723
bit[165] : 0.500132
bit[166] : 0.499710
bit[167] : 0.499828
bit[168] : 0.500243
bit[169] : 0.499985
bit[170] : 0.499855
bit[171] : 0.500103
bit[172] : 0.499948
bit[173] : 0.499568
bit[174] : 0.500577
bit[175] : 0.500102
bit[176] : 0.500678
bit[177] : 0.498562
bit[178] : 0.500163
bit[179] : 0.500330
bit[180] : 0.498770
bit[181] : 0.500590
bit[182] : 0.500922
bit[183] : 0.499172
bit[184] : 0.500247
bit[185] : 0.500213
bit[186] : 0.499762
bit[187] : 0.500168
bit[188] : 0.500450
bit[189] : 0.499102
bit[190] : 0.500737
bit[191] : 0.500605
bit[192] : 0.500552
bit[193] : 0.500227
bit[194] : 0.499493
bit[195] : 0.499897
bit[196] : 0.500015
bit[197] : 0.499090
bit[198] : 0.499233
bit[199] : 0.500223
bit[200] : 0.499633
bit[201] : 0.500095
bit[202] : 0.499835
bit[203] : 0.499347
bit[204] : 0.500497
bit[205] : 0.500027
bit[206] : 0.501537
bit[207] : 0.499250
bit[208] : 0.500928
bit[209] : 0.500320
bit[210] : 0.500392
bit[211] : 0.499932
bit[212] : 0.500557
bit[213] : 0.500037
bit[214] : 0.499548
bit[215] : 0.500418
bit[216] : 0.500518
bit[217] : 0.499668
bit[218] : 0.500207
bit[219] : 0.499862
bit[220] : 0.499645
bit[221] : 0.498523
bit[222] : 0.499512
bit[223] : 0.500605
bit[224] : 0.499862
bit[225] : 0.498992
bit[226] : 0.500522
bit[227] : 0.497828
bit[228] : 0.499030
bit[229] : 0.500367
bit[230] : 0.500017
bit[231] : 0.500803
bit[232] : 0.500833
bit[233] : 0.499860
bit[234] : 0.499362
bit[235] : 0.500542
bit[236] : 0.499870
bit[237] : 0.499340
bit[238] : 0.499923
bit[239] : 0.500515
bit[240] : 0.498973
bit[241] : 0.499128
bit[242] : 0.500472
bit[243] : 0.499895
bit[244] : 0.499522
bit[245] : 0.498753
bit[246] : 0.500915
bit[247] : 0.499350
bit[248] : 0.499692
bit[249] : 0.499495
bit[250] : 0.499333
bit[251] : 0.499318
bit[252] : 0.500457
bit[253] : 0.499607
bit[254] : 0.500737
bit[255] : 0.500605
