Kryptograficky generovaná adresa - Cryptographically Generated Address

A Kryptograficky generovaná adresa (CGA) je Verze internetového protokolu 6 (IPv6) adresa, která má identifikátor hostitele vypočítaný z kryptografická hashovací funkce.[1] Tento postup je způsob vazby a veřejný podpisový klíč do IPv6 adresa v Secure Neighbor Discovery Protocol (POSLAT).[2]

Metodologie

Kryptograficky vygenerovaná adresa je vytvořena nahrazením nejméně významných 64 bitů 128bitové adresy IPv6 kryptografickým hashem veřejného klíče vlastníka adresy. Zprávy jsou podepsány odpovídajícím soukromým klíčem. Pouze pokud je známa zdrojová adresa a veřejný klíč, může ověřovatel ověřit zprávu od příslušného odesílatele. Tato metoda vyžaduje ne infrastruktura veřejného klíče. Platné CGA mohou být generovány jakýmkoli odesílatelem, včetně potenciálního útočníka, ale nemohou používat žádné existující CGA.

Vlastnosti

Kryptograficky generovaná adresa je adresa IPv6, jejíž identifikátor rozhraní byl generován podle metody generování CGA. Identifikátor rozhraní je tvořen nejméně významnými 64 bity adresy IPv6 a slouží k identifikaci síťového rozhraní hostitele v jeho podsíti. Podsíť je určena nejvýznamnějšími 64 bity, předponou podsítě.

Formát adresy IPv6
bity6464
polepředpona podsítěidentifikátor rozhraní

Kromě veřejného klíče, který má být vázán na CGA, má metoda generování CGA několik dalších vstupních parametrů, včetně předdefinované předpony podsítě. Tyto parametry spolu s dalšími parametry, které jsou generovány během provádění metody generování CGA, tvoří sadu parametrů zvaných datová struktura Parametry CGA. Musí být známa úplná sada parametrů CGA, aby bylo možné ověřit odpovídající CGA.

Datová struktura parametrů CGA se skládá z:

  • modifikátor: náhodný 128-bit nepodepsaný celé číslo;
  • subnetPrefix: 64bitová předpona, která definuje, do které podsítě CGA patří;
  • collCount: 8bitové celé číslo bez znaménka, které musí být 0, 1 nebo 2;
  • publicKey: veřejný klíč jako a DER -kódováno ASN.1 struktura typu SubjectPublicKeyInfo;
  • extFields: volitelné pole s proměnnou délkou (výchozí délka 0).

Navíc parametr zabezpečení Sec určuje sílu CGA proti útoky hrubou silou. Jedná se o 3bitové celé číslo bez znaménka, které může mít libovolnou hodnotu od 0 do (včetně) 7 a je zakódováno ve třech bitech nejvíce vlevo od identifikátoru rozhraní CGA. Čím vyšší je hodnota Sec, čím vyšší je úroveň zabezpečení, ale také čím déle obvykle trvá vygenerování CGA. Pro větší pohodlí středně pokročilý Sec hodnoty v níže uvedeném pseudokódu se považují za uložené jako 8bitová celá čísla bez znaménka, která nemohou mít hodnotu větší než 7.

Metoda generování CGA

Následující část pseudokódu představuje metodu generování CGA, která se používá k vytvoření nové kryptograficky generované adresy.

 1  postup generovat CGA (Sec, subnetPrefix, publicKey, extFields): 2      modifikátor : = random (0x000000000000000000000000000000, // 16 oktetů (128 bitů) 3 0xffffffffffffffffffffffffffffffff) 4 5 štítek1: 6      concat : = zřetězit (modifikátor, 0x000000000000000000, // 9 nulových oktetů 7 publicKey, extFields) 8 9      strávit : = SHA1 (concat)10      Hash2 := strávit[0:14] // 14 * 8 = 112 bitů úplně vlevo1112 -li Sec ≠ 0 a Hash2[0:2*Sec] ≠ 0: // 2 * Sec * 8 = 16 * Sec nejvíce vlevo bity13 modifikátor := modifikátor + 114          jít do štítek115 skončit, pokud1617      collCount : = 0x00 // 8bitový počet kolizí 1819 štítek2:20      concat : = zřetězit (modifikátor, subnetPrefix, collCount,21                            publicKey, extFields)2223      strávit : = SHA1 (concat)24      Hash1 := strávit[0: 8] // 8 * 8 = 64 bitů úplně vlevo2526 intID := Hash1                                             // Hash1 se stává identifikátorem rozhraní ... 27 intID[0] := intID[0] binární a 0x1c binární nebo (Sec << 5) // ... po napsání bitů Sec a u / g 2829 CGA : = zřetězit (subnetPrefix, intID) // zřetězit a vytvořit CGA3031 -li duplikát(CGA):32          collCount := collCount + 13334          -li collCount = 3:35              přerušit36          skončit, pokud3738          jít do štítek239 skončit, pokud4041      vrátit se [CGA, [modifikátor, subnetPrefix, collCount, publicKey, extFields]]42  ukončete postup

Identifikátor rozhraní CGA je z velké části tvořen Hash1, který je převzat z prvních 64 bitů datové struktury natrávených parametrů CGA (řádky 20 až 24). Na řádku 27 jsou první tři bity přepsány znakem Sec hodnota a rezervované bity „u“ a „g“ (sedmý a osmý bit) jsou nastaveny na 0.

The Sec parametr implementuje příponu hash vynucením prvních 16krát Sec kousky dalšího hashu, Hash2, být 0. Tento hash je výsledkem natrávené datové struktury parametrů CGA s subnetPrefix a collCount v zásadě nastaveno na 0. A vyhledávání hrubou silou se provádí k nalezení vhodného Hash2, přírůstek modifikátor o 1 každou iteraci (řádky 6 až 15). Protože více bitů musí být 0 s vyšší Sec průměrná doba potřebná k provedení vyhledávání se exponenciálně zvyšuje s hodnotou Sec.

Po zřetězení předpony podsítě a generovaného identifikátoru rozhraní k vytvoření CGA, detekce duplicitních adres může být provedeno. Pokud se adresa již používá, pak počítadlo kolizí collCount se zvýší o 1 a vygeneruje se nový identifikátor rozhraní (řádky 20 až 39). Protože collCount se při výpočtu nepoužívá Hash2, není nutné hledat nové Hash2 když dojde ke kolizi adresy. Z podobného důvodu subnetPrefix nepoužívá se ani proto, že pokud se předpona podsítě adresy změní, ale veřejný klíč hostitele se nezmění, lze znovu použít stejný modifikátor a není třeba hledat nový Hash2.

Na řádku 41 je vrácen CGA spolu s datovou strukturou Parametry CGA.

Metoda ověření CGA

Kryptograficky generovaná adresa se používá k ověření, že přijaté podepsané zprávy byly odeslány hostitelem, kterému byla tato adresa přiřazena. To se provádí ověřením, že pár klíčů použitý pro podepisování byl vázán na CGA. Protože lze tímto způsobem ověřit autenticitu veřejného klíče, není potřeba infrastruktura veřejného klíče. Je-li však třeba ověřit také samotného hostitele, je třeba předem ověřit samotný CGA, protože vázaný veřejný klíč nelze důvěřovat, pokud v takovém případě není důvěryhodná adresa (za předpokladu, že nebyla ověřena jinými metody než CGA).

Metoda ověřování CGA, při které se ověřuje, že je veřejný klíč vázán na CGA, vyžaduje jako vstup odpovídající datovou strukturu parametrů CGA a lze ji implementovat následujícím způsobem.

 1  postup ověřit CGA (CGA, [modifikátor, subnetPrefix, collCount, publicKey, extFields]): 2      -li collCount > 2 nebo CGA[0:8] ≠ subnetPrefix: 3          vrátit se false 4 skončit, pokud 5 6      concat : = zřetězit (modifikátor, subnetPrefix, collCount, 7                            publicKey, extFields) 8 9      strávit : = SHA1 (concat)10      Hash1 := strávit[0: 8] // 8 * 8 = 64 bitů úplně vlevo11 Hash1[0] := Hash1[0] binární a 0x1c // ignoruje Sec a u / g bity 1213 intID := CGA[8:16] // identifikátor rozhraní (64 bitů zcela vpravo) 14 intID[0] := intID[0] binární a 0x1c // ignoruje Sec a u / g bity 1516 -li Hash1intID:17          vrátit se false18 skončit, pokud1920      Sec := CGA[8] >> 5 // výpis Sec z rozhraní identifier2122 concat : = zřetězit (modifikátor, 0x000000000000000000, // 9 nulových oktetů23 publicKey, extFields)2425      strávit : = SHA1 (concat)26      Hash2 := strávit[0:14] // 14 * 8 = 112 bitů úplně vlevo2728 -li Sec ≠ 0 a Hash2[0:2*Sec] ≠ 0: // 2 * Sec * 8 = 16 * Sec nejvíce vlevo bity29 vrátit se false30 skončit, pokud3132      vrátit se true // ověření proběhlo úspěšně33 ukončete postup

Metoda začíná kontrolou, zda collCount z datové struktury Parametry CGA má platnou hodnotu a pokud subnetPrefix ze stejné datové struktury odpovídá prefixu podsítě CGA (na řádku 2). To je děláno pro bezpečnostní důvody.

Od linky 6 do 18, Hash1 se počítá z datové struktury parametrů CGA (která zahrnuje veřejný klíč a předponu podsítě) a příslušné bity se porovnávají s bity identifikátoru rozhraní CGA. V tomto případě se to provede nastavením prvních tří bitů (Sec) a sedmý a osmý bit (bity „u“ a „g“) obou Hash1 a identifikátor rozhraní na 0 na řádcích 11 a 14 pro snadné srovnání.

Po extrakci Sec z identifikátoru rozhraní CGA, Hash2 se počítá a prvních 16krát Sec bity hash jsou porovnány s 0 (řádky 22 až 30). Pokud všechny kontroly dopadnou dobře, pak byl veřejný klíč ověřen tak, aby byl vázán (tj. Platný pro) CGA.

Bezpečnostní

Aby bylo možné útočník udělat klient věřte, že obdržela platnou zprávu od určité CGA, která není ve vlastnictví útočníka, musí útočník najít a hash kolize pro příslušné bity Hash1 a Hash2 provedením a útok hrubou silou. Pokud útočník najde soubor parametrů CGA (včetně veřejného klíče, pro který útočník zná soukromý klíč), který lze použít ke generování stejného CGA jako cílový CGA, může útočník vydávat za hostitele, který CGA vlastně vlastní, aniž by detekován (kromě případů, kdy klient kontaktoval hostitele dříve a všimne si, že se veřejný klíč změnil, ale CGA nikoli).

Ze 64 bitů Hash1, v identifikátoru rozhraní se používá pouze 59, protože se přepisuje 5 bitů. Pro CGA s Sec rovno 0, to znamená, že náklady na nalezení sady parametrů CGA, které poskytují požadovaných 59 bitů, jsou přibližně (v velká O notace ). Větší hodnota Sec, nicméně, zvyšuje tyto náklady o faktor na protože prvních 16krát Sec kousky Hash2 poté se stávají relevantní (tj. implementují hash rozšíření požadováním, aby se tyto bity rovna 0). V procesu generování CGA se náklady na generování adresy zvyšují stejným faktorem v závislosti na hodnotě Sec, ale náklady na používání a ověření CGA zůstávají konstantní.

Protože Sec není součástí datové struktury parametrů CGA, ale samotné adresy, útočník nemůže použít a Sec hodnota menší než cílová adresa (například 0) ve snaze přeskočit (nebo zmenšit) útok hrubou silou na Hash2. To by konkrétně přineslo odlišnou CGA od cílové CGA, protože alespoň jedna ze tří bitů nalevo od identifikátoru rozhraní by se neshodovala. Pokud cíl Sec hodnota se stejně zapíše do identifikátoru rozhraní Hash2 (téměř jistě) bude během procesu ověřování zjištěno, že postrádá požadované množství 0bitů nejvíce vlevo.

Během procesu generování CGA je velmi nepravděpodobné, že by došlo ke třem kolizím adres. Pokud by byla detekována duplicitní adresa potřetí, pravděpodobně by to bylo kvůli chybě konfigurace nebo implementace nebo útok odmítnutí služby. Z tohoto důvodu počet platných hodnot pro collCount je omezen na rozsah od 0 do 2. Tento parametr musí být ověřen, aby byl v tomto rozsahu během procesu ověřování CGA, aby útočník zabránil jeho zneužití a vyzkoušení všech různých hodnot bez nutnosti provádět další hledání hrubou silou Hash2 pokaždé, když je vyzkoušena jiná hodnota.

Zahrnutím předpony podsítě do operace digestu, která má za následek Hash1, lze zabránit tomu, aby útočník mohl použít jednu předem vypočítanou databázi k útoku na adresy s různými předponami podsítě. Ověřovatel si také může být jistý, že veřejný klíč byl svázán s touto přesnou adresou a ne možná s adresou se stejným identifikátorem rozhraní, ale s jinou předponou podsítě. Protože specifikace CGA předepisuje použití subnetPrefix z datové struktury parametrů CGA pro operace digesce je třeba ověřit, že se shoduje s předponou podsítě CGA během procesu ověření CGA.

Viz také

Reference

  1. ^ RFC 3972, Kryptograficky generované adresy (CGA), T. Aura (březen 2005)
  2. ^ RFC 3971, Secure Neighbor Discovery (ODESLAT), J. Arkko (ed.), J. Kempf, B. Zill, P. Nikander (březen 2005)