Go to file
2024-04-18 17:22:15 +02:00
.gitignore virtual environment 2024-04-17 20:57:09 +02:00
alice.py otp -> ot 2024-04-18 10:01:09 +00:00
bob.py otp -> ot 2024-04-18 10:01:09 +00:00
LICENSE public domain! 2024-04-18 17:22:15 +02:00
net.py otp -> ot 2024-04-18 10:01:09 +00:00
ot.py otp -> ot 2024-04-18 10:01:09 +00:00
README.md :) 2024-04-18 16:15:20 +02:00
requirements.txt update requirements 2024-04-18 00:11:15 +02:00
test.sh networking 2024-04-18 00:09:59 +02:00
zadanie.pdf Add pdf with task, clean vim artifacts 2024-04-17 03:44:45 +02:00

Inicjalizacja

  1. Stwórz wirtualne środowisko: python -m venv .venv
  2. Aktywuj: . .venv/bin/activate
  3. Pobierz zależności: `pip install -r requirements.txt'
  4. Uruchom np. test wewnętrzny: python ot.py

Aby wyjść ze środowiska uruchom komendę deactivate.

Testowanie działania

  1. Na komputerze A uruchom program alice.py podając jako argumenty nazwy dwóch plików
  2. Na komputerze B uruchom program bob.py podając jako argument który z plików wskazanych przez program alice.py ma uruchomić (0 lub 1) 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:

  1. Zainstaluj paczkę: pip install <package>
  2. 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

Proponowaną funkcją KDF jest scrypt, ponieważ jest kosztowy obliczeniowo ORAZ pamięciowo.

Tutaj można znaleźć rekomendowane parametry, ze względu na ilość wykonywnych operacji proponujemy parametry:

N = 2 ** 14
r = 8
p = 1

poparte tą prezentacją.

Sól stanowi 16 bajtów wygenerowanych przy użyciu funkcji randbelow() z biblioteki secrets.

Punkt c w dokumencie projektu

Wykorzystujemy 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.