質問編集履歴
3
p,q,Nが検証フェーズ前では正しい値が与えられたことを追加しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
コードの下に実行結果を載せました.
|
8
8
|
|
9
|
+
検証フェーズの直前で,p,q,Nの値を確認したところ正しい値が出力されました.
|
10
|
+
|
9
11
|
|
10
12
|
|
11
13
|
```C
|
2
出力結果を更新しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -568,6 +568,58 @@
|
|
568
568
|
|
569
569
|
```出力結果
|
570
570
|
|
571
|
+
initialize.c:59:15: warning: implicit declaration of function 'pow1' is invalid in C99 [-Wimplicit-function-declaration]
|
572
|
+
|
573
|
+
R[i][j]=pow1(g,s1[i][j],N);
|
574
|
+
|
575
|
+
^
|
576
|
+
|
577
|
+
initialize.c:89:29: warning: implicit declaration of function 'phi' is invalid in C99 [-Wimplicit-function-declaration]
|
578
|
+
|
579
|
+
printf("Φ(N)=%d, f=%d\n",phi(N),f);
|
580
|
+
|
581
|
+
^
|
582
|
+
|
583
|
+
initialize.c:91:10: warning: implicit declaration of function 'pow1' is invalid in C99 [-Wimplicit-function-declaration]
|
584
|
+
|
585
|
+
int R0=pow1(g,s0,N);
|
586
|
+
|
587
|
+
^
|
588
|
+
|
589
|
+
initialize.c:112:10: warning: implicit declaration of function 'jacobi' is invalid in C99 [-Wimplicit-function-declaration]
|
590
|
+
|
591
|
+
if(jacobi(K[i],P)==1){
|
592
|
+
|
593
|
+
^
|
594
|
+
|
595
|
+
initialize.c:130:24: warning: implicit declaration of function 'h' is invalid in C99 [-Wimplicit-function-declaration]
|
596
|
+
|
597
|
+
r[i][j]=fmod(h(I[i][j],R1[i],t[i],P),P);
|
598
|
+
|
599
|
+
^
|
600
|
+
|
601
|
+
initialize.c:142:20: warning: implicit declaration of function 'h' is invalid in C99 [-Wimplicit-function-declaration]
|
602
|
+
|
603
|
+
y[i][j]=fmod(h(I[i][j],S[i],t[i],P),P);
|
604
|
+
|
605
|
+
^
|
606
|
+
|
607
|
+
initialize.c:161:45: warning: more '%' conversions than data arguments [-Wformat]
|
608
|
+
|
609
|
+
printf("R0=%d, s[%d][%d]=%d, N=%d, p=%d, q=%d\n",R0,s1[i][j],N,p,q);
|
610
|
+
|
611
|
+
~^
|
612
|
+
|
613
|
+
initialize.c:163:46: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]
|
614
|
+
|
615
|
+
printf("I'[%d][%d]=%d,f=%d,N=%d\n",i,j,I1[i][j],f,N);
|
616
|
+
|
617
|
+
~~ ^~~~~~~~
|
618
|
+
|
619
|
+
%f
|
620
|
+
|
621
|
+
8 warnings generated.
|
622
|
+
|
571
623
|
m=3
|
572
624
|
|
573
625
|
t[0]=2, n[0]=2
|
1
どこで宣言して,どこがおかしくなったのか具体的な行数を追加し,出力結果を載せました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
なお,以前同じ内容で質問してベストアンサーを決めて解決済みになってしまったため,もう一度質問し直しました.また,以前ご指摘のあった,領域の問題は解決したと思います.
|
4
4
|
|
5
|
+
40,41行目でp,q,Nを宣言して,151行目以降の検証フェーズにて,値がおかしくなっています.
|
6
|
+
|
7
|
+
コードの下に実行結果を載せました.
|
8
|
+
|
9
|
+
|
10
|
+
|
5
11
|
```C
|
6
12
|
|
7
13
|
//逐次秘密分散法の実装
|
@@ -318,7 +324,13 @@
|
|
318
324
|
|
319
325
|
//I'ijを計算する
|
320
326
|
|
327
|
+
|
328
|
+
|
329
|
+
//N,p,qの値がおかしい
|
330
|
+
|
331
|
+
|
332
|
+
|
321
|
-
printf("R0=%d, s[%d][%d]=%d, N=%d\n",R0,s1[i][j],N);
|
333
|
+
printf("R0=%d, s[%d][%d]=%d, N=%d, p=%d, q=%d\n",R0,s1[i][j],N,p,q);
|
322
334
|
|
323
335
|
I1[i][j]=pow1(R0,s1[i][j],N);
|
324
336
|
|
@@ -326,12 +338,6 @@
|
|
326
338
|
|
327
339
|
//Rij==I'ij^f mod Nを検証する
|
328
340
|
|
329
|
-
|
330
|
-
|
331
|
-
ここでN,p,qの値がおかしくなっている.
|
332
|
-
|
333
|
-
|
334
|
-
|
335
341
|
int h=pow1(I1[i][j],f,N);
|
336
342
|
|
337
343
|
printf("I'[%d][%d]^f mod N=%d\n",i,j,h);
|
@@ -352,9 +358,63 @@
|
|
352
358
|
|
353
359
|
if(countv==0)printf("全て正しいシェアでした\n");
|
354
360
|
|
355
|
-
|
361
|
+
/*
|
362
|
+
|
356
|
-
|
363
|
+
//復元フェーズ
|
364
|
+
|
357
|
-
|
365
|
+
//プレイヤー
|
366
|
+
|
367
|
+
double S1[m],r[m]; //求めるSi
|
368
|
+
|
369
|
+
double y1[m][P];
|
370
|
+
|
371
|
+
for(i=1;i<=m;i++){
|
372
|
+
|
373
|
+
S1[i]=0;
|
374
|
+
|
375
|
+
for(j=1;j<=t[i];j++){
|
376
|
+
|
377
|
+
//ラグランジュ補間を使用して,Siを求める
|
378
|
+
|
379
|
+
y1[i][j]=fmod(h(I[i][j],S[i],t[i],P),P);
|
380
|
+
|
381
|
+
printf("y[%d][%d]=%lf, ",i,j,y1[i][j]);
|
382
|
+
|
383
|
+
r[i]=y1[i][j];
|
384
|
+
|
385
|
+
for(k=1;k<=t[i];k++){
|
386
|
+
|
387
|
+
if(j!=k){
|
388
|
+
|
389
|
+
r[i]*=(0-I1[i][k])/(I1[i][j]-I1[i][k]);
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
}
|
394
|
+
|
395
|
+
}
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
S1[i]+=r[i];
|
400
|
+
|
401
|
+
printf("S[%d]=%lf ",i,S1[i]);
|
402
|
+
|
403
|
+
S1[i]=fmod(S1[i],P);
|
404
|
+
|
405
|
+
|
406
|
+
|
407
|
+
}
|
408
|
+
|
409
|
+
S1[i]=round(S1[i]);
|
410
|
+
|
411
|
+
printf("S[%d]=%lf\n",i,S1[i]);
|
412
|
+
|
413
|
+
}
|
414
|
+
|
415
|
+
|
416
|
+
|
417
|
+
*/
|
358
418
|
|
359
419
|
return 0;
|
360
420
|
|
@@ -502,8 +562,168 @@
|
|
502
562
|
|
503
563
|
}
|
504
564
|
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
565
|
```
|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
```出力結果
|
570
|
+
|
571
|
+
m=3
|
572
|
+
|
573
|
+
t[0]=2, n[0]=2
|
574
|
+
|
575
|
+
t[1]=2, n[1]=3
|
576
|
+
|
577
|
+
t[2]=3, n[2]=4
|
578
|
+
|
579
|
+
P=23
|
580
|
+
|
581
|
+
s[0]=3, s[1]=5, s[2]=5,
|
582
|
+
|
583
|
+
p=7, q=3, N=21
|
584
|
+
|
585
|
+
g=5
|
586
|
+
|
587
|
+
s[0][0]=1, s[0][1]=2,
|
588
|
+
|
589
|
+
s[1][0]=1, s[1][1]=2, s[1][2]=3,
|
590
|
+
|
591
|
+
s[2][0]=1, s[2][1]=2, s[2][2]=3, s[2][3]=4,
|
592
|
+
|
593
|
+
R[0][0]=5, R[0][1]=4,
|
594
|
+
|
595
|
+
R[1][0]=5, R[1][1]=4, R[1][2]=20,
|
596
|
+
|
597
|
+
R[2][0]=5, R[2][1]=4, R[2][2]=20, R[2][3]=16,
|
598
|
+
|
599
|
+
レベル1,2,3,で一意である.
|
600
|
+
|
601
|
+
s0=5
|
602
|
+
|
603
|
+
Φ(N)=12, f=17
|
604
|
+
|
605
|
+
R0=17
|
606
|
+
|
607
|
+
I[0][0]=17, I[0][1]=16,
|
608
|
+
|
609
|
+
y[0][0]=20, y[0][1]=19,
|
610
|
+
|
611
|
+
S[0]=3, s'[0]=10
|
612
|
+
|
613
|
+
I[1][0]=17, I[1][1]=16, I[1][2]=20,
|
614
|
+
|
615
|
+
K[1]=4
|
616
|
+
|
617
|
+
K[1]は平方剰余である
|
618
|
+
|
619
|
+
S[1]=2
|
620
|
+
|
621
|
+
y[1][0]=19, y[1][1]=18, y[1][2]=22,
|
622
|
+
|
623
|
+
S[1]=2, s'[1]=2
|
624
|
+
|
625
|
+
I[2][0]=17, I[2][1]=16, I[2][2]=20, I[2][3]=4,
|
626
|
+
|
627
|
+
K[2]=10
|
628
|
+
|
629
|
+
K[2]は平方剰余でない
|
630
|
+
|
631
|
+
R[2]=5
|
632
|
+
|
633
|
+
r[2][0]=2, r[2][1]=4, r[2][2]=20, r[2][3]=18,
|
634
|
+
|
635
|
+
y[2][0]=22, y[2][1]=1, y[2][2]=17, y[2][3]=15,
|
636
|
+
|
637
|
+
S[2]=2
|
638
|
+
|
639
|
+
R0=17, s[1][21]=7, N=3, p=23, q=0
|
640
|
+
|
641
|
+
I'[0][0]=17,f=21,N=0
|
642
|
+
|
643
|
+
I'[0][0]^f mod N=-2147483648
|
644
|
+
|
645
|
+
R[0][0]=5
|
646
|
+
|
647
|
+
レベル0の0番目のプレイヤーは,誤ったシェアを提出しました
|
648
|
+
|
649
|
+
R0=17, s[2][21]=7, N=3, p=0, q=0
|
650
|
+
|
651
|
+
I'[0][1]=17,f=21,N=0
|
652
|
+
|
653
|
+
I'[0][1]^f mod N=-2147483648
|
654
|
+
|
655
|
+
R[0][1]=4
|
656
|
+
|
657
|
+
レベル0の1番目のプレイヤーは,誤ったシェアを提出しました
|
658
|
+
|
659
|
+
R0=17, s[1][21]=7, N=3, p=0, q=0
|
660
|
+
|
661
|
+
I'[1][0]=17,f=21,N=0
|
662
|
+
|
663
|
+
I'[1][0]^f mod N=-2147483648
|
664
|
+
|
665
|
+
R[1][0]=5
|
666
|
+
|
667
|
+
レベル1の0番目のプレイヤーは,誤ったシェアを提出しました
|
668
|
+
|
669
|
+
R0=17, s[2][21]=7, N=3, p=0, q=0
|
670
|
+
|
671
|
+
I'[1][1]=17,f=21,N=0
|
672
|
+
|
673
|
+
I'[1][1]^f mod N=-2147483648
|
674
|
+
|
675
|
+
R[1][1]=4
|
676
|
+
|
677
|
+
レベル1の1番目のプレイヤーは,誤ったシェアを提出しました
|
678
|
+
|
679
|
+
R0=17, s[3][21]=7, N=3, p=0, q=0
|
680
|
+
|
681
|
+
I'[1][2]=17,f=21,N=0
|
682
|
+
|
683
|
+
I'[1][2]^f mod N=-2147483648
|
684
|
+
|
685
|
+
R[1][2]=20
|
686
|
+
|
687
|
+
レベル1の2番目のプレイヤーは,誤ったシェアを提出しました
|
688
|
+
|
689
|
+
R0=17, s[1][21]=7, N=3, p=0, q=0
|
690
|
+
|
691
|
+
I'[2][0]=17,f=21,N=0
|
692
|
+
|
693
|
+
I'[2][0]^f mod N=-2147483648
|
694
|
+
|
695
|
+
R[2][0]=5
|
696
|
+
|
697
|
+
レベル2の0番目のプレイヤーは,誤ったシェアを提出しました
|
698
|
+
|
699
|
+
R0=17, s[2][21]=7, N=3, p=0, q=0
|
700
|
+
|
701
|
+
I'[2][1]=17,f=21,N=0
|
702
|
+
|
703
|
+
I'[2][1]^f mod N=-2147483648
|
704
|
+
|
705
|
+
R[2][1]=4
|
706
|
+
|
707
|
+
レベル2の1番目のプレイヤーは,誤ったシェアを提出しました
|
708
|
+
|
709
|
+
R0=17, s[3][21]=7, N=3, p=0, q=0
|
710
|
+
|
711
|
+
I'[2][2]=17,f=21,N=0
|
712
|
+
|
713
|
+
I'[2][2]^f mod N=-2147483648
|
714
|
+
|
715
|
+
R[2][2]=20
|
716
|
+
|
717
|
+
レベル2の2番目のプレイヤーは,誤ったシェアを提出しました
|
718
|
+
|
719
|
+
R0=17, s[4][21]=7, N=3, p=0, q=0
|
720
|
+
|
721
|
+
I'[2][3]=17,f=21,N=0
|
722
|
+
|
723
|
+
I'[2][3]^f mod N=-2147483648
|
724
|
+
|
725
|
+
R[2][3]=16
|
726
|
+
|
727
|
+
レベル2の3番目のプレイヤーは,誤ったシェアを提出しました
|
728
|
+
|
729
|
+
```
|