The Net Wizard HauptseiteISP SetupNetzwerkeVelotourenSoftwareKryptografieVariaPhysik

Quantenkryptografie

  1. Hier gehts zum Vortrag über Quantenkryprografie.
  2. Hier findet man die Folien dazu.
  3. Zudem habe ich ein kleines Programm geschrieben, dass einen Schlüsselaustausch nach dem Ekert-Verfahren simuliert
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
#!/usr/bin/perl 

use strict;
use warnings;

my $i;
my $pi = 3.1415926;

my @a = ((0*2*$pi)/360, (22.5*2*$pi)/360, (45*2*$pi)/360);
my @a_deg = (0, 22.5, 45);

my @b = ((0*2*$pi)/360, (22.5*2*$pi)/360, (45*2*$pi)/360);
my @b_deg = (0, 22.5, 45);

my @orientation_a;
my @orientation_deg_a;
my @orientation_b;
my @orientation_deg_b;
my @measurement_a;
my @measurement_b;
my @class;
my @Bell;
my $n_ap_bp = 0;
my $n_ap_cp = 0;
my $n_cp_bp = 0;

srand();
for ($i=0; $i<10000; $i++) {
    # Randomly chose the orientation of the filters
    # for measuring
    my $r1 = int(rand(3.0));
    my $r2 = int(rand(3.0));   
    $orientation_a[$i] = $a[$r1];
    $orientation_deg_a[$i] = $a_deg[$r1];
    $orientation_b[$i] = $b[$r2];
    $orientation_deg_b[$i] = $b_deg[$r2];

    # Result of the measurement for a (always 50%
    $measurement_a[$i] = int(rand(2.0));
    # Probability for the same measurement at a and b
    my $p_ab = sin($orientation_a[$i] - $orientation_b[$i])
             * sin($orientation_a[$i] - $orientation_b[$i]);
    my $tmp = rand(1.0);
    if ($tmp > $p_ab) {
        # Different results at the two measurements
        if ($measurement_a[$i] == 0) {
            $measurement_b[$i] = 1;
        } else {
            $measurement_b[$i] = 0;
        }
    } else {
       # Same results
       $measurement_b[$i] = $measurement_a[$i];
    }
    if ( $orientation_deg_a[$i] == $orientation_deg_b[$i] ) {
        $class[$i] = "Key";
    } else {
        $class[$i] = "Bell";
        # Compute Bell's inequality with a=0, b=45, c=22.5
        if ( ($orientation_deg_a[$i]==0)
              && ($measurement_a[$i]==1) ) {
            if ( ($orientation_deg_b[$i]==45)
                  && ($measurement_b[$i]==1) ){
                # Number of a+,b+
                $n_ap_bp++;
            } elsif ( ($orientation_deg_b[$i]==22.5)
                       && ($measurement_b[$i]==1) ) {
                # Number of a+,c+
                $n_ap_cp++;
            }
        }
        if ( ($orientation_deg_a[$i]==45)
              && ($measurement_a[$i]==1) ) {
            if ( ($orientation_deg_b[$i]==22.5)
                  && ($measurement_b[$i]==1) ){
                # Number of c+,b+
                $n_cp_bp++;
            }
        }
    }
    print "$orientation_deg_a[$i]\t $orientation_deg_b[$i]\t";
    print "$measurement_a[$i]\t $measurement_b[$i]\t";
    print "$n_ap_bp\t $n_ap_cp\t $n_cp_bp\t $class[$i]\n";
}

# vim: set tabstop=4 expandtab:

Powered by w3.css