Hlavní navigace

Python Cryptography Toolkit (5)

Jakub Matys 21. 3. 2005

V dnešním (posledním) dílu se podíváme na modul Util. Hlavně se zaměříme na generátory náhodných čísel.

Crypto.Util.number

Tento modul obsahuje různé funkce zabývající se čísly

GCD(x, y)
Vrací největší společný dělitel čísel x a y.
getPrime(N, randfunc)
Vrací Nbitové náhodné prvočíslo, přičemž používá náhodná data získaná z funkce randfunc. Ta musí přebírat jeden celočíselný argument a vracet řetězec náhodných dat o odpovídající délce. Je vhodnější použít metodu get_byte z třídy RandomPool než metodu read() čtoucí např. z /dev/random.
getRandomNumber(N, randfunc)
Vrací Nbitové náhodné číslo, přičemž používá funkci randfunc.
inverse(u, v)
Vrací převrácenou hodnotu operace u modulo v.
isPrime(N)
Vrací true, jestliže je N prvočíslo.

Crypto.Util.ran­dpool

Běžné generátory náhodných čísel jsou pro kryptografické účely mnohdy nedostačující, protože je často možné z výstupu odvodit předchozí nebo i budoucí výstup. Při generování klíče by mohlo problém vyřešit použití silné šifry nebo hashovacího algoritmu pro další generování.

Pro generování náhodných čísel je důležitý pojem entropie. Entropie je v podstatě počet možných stavů, které existuji v daných datech. Obvyklou jednotkou jsou bity, takže jeden náhodný bit bude mít entropickou hodnotu právě jeden bit. Jeden náhodný byte bude mít entropickou hodnotu 8 bitů. Mějme příklad, kdy databáze obsahuje datovou oblast specifikující pohlaví osoby. To je reprezentováno jedním znakem „M“ nebo „Z“. Jakou entropii bude mít tato oblast? Protože jsou zde pouze dvě možné hodnoty, není to osm bitů, ale jeden.

Úkolem generátorů náhodných čísel je tedy vytváření dostatku entropických bitů. Tento dostatek je však velmi relativní, protože výkon počítačů se neustále zvyšuje. Pokud například vygenerujete 32bitový RSA klíč, existuje pouze 4,2 miliard možných kombinací. Více informací naleznete v RFC 1750.

Modul randpool implementuje silné generátory náhodných čísel v třídě RandomPool. Vnitřní stav objektu se skládá z řetězce náhodných dat, který je v případě potřeby vrácen.

class RandomPool([num­bytes, cipher, hash])
Objekt třídy RandomPool může být vytvořen bez parametrů – budou použity výchozí hodnoty. numbytes nastaví počet bytů generovaných dat, defaultně je to 160 bytů(1280 bi­tů). hash může být řetězec obsahující jméno modulu hashovací funkce, která bude použita k prohazování náhodných dat, nebo objektu modulu podporujícího hashovací rozhraní. Defaultním hashovacím algoritmem je SHA. Parametr cipher se v této době nepoužívá, byl odstraněn ve verzi 1.1.

Objekt třídy obsahuje následující metody a proměnné:

add_event(time[, string])
Přidá událost do procesu generování, parametr time by měl být nastaven na aktuální systémový čas. string může být řetězec dat, která budou XORována s generovanými daty a mohou být použita ke zvýšení hodnoty entropie. Např. pokud šifrujete dokument, můžete použít hashovou hodnotu dokumentu. Vrácenou hodnotou je obsah proměnné self.entropy před přidáním dat
bits a bytes
Konstantní celočíselné hodnoty obsahující počet bitů/bytů dat v objektu.
entropy
Celočíselná hodnota udávající počet entropických bitů.
get_bytes(num)
Vrací řetězec obsahující num bytů náhodných dat a sníží hodnotu proměnné entropy. Není chybou, když je entropie snížena na 0, nebo když je při této hodnotě funkce volána.
stir()
Zakóduje data v objektu. Tato funkce zničí předcházející stav objektu. Je doporučováno funkci volat před použitím a po použití objektu.
class PersistentRan­domPool(filena­me[, numbytes, cipher, hash])
Tato třída je podtřídou RandomPool. Cesta předaná parametrem filename je automaticky otevřena a data jsou použita v generovacím procesu. Pokud nebude soubor existovat, bude objekt inicializován jako nadřízená třída.
save()
Otevře soubor pojmenovaný parametrem filename a uloží do něj náhodná data. Metoda používá modul pickle.
class KeyboardRandomPool
Třída je podtřídou PersistentRan­domPool a poskytuje metodu k získávání dat z klávesnice.
randomize()
(UNIX) Získá náhodná data z klávesnice. Při tomto procesu se hledí na stisknuté klávesy a na prodlevy mezi jednotlivými stisky.

Tak to by bylo vše. Jelikož tento díl je poslední, nezbývá mi než poděkovat čtenářům a doufat, že se někomu bude tato série hodit.

Našli jste v článku chybu?
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí