Hlavní navigace

Python Cryptography Toolkit (1)

14. 2. 2005
Doba čtení: 3 minuty

Sdílet

Připravil jsem si pro vás popis modulu jazyka Python, který umožňuje komfortní práci se šiframi, haši...vlastně se vším, o čem se v dnešní "nebezpečné" době stále mluví. Pokud potřebujete v Pythonu vytvářet programy pracující s těmito funkcemi, je článek určen právě pro vás.

Python Cryptography Toolkit byl vytvořen za účelem poskytnutí bezpečné a stabilní základny pro psaní programů, které požadují kryptografické funkce. Příjemné je, že autor poskytuje jednoduché, konzistentní rozhraní pro podobné třídy a algoritmy. Např. všechny objekty blokové šifry mají stejné metody a návratové hodnoty. Hašovací funkce mají jiné rozhraní, ale také zůstává pro všechny stejné. Některá z těchto rozhraní jsou popsána jako dokumenty Python Enhancement Proposal – PEP 274 „API for Cryptographic Hash Functions“ a PEP 272 „API for Block Encryption Algorithms“. Motivací je lehké nahrazování starých algoritmů novějšími/bez­pečnějšími. Pokud například nyní používáte kryptovací algoritmus DES a chcete jej změnit na AES, můžete jednoduše změnit všechny příkazy DES.new() na AES.new()

Low-level funkce jako šifry a hašovací funkce jsou kvůli výkonu napsány v C, zatímco méně výkonově závislé funkce jsou napsány v Pythonu (kvůli snadné modifikaci). Funkce jsou testovány autorem na Pentiu II 500MHz s Linuxem. Na jiných počítačích se rychlost může měnit, a to v závislosti na stroji, kompilátoru a systému.

Balík je možné nalézt na serveru www.amk.ca/fi­les/python/cryp­to/. Po rozbalení (tar xzvf pycrypto-1.9a6.tar.gz) jej zkompilujete a nainstalujete příkazy python setup.py build & python setup.py install. Pycrypto je testován s Pythonem 2.2, může pracovat i se starší verzí, ale jestliže máte verzi 1.5.2 instalátor vás nepustí.

Nyní se pusťme do probírání jednotlivých funkcí pycrypto.

Crypto.Hash: Hašovací funkce

Hašovací funkce pracují tak, že jako svůj vstup vezmou libovolný řetězec a vrátí posloupnost dat o určité velikosti na výstupu. Tato posloupnost se generuje pomocí nějakého algoritmu ze vstupu. Je možné, že dvě odlišné posloupnosti dat budou mít po výpočtu stejný výstup. To znamená, že hašovací funkce jsou jednostranné, není tudíž možné z výsledku vypočítat původní data. Jedna jednoduchá hašovací funkce např. skládá všechny byty ze vstupu dohromady a pak provede operaci modulo 256. Výsledkem je haš vstupu.

Pycrypto obsahuje následující hašovací funkce:

  • MD2
  • MD4
  • MD5
  • RIPEMD *
  • SHA *

Funkce označené hvězdičkou jsou 160bitové, ostatní pak 128bitové.

Všechny hašovací moduly sdílejí stejné ovládací rozhraní. Po importování hašovacího modulu musíte volat funkci new(). Jedná se o jakýsi konstruktor, který vytvoří nový hašovací objekt. Do objektu můžete zadávat libovolné řetězce, a to pomocí metody update(). Výsledek hašovací funkce dostanete voláním metod digest() ahexdigest(). Funkci new() může být také předán řetězec, který je poté možné měnit metodou update().

Modul funkce obsahuje také proměnnou digest_size. Ta je celočíselnou konstantou, která udává velikost výsledného haše.

root_podpora

Metody hašovacích objektů

copy()
Vrací kopii hašovacího objektu. Metoda vytváří novou instanci, takže změna nového objektu neporuší originál.
digest()
Vrátí hašovací hodnotu objektu jako řetězec obsahující 8bitová data. Objekt není touto funkcí měněn.
hexdigest()
Vrací hašovací hodnotu jako řetězec obsahující data v hexadecimálním tvaru. Vrácený řetězec bude dvakrát tak dlouhý jako výsledek funkce digest() na tomtéž vstupu.
update(arg
Aktualizuje hašovací objekt novým řetězcem arg předaným jako argument.

Příklad:

<<< from Crypto.Hash import MD5
<<< m = MD5.new()
<<< m.update('abc')

<<< m.digest()
'\x90\x01P\x98<\xd2O\xb0\xd6\x96?}(\xe1\x7fr'
<<< m.hexdigest()
'900150983cd24fb0d6963f7d28e17f72'

To by vám snad dnes mohlo stačit:-) V příštím dílu si probereme kryptografické šifry.

Byl pro vás článek přínosný?