Dokumentáció távirat létrehozásának engedélyezése gomb
A bemutató lekérdezésformátum bináris adat sorozatprogramozásának TL nyelvet. Minden nagy számban visszük át, mint egy string (karakterlánc), amely tartalmazza a kívánt szekvenciát bájtok sorrendben big-endian. Hash funkciók, mint például SHA1 visszatérő vezetéken (20 bájt), amely úgy is értelmezhető, mint egy big-endian számát. Kis számok (int hosszú int128 int256 ...) általában little-endian; Ha azonban ezek egy részét SHA1, a bájtot nem cserélték. Így, ha vannak hosszú x rövid szénláncú 64 bit a SHA1 s sorok. majd venni az utolsó 8 bájt 20 bájtos vonal SHA1 (ek). és értelmezni, mint egy 64-bites egész.
A műveletek sorrendje
Kiszámítása az egyszer
Ügyfél küld kérést a szervernek:
Nonce érték az ügyfél által választott véletlenszerűen (véletlen szám); Ez a kliens felismeri ennek részeként csere. Miután ezt a lépést, akkor mindenki által ismert.
szerverválasz
A szerver küld egy választ a következő formában:
Itt a „vonal» pq jelentése természetes szám (bináris rendszer big-endian formátumban). Ez a szám a termék két különböző páratlan prímszám. PQ általában nem haladja meg a 2 ^ 63-1. Jelentősége van önkényesen kiválasztott server_nonce szerver; Miután ezt a lépést, akkor mindenki által ismert.
server_public_key_fingerprints - egy listát az ujjlenyomatok nyilvános RSA-kulcsok (alsó 64 bit SHA1 (server_public_key), ahol a nyilvános kulcs képviseli, mint egy meztelen típusú rsa_public_key n: string e: string = RSAPublicKey (csupasz típus; részleteket típusok, lásd a cikk „szerializálásáról bináris adatokat. „), ahol a szokásos módon, az N és e - számok big-endian formátumú, például a sorozatszám sor bájt, majd számítottuk SHA1), a szerver fogadja.
Megjegyzendő, hogy minden további üzenet tartalmaz egy pár (nonce. Server_nonce), valamint a nyílt és a titkosított része, amely lehetővé teszi, hogy használja azt, hogy azonosítsa a „ideiglenes session” (egy run protokoll tárgyalt kulcs létrehozása). A támadó nem képes létrehozni egy párhuzamos munkamenetet a kiszolgáló azonos paraméterekkel, és újra a titkosított kliens vagy szerver oldali üzeneteik saját célra a párhuzamos munkamenetet, mert az új „ideiglenes session” szerver lesz kiválasztva egy másik server_nonce.
Igazolása teljesítmény
Az ügyfél határozza pq száma prímszám p Most kezdődik a kör kulcscserét Diffie-Helmanu: A kliens küld egy kérést: Itt encrypted_data következőképpen állítjuk elő: Itt encrypted_answer ily módon kapott: E lépés után new_nonce még ismert, csak a kliens és a szerver. Az ügyfelek biztosak lehetnek benne, hogy ez egy szerver, és azt mondta, hogy a válasz generált kifejezetten válaszul ügyfél kérésére req_DH_params, mivel a válasz adatokat titkosított new_nonce. Az ügyfél ellenőrzi, hogy p = true dh_prime 2048 bit prímszám (vagyis p és (p-1) / 2 prím szám, és 2 ^ 2047
Ha az ellenőrzés túl sok időt (a régebbi mobil eszközök), akkor kezdetben csak futtatni 15 ismétléseket a Miller-Rabin, hogy ellenőrizze a elsőbbségét / tartozó prímszámokat p és (p - 1) / 2 valószínűséggel hiba nem haladja meg az egy milliárdod és többet tenni ismétléseket később a háttérben. Egyéb optimalizálási lehet a beágyazás a kliens alkalmazás kód egy kis asztal néhány „jó” pár (g, p) (vagy egyszerűen ismert helyes prímszám p, hiszen g könnyen ellenőrizni végrehajtás közben) ellenőrzik során a kód generáció fázisban, hogy elkerüljék a teljesítmény az ilyen ellenőrzés a futás során. A szerver módosítja ezeket az értékeket ritkán ezért általában szükség helyettesített egy ilyen tábla aktuális értéket dh_prime szerver. Például, az aktuális érték egyenlő dh_prime (annak érdekében, bájtok big-endian) A kliens kiszámolja 2048 Véletlenszerűen bit b szám (kellő mennyiségű entrópia), és küld egy kérést a szerver: Itt encrypted_data ily módon kapott: Retry_id mező nulla az első kísérlet; vagy egyenlő az előző auth_key_aux_hash zafeylennoy kísérletek (ld. 9.). Ennek megfelelően, auth_key egyenlő pow (g,) mod dh_prime; a szerver van kiszámítva, mint pow (g_b, a) mod dh_prime. és a kliens, mint a (g_a) ^ b mod dh_prime. auth_key_hash számított: = 64 alacsonyabb sorrendű bit SHA1 (auth_key). A szerver ellenőrzi, hogy van egy másik gomb az azonos auth_key_hash és megfelel az alábbi módszerekkel. A kiszolgáló a következő három módon: Egy másik esetben az ügyfél hozzáfér a 6. pont) létrehozunk egy új b. Az első esetben a kliens és a szerver végre auth_key. akkor felejtsd el a fennmaradó időben adatokat, és az ügyfél létrehoz egy titkosított ülésen egy másik auth_key. Ugyanakkor server_salt eredetileg telepítve substr (new_nonce, 0, 8) XOR substr (server_nonce, 0, 8). Ha szükséges, az ügyfél megtartja a különbség server_time lépésben kapott 5) és a helyi idő, hogy egy jó közelítő pontossággal a szerver idő, ami ahhoz szükséges, hogy a megfelelő azonosító üzenetet. Ebben az esetben, ha az ügyfél nem kap választ a szerver a kérést egy bizonyos időn belül, akkor egyszerűen ismételje meg a kérést. Ha a szerver küldött válasz a kérésre (pontosan ez a lekérdezés helyett ugyanazon - az összes paraméter olyan ismétlési kellene ugyanazt az értéket), de nem éri el az ügyfél, akkor a szerver egyszerűen megismételni ugyanazt a választ. A szerver emlékszik válasz után 10 perccel a kérelem kézhezvételét 1). Ha a szerver már elfelejtette a választ, vagy a szükséges időt az adatok, az ügyfél meg kell kezdeni az elejétől. A szerver joga van feltételezni, hogy ha egy ügyfél küldte a következő lekérdezést, amely felhasználja az adatokat a korábbi szerver válaszul az ügyfél, akkor a válasz minden bizonnyal megkapta a kliens és a szerver elfelejteni.Küldő kiszolgáló és hitelesítés
A szerver két módja van:
kulcsgenerálás
számítási auth_key
számítási auth_key_hash
Folyamatban van a kulcs csere
hiba Kezelés
Alkalmazási példa