Hlavní navigace

Python Cryptography Toolkit (3)

Jakub Matys

V dnešním dílu seriálu o knihovně Python Cryptography Toolkit přímo navážeme na díl minulý - budeme se věnovat šifrování.

Následující blokové šifry jsou k použití v balíku Crypto.Cipher:

Blokové šifry
Šifra Velikost klíče Velikost bloku
AES 16, 24 nebo 32 bytů 16 bytů
ARC2 Volitelná 8 bytů
Blowfish Volitelná 8 bytů
CAST Volitelná 8 bytů
DES 8 bytů 8 bytů
DES3 (Triple DES) 16 bytů 8 bytů
IDEA 16 bytů 8 bytů
RC5 Volitelná 8 bytů

Dalším typem šifer obsaženým v pycrypto jsou „proudové“ (stream) šifry. Tyto šifry pracují znak po znaku. Používají stejné rozhraní jako blokové šifry, délka bloku bude však vždy 1. Jediným použitelným feedback módem pro tento druh šifer je ECB. Pycrypto obsahuje následující proudové šifry:

Proudové šifry
Šifra Délka klíče
ARC4 Volitelná
XOR Volitelná

ARC4 je zkratka pro Alleged RC4 (= domnělý RC4). Ten byl v roce 1994 zaslán na Kyberpunkový mailinglist a do Usenetové konference sci.crypt. Autor tvrdil, že implementoval algoritmus RC4. Podobný anonymní dopis byl odeslán v roce 1996. Byl „objeven“ algoritmus Alleged RC2. Před vysvětlením funkcí a metod si uvedeme krátký příklad:

>>> from Crypto.Cipher import DES
>>> obj=DES.new('abcdefgh', DES.MODE_ECB)
>>> plain="Nějaký rozumný něcoříkající text."
>>> len(plain)
33
>>> obj.encrypt(plain)
Traceback (innermost last):
  File "<stdin>", line 1, in ?
ValueError: Strings for DES must be a multiple of 8 in length
>>> ciph=obj.encrypt(plain+'XXXXXX')
>>> ciph
'!I*\xeb38\x8d"ns\x17L\xef\xc3\xb8p(\x125\x1d\xb3\x8b\xc8\x06\xf0\xb4[9\x92Q\x81c\xd2\x0f\x19J\x0e\x13<Q'

>>> obj.decrypt(ciph)
'Nějaký rozumný něcoříkající text.'

Všechny šifry v balíku sdílejí stejné ovládací rozhraní. Po importování zvoleného balíku jsou k dispozici dvě proměnné a jedna funkce:

new(key, mode[, IV])

Vrací šifrovací objekt, přičemž použije klíč key a feedback mód mode. Pokud se jedná o mód CBC nebo CFB, musí být specifikován další parametr funkce IV. IV je řetězec o stejné délce, jako je velikost bloku. Algoritmus RC5 má skupinu dalších parametrů:

  • version – verze algoritmu použitá programem
  • wordsize – velikost slova – 16 nebo 32 bitů. Větší hodnota je lepší a je defaultně nastavena.
  • rounds – počet okruhů k použití – vyšší číslo znamená větší bezpečnost. Proměnná může nabývat hodnot od 0 do 255, takže můžete volit poměr rychlost-bezpečnost.
block_size
Celočíselná hodnota uvádějící velikost bloků použitých při šifrování. Řetězce, které jsou předávány šifrovacím a dešifrovacím metodám, musí být násobkem této hodnoty. U proudových šifer je hodnota této proměnné 1.
key_size
Celočíselná hodnota – velikost klíčů požadovaných tímto modulem. Jestliže je key_size nastavena na 0, algoritmus akceptuje libovolnou délku klíčů. Není možné předat klíč o délce 0!

Všechny šifrovací objekty mají nejméně tři proměnné. block_size a key_size jsou totožné s výše popsanými proměnnými. IVobsahuje inicializační hodnotu feedback módu. Tato proměnná může poukazovat na původní data, avšak pouze u prvního bloku šifrovaných dat. Dále pak objekty obsahují následující metody:

decrypt(string)
Dešifruje string, vrací řetězec obsahující původní data.
encrypt(string)
Šifruje nenulový řetězec. U obou funkcí platí, že délka řetězce musí být násobkem velikosti bloku, pro proudové šifry však může být jakékoliv délky.
sync()
Tato metoda je určena pouze pro objekty používající PGP feedback mód. Modifikuje IV synchronizací s předchozími zašifrovanými daty.

Na závěr bych uvedl rychlosti jednotlivých algoritmů:

Rychlosti algoritmů
DES 5 100 K/s
DES3 1 830 K/s
IDEA 3 050 K/s
ARC2 2 160 K/s
ARC4 8 830 K/s
Blowfish 9 250 K/s
CAST 2 960 K/s
RC5 2 060 K/s
AES 7 060 K/s

Tak to je pro dnešek vše…

Našli jste v článku chybu?