it-swarm-eu.dev

Jsou GUID bezpečné pro jednorázové tokeny?

Vidím, že mnoho webů používá GUID pro resetování hesla, odhlášení požadavků a další formy jedinečné identifikace.

Pravděpodobně jsou přitažlivé, protože se snadno generují, jsou jedinečné, nesekvenční a zdají se náhodné.

Ale jsou pro tyto účely dostatečně bezpečné?

Zdá se mi, že vzhledem k GUID může být možné předpovídat následující GUID, protože (pokud vím) nejsou zamýšleny jako kryptograficky bezpečné ... nebo jsou?

Poznámka:

  • nemluvím o webech, které používají náhodné blob gobbledygooku kódovaného v base64.
  • Mluvím o takových webech, které vypadají, že používají surového průvodce:
    http://example.com/forgotPassword/?id=b4684ce3-ca5b-477f-8f4d-e05884a83d3c
84
Michael Haren

Jsou dostatečně bezpečné pro účely, které jste popsali? Podle mého názoru obecně ano. Jsou dostatečně bezpečné v aplikacích, kde je bezpečnost významná? Ne. Jsou generovány pomocí náhodného algoritmu, takže nejsou žádným způsobem kryptograficky náhodný nebo bezpečný.

Takže u funkce odhlášení nebo ověření předplatného opravdu nevidím problém se zabezpečením. Na druhé straně identifikace uživatele aplikace online bankovnictví (nebo ve skutečnosti pravděpodobně dokonce funkce obnovení hesla na webu, kde je identita cenná) jsou GUID rozhodně nedostatečné.

Pro více informací byste se měli podívat na část 6 (Bezpečnostní úvahy) RFC 4122 pro GUID (nebo Universally Unique Identifiers).

42
Xander

specifikace UUID uvádí několik „verzí“, což jsou metody generování UUID. Většina z nich je zaměřena na zajištění jedinečnosti (to je hlavní bod UUID) pomocí např. Aktuálního data. To je efektivní, ale to znamená, že zatímco generované UUID jsou jedinečné, jsou také předvídatelné, což je činí pro některé použití zabezpečení neadekvátní.

Metoda generování UUID „verze 4“ UUID (v části 4.4) by však měla používat kryptograficky silný generátor náhodných čísel. 6 ze 128 bitů je fixováno na běžnou hodnotu (což znamená, že se jedná o UUID verze 4), takže z RNG zbývá 122 bitů.

Je-li podkladový RNG zabezpečený (např. /dev/urandom V systému Linux/MacOS/* BSD nebo CryptGenRandom() v systému Windows) a poté, co bylo vygenerováno mnoho generovaných UUID, by útočník neměl být schopen předvídat další s pravděpodobností úspěchu vyšší než 2-122, který je pro většinu účelů přiměřeně malý, včetně startovacích kódů pro jaderné střely.

122 náhodných bitů zajišťuje jedinečnost s vysokou pravděpodobností. Pokud vygenerujete mnoho UUID verze 4 a nahromadíte je, můžete očekávat, že se setkáte s první kolizí asi po 261 UUID - to je asi 2 miliardy miliard; pouhé uložení tohoto počtu UUID by spotřebovalo více než 30 milionů terabajtů. Pokud uvažujete o „pouze“ 1012 takový UUID (tisíc miliard, skladovatelný přes 16 terabajtů), pak riziko, že mezi nimi budou dva identické UUID, je asi 9,4 * 10-14, tj. asi 700 tisíckrát méně pravděpodobné, než vyhrát miliony dolarů v loterii.

Proto UUID jsou vhodné pro bezpečnostní účely pokud (a pouze pokud) jsou UUID "verze 4" generované zabezpečeným RNG.

59
Thomas Pornin

Jsou zabezpečeny v systému Windows 2000 nebo novějším. Vaše zranitelnost a riziko závisí na tom, jak je vygenerováno GUID.) Windows 2000 nebo novější používá verzi 4 z GUID, která je kryptograficky bezpečná).

Další informace viz tento odkaz MSDN a tento otázka přetečení zásobník . (Díky Jordan Rieger v komentářích)

5
goodguys_activate

Používáte-li společný vývojový jazyk, vytvoření jediného generátoru jedinečných náhodných čísel pomocí správné krypto funkce není tak obtížné (mluvíme o 10 řádcích kódu, které jsou k dispozici jako ukázky v nejběžnějších jazycích jednoduše pomocí Google ), takže pomocí jednoduchého nového průvodce je to v zásadě lenivost z pohledu vývojáře.

V popsaném scénáři jsou „dostatečně zabezpečeni“, pokud má Guid předaný ve funkci zapomenutého hesla některé základní funkce:

1) Je to opravdu jednorázová hodnota, která nemá žádný vztah k ID uživatele, takže jakmile bude heslo resetováno, již nebude možné použít

2) Má definované časové období platnosti (můžete resetovat heslo v následujících 30 minutách nebo něco podobného)

Pokud používáte stejnou příručku, můžete heslo resetovat vícekrát nebo uhodnout heslo guid a reset u uživatelů, kteří nepožádali o reset hesla, nebo, jak Avid popisuje v komentáři, zkuste získat přístup k resetování hesla pomocí nějakého druhu opakujte připojení, pak je to vadný design aplikace a použití či nepoužívání GUID není skutečný problém.

Takže pokud nemáte co do činění s velmi citlivými informacemi, pak by snad guid mohl fungovat, ale proč nedělat věci správným způsobem poprvé a použít správný krypto api pro vygenerování bezpečného náhodného řetězce?

S pozdravem Massimo

3
massimogentilini

Falešné "GUID", které jsou ne generovány jakýmkoli generačním algoritmem GUID generační algoritmus, ale které jsou místo toho jednoduše 128 bitů (16 bajtů) generovaných kryptograficky zabezpečeným PRNG, a které jsou reprezentovány pouze pomocí konvenčního GUID hex-s-pomlčky kódování, jsou většinou bezpečné pro jednorázové tokeny).

Narazíte na problém s narozeninami, protože existence kolize se pohybuje kolem 2 ^ -64 pro 128bitové tokeny.

Je lepší použít 256bitové nebo 512bitové tokeny, kde je kolize kolem 2 ^ -128 nebo 2 ^ -256.

0
yfeldblum