Lev
3 years ago
7 changed files with 451 additions and 24 deletions
@ -0,0 +1,13 @@
|
||||
# Квантовая криптография - менторский проект |
||||
|
||||
|
||||
## Симулятор |
||||
|
||||
Симулятор лежит в папке `model`. Его главные элементы: |
||||
|
||||
- Абстрактный класс `Channel` ([тут](model/channel.py)). В нем описаны методы, которые должны быть у канала. |
||||
Теоретически можно написать реализацию даже для реального оборудования, но тут есть только `ChannelSym` - симуляция канала. |
||||
|
||||
- Класс `Alice` ([тут](model/alice.py)). Объекты этого класса используют канал (то есть объект любого класса, реализующего абстрактные методы из `Channel`) и реализуют протокол генерации ключа BB84 со стороны отправителя. |
||||
- Класс `Bob` ([тут](model/bob.py)). Как Алиса, только не Алиса, а Боб: реализует получателя в протоколе |
||||
- Класс `EveBS` ([тут](model/eve.py)). Реализует beam splitter атаку на `ChannelSym` |
File diff suppressed because one or more lines are too long
@ -0,0 +1,30 @@
|
||||
from dataclasses import dataclass, field |
||||
import typing |
||||
from random import choice, uniform |
||||
|
||||
|
||||
@dataclass |
||||
class EveBS: |
||||
hijack_probability: float = 0.45 |
||||
my_basises: typing.List[bool] = field(default_factory=list) |
||||
obtained_data: typing.List[typing.Optional[bool]] = field(default_factory=list) |
||||
|
||||
def process_photons(self, photons: typing.List[typing.Tuple[bool, bool]]) -> typing.List[typing.Tuple[bool, bool]]: |
||||
basis = choice([False, True]) |
||||
self.my_basises.append(basis) |
||||
clicks = [0, 0] |
||||
passed = [] |
||||
for photon in photons: |
||||
if uniform(0, 1) <= self.hijack_probability: |
||||
photon_bit, photon_basis = photon |
||||
if photon_basis == basis: |
||||
clicks[photon_bit] += 1 |
||||
else: |
||||
clicks[choice([0, 1])] += 1 |
||||
else: |
||||
passed.append(photon) |
||||
if any(clicks) and not all(clicks): |
||||
self.obtained_data.append(bool(clicks[1])) |
||||
else: |
||||
self.obtained_data.append(None) |
||||
return passed |
Loading…
Reference in new issue