SHA-256 Sigma0

bitcoin

SHA-256のSigma0です。さすがにこのあたりは触れた途端に壊れるでしょう。

uint32_t Sigma0(uint32_t x) { return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); }

以下、少しいじって触れた結果です。綺麗ですよね。壊れる気配はありません。
つまりハッシュ関数は、少しいじれば壊れてしまうシビアな設計ではないということです。
その設計には余裕がある。確認してみて、わかった事実です。

=== Avalanche Analysis SHA256 Custom (Sigma0) ===
Pairs : 600000
Hash bits : 256
Mean distance : 128.007815 (expected 128.000000)
Variance : 64.201477 (expected 64.000000)
Chi^2 (Binom 0.5) : 66.432620 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 : 27876
126 : 28740
127 : 29816
128 : 29673
129 : 29453
130 : 28855
131 : 28082

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.500277
bit[1] : 0.500145
bit[2] : 0.501483
bit[3] : 0.501567
bit[4] : 0.500663
bit[5] : 0.500710
bit[6] : 0.499818
bit[7] : 0.500545
bit[8] : 0.499942
bit[9] : 0.499108
bit[10] : 0.500507
bit[11] : 0.500505
bit[12] : 0.501618
bit[13] : 0.501810
bit[14] : 0.500233
bit[15] : 0.498420
bit[16] : 0.500348
bit[17] : 0.500182
bit[18] : 0.500607
bit[19] : 0.500543
bit[20] : 0.498308
bit[21] : 0.499668
bit[22] : 0.499587
bit[23] : 0.499375
bit[24] : 0.499537
bit[25] : 0.500677
bit[26] : 0.499418
bit[27] : 0.500068
bit[28] : 0.498265
bit[29] : 0.500182
bit[30] : 0.500058
bit[31] : 0.500107
bit[32] : 0.500405
bit[33] : 0.499773
bit[34] : 0.500475
bit[35] : 0.501075
bit[36] : 0.499718
bit[37] : 0.499837
bit[38] : 0.499650
bit[39] : 0.499288
bit[40] : 0.499840
bit[41] : 0.500578
bit[42] : 0.500713
bit[43] : 0.500677
bit[44] : 0.500405
bit[45] : 0.498872
bit[46] : 0.500398
bit[47] : 0.499578
bit[48] : 0.500677
bit[49] : 0.500012
bit[50] : 0.499820
bit[51] : 0.498495
bit[52] : 0.500222
bit[53] : 0.498868
bit[54] : 0.500017
bit[55] : 0.500397
bit[56] : 0.499037
bit[57] : 0.500748
bit[58] : 0.499392
bit[59] : 0.499308
bit[60] : 0.500963
bit[61] : 0.499822
bit[62] : 0.500052
bit[63] : 0.499818
bit[64] : 0.499872
bit[65] : 0.501235
bit[66] : 0.500147
bit[67] : 0.500475
bit[68] : 0.499297
bit[69] : 0.500070
bit[70] : 0.500393
bit[71] : 0.499810
bit[72] : 0.499068
bit[73] : 0.499302
bit[74] : 0.499618
bit[75] : 0.501330
bit[76] : 0.500115
bit[77] : 0.500463
bit[78] : 0.501073
bit[79] : 0.499395
bit[80] : 0.499378
bit[81] : 0.500533
bit[82] : 0.500143
bit[83] : 0.499712
bit[84] : 0.500465
bit[85] : 0.500038
bit[86] : 0.499972
bit[87] : 0.499675
bit[88] : 0.499117
bit[89] : 0.500308
bit[90] : 0.499455
bit[91] : 0.500463
bit[92] : 0.500300
bit[93] : 0.499625
bit[94] : 0.499573
bit[95] : 0.499580
bit[96] : 0.498988
bit[97] : 0.499592
bit[98] : 0.499827
bit[99] : 0.500018
bit[100] : 0.499353
bit[101] : 0.499893
bit[102] : 0.500062
bit[103] : 0.500280
bit[104] : 0.498745
bit[105] : 0.500560
bit[106] : 0.500145
bit[107] : 0.499455
bit[108] : 0.500583
bit[109] : 0.500308
bit[110] : 0.499825
bit[111] : 0.500727
bit[112] : 0.498980
bit[113] : 0.499572
bit[114] : 0.498982
bit[115] : 0.499832
bit[116] : 0.499940
bit[117] : 0.500328
bit[118] : 0.499758
bit[119] : 0.498520
bit[120] : 0.500305
bit[121] : 0.499608
bit[122] : 0.499720
bit[123] : 0.499253
bit[124] : 0.500382
bit[125] : 0.500013
bit[126] : 0.499638
bit[127] : 0.500440
bit[128] : 0.500447
bit[129] : 0.500023
bit[130] : 0.499570
bit[131] : 0.501045
bit[132] : 0.499642
bit[133] : 0.499503
bit[134] : 0.500458
bit[135] : 0.500550
bit[136] : 0.499345
bit[137] : 0.500133
bit[138] : 0.501152
bit[139] : 0.501152
bit[140] : 0.498407
bit[141] : 0.500433
bit[142] : 0.499738
bit[143] : 0.498982
bit[144] : 0.499430
bit[145] : 0.500543
bit[146] : 0.499585
bit[147] : 0.500177
bit[148] : 0.499135
bit[149] : 0.498560
bit[150] : 0.500392
bit[151] : 0.499943
bit[152] : 0.500832
bit[153] : 0.498492
bit[154] : 0.500153
bit[155] : 0.499437
bit[156] : 0.499832
bit[157] : 0.499353
bit[158] : 0.500548
bit[159] : 0.500960
bit[160] : 0.501093
bit[161] : 0.500573
bit[162] : 0.499615
bit[163] : 0.500698
bit[164] : 0.500547
bit[165] : 0.500877
bit[166] : 0.499970
bit[167] : 0.500497
bit[168] : 0.500592
bit[169] : 0.500683
bit[170] : 0.500053
bit[171] : 0.500623
bit[172] : 0.499072
bit[173] : 0.499962
bit[174] : 0.499472
bit[175] : 0.500460
bit[176] : 0.499978
bit[177] : 0.500400
bit[178] : 0.500680
bit[179] : 0.499823
bit[180] : 0.499817
bit[181] : 0.500070
bit[182] : 0.500970
bit[183] : 0.501135
bit[184] : 0.500253
bit[185] : 0.500173
bit[186] : 0.500483
bit[187] : 0.498658
bit[188] : 0.501390
bit[189] : 0.500395
bit[190] : 0.500588
bit[191] : 0.500667
bit[192] : 0.498820
bit[193] : 0.500615
bit[194] : 0.500148
bit[195] : 0.499560
bit[196] : 0.499207
bit[197] : 0.501122
bit[198] : 0.499560
bit[199] : 0.501105
bit[200] : 0.500093
bit[201] : 0.499200
bit[202] : 0.500675
bit[203] : 0.500152
bit[204] : 0.498737
bit[205] : 0.500223
bit[206] : 0.500148
bit[207] : 0.499868
bit[208] : 0.499647
bit[209] : 0.499565
bit[210] : 0.500910
bit[211] : 0.501710
bit[212] : 0.499453
bit[213] : 0.500510
bit[214] : 0.500383
bit[215] : 0.500680
bit[216] : 0.498992
bit[217] : 0.499528
bit[218] : 0.499498
bit[219] : 0.498382
bit[220] : 0.499822
bit[221] : 0.499103
bit[222] : 0.500330
bit[223] : 0.499860
bit[224] : 0.499328
bit[225] : 0.499652
bit[226] : 0.499508
bit[227] : 0.500482
bit[228] : 0.499773
bit[229] : 0.500582
bit[230] : 0.501335
bit[231] : 0.500642
bit[232] : 0.500487
bit[233] : 0.499777
bit[234] : 0.500927
bit[235] : 0.499712
bit[236] : 0.500488
bit[237] : 0.499890
bit[238] : 0.499903
bit[239] : 0.500603
bit[240] : 0.500635
bit[241] : 0.501113
bit[242] : 0.500068
bit[243] : 0.500148
bit[244] : 0.500132
bit[245] : 0.498888
bit[246] : 0.500217
bit[247] : 0.500788
bit[248] : 0.500495
bit[249] : 0.500195
bit[250] : 0.500033
bit[251] : 0.500455
bit[252] : 0.499530
bit[253] : 0.499463
bit[254] : 0.500322
bit[255] : 0.499570

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