Hlavní navigace

Python Cryptography Toolkit (1)

Jakub Matys 14. 2. 2005

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.

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.

Našli jste v článku chybu?

14. 2. 2005 14:26

Fletcher (neregistrovaný)
První odstavec pod zmiňovaným nadpisem obsahuje několik ne zcela přesných a jednoznačným výroků.

1) "...a vrátí posloupnost dat o určité velikosti na výstupu..."

Výstupní data mají KONSTANTNÍ délku, nezávisle na velikosti vstupu. Možná, že autor slovo "určité" myslel vzhledem ke zvolené hash funkci, ale to není z tetxtu zřejmé.

2) "...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 jednost…





15. 2. 2005 8:40

Mam dojem, ze si trochu mylite vyznam h. funkcie. To ze najdem obe odmocniny a neviem, ktora bola hashovana je jedno, tu funkciu som prelomil. Priklad pri digitalnych podpisoch h. funkcia nema utajit podpisany dokument, ten je verejne znamy (no mozno nie verejne ale ten kto ma overit podpis tak ho musi mat). V dig. podpisoch sluzi hashovacia funkcia aj na to, aby sa nedala vytvorit dobre podpisana sprava (random message forgery). Ja s Vami suhlasim, ze kebyze viem ratat tie odmocniny tak aj tak …
Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Root.cz: Pinebook: linuxový notebook za 89 dolarů

Pinebook: linuxový notebook za 89 dolarů

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

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

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

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase