SHA-256 Maj

bitcoin

SHA-256 Maj マジョリティですね。

uint32_t Maj(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (z & (x | y)); }

こちらも、カスタム(一部を別の論理に書き換え)してみました。それが以下の結果です。
マジョリティの性質を満たすように調整する分には、他の式でも問題ない。
もちろん、こんな僅かな調整であっても出力ハッシュ値は変化します。でも、特性は変わりませんので、雪崩効果等の検査をパスしたなら、これをハッシュ関数として使う事はできるのです。
調整ができる……絶対に忘れてはならない、ハッシュ関数の別の顔でもあります。

=== Avalanche Analysis SHA256 Custom (Maj) ===
Pairs : 600000
Hash bits : 256
Mean distance : 128.000243 (expected 128.000000)
Variance : 63.988700 (expected 64.000000)
Chi^2 (Binom 0.5) : 75.234479 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 : 27732
126 : 29009
127 : 29570
128 : 30085
129 : 29543
130 : 28930
131 : 28026

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.500582
bit[1] : 0.499693
bit[2] : 0.500228
bit[3] : 0.500267
bit[4] : 0.500210
bit[5] : 0.499918
bit[6] : 0.500277
bit[7] : 0.500350
bit[8] : 0.500158
bit[9] : 0.499488
bit[10] : 0.499333
bit[11] : 0.498955
bit[12] : 0.499137
bit[13] : 0.498338
bit[14] : 0.500600
bit[15] : 0.499845
bit[16] : 0.499647
bit[17] : 0.500510
bit[18] : 0.500615
bit[19] : 0.500373
bit[20] : 0.499538
bit[21] : 0.500942
bit[22] : 0.499185
bit[23] : 0.501150
bit[24] : 0.500792
bit[25] : 0.500202
bit[26] : 0.499227
bit[27] : 0.499518
bit[28] : 0.500292
bit[29] : 0.499377
bit[30] : 0.500253
bit[31] : 0.500255
bit[32] : 0.500400
bit[33] : 0.499623
bit[34] : 0.499055
bit[35] : 0.500908
bit[36] : 0.499922
bit[37] : 0.500897
bit[38] : 0.500335
bit[39] : 0.500293
bit[40] : 0.499300
bit[41] : 0.499802
bit[42] : 0.499585
bit[43] : 0.500110
bit[44] : 0.499205
bit[45] : 0.500183
bit[46] : 0.499835
bit[47] : 0.500700
bit[48] : 0.499198
bit[49] : 0.499678
bit[50] : 0.499733
bit[51] : 0.500050
bit[52] : 0.500068
bit[53] : 0.500513
bit[54] : 0.499982
bit[55] : 0.499763
bit[56] : 0.500325
bit[57] : 0.500150
bit[58] : 0.499698
bit[59] : 0.499265
bit[60] : 0.498575
bit[61] : 0.500522
bit[62] : 0.500095
bit[63] : 0.500605
bit[64] : 0.500833
bit[65] : 0.499908
bit[66] : 0.499510
bit[67] : 0.500600
bit[68] : 0.500407
bit[69] : 0.500157
bit[70] : 0.501208
bit[71] : 0.499963
bit[72] : 0.499403
bit[73] : 0.499328
bit[74] : 0.500580
bit[75] : 0.500115
bit[76] : 0.500035
bit[77] : 0.501508
bit[78] : 0.501083
bit[79] : 0.500170
bit[80] : 0.499002
bit[81] : 0.499165
bit[82] : 0.500057
bit[83] : 0.499610
bit[84] : 0.500940
bit[85] : 0.500513
bit[86] : 0.499717
bit[87] : 0.499678
bit[88] : 0.500665
bit[89] : 0.500610
bit[90] : 0.500263
bit[91] : 0.499537
bit[92] : 0.499517
bit[93] : 0.500197
bit[94] : 0.500235
bit[95] : 0.499648
bit[96] : 0.499450
bit[97] : 0.499560
bit[98] : 0.501060
bit[99] : 0.499948
bit[100] : 0.500237
bit[101] : 0.499867
bit[102] : 0.499548
bit[103] : 0.500777
bit[104] : 0.500935
bit[105] : 0.499195
bit[106] : 0.499923
bit[107] : 0.499488
bit[108] : 0.499840
bit[109] : 0.498593
bit[110] : 0.500297
bit[111] : 0.498397
bit[112] : 0.500848
bit[113] : 0.498770
bit[114] : 0.499758
bit[115] : 0.499292
bit[116] : 0.499415
bit[117] : 0.500075
bit[118] : 0.499505
bit[119] : 0.500942
bit[120] : 0.498645
bit[121] : 0.498950
bit[122] : 0.500195
bit[123] : 0.500132
bit[124] : 0.500332
bit[125] : 0.499923
bit[126] : 0.500578
bit[127] : 0.499232
bit[128] : 0.500818
bit[129] : 0.499915
bit[130] : 0.500828
bit[131] : 0.500378
bit[132] : 0.500185
bit[133] : 0.500843
bit[134] : 0.499175
bit[135] : 0.500647
bit[136] : 0.499385
bit[137] : 0.499705
bit[138] : 0.499853
bit[139] : 0.499508
bit[140] : 0.499503
bit[141] : 0.500417
bit[142] : 0.500008
bit[143] : 0.499742
bit[144] : 0.500058
bit[145] : 0.500422
bit[146] : 0.499185
bit[147] : 0.500488
bit[148] : 0.498915
bit[149] : 0.498970
bit[150] : 0.500188
bit[151] : 0.499207
bit[152] : 0.501758
bit[153] : 0.499337
bit[154] : 0.499305
bit[155] : 0.499338
bit[156] : 0.500892
bit[157] : 0.500567
bit[158] : 0.500137
bit[159] : 0.499453
bit[160] : 0.500605
bit[161] : 0.501033
bit[162] : 0.499595
bit[163] : 0.501503
bit[164] : 0.499408
bit[165] : 0.499457
bit[166] : 0.499382
bit[167] : 0.500387
bit[168] : 0.500238
bit[169] : 0.499693
bit[170] : 0.499912
bit[171] : 0.500348
bit[172] : 0.499847
bit[173] : 0.500215
bit[174] : 0.499340
bit[175] : 0.499067
bit[176] : 0.501277
bit[177] : 0.499953
bit[178] : 0.499898
bit[179] : 0.500897
bit[180] : 0.500023
bit[181] : 0.500788
bit[182] : 0.500625
bit[183] : 0.501102
bit[184] : 0.501047
bit[185] : 0.500253
bit[186] : 0.499845
bit[187] : 0.499342
bit[188] : 0.499797
bit[189] : 0.498828
bit[190] : 0.499798
bit[191] : 0.498673
bit[192] : 0.500032
bit[193] : 0.499697
bit[194] : 0.500975
bit[195] : 0.499330
bit[196] : 0.499447
bit[197] : 0.499212
bit[198] : 0.500453
bit[199] : 0.499835
bit[200] : 0.499607
bit[201] : 0.500437
bit[202] : 0.499318
bit[203] : 0.499503
bit[204] : 0.500225
bit[205] : 0.500185
bit[206] : 0.500415
bit[207] : 0.499702
bit[208] : 0.500665
bit[209] : 0.499900
bit[210] : 0.500822
bit[211] : 0.500342
bit[212] : 0.499920
bit[213] : 0.499983
bit[214] : 0.499602
bit[215] : 0.500007
bit[216] : 0.499578
bit[217] : 0.500457
bit[218] : 0.500485
bit[219] : 0.499747
bit[220] : 0.499680
bit[221] : 0.500470
bit[222] : 0.500293
bit[223] : 0.500638
bit[224] : 0.501157
bit[225] : 0.499533
bit[226] : 0.500940
bit[227] : 0.500083
bit[228] : 0.499728
bit[229] : 0.500398
bit[230] : 0.500017
bit[231] : 0.500218
bit[232] : 0.499597
bit[233] : 0.500032
bit[234] : 0.500462
bit[235] : 0.499708
bit[236] : 0.498385
bit[237] : 0.502068
bit[238] : 0.499848
bit[239] : 0.498723
bit[240] : 0.499510
bit[241] : 0.498487
bit[242] : 0.500343
bit[243] : 0.499822
bit[244] : 0.500057
bit[245] : 0.501115
bit[246] : 0.500677
bit[247] : 0.500683
bit[248] : 0.499340
bit[249] : 0.501192
bit[250] : 0.501247
bit[251] : 0.499733
bit[252] : 0.499032
bit[253] : 0.500648
bit[254] : 0.500212
bit[255] : 0.499480

タイトルとURLをコピーしました