66 lines
3.2 KiB
Markdown
66 lines
3.2 KiB
Markdown
# 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](https://safecurves.cr.yp.to/field.html). 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](https://datatracker.ietf.org/doc/html/rfc7914#section-2) można znaleźć rekomendowane parametry, ze względu na ilość wykonywnych operacji proponujemy parametry:
|
||
```
|
||
N = 2 ** 14
|
||
r = 8
|
||
p = 1
|
||
```
|
||
poparte [tą prezentacją](https://www.tarsnap.com/scrypt/scrypt-slides.pdf).
|
||
|
||
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](https://www.pycryptodome.org/src/cipher/classic#ctr-mode).
|
||
|
||
Szyfr blokowy AES (zdefiniowany w dokumencie [NIST FIPS 197](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf)) 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](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf)).
|
||
|
||
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.
|