.gitignore | ||
alice.py | ||
bob.py | ||
net.py | ||
ot.py | ||
README.md | ||
requirements.txt | ||
test.sh | ||
zadanie.pdf |
Inicjalizacja
- Stwórz wirtualne środowisko:
python -m venv .venv
- Aktywuj:
. .venv/bin/activate
- Pobierz zależności: `pip install -r requirements.txt'
- Uruchom np. test wewnętrzny:
python ot.py
Aby wyjść ze środowiska uruchom komendę deactivate
.
Testowanie działania
- Na komputerze A uruchom program
alice.py
podając jako argumenty nazwy dwóch plików - Na komputerze B uruchom program
bob.py
podając jako argument który z plików wskazanych przez programalice.py
ma uruchomić (0
lub1
) oraz adres IP komputera A przez flagę--ip
.
W razie wątpliwości zapoznaj się z pomocą programów alice.py
i bob.py
lub zobacz przykładowy test w test.sh
.
Dodawanie paczek
W środowisku wirtualnym:
- Zainstaluj paczkę:
pip install <package>
- Zaktualizuj listę zależności:
pip freeze > requirements.txt
Rekomendowane parametry/komponenty
Punkt a w dokumencie projektu
Parametry krzywych eliptycznych znajdują się tutaj. W projekcie wykorzystano krzywą eliptyczną NIST P-224, która zdefiniowana nad ciałem GF(p) rzędu h*n
, gdzie:
p = 2^{224} - 2^{96} + 1
h = 1
- $n = 26959946667150639794667015087019625940457807714424391721682722368061$
a sama krzywa jest zdefiniowana równaniem:
y^2 = x^3-3x+18958286285566608000408668544493926415504680968679321075787234672564
Krzywa eliptyczna NIST P-224 znajduje się w rekomendacji NIST-u dot. parametrów krzywych eliptycznych NIST SP 800-186 Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters – stąd decyzja o wyborze właśnie tych parametrów.
Krzywe eliptyczne zapewniają podobny poziom bezpieczeństwa co protokoły oparte na ciałach skończonych przy mniejszej długości klucza, co wiąże się z zmniejszonym obciążeniem pamięciowym i szybszymi obliczeniami.
Punkt b w dokumencie projektu
KDF który proponuję to scrypt, ponieważ jest kosztowy obliczeniowo ORAZ pamięciowo.
Tutaj można znaleźć rekomendowane parametry, ze względu na ilość wykonywnych operacji proponuję parametry:
N = 2 ** 14
r = 8
p = 1
poparte tą prezentacją.
Sól stanowi 16 bajtów wygenerowanych przy użyciu funkcji randbelow() zbiblioteki secrets.
Punkt c w dokumencie projektu
Tutaj proponuję AES256 w trybie CounTeR, opisane np. tutaj.
Szyfr blokowy AES (zdefiniowany w dokumencie NIST FIPS 197) jest zatwierdzony przez NIST. AES musi korzystać z zatwierdzonych trybów szyfrowania, wśród których został wskazany tryb CounTeR (opisany w NIST SP 800-38A).
Długość klucza generowana przez funkcję H()
wynosi 32 bajty, co przekłada się na wykorzystanie AES-256.
Do wygenerowania noncji, wykorzystywanej w trybie CounTeR, może zostać użyty scrypt, z powodów wymienionych wcześniej.