21 B92 B92 Quantum cryptography simulator 1100348 2010 3 1
B92 BB84 BB84 E91 B92 2 3 B92 4 3 5 B92, i
Abstract B92 Quantum cryptography simulator Soichiro MATSUMOTO English Nowadays, the public key cryptosystem is widely used to provide security for internet shoppings and bankings. The public key cryptosystem is known to be efficiently deciphered by the Shor s quantum algorithm. A new cryptography has emerged in the shape of the quantum cryptography. In this article, we examine B92 protocol which is one of the quntum cryptography. In chapter 2, we explain the uncertainty principle and superposition principle. In chapter 3, we explain the B92 Quantum cryptography. In chapter 4, we explain the operation of the B92 quantum cryptography simulator. In chapter 5, we examin the statistical properties of B92 protocols. key words Quantum cryptography, Electron, Secret key, Uncertainty principle, Superposition principle, Wiretapping, Observation, Inner product, Noise ii
1 1 1.1................................. 1 1.2....................... 1 2 3 2.1................................. 3.......................... 3 2.2................................ 4 3 B92 5 3.1 B92.................... 5 3.2.............................. 6 3.2.1................................. 6 3.2.2................................. 6............................. 7 3.3.............................. 8 3.3.1................................. 8 3.3.2................................. 8 3.3.3................................. 9............................. 10 4 12 4.1 - -.............................. 13 4.2 - -.............................. 13 4.2.1............................... 14 iii
4.2.2 BB84............................ 15 4.2.3 B92...................... 15 4.2.4 B92...................... 15 4.2.5.......................... 16 4.3 ( ).................................. 16 4.4 - -............................ 17 5 20 5.1........................ 20 5.2............................ 21............................. 22 5.2.1.......................... 22............................... 23............................... 23................................. 23 5.2.2.......................... 24............................... 24............................... 25................................. 25 6 26 6.1................................... 26 6.2...................................... 26 6.2.1................. 26 6.2.2............... 26 6.2.3............. 27 6.3...................................... 27 iv
28 29 A B92 30 B 45 C 49 v
4.1 B92................................... 12 4.2............................. 13 4.3............................ 14 4.4............................. 18 5.1 - -........................... 20 5.2 - (B92Alice)-.................... 21 5.3 - (B92Bob)-..................... 21 5.4 - (BB84)-...................... 22 5.5 - (Key,Mode )-................. 22 C.1 - -......................... 49 C.2 - -......................... 49 C.3 - -......................... 50 C.4 - -......................... 50 C.5 - -.................... 50 C.6 - -.................... 50 vi
3.1 B92............................. 5 3.2................................. 6 3.3................................. 7 3.4................................... 7 3.5................................. 8 3.6 B92 ( )............. 9 3.7 B92 ( ).................... 10 3.8 B92 ( )............. 10 3.9................................. 10 3.10................................... 11 4.1 B92............................. 12 5.1 (1) - -............. 23 5.2 (2) - -............. 24 5.3 (3) - -............. 24 5.4 (4) - -............. 25 vii
1 1.1 NP NP 2 1.2 3 1
1.2 2
2 2.1 2 2 [2.1.0.1] 3
2.2 x p h (2.1.0.1) x p x p h x p p x h 2.2 2 2 Ψ Ψ = α ψ a + β ψ b (2.2.0.2) α 2 + β 2 = 1 (2.2.0.3) ψ a ψ b Ψ 4
3 B92 3.1 B92 2 1 BB84 B92 (A;ice), (Eve), (Bob) 0, 1 (0), (1) 3.1 B92 5
3.2 3.2 3.2.1 0 1 ( 2 ) 0 0 1 1 1 0 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 0 0 0 3.2 3.2.2 1. 2. (1(0),0(1) ) 3. 6
3.2 1 1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 3.3 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 0 3.4 7
3.3 3.3 3.3.1 0 1 ( 2 ) 0 0 1 1 1 0 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 0 0 0 3.5 3.3.2 ( ) 8
3.3 ( ) BB84 B92 B92 2 B92 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 1 1 0 3.6 B92 ( ) 3.3.3 9
3.3 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 0 3.7 B92 ( ) 1 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 1 1 1 0 3.8 B92 ( ) 1. 2. (1(0),0(1) ) 3. 1 1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 3.9 10
3.3 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 1 3.10 11
4 B92 key mode key(mode),, 0, 1 (0), (1) 4.1 B92 4.1 B92 12
4.1 - - 4.1 - - 0 0.999999 0.5 (X 0.5 0.5 X) 0.5 0 1 ( 4.2) 2 ( 4.3) ( 2 ) 4.2 4.2 - - 13
4.2 - - 4.3 BB84 B92 B92 4.2.1 14
4.2 - - 4.2.2 BB84 0 0.999999 0.5 (X 0.5 0.5 X) 0.5 0 1 2 4.2.3 B92 0 0.999999 0.5 (X 0.5 0.5 X) 0.5 0 1 1 4.2.4 B92 0 0.999999 0.5 (X 0.5 0.5 X) 0.5 0 1 1 15
4.3 ( ) 4.2.5 1 4.3 ( ) x = (Aj[0] Ej[0]) + (Aj[1] Ej[1]) 2 (4.3.0.1) 4.3 3 x = 0 0 x = 1 1 x=0.5 0.5 (0 1 1 0 ) x = 0 100 x = 1 16
4.4 - - x=0.5 50 4.3 4.4 - - 0 0.999999 0.5 (X 0.5 0.5 X) 0.5 0 1 1 ( 4.4) x = (Aj[0] Bj[0]) + (Aj[1] Bj[1]) 2 (4.4.0.2) 17
4.4 - - 4.4 x = (Ej[0] Bj[0]) + (Ej[1] Bj[1]) 2 (4.4.0.3) 3 x = 0 0 x = 1 1 x=0.5 0.5 x = 0 100 x = 1 x=0.5 50 18
4.4 - - 19
5 5.1 *** *** No,1:B92- No,2:B92- (B92Alice ) 0(0),1(1) No,3:B92- (B92Bob ) 0(1),1(0) No,4:B92- (BB84) Key(Mode) No,5:B92- (Key,Mode ) Please enter number:no,1 ****************** No,1 ******************** 5000000 key mode (1250150/5000000)25.003000 key (1250150/5000000)25.003000 100 (1250150/1250150)5000000 100.000000 No,1 end:1 retry:0 5.1 - - B92 0 0.5 1 50 25 100 [ 5.1] 12.5 12.5 37.5 37.5 25 20
5.2 *** *** No,1:B92- No,2:B92- (B92Alice ) 0(0),1(1) No,3:B92- (B92Bob ) 0(1),1(0) No,4:B92- (BB84) Key(Mode) No,5:B92- (Key,Mode ) Please enter number:no,2 ****************** No,2 ******************** :5000000 key mode (1874907/5000000)37.498138 key (1250178/5000000)25.003559 100 (1250178/1874907)5000000 66.679466 No,2 end:1 retry:0 5.2 - (B92Alice)- *** *** No,1:B92- No,2:B92- (B92Alice ) 0(0),1(1) No,3:B92- (B92Bob ) 0(1),1(0) No,4:B92- (BB84) Key(Mode) No,5:B92- (Key,Mode ) Please enter number:no,3 ****************** No,3 ******************** :5000000 key mode (1876738/5000000)37.534760 key (1252139/5000000)25.042780 100 (1252139/1876738)5000000 66.718903 No,3 end:1 retry:0 5.3 - (B92Bob)- 3 B92 5.2 B92 0 100 21
5.2 *** *** No,1:B92- No,2:B92- (B92Alice ) 0(0),1(1) No,3:B92- (B92Bob ) 0(1),1(0) No,4:B92- (BB84) Key(Mode) No,5:B92- (Key,Mode ) Please enter number:no,4 ****************** No,4 ******************** :500000 key mode (187087/500000)37.417400 key (124795/500000)24.959000 100 (124795/187087)500000 66.704262 No,4 end:1 retry:0 5.4 - (BB84)- *** *** No,1:B92- No,2:B92- (B92Alice ) 0(0),1(1) No,3:B92- (B92Bob ) 0(1),1(0) No,4:B92- (BB84) Key(Mode) No,5:B92- (Key,Mode ) Please enter number:no,5 ****************** No,5 ******************** :5000000 Eve Key:1 Eve Mode:0 key mode (1874055/5000000)37.481098 key (1247612/5000000)24.952240 100 (1247612/1874055)5000000 66.572861 No,5 end:1 retry:0 5.5 - (Key,Mode )- 5.2.1 22
5.2 1 0.5 0.25 / 0 25 25 100 10 31 27.80 90 20 34.90 30.00 86 30 39.90 32 79 40 44.30 35.10 79 50 49.60 38 76 5.1 (1) - - 1 0.25 0.14 2:1 50 23
5.2 / 0 37.5 25 66.67 10 40.35 26.66 66.07 20 42.71 27.41 64.18 30 43.83 27.97 63.81 40 47.93 29.89 62.36 50 49.89 31.99 64.12 5.2 (2) - - 5.2.2 25 50 50 25 1 0.5 0.5 25 / 0 25 25 100 10 30 25 83.20 20 35.30 25 73.10 30 40.20 25 62.30 40 44.90 25 56.40 50 49.70 25 50.30 5.3 (3) - - 24
5.2 25 12.5 37.5 50 50 1 0.25 1 0.25 25 / 0 37.5 25 66.67 10 40.33 25.56 64.07 20 41.51 24.31 58.22 30 45.35 25.10 55.12 40 47.63 25 52.43 50 49.80 25 50.20 5.4 (4) - - 25 2.5 40 25
6 6.1 C B92 3 B92 6.2 6.2.1 7 6.2.2 4 BB84 B92 B92 12.5 7 26
6.3 6.2.3 25 2.5 40 B92 6.3 2:1 Weak measurement theory 27
28
[1] N.Davia Mermin, -Quantum Computer Sience An Introduction-,, 2009. [2], - -, BP, 2007. [3] D.Bouwmeester, A.Ekert, A.Zeilinger,,,,,,, 2007. [4],, pp.1-5 [5], Heisenberg s Quantum Mechanics (Japanese), http://www.kutl.kyushu-u.ac.jp/. 29
A B92 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int c11=0, c12=0, c21=0, c22=0, c31=0, haki1=0,haki2=0, f=0, ct=0; int yomikomike,yomikomime,kurikaesi=0; double t1,t2; int flip(float x, int y,float n){ int i, i2; int kakuritu; if(x == 0){ kakuritu = 1 - y; else if(x > 0.9){ kakuritu = y; else{ if(n<0.5){ kakuritu = y; else{ kakuritu = 1 - y; return kakuritu; int flip2(float x, int y,float n){ int i, i2; int kakuritu; if(x == 0){ kakuritu = 1 - y; else if(x > 0.9){ kakuritu = y; else{ if(n<0.5){ kakuritu = y; else{ kakuritu = 1-y; f=1; return kakuritu; int flip3(float x,int y,float n){ int kakuritu; float furippuritu = x; float randamusuu = n; if(randamusuu < furippuritu){ 30
y=1-y; printf("flip"); return y; void main(){ /*do{*/ int i, i2, z, zz,c=0,kaisu; float n; double sqrt(double x); /*int Max = 1000;*/ int k,m,j,rkb,mb,jb, rke, me, je, Hi, r, swich, rd,cf=0,exit=0; float cal1, cal2, cal3, cal4, modp, keyp, hyakup; static int flag = 0; static int flag2 = 0; /* */ int keya[10], keyb[10], keye[10], suisokukey[10]; int modea[10], modeb[10], modee[10]; float Aj[10][2], Bj[10][2], Ej[10][2], keisan[10]; float keisan2[10], kakuritu[10], kakuritu2[10]; int jyoutaia[10], jyoutaib[10], jyoutaie[10]; /* */ /* */ int keya2, keyb2, keye2, suisokukey2; int modea2, modeb2, modee2; float Aj2[2], Bj2[2], Ej2[2], keisan3, keisan4, kakuritu3, kakuritu4; int jyoutaia2, jyoutaib2, jyoutaie2; /* */ /* */ float rf; /* */ clock t s,e; printf("copyright (C) 2010 Soichiro.M All Rights Reserved."); printf("*** ***\nno,1:b92- \nno,2:b92- (B92Alice ) 0(0),1(1)\nNo,3:B92- (B92Bob ) 0(1),1(0)\nNo,4:B92- (BB84) Key(Mode) \nno,5:b92- (Key,Mode )\nplease enter number:no,"); scanf(" d",&swich); switch (swich) { case 1: do{ printf("****************** No,1 ********************\n"); printf(" "); scanf(" d",&kaisu); s = clock(); do{ if (flag == 0) { srand((unsigned)time(null)); flag = 1; for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keya2 = modea2 = 0; else if(n >= 0.5){ 31
keya2 = modea2 = 1; k = keya2; m = modea2; j=k*10+m; if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keyb2 = 0; modeb2 = 1; else if(n >= 0.5){ keyb2 = 1; modeb2 =0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); Bj2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Bj2[0])+(Aj2[1]*Bj2[1]); kakuritu3 = keisan3 * keisan3; if(kakuritu3>0.9){ c12=c12+1; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip2(kakuritu3,keyb2,n); 32
keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; c=c+1; while(c<kaisu); cal1 = c; cal2 = c21; cal3 = c22; modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; e = clock(); printf("key mode (%d/%d)%f \nkey (%d/%d)%f \n100 (%d/%d)%d %f \n",c21,c,modp, c22, c, keyp, c22, c21, c, hyakup); printf("%.2f \n",(double)(e-s)/clocks PER SEC); printf("no,1 end:1 retry:0"); scanf(" d",&z); c21=c22=c=0; haki1=haki2=0; printf("\n"); f=0; while(z == 0); break; case 2: do{ printf("****************** No,2 ********************\n"); printf(" :"); scanf(" d",&kaisu); do{ if (flag == 0) { srand((unsigned)time(null)); flag = 1; for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keya2 = modea2 = 0; else if(n >= 0.5){ keya2 = modea2 = 1; for(i=0;i<10;i++){ k = keya2; m = modea2; j=k*10+m; jyoutaia2 = j; 33
j = jyoutaia2; if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keye2 = 0; modee2 = 0; else if(n >= 0.5){ keye2 = 1; modee2 = 1; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Ej2[0])+(Aj2[1]*Ej2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keye2,n); keye2=zz; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; 34
Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keyb2 = 0; modeb2 = 1; else if(n >= 0.5){ keyb2 = 1; modeb2 = 0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb=0; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); Bj2[1] = -1/sqrt(2); keisan3 = (Ej2[0]*Bj2[0])+(Ej2[1]*Bj2[1]); kakuritu4 = keisan3*keisan3; /*printf(" %d:[%f] %f\n",i+1,keisan2[i],kakuritu2[i]);*/ for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keyb2,n); keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; 35
c=c+1; while(c<kaisu); cal1 = c; cal2 = c21; cal3 = c22; modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; printf("key mode (%d/ d)%f \nkey (%d/%d)%f \n100 (%d/%d)%d %f \n",c21,c,modp, c22, c, keyp, c22, c21, c, hyakup); printf("no,2 end:1 retry:0"); scanf("%d",&z); c21=c22=c=0; haki1=haki2=0; printf("\n"); f=0; while(z == 0); break; case 3: do{ printf("****************** No,3 ********************\n"); printf(" :"); scanf("%d",&kaisu); do{ if (flag == 0) { srand((unsigned)time(null)); flag = 1; for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; /*printf("making random number[%d]: %f \n", i2, n);*/ if(n < 0.5){ keya2 = modea2 = 0; else if(n >= 0.5){ keya2 = modea2 = 1; for(i=0;i<10;i++){ k = keya2; m = modea2; j=k*10+m; jyoutaia2 = j; j = jyoutaia2; if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; 36
Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keye2 = 0; modee2 = 1; else if(n >= 0.5){ keye2 = 1; modee2 = 0; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Ej2[0])+(Aj2[1]*Ej2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keye2,n); keye2=zz; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); 37
Ej2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keyb2 = 0; modeb2 = 1; else if(n >= 0.5){ keyb2 = 1; modeb2 = 0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb=0; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); Bj2[1] = -1/sqrt(2); keisan3 = (Ej2[0]*Bj2[0])+(Ej2[1]*Bj2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keyb2,n); keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; c=c+1; while(c<kaisu); cal1 = c; cal2 = c21; cal3 = c22; modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; 38
printf("key mode (%d/%d)%f \nkey (%d/%d)%f \n100 (%d/%d)%d %f \n",c21,c,modp, c22, c, keyp, c22, c21, c, hyakup); printf("no,3 end:1 retry:0"); scanf("%d",&z); c21=c22=c=0; haki1=haki2=0; printf("\n"); f=0; while(z == 0); break; case 4: do{ printf("****************** No,4 ********************\n"); printf(" :"); scanf("%d",&kaisu); do{ if (flag == 0) { srand((unsigned)time(null)); flag = 1; for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keya2 = modea2 = 0; else if(n >= 0.5){ keya2 = modea2 = 1; for(i=0;i<10;i++){ k = keya2; m = modea2; j=k*10+m; jyoutaia2 = j; j = jyoutaia2; if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keye2 = 0; else if(n >= 0.5){ keye2 = 1; 39
for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ modee2 = 0; else if(n >= 0.5){ modee2 = 1; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Ej2[0])+(Aj2[1]*Ej2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keye2,n); keye2=zz; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ 40
keyb2 = 0; modeb2 = 1; else if(n >= 0.5){ keyb2 = 1; modeb2 = 0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb=0; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); Bj2[1] = -1/sqrt(2); keisan3 = (Ej2[0]*Bj2[0])+(Ej2[1]*Bj2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keyb2,n); keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; c=c+1; while(c<kaisu); cal1 = c; cal2 = c21; cal3 = c22; modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; printf("key mode (%d/%d)%f \nkey (%d/%d)%f \n100 (%d/%d)%d %f \n",c21,c,modp, c22, c, keyp, c22, c21, c, hyakup); printf("no,4 end:1 retry:0"); scanf("%d",&z); c21=c22=c=0; 41
haki1=haki2=0; printf("\n"); f=0; while(z == 0); break; case 5: do{ printf("****************** No,5 ********************\n"); printf(" :"); scanf("%d",&kaisu); printf("eve Key:"); scanf("%d",&yomikomike); printf("eve Mode:"); scanf("%d",&yomikomime); do{ keye2=yomikomike; modee2=yomikomime; if (flag == 0) { srand((unsigned)time(null)); flag = 1; for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keya2 = modea2 = 0; else if(n >= 0.5){ keya2 = modea2 = 1; for(i=0;i<10;i++){ k = keya2; m = modea2; j=k*10+m; jyoutaia2 = j; j = jyoutaia2; if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ 42
Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Ej2[0])+(Aj2[1]*Ej2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keye2,n); keye2=zz; rke = keye2; me = modee2; je=rke*10+me; jyoutaie2 = je; je = jyoutaie2; if(je==0){ Ej2[0] = 1; Ej2[1] = 0; else if(je==1){ Ej2[0] = 1/sqrt(2); Ej2[1] = 1/sqrt(2); else if(je==10){ Ej2[0] = 0; Ej2[1] = 1; else{ Ej2[0] = 1/sqrt(2); Ej2[1] = -1/sqrt(2); for(i2=0;i2<5;i2++){ n = (float)rand() / 32768.0; if(n < 0.5){ keyb2 = 0; modeb2 = 1; else if(n >= 0.5){ keyb2 = 1; modeb2 = 0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb=0; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; 43
else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); Bj2[1] = -1/sqrt(2); keisan3 = (Ej2[0]*Bj2[0])+(Ej2[1]*Bj2[1]); kakuritu4 = keisan3*keisan3; for(i2=0;i2<10;i2++){ n = (float)rand() / 32768.0; zz = flip(kakuritu4,keyb2,n); keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; c=c+1; while(c<kaisu); cal1 = c; cal2 = c21; cal3 = c22; modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; printf("key mode (%d/%d)%f \nkey (%d/%d)%f \n100 (%d/%d)%d %f \n",c21,c,modp, c22, c, keyp, c22, c21, c, hyakup); printf("no,5 end:1 retry:0"); scanf("%d",&z); c21=c22=c=0; haki1=haki2=0; printf("\n"); f=0; while(z == 0); break; /*exit=0; printf("exit OK? y1 n0:"); scanf("%d",&exit); break; while(exit == 0);*/ 44
B #include stdio.h #include stdlib.h #include math.h #include time.h int c11=0, c12=0, c21=0, c22=0, c31=0, haki1=0,haki2=0, f=0, ct=0; int yomikomike,yomikomime,kurikaesi=0; int flip(float x, int y,float n){ int i, i2; int kakuritu; if(x == 0){ kakuritu = 1 - y; else if(x 0.9){ kakuritu = y; else{ if(n 0.5){ kakuritu = y; else{ kakuritu = 1 - y; return kakuritu; int flip2(float x, int y,float n){ int i, i2; int kakuritu; if(x == 0) kakuritu = 1 - y; else if(x 0.9){ kakuritu = y; else{ if(n 0.5){ kakuritu = y; else{ kakuritu = 1-y; f=1; return kakuritu; 45
int flip3(float x,int y,float n){ if(n x){ y=1-y; /*printf( flip );*/ return y; void main(){ /*do{*/ int i, i2, z, zz,c=0,kaisu,basyo; float n; double sqrt(double x); /*int Max = 1000;*/ int k,m,j,rkb,mb,jb, rke, me, je, Hi, r, swich, rd,cf=0,exit=0; float cal1, cal2, cal3, cal4, modp, keyp, hyakup; static int flag = 0; static int flag2 = 0; int keya[10], keyb[10], keye[10], suisokukey[10]; int modea[10], modeb[10], modee[10]; float Aj[10][2], Bj[10][2], Ej[10][2], keisan[10], keisan2[10], kakuritu[10], kakuritu2[10]; int jyoutaia[10], jyoutaib[10], jyoutaie[10]; int keya2, keyb2, keye2, suisokukey2; int modea2, modeb2, modee2; float Aj2[2], Bj2[2], Ej2[2], keisan3, keisan4, kakuritu3, kakuritu4; int jyoutaia2, jyoutaib2, jyoutaie2; float rf; printf( Copyright (C) 2010 Soichiro.M All Rights Reserved. ); do{ printf( ***** - - ***** ); printf( ( 0, 1, 2) ); scanf( %d,&basyo); printf( ); scanf( %d,&kaisu); printf( ); scanf( %f,&rf); do{ if (flag == 0){ srand((unsigned)time(null)); flag = 1; /*n2 = (float)rand() / 32768.0;*/ for(i2=0;i2 5;i2++){ n = (float)rand() / 32768.0; /*printf( Making random number[%d]: %f Yn, i2, n);*/ if(n 0.5){ keya2 = modea2 = 0; else if(n = 0.5){ keya2 = modea2 = 1; 46
if(basyo == 1) /*printf( %f,n); printf( %d,zz);*/ zz=flip3(rf, keya2, n); /*printf( %dyn,zz);*/ keya2=zz; k = keya2; m = modea2; j=k*10+m; /*jyoutaia = j;*/ if(j==0){ Aj2[0] = 1; Aj2[1] = 0; else if(j==1){ Aj2[0] = 1/sqrt(2); Aj2[1] = 1/sqrt(2); else if(j==10){ Aj2[0] = 0; Aj2[1] = 1; else{ Aj2[0] = 1/sqrt(2); Aj2[1] = -1/sqrt(2); for(i2=0;i2 5;i2++){ n = (float)rand() / 32768.0; if(n 0.5){ keyb2 = 0; modeb2 = 1; else if(n = 0.5){ keyb2 = 1; modeb2 =0; rkb = keyb2; mb = modeb2; jb=rkb*10+mb; jyoutaib2 = jb; jb = jyoutaib2; if(jb==0){ Bj2[0] = 1; Bj2[1] = 0; else if(jb==1){ Bj2[0] = 1/sqrt(2); Bj2[1] = 1/sqrt(2); else if(jb==10){ Bj2[0] = 0; Bj2[1] = 1; else{ Bj2[0] = 1/sqrt(2); 47
Bj2[1] = -1/sqrt(2); keisan3 = (Aj2[0]*Bj2[0])+(Aj2[1]*Bj2[1]); kakuritu3 = keisan3 * keisan3; if(kakuritu3 0.9){ c12=c12+1; for(i2=0;i2 10;i2++){ n = (float)rand() / 32768.0; zz = flip2(kakuritu3,keyb2,n); keyb2=zz; for(i2=0;i2 5;i2++){ n = (float)rand() / 32768.0; if(basyo == 2){ zz=flip3(rf, keyb2, n); keyb2=zz; if(modeb2!= keyb2){ c21++; if(modeb2!= keyb2 && keya2 == keyb2){ c22++; if(f==1)cf++; c=c+1; while(c kaisu); /*cal1 = c; cal2 = c21; cal3 = c22;*/ modp = ((float)c21/(float)c)*100; keyp = ((float)c22/(float)c)*100; /*hyakup = ((float)c22/(float)c21)*100;*/ if(modp!=0){ hyakup = ((float)c22/(float)c21)*100; else{ hyakup =0; printf( key mode (%d/%d)%f Ynkey (%d/%d)%f Yn100 (%d/%d)%d %f Yn,c21,c,modP, c22, c, keyp, c22, c21, c, hyakup); printf( No,6 end:1 retry:0 ); scanf( %d,&z); c21=c22=c=0; haki1=haki2=0; printf( Yn ); f=0; while(z == 0); 48
C C.1 C.2 - - - - 49
C.3 C.4 - - - - C.5 - - C.6 - - 50