Systémová volání dodávající entropii - Entropy-supplying system calls
Systémová volání dodávající entropii jsou systémová volání v Unixový operační systém jádra skrz které procesy může získat entropická nebo náhodná data. První z nich byl getentropy
, představený OpenBSD operační systém ve verzi 5.6 (listopad 2014), jako refaktoring přístupu sysctl (3) KERN_ARND používaného od roku 1997.[1] Linux nabízí velmi podobné systémové volání, získat náhoda
, který byl založen na getentropy
.[2] Poprvé byl k dispozici v Linuxu 3.17, vydaném v říjnu 2014.[3] V červenci 2015 Solaris představil mírně upravené verze getentropy
a získat náhoda
.[4] V srpnu 2015 FreeBSD představil read_random
systémové volání pro získání náhodných dat z jádra.[5]
Tato systémová volání umožňují procesům přístup ke kvalitním náhodným datům bez otevírání a čtení z náhodná pseudo zařízení.
Microsoft Windows ' CryptGenRandom
a Apple iOS je SecRandom
API jsou velmi podobné. Nejsou však implementovány jako systémová volání.
Motivace
Operační systémy podobné Unixu tradičně dodávají náhodná data prostřednictvím dvou pseudo zařízení: / dev / random
a / dev / urandom
. Bezpečné a spolehlivé čtení náhodných dat z těchto zařízení však může být obtížné a komplikované. Útočník by například mohl narušit přístup procesu k pseudozařízením otevřením všech dostupných deskriptory souborů, nebo podobnou formou útok na vyčerpání zdrojů. Rovněž ruší používání těchto zařízení odvolání oprávnění. Neprivilegovaným procesům je často odepřena schopnost otevírat a číst soubory a zařízení a zařízení náhodnosti nejsou ani viditelná vykrojený procesy.
Obtížnost používání náhodných pseudo zařízení často vede vývojáře k tomu, aby místo toho používali standardní funkce knihovny. Některé z nich, například Programovací jazyk C. je rand ()
, náhodný()
, a drand48 ()
, jsou velmi nebezpečné při použití pro kryptografii nebo podobné aplikace, protože tyto algoritmy jsou ve skutečnosti deterministické, protože byly záměrně ochromeny, aby uspokojily požadavky na opětovné použití semen prostřednictvím rozhraní srand ()
, srandom ()
, a srand48 ()
.
Mezi těmito hovory existuje významný rozdíl: getentropy ()
zaručuje, že náhodná čísla budou vrácena okamžitě, bez blokování. Vyžaduje provozní podporu, která zaručuje náhodnou inicializaci datového proudu při nejbližší příležitosti. Abychom povzbudili ostatní operační systémy, aby se řídily tímto modelem, getentropy () nemůže označovat chyby aplikace. Ostatní zde popsaná volání mohou místo toho vracet chyby nebo blokovat neurčitě. Taková sémantika blokování byla zapletena do významných problémů.[6]
Jelikož se bezpečnost stává ve vývoji softwaru rozšířenější prioritou, náhodnost kvality se používá častěji a ve více kontextech. Z tohoto důvodu je poskytování kvality náhodnosti stále více považováno za základní odpovědnost jádra. Systémová volání jsou tradiční rozhraní, jehož prostřednictvím proces využívá jádro služby jádra a jádra proto podporují přístup k náhodnosti prostřednictvím systémových volání.
Používání
Protože je rychlejší a přidává další vrstvu míchání entropie, obvykle se navrhuje, aby procesy používaly data těchto syscallů prostřednictvím uživatelského prostoru kryptograficky bezpečný generátor pseudonáhodných čísel (CSPRNG) namísto přiřazování načtených dat přímo proměnným. Za tímto účelem obsahuje standardní knihovna OpenBSD C arc4random
, které programy se mají volat, když potřebují náhodná data.[1] Jako getentropy
, arc4random
také nemusí blokovat ani vrátit chybu.
Tento přístup umožňuje programu získat z jádra méně entropie, aniž by se snížila síla jeho náhodných dat. The getentropy
na základě tohoto předpokladu je navrženo systémové volání, které neposkytuje více než 256 bajtů na volání.[1][7]
Viz také
Reference
- ^ A b C "getentropy (2) OpenBSD manuálová stránka". Ruční stránky OpenBSD. OpenBSD. Citováno 27. května 2016.
- ^ „[PATCH, RFC] náhodné: zavést systémové volání getrandom (2)“. LKML. 17. července 2014. Citováno 30. prosince 2015.
- ^ „Linux 3.17“. Linux Kernel Newbies. Citováno 30. prosince 2015.
- ^ Darren, Moffat. „Nová systémová volání systému Solaris: getentropy (2) a getrandom (2)“. / dev / urandom. Věštec. Citováno 3. ledna 2016.
- ^ „Revize r286839“. svnweb.freebsd.org. FreeBSD. Citováno 29. srpna 2017.
- ^ "Python bloky během bootování". Citováno 28. dubna 2017.
- ^ "arc4random (3) Manuální stránka OpenBSD". Ruční stránky OpenBSD. OpenBSD. Citováno 27. května 2016.
externí odkazy
- Systémové volání náhodných čísel: getrandom (), LWN.net, 23. července 2014, autor: Jake Edge