Hlavní navigace

Python Cryptography Toolkit (4)

Jakub Matys 14. 3. 2005

V dnešním dílu se podíváme na protokol umožňující rozkládání a skládání dat a na šifry s veřejnými klíči.

Crypto.Protocol­.AllOrNothing

Tento modul implementuje protokol pro paketovou transformaci all-or-nothing. Předávaná data jsou transformována do bloků zprávy. Všechny bloky musí být tedy obdrženy před provedením opačné transformace, pokud jsou některé bloky poničeny nebo ztraceny, originální data nemohou být obnovena. all-or-nothing není šifra, ačkoliv používá algoritmus blokové šifry. Šifrovací klíč je náhodně generován a je možné ho extrahovat z bloků zprávy.

class AllOrNothing(cip­hermodule, mode = None, IV = None)

Třída implementující all-or-nothing protokol.

ciphermodule je modul obsahující šifrovací algoritmus, který bude použit. Volitelné argumenty mode a IV jsou použity metodou ciphermodule.new(). Při rozkládání a skládání textu musí být všechny tři argumenty stejné.

Modul předaný jako ciphermodule musí zajistit rozhraní definované v PEP 272. Šifrovací klíč je generován automaticky, vždy když je potřeba.

Třída obsahuje dvě metody pro rozkládání a skládání dat z bloků:

digest(text)
Provede transformace řetězce text na bloky dat. Ty jsou uloženy v seznamu řetězců, kde každý řetězce má bitovou délku odpovídající velikosti bloku šifry.
undigest(mblocks)
Provede obrácenou transformaci seznamu bloků zprávy. Funkce vrací řetězec.

Crypto.PublicKey

Všechny doposud popsané šifrovací algoritmy používaly pouze privátní klíče. Stejný klíč byl použit pro šifrování i pro dešifrování. Všechny komunikující strany musely tedy tento klíč znát, aby si mohly předávat data. Může se však stát, že potřebujete komunikovat šifrovanou cestou přes nechráněný kanál. Musíte však také dát nějakým způsobem vědět vašemu protějšku, jaký máte klíč. Elektronickou cestou to není možné, kvůli bezpečnosti. Můžete mu předat klíč také osobně. Daleko vhodnějším řešením se však jeví použití šifer s veřejným klíčem. V tomto systému jsou použity dva rozdílné klíče – jeden pro šifrování a jeden pro dešifrování. Šifrovací (veřejný) klíč může být předán např. pomocí e-mailu, privátní klíč musí být stále ve vašich rukou. Data zašifrovaná veřejným klíčem můžete poté velice jednoduše rozšifrovat svým privátním klíčem.

Díky tomuto principu je vhodným použitím těchto algoritmů také podepisování e-mailů. Jednoduše zprávu podepíšete svým privátním klíčem, a kdokoliv si může ověřit její pravost vaším veřejným klíčem.

Algoritmy použité v balíku:

Algoritmus Použití
RSA Šifrování, autentizace/po­depisování
ElGamal Šifrování, autentizace/po­depisování
DSA Autentizace/po­depisování
qNEW Autentizace/po­depisování

Příklad použití algoritmu s veřejným klíčem:

>>> from Crypto.Hash import MD5
>>> from Crypto.PublicKey import RSA
>>> RSAkey = RSA.generate(384, randfunc)
>>> hash = MD5.new(plaintext).digest()
>>> signature = RSAkey.sign(hash, "")
>>> signature   # Vypise jak vypada nas podpis
('\021\317\313\336\264\315' ...,)
>>> RSAkey.verify(hash, signature)     # Overi nas podpis
1
>>> RSAkey.verify(hash[:-1], signature)# A tady nam podpis nesedi
0

Pro vytvoření objektu s novým párem veřejného a privátního klíče slouží funkce generate(size, randfunc, prograss_func = None). size udává velikost generovaného klíče, čím je tato hodnota větší, tím je obtížnější šifru prolomit. randfunc je funkce generující náhodná čísla, musí přijímat jedno celé číslo N jako parametr a vracet řetězec náhodných dat o délce N bytů. Můžete použít generátor obsažený v pycrypto – Crypto.Util.ran­dpool (probereme ho v některém z příštích dílů). Není možné funkci předat aktuální čas nebo funkce z modulu random.

Objekt vrácený funkcí generate bude vždy obsahovat následující metody:

canencrypt()
Vrací pravdivou hodnotu, pokud algoritmus umožňuje šifrovat a dešifrovat data.
cansign()
Vrací pravdivou hodnotu, pokud algoritmus umožňuje podepisovat data.
decrypt(tuple)
Dešifruje n-tici privátním klíčem, přičemž vrací řetězec s daty. Metoda vyvolá výjimku, pokud není znám privátní klíč. Výjimku také vyvolá, jestliže je řetězec moc dlouhý.
encrypt(string, K)
Šifruje string s privátním klíčem. Vrátí n-tici řetězců, délka n-tice je u odlišných algoritmů různá. K je řetězec náhodných dat. Funkce vyvolá výjimku, jestliže je řetězec string moc dlouhý.
hasprivate()
Vrací pravdivou hodnotu, pokud objekt obsahuje data privátního klíče.
publickey()
Vrací veřejný klíč.
sign(string, K)
Podepíše string. Vrácenou hodnotou je n-tice. Teoreticky může vrátit n-tici jakéhokoliv objektu v Pythonu, prakticky se však jedná o čísla nebo řetězce. Různé algoritmy vrací n-tice o rozdílných velikostech. Metoda vyvolá výjimku, pokud je string moc dlouhý.
size()
Vrací maximální délku řetězce, který může být zašifrován nebo podepsán (v bitech).
verify(string, signature)
Ověří string podpisem signature, pokud je vše v pořádku, vrací pravdivou hodnotu.

Tak a to by bylo pro dnešek vše…

Našli jste v článku chybu?

2. 12. 2010 22:13

mahrlo (neregistrovaný)

www.priemyselne.eshopmahrlo.sk
Divízia priemyselnej meracej a regulačnej techniky má vo svojom sortimente:

- snímanie a meranie teploty, snímanie výšky hladiny, meranie prietoku
- snímanie a meranie tlaku a vlhkosti
- prevodníky neelektrických a elektrických veličín, napájacie zdroje,
- zobrazovacie a ukazovacie prístroje, regulátory teploty a tlaku,
-priemyselné armatúry a ventily
- zaoberáme sa technickým poradenstvom
Partneri: Energonova , JSP, Rawet, BD Sensors, Manomer, Rosemount, Comet sy…






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

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

Přehledná titulka, průvodci, responzivita

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

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

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

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

1. den EET? Problémy s pokladnami

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

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

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

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

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

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

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

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

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

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

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

Jsou čajové sáčky toxické?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy