The Net Wizard HauptseiteISP SetupNetzwerkeVelotourenSoftwareKryptografieVaria

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