uint32_t Sigma1(uint32_t x) { return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); }
SHA-256のSigma1です。左右にビットを散らすような動作になっております。これも、調整されて作られたものであって、数学的な定理などで縛られたものではないのです。
よって、このビットの動き方に似た別の調整、すなわち出力ハッシュ値まで変えてしまうほどの変更を与えたところで、ハッシュ関数としての性質、すなわち雪崩効果などは変化しません。それが、以下の結果です。
=== Avalanche Analysis SHA256 Custom (Sigma1) ===
Pairs : 600000
Hash bits : 256
Mean distance : 127.999618 (expected 128.000000)
Variance : 64.113972 (expected 64.000000)
Chi^2 (Binom 0.5) : 75.255255 dof=122 approx p=9.997e-01
— Hamming distance histogram (k : count) —
0 : 0
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
125 : 27689
126 : 28845
127 : 29621
128 : 29532
129 : 29766
130 : 29092
131 : 27956
…
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.498797
bit[1] : 0.500247
bit[2] : 0.500757
bit[3] : 0.500878
bit[4] : 0.500860
bit[5] : 0.500683
bit[6] : 0.499483
bit[7] : 0.499443
bit[8] : 0.500180
bit[9] : 0.499497
bit[10] : 0.499852
bit[11] : 0.499403
bit[12] : 0.500002
bit[13] : 0.499733
bit[14] : 0.499060
bit[15] : 0.501712
bit[16] : 0.499238
bit[17] : 0.499420
bit[18] : 0.499655
bit[19] : 0.499982
bit[20] : 0.500092
bit[21] : 0.498843
bit[22] : 0.500633
bit[23] : 0.499448
bit[24] : 0.499182
bit[25] : 0.500140
bit[26] : 0.500833
bit[27] : 0.499518
bit[28] : 0.499760
bit[29] : 0.499003
bit[30] : 0.500365
bit[31] : 0.499372
bit[32] : 0.501055
bit[33] : 0.500665
bit[34] : 0.499415
bit[35] : 0.499187
bit[36] : 0.500077
bit[37] : 0.500737
bit[38] : 0.499832
bit[39] : 0.500602
bit[40] : 0.499493
bit[41] : 0.499890
bit[42] : 0.499580
bit[43] : 0.499217
bit[44] : 0.501278
bit[45] : 0.500115
bit[46] : 0.499820
bit[47] : 0.499572
bit[48] : 0.500650
bit[49] : 0.499210
bit[50] : 0.499308
bit[51] : 0.499527
bit[52] : 0.499450
bit[53] : 0.499880
bit[54] : 0.500087
bit[55] : 0.499683
bit[56] : 0.500735
bit[57] : 0.500690
bit[58] : 0.499923
bit[59] : 0.500510
bit[60] : 0.500005
bit[61] : 0.499635
bit[62] : 0.499015
bit[63] : 0.499342
bit[64] : 0.500173
bit[65] : 0.500765
bit[66] : 0.500372
bit[67] : 0.499642
bit[68] : 0.499145
bit[69] : 0.500115
bit[70] : 0.499540
bit[71] : 0.501598
bit[72] : 0.498987
bit[73] : 0.499250
bit[74] : 0.499423
bit[75] : 0.499920
bit[76] : 0.501535
bit[77] : 0.500507
bit[78] : 0.498597
bit[79] : 0.500893
bit[80] : 0.499882
bit[81] : 0.501395
bit[82] : 0.499585
bit[83] : 0.499770
bit[84] : 0.500778
bit[85] : 0.500333
bit[86] : 0.501278
bit[87] : 0.500045
bit[88] : 0.499413
bit[89] : 0.499582
bit[90] : 0.500588
bit[91] : 0.499668
bit[92] : 0.499178
bit[93] : 0.500117
bit[94] : 0.500193
bit[95] : 0.500115
bit[96] : 0.500177
bit[97] : 0.499773
bit[98] : 0.500465
bit[99] : 0.500407
bit[100] : 0.499808
bit[101] : 0.499807
bit[102] : 0.499555
bit[103] : 0.500502
bit[104] : 0.499680
bit[105] : 0.500457
bit[106] : 0.501305
bit[107] : 0.500080
bit[108] : 0.500698
bit[109] : 0.500825
bit[110] : 0.499690
bit[111] : 0.501707
bit[112] : 0.499898
bit[113] : 0.500145
bit[114] : 0.500687
bit[115] : 0.499617
bit[116] : 0.501097
bit[117] : 0.499968
bit[118] : 0.500180
bit[119] : 0.498893
bit[120] : 0.499290
bit[121] : 0.500918
bit[122] : 0.499643
bit[123] : 0.498405
bit[124] : 0.500675
bit[125] : 0.499190
bit[126] : 0.500388
bit[127] : 0.499552
bit[128] : 0.500285
bit[129] : 0.500543
bit[130] : 0.499380
bit[131] : 0.500647
bit[132] : 0.500075
bit[133] : 0.499975
bit[134] : 0.501142
bit[135] : 0.500505
bit[136] : 0.500190
bit[137] : 0.499990
bit[138] : 0.499660
bit[139] : 0.499752
bit[140] : 0.499080
bit[141] : 0.501035
bit[142] : 0.500480
bit[143] : 0.499572
bit[144] : 0.499478
bit[145] : 0.501037
bit[146] : 0.500287
bit[147] : 0.499312
bit[148] : 0.500937
bit[149] : 0.500265
bit[150] : 0.499357
bit[151] : 0.500327
bit[152] : 0.500695
bit[153] : 0.500023
bit[154] : 0.499972
bit[155] : 0.501235
bit[156] : 0.501572
bit[157] : 0.500680
bit[158] : 0.499058
bit[159] : 0.500702
bit[160] : 0.500062
bit[161] : 0.500198
bit[162] : 0.499333
bit[163] : 0.500458
bit[164] : 0.500647
bit[165] : 0.500018
bit[166] : 0.500685
bit[167] : 0.499388
bit[168] : 0.499773
bit[169] : 0.499830
bit[170] : 0.500393
bit[171] : 0.500330
bit[172] : 0.500800
bit[173] : 0.499655
bit[174] : 0.500045
bit[175] : 0.499877
bit[176] : 0.500355
bit[177] : 0.499978
bit[178] : 0.500555
bit[179] : 0.500190
bit[180] : 0.500270
bit[181] : 0.499582
bit[182] : 0.499065
bit[183] : 0.499903
bit[184] : 0.500542
bit[185] : 0.499353
bit[186] : 0.500442
bit[187] : 0.500090
bit[188] : 0.500718
bit[189] : 0.499992
bit[190] : 0.500158
bit[191] : 0.499393
bit[192] : 0.499385
bit[193] : 0.499597
bit[194] : 0.499823
bit[195] : 0.500553
bit[196] : 0.500410
bit[197] : 0.499542
bit[198] : 0.499728
bit[199] : 0.500468
bit[200] : 0.499955
bit[201] : 0.499862
bit[202] : 0.498398
bit[203] : 0.499823
bit[204] : 0.498277
bit[205] : 0.499940
bit[206] : 0.499193
bit[207] : 0.499813
bit[208] : 0.498515
bit[209] : 0.499893
bit[210] : 0.500012
bit[211] : 0.499983
bit[212] : 0.499662
bit[213] : 0.499933
bit[214] : 0.502345
bit[215] : 0.499787
bit[216] : 0.500360
bit[217] : 0.499020
bit[218] : 0.501055
bit[219] : 0.500508
bit[220] : 0.500872
bit[221] : 0.500475
bit[222] : 0.500332
bit[223] : 0.498895
bit[224] : 0.498942
bit[225] : 0.499503
bit[226] : 0.500590
bit[227] : 0.500065
bit[228] : 0.500093
bit[229] : 0.499500
bit[230] : 0.498915
bit[231] : 0.499957
bit[232] : 0.500387
bit[233] : 0.499953
bit[234] : 0.499735
bit[235] : 0.499868
bit[236] : 0.500357
bit[237] : 0.499107
bit[238] : 0.500332
bit[239] : 0.500788
bit[240] : 0.500463
bit[241] : 0.499878
bit[242] : 0.499727
bit[243] : 0.499188
bit[244] : 0.499088
bit[245] : 0.500053
bit[246] : 0.499507
bit[247] : 0.500343
bit[248] : 0.499918
bit[249] : 0.500370
bit[250] : 0.498462
bit[251] : 0.499920
bit[252] : 0.499270
bit[253] : 0.500742
bit[254] : 0.499467
bit[255] : 0.499270

