SHA-256 sigma0 過度の信用は厳禁

bitcoin

uint32_t sigma0(uint32_t x) { return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); }

sigma0です。前回のSigma1と同様にRound等に関わる補助関数です。

この関数についても、内部の定数やビット操作を多少調整しても基本的な特性は大きく変わりません。実際に以下の結果の通り、雪崩効果は十分に維持されています。

つまり、この関数内部に用いられている数値や構造は「これ以外は使えない」という数学的定理によって一意に決まっているものではありません。

よって、調整可能な自由度が比較的大きい構造で、その点において厳密な定理に強く拘束される数学的構造(楕円曲線など)とは、信頼の質が根本的に異なります。

このことからわかるのは、もともと設計上の裁量が大きいハッシュ関数や暗号論的乱数生成器については「過度の信用は厳禁」という点です。

=== Avalanche Analysis SHA256 Custom (sigma0) ===
Pairs : 600000
Hash bits : 256
Mean distance : 128.008102 (expected 128.000000)
Variance : 63.992476 (expected 64.000000)
Chi^2 (Binom 0.5) : 77.995112 dof=122 approx p=9.993e-01

— Hamming distance histogram (k : count) —
0 : 0
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
125 : 27786
126 : 29007
127 : 29898
128 : 29850
129 : 29813
130 : 29097
131 : 27622

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.499903
bit[1] : 0.499865
bit[2] : 0.499720
bit[3] : 0.499815
bit[4] : 0.500153
bit[5] : 0.501145
bit[6] : 0.499738
bit[7] : 0.498938
bit[8] : 0.498915
bit[9] : 0.499763
bit[10] : 0.500807
bit[11] : 0.500328
bit[12] : 0.500215
bit[13] : 0.501090
bit[14] : 0.500253
bit[15] : 0.499153
bit[16] : 0.499838
bit[17] : 0.501057
bit[18] : 0.499458
bit[19] : 0.499557
bit[20] : 0.500508
bit[21] : 0.501792
bit[22] : 0.500077
bit[23] : 0.499437
bit[24] : 0.500962
bit[25] : 0.499302
bit[26] : 0.500345
bit[27] : 0.500548
bit[28] : 0.498865
bit[29] : 0.500895
bit[30] : 0.500798
bit[31] : 0.499668
bit[32] : 0.499755
bit[33] : 0.500782
bit[34] : 0.500353
bit[35] : 0.499990
bit[36] : 0.500053
bit[37] : 0.499663
bit[38] : 0.499643
bit[39] : 0.499805
bit[40] : 0.500147
bit[41] : 0.500152
bit[42] : 0.499683
bit[43] : 0.499835
bit[44] : 0.501640
bit[45] : 0.500078
bit[46] : 0.499955
bit[47] : 0.499452
bit[48] : 0.498885
bit[49] : 0.498788
bit[50] : 0.499007
bit[51] : 0.501113
bit[52] : 0.500697
bit[53] : 0.500572
bit[54] : 0.500673
bit[55] : 0.500912
bit[56] : 0.499020
bit[57] : 0.501040
bit[58] : 0.501490
bit[59] : 0.499137
bit[60] : 0.499358
bit[61] : 0.500882
bit[62] : 0.499550
bit[63] : 0.499988
bit[64] : 0.499825
bit[65] : 0.499212
bit[66] : 0.500183
bit[67] : 0.500115
bit[68] : 0.499568
bit[69] : 0.499457
bit[70] : 0.500032
bit[71] : 0.499825
bit[72] : 0.500350
bit[73] : 0.500205
bit[74] : 0.499932
bit[75] : 0.499542
bit[76] : 0.500157
bit[77] : 0.500235
bit[78] : 0.500248
bit[79] : 0.500313
bit[80] : 0.499657
bit[81] : 0.500430
bit[82] : 0.499575
bit[83] : 0.500410
bit[84] : 0.500537
bit[85] : 0.498993
bit[86] : 0.500325
bit[87] : 0.499378
bit[88] : 0.499947
bit[89] : 0.499702
bit[90] : 0.499793
bit[91] : 0.500315
bit[92] : 0.500872
bit[93] : 0.500918
bit[94] : 0.500833
bit[95] : 0.500258
bit[96] : 0.500085
bit[97] : 0.499937
bit[98] : 0.501280
bit[99] : 0.498990
bit[100] : 0.501318
bit[101] : 0.499685
bit[102] : 0.500110
bit[103] : 0.500083
bit[104] : 0.500290
bit[105] : 0.500032
bit[106] : 0.499340
bit[107] : 0.499478
bit[108] : 0.499250
bit[109] : 0.499498
bit[110] : 0.499505
bit[111] : 0.500483
bit[112] : 0.500360
bit[113] : 0.499917
bit[114] : 0.500752
bit[115] : 0.500262
bit[116] : 0.499187
bit[117] : 0.500157
bit[118] : 0.500652
bit[119] : 0.500703
bit[120] : 0.501107
bit[121] : 0.498928
bit[122] : 0.500023
bit[123] : 0.499783
bit[124] : 0.500030
bit[125] : 0.500737
bit[126] : 0.499535
bit[127] : 0.499430
bit[128] : 0.500822
bit[129] : 0.499722
bit[130] : 0.500628
bit[131] : 0.499753
bit[132] : 0.500297
bit[133] : 0.500750
bit[134] : 0.500860
bit[135] : 0.499315
bit[136] : 0.500767
bit[137] : 0.500380
bit[138] : 0.498393
bit[139] : 0.499802
bit[140] : 0.499637
bit[141] : 0.499210
bit[142] : 0.499160
bit[143] : 0.498687
bit[144] : 0.500053
bit[145] : 0.499860
bit[146] : 0.501045
bit[147] : 0.499648
bit[148] : 0.500147
bit[149] : 0.499738
bit[150] : 0.499842
bit[151] : 0.501263
bit[152] : 0.499717
bit[153] : 0.499982
bit[154] : 0.500150
bit[155] : 0.499795
bit[156] : 0.499558
bit[157] : 0.501073
bit[158] : 0.500233
bit[159] : 0.500608
bit[160] : 0.500973
bit[161] : 0.501022
bit[162] : 0.499183
bit[163] : 0.499795
bit[164] : 0.500440
bit[165] : 0.500680
bit[166] : 0.498632
bit[167] : 0.500822
bit[168] : 0.499073
bit[169] : 0.500333
bit[170] : 0.499358
bit[171] : 0.500438
bit[172] : 0.498247
bit[173] : 0.500168
bit[174] : 0.499550
bit[175] : 0.499648
bit[176] : 0.500862
bit[177] : 0.500578
bit[178] : 0.500410
bit[179] : 0.501083
bit[180] : 0.500105
bit[181] : 0.501045
bit[182] : 0.500540
bit[183] : 0.499893
bit[184] : 0.500822
bit[185] : 0.499715
bit[186] : 0.499193
bit[187] : 0.499827
bit[188] : 0.498848
bit[189] : 0.499287
bit[190] : 0.498805
bit[191] : 0.500228
bit[192] : 0.500287
bit[193] : 0.500287
bit[194] : 0.500420
bit[195] : 0.500373
bit[196] : 0.500295
bit[197] : 0.499627
bit[198] : 0.499683
bit[199] : 0.500093
bit[200] : 0.499728
bit[201] : 0.499348
bit[202] : 0.500320
bit[203] : 0.499825
bit[204] : 0.500212
bit[205] : 0.500712
bit[206] : 0.499702
bit[207] : 0.499678
bit[208] : 0.500587
bit[209] : 0.499303
bit[210] : 0.499580
bit[211] : 0.500107
bit[212] : 0.500468
bit[213] : 0.500915
bit[214] : 0.500790
bit[215] : 0.499933
bit[216] : 0.499943
bit[217] : 0.500313
bit[218] : 0.500655
bit[219] : 0.500662
bit[220] : 0.500037
bit[221] : 0.499493
bit[222] : 0.500133
bit[223] : 0.501328
bit[224] : 0.498753
bit[225] : 0.499803
bit[226] : 0.500232
bit[227] : 0.498973
bit[228] : 0.500790
bit[229] : 0.500055
bit[230] : 0.500340
bit[231] : 0.501073
bit[232] : 0.499500
bit[233] : 0.499645
bit[234] : 0.500752
bit[235] : 0.498737
bit[236] : 0.499627
bit[237] : 0.500183
bit[238] : 0.499972
bit[239] : 0.499997
bit[240] : 0.498957
bit[241] : 0.499948
bit[242] : 0.500170
bit[243] : 0.499585
bit[244] : 0.499300
bit[245] : 0.499022
bit[246] : 0.500397
bit[247] : 0.500358
bit[248] : 0.500787
bit[249] : 0.499360
bit[250] : 0.500388
bit[251] : 0.499620
bit[252] : 0.499032
bit[253] : 0.500035
bit[254] : 0.499962
bit[255] : 0.500335

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