uint32_t sigma1(uint32_t x) { return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); }
この補助関数にもいろいろな操作が組み込まれていますが、調整しても綺麗に雪崩効果を保っています。
そうですよね……。このような調整は、表向きに見えないのです。よって、決まった順序で出力したとアピールされている「IV(初期値)」や「Roundの各定数」とは、そこが異なります。
=== Avalanche Analysis SHA256 Custom (sigma1) ===
Pairs : 600000
Hash bits : 256
Mean distance : 127.991257 (expected 128.000000)
Variance : 63.948544 (expected 64.000000)
Chi^2 (Binom 0.5) : 68.420921 dof=122 approx p=1.000e+00
— Hamming distance histogram (k : count) —
0 : 0
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
125 : 27943
126 : 29225
127 : 29744
128 : 29864
129 : 29547
130 : 28864
131 : 27704
…
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.499342
bit[1] : 0.498708
bit[2] : 0.498965
bit[3] : 0.500673
bit[4] : 0.500460
bit[5] : 0.501262
bit[6] : 0.499855
bit[7] : 0.499462
bit[8] : 0.500090
bit[9] : 0.500495
bit[10] : 0.498997
bit[11] : 0.499690
bit[12] : 0.500670
bit[13] : 0.500050
bit[14] : 0.500012
bit[15] : 0.499062
bit[16] : 0.500292
bit[17] : 0.499372
bit[18] : 0.499780
bit[19] : 0.500235
bit[20] : 0.500605
bit[21] : 0.499848
bit[22] : 0.500523
bit[23] : 0.500168
bit[24] : 0.499965
bit[25] : 0.499337
bit[26] : 0.498693
bit[27] : 0.500380
bit[28] : 0.500338
bit[29] : 0.499618
bit[30] : 0.499318
bit[31] : 0.499720
bit[32] : 0.500352
bit[33] : 0.500672
bit[34] : 0.499005
bit[35] : 0.500440
bit[36] : 0.498585
bit[37] : 0.500378
bit[38] : 0.500702
bit[39] : 0.499105
bit[40] : 0.499887
bit[41] : 0.499052
bit[42] : 0.500137
bit[43] : 0.500008
bit[44] : 0.498855
bit[45] : 0.499687
bit[46] : 0.498925
bit[47] : 0.499235
bit[48] : 0.499540
bit[49] : 0.499872
bit[50] : 0.500615
bit[51] : 0.499862
bit[52] : 0.499705
bit[53] : 0.499498
bit[54] : 0.500865
bit[55] : 0.499992
bit[56] : 0.501020
bit[57] : 0.500293
bit[58] : 0.499978
bit[59] : 0.498913
bit[60] : 0.500438
bit[61] : 0.499768
bit[62] : 0.498870
bit[63] : 0.500507
bit[64] : 0.498967
bit[65] : 0.499570
bit[66] : 0.499902
bit[67] : 0.501230
bit[68] : 0.500322
bit[69] : 0.500108
bit[70] : 0.499557
bit[71] : 0.499903
bit[72] : 0.500153
bit[73] : 0.501145
bit[74] : 0.499698
bit[75] : 0.499632
bit[76] : 0.498427
bit[77] : 0.500090
bit[78] : 0.500445
bit[79] : 0.500422
bit[80] : 0.500165
bit[81] : 0.500220
bit[82] : 0.499557
bit[83] : 0.500190
bit[84] : 0.499808
bit[85] : 0.500078
bit[86] : 0.498985
bit[87] : 0.499575
bit[88] : 0.500458
bit[89] : 0.500852
bit[90] : 0.499077
bit[91] : 0.500063
bit[92] : 0.499288
bit[93] : 0.499223
bit[94] : 0.499447
bit[95] : 0.500362
bit[96] : 0.499125
bit[97] : 0.500325
bit[98] : 0.501068
bit[99] : 0.500830
bit[100] : 0.499085
bit[101] : 0.500983
bit[102] : 0.500220
bit[103] : 0.498825
bit[104] : 0.499760
bit[105] : 0.499158
bit[106] : 0.500115
bit[107] : 0.499835
bit[108] : 0.500388
bit[109] : 0.500465
bit[110] : 0.499673
bit[111] : 0.498860
bit[112] : 0.500522
bit[113] : 0.499060
bit[114] : 0.499415
bit[115] : 0.499458
bit[116] : 0.500475
bit[117] : 0.501023
bit[118] : 0.499375
bit[119] : 0.500595
bit[120] : 0.499755
bit[121] : 0.500058
bit[122] : 0.500268
bit[123] : 0.499095
bit[124] : 0.499670
bit[125] : 0.500203
bit[126] : 0.500140
bit[127] : 0.500303
bit[128] : 0.500540
bit[129] : 0.499333
bit[130] : 0.500005
bit[131] : 0.501093
bit[132] : 0.500687
bit[133] : 0.500715
bit[134] : 0.498907
bit[135] : 0.500263
bit[136] : 0.500150
bit[137] : 0.500173
bit[138] : 0.501587
bit[139] : 0.501280
bit[140] : 0.500883
bit[141] : 0.500227
bit[142] : 0.499893
bit[143] : 0.500910
bit[144] : 0.500355
bit[145] : 0.499645
bit[146] : 0.499627
bit[147] : 0.498175
bit[148] : 0.499487
bit[149] : 0.500990
bit[150] : 0.499952
bit[151] : 0.500997
bit[152] : 0.500225
bit[153] : 0.499362
bit[154] : 0.500990
bit[155] : 0.499660
bit[156] : 0.500365
bit[157] : 0.499745
bit[158] : 0.499125
bit[159] : 0.499917
bit[160] : 0.501047
bit[161] : 0.501053
bit[162] : 0.500887
bit[163] : 0.499985
bit[164] : 0.499383
bit[165] : 0.500125
bit[166] : 0.499325
bit[167] : 0.500438
bit[168] : 0.500907
bit[169] : 0.499875
bit[170] : 0.500197
bit[171] : 0.500977
bit[172] : 0.499592
bit[173] : 0.501047
bit[174] : 0.499933
bit[175] : 0.499433
bit[176] : 0.499827
bit[177] : 0.499240
bit[178] : 0.499988
bit[179] : 0.500278
bit[180] : 0.499188
bit[181] : 0.499908
bit[182] : 0.499647
bit[183] : 0.501017
bit[184] : 0.500793
bit[185] : 0.501278
bit[186] : 0.498437
bit[187] : 0.500455
bit[188] : 0.499753
bit[189] : 0.499988
bit[190] : 0.500135
bit[191] : 0.500245
bit[192] : 0.500532
bit[193] : 0.498282
bit[194] : 0.499623
bit[195] : 0.499883
bit[196] : 0.499538
bit[197] : 0.500573
bit[198] : 0.500325
bit[199] : 0.498573
bit[200] : 0.500842
bit[201] : 0.500368
bit[202] : 0.499575
bit[203] : 0.498367
bit[204] : 0.500603
bit[205] : 0.500368
bit[206] : 0.500042
bit[207] : 0.500460
bit[208] : 0.499990
bit[209] : 0.499177
bit[210] : 0.499377
bit[211] : 0.499777
bit[212] : 0.499950
bit[213] : 0.499060
bit[214] : 0.498953
bit[215] : 0.499465
bit[216] : 0.499822
bit[217] : 0.501113
bit[218] : 0.499998
bit[219] : 0.499433
bit[220] : 0.499190
bit[221] : 0.500533
bit[222] : 0.500167
bit[223] : 0.500197
bit[224] : 0.500647
bit[225] : 0.499873
bit[226] : 0.499415
bit[227] : 0.500152
bit[228] : 0.500018
bit[229] : 0.500978
bit[230] : 0.500057
bit[231] : 0.500183
bit[232] : 0.501650
bit[233] : 0.500183
bit[234] : 0.500118
bit[235] : 0.499087
bit[236] : 0.499372
bit[237] : 0.499212
bit[238] : 0.499910
bit[239] : 0.499255
bit[240] : 0.500340
bit[241] : 0.499135
bit[242] : 0.499713
bit[243] : 0.500407
bit[244] : 0.500405
bit[245] : 0.499775
bit[246] : 0.500405
bit[247] : 0.501083
bit[248] : 0.500422
bit[249] : 0.499593
bit[250] : 0.499988
bit[251] : 0.499287
bit[252] : 0.500275
bit[253] : 0.500203
bit[254] : 0.499485
bit[255] : 0.501033

