cryptoSL2024/README.md

3.2 KiB
Raw Permalink Blame History

Autorzy

  • Robert Bendun
  • Mateusz Piątkowski

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.