Shadowsocks dokumentáció
Navigáció
AEAD
AEAD Az Authenticated Encryption with Associated Data rövidítése. Az AEAD titkosítások egyszerre biztosítanak bizalmasságot, integritást és hitelességet. Kiváló teljesítménnyel és energiahatékonysággal rendelkeznek a modern hardvereken. A felhasználóknak lehetőség szerint AEAD titkosítást kell használniuk.
A következő AEAD titkosítások ajánlottak. A megfelelő Shadowsocks-megvalósításoknak támogatniuk kell az AEAD_CHACHA20_POLY1305-öt. A hardveres AES-gyorsítással rendelkező eszközök megvalósításának az AEAD_AES_128_GCM-et és az AEAD_AES_256_GCM-et is meg kell valósítania.
Név | Álnév | Kulcsméret | Só méret | Nonce Méret | Tag méret |
AEAD_CHACHA20_POLY1305 | chacha20-ietf-poly1305 | 32 | 32 | 12 | 16 |
AEAD_AES_256_GCM | aes-256-gcm | 32 | 32 | 12 | 16 |
AEAD_AES_128_GCM | aes-128-gcm | 16 | 16 | 12 | 16 |
Kérjük, olvassa el IANA AEAD nyilvántartás elnevezési sémához és specifikációhoz.
Kulcs származtatás
A mesterkulcs közvetlenül a felhasználótól vagy jelszóból generálható.
HKDF_SHA1 egy olyan függvény, amely titkos kulcsot, nem titkos sót, információs karakterláncot vesz fel, és létrehoz egy titkosításilag erős alkulcsot, még akkor is, ha a bemeneti titkos kulcs gyenge.
HKDF_SHA1(kulcs, só, információ) => alkulcs
Az információs karakterlánc a generált alkulcsot egy adott alkalmazáskörnyezethez köti. Esetünkben az „ss-alkulcs” karakterláncnak kell lennie idézőjelek nélkül.
Munkamenetenkénti alkulcsot származtatunk egy előre megosztott főkulcsból a HKDF_SHA1 használatával. A sónak egyedinek kell lennie az előre megosztott főkulcs teljes élettartama során.
Hitelesített titkosítás/dekódolás
Az AE_encrypt egy olyan funkció, amely titkos kulcsot, nem titkos nonce-t, üzenetet vesz fel, és titkosított szöveget és hitelesítési címkét állít elő. A Nonce-nak egyedinek kell lennie egy adott kulcshoz minden hívásban.
AE_encrypt(kulcs, nonce, message) => (titkosított szöveg, címke)
Az AE_decrypt egy olyan függvény, amely titkos kulcsot, nem titkos nonce-t, titkosított szöveget, hitelesítési címkét vesz fel, és egy eredeti üzenetet állít elő. Ha valamelyik bemenetet manipulálják, a visszafejtés sikertelen lesz.
AE_decrypt(kulcs, nonce, titkosított szöveg, címke) => üzenet
TCP
Egy AEAD-titkosított TCP adatfolyam egy véletlenszerűen generált sóval kezdődik a munkamenetenkénti alkulcs levezetéséhez, amelyet tetszőleges számú titkosított darab követ. Mindegyik darab a következő szerkezettel rendelkezik:
[titkosított rakomány hossza][hossz tag][titkosított rakomány][payload tag]
A hasznos terhelés hossza egy 2 bájtos big-endian előjel nélküli egész szám, amelynek felső határa 0x3FFF. A magasabb két bit le van foglalva, és nullára kell állítani. A hasznos terhelés ezért 16*1024 – 1 bájtra korlátozódik.
Az első AEAD titkosítási/visszafejtési művelet 0-tól kezdődő számláló nonce-t használ. Minden titkosítási/visszafejtési művelet után a nonce eggyel nő, mintha egy előjel nélküli kis végű egész szám lenne. Ne feledje, hogy minden TCP-csonk két AEAD titkosítási/visszafejtési műveletet tartalmaz: egyet a hasznos adatok hosszára, egyet pedig a hasznos adatokra vonatkozóan. Ezért minden darab kétszer növeli a nonce-t.
TCP
Egy AEAD-titkosított TCP adatfolyam egy véletlenszerűen generált sóval kezdődik a munkamenetenkénti alkulcs levezetéséhez, amelyet tetszőleges számú titkosított darab követ. Mindegyik darab a következő szerkezettel rendelkezik:
[titkosított rakomány hossza][hossz tag][titkosított rakomány][payload tag]
A hasznos terhelés hossza egy 2 bájtos big-endian előjel nélküli egész szám, amelynek felső határa 0x3FFF. A magasabb két bit le van foglalva, és nullára kell állítani. A hasznos terhelés ezért 16*1024 – 1 bájtra korlátozódik.
Az első AEAD titkosítási/visszafejtési művelet 0-tól kezdődő számláló nonce-t használ. Minden titkosítási/visszafejtési művelet után a nonce eggyel nő, mintha egy előjel nélküli kis végű egész szám lenne. Ne feledje, hogy minden TCP-csonk két AEAD titkosítási/visszafejtési műveletet tartalmaz: egyet a hasznos adatok hosszára, egyet pedig a hasznos adatokra vonatkozóan. Ezért minden darab kétszer növeli a nonce-t.