Šifrování pomocí hesla v Pythonu

Karlitos

Šifrování pomocí hesla v Pythonu
« kdy: 27. 07. 2015, 17:10:35 »
Ahoj,

zacal jsem pracovat ve firme, kde maji jedno univerzalni heslo na na mnoho sluzeb (LDAP), ale neumoznuji aby si ho zamestnanec zvolil. No asi kdyz bych tlacil na administratory tak by to slo ale nebudu to delat hned po nastupu.


Koukal sem ze nekteri kolegove/kolegyne skncily s post-item na monitoru, takze ezpecnost na prvnim miste  :)

Me me napadlo udelat si nejaky jednoduchy skriptik, ktery by mi po zadani vlastniho hesla desiroval to firemni a vlozil ho do schranky. Tu druhou cast resi velmi dobre python modul pyperclip, tak ted resim jak delat to sifrovani/desifrovani.

Na internetu jsem nasel nejake navody a skoncil u:
Kód: [Vybrat]
#!/usr/bin/env python

import pyperclip
from Crypto.Cipher import AES
import base64
import getpass

key = 'moje_tajne_silne_heslo'
pwd = 'firemni_heslo'

cipher = AES.new(key.rjust(32), AES.MODE_CBC, 'This is an IV456')
encoded = base64.b64encode(cipher.encrypt(pwd.rjust(16)))

print 'Encoded', encoded

try:
    key2 = getpass.getpass('Input your key: ')
    cipher2 = AES.new(key2.rjust(32), AES.MODE_CBC, 'This is an IV456')
    decoded = cipher2.decrypt(base64.b64decode(encoded)).strip()
    print 'Decoded', decoded

    pyperclip.copy(decoded)

except:
    print 'Exception occured, perhaps wrong password'

Rad bych se jen zeptal jestli je tenhle postup principialne v poradku/nejde udelat lepe a jednoduseji. Predevsim mi jde jen o to abych nemusel mit firemni heslo nekde na apirku nebo ulozene v plain-textu
« Poslední změna: 27. 07. 2015, 20:54:08 od Petr Krčmář »


Shortpass

Re:Jak jednoduse za-/odsifrovat text pomoci hesla v Pythonu
« Odpověď #1 kdy: 27. 07. 2015, 18:19:43 »
Když opomenu to, že je ten AES použit naprosto primitivně (radikálně to sníží bezpečnost celé šifry, ale pořád zůstává o dost lepší, než post-it), tak je hlavní problém v tom, že skript nedetekuje chybné zadání hesla (key2). Při špatném key2 nevznikne výjimka, ale nesmyslné heslo (decoded). Pro zachování úrovně skriptu bych doporučil přidat před ten "print 'Decoded', decoded" ještě "assert len(decoded) < 16" ;-)

Shortpass

Re:Jak jednoduse za-/odsifrovat text pomoci hesla v Pythonu
« Odpověď #2 kdy: 27. 07. 2015, 18:26:36 »
A teď vážně: třeba takový https://pypi.python.org/pypi/simple-crypt vypadá (aspoň na první pohled) o dost líp...

Karlitos

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #3 kdy: 27. 07. 2015, 23:24:35 »
Nadhera diky presne tohle sem hledal  :)

Jenda

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #4 kdy: 28. 07. 2015, 02:40:23 »
Proč nemůžeš proboha použít něco hotového jako gpg nebo openssl?


Karlitos

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #5 kdy: 28. 07. 2015, 08:40:47 »
Proč nemůžeš proboha použít něco hotového jako gpg nebo openssl?

Me nejde o nejvyssi stupen bezpecnosti spis o nejake pragmaticke reseni abych si nemusel to firemni heslo pamatovat, nemusel ho mit nikde v plain-textu a mohl ho presto co nejjednoduseji pouzit. Takhle sem se aspon naucil par novych veci v pythonu :-)

Karlitos

Re:Jak jednoduse za-/odsifrovat text pomoci hesla v Pythonu
« Odpověď #6 kdy: 28. 07. 2015, 09:50:51 »
A teď vážně: třeba takový https://pypi.python.org/pypi/simple-crypt vypadá (aspoň na první pohled) o dost líp...

Tak jsem to zkousel a je to krasne jednoduche, blbuproste, bezpecne ... ale poo ...ma ..leeeee. Na starsim Core i5 mi to za-/desifrovani zabere kolem 2 sekund cimz se to nehodi pro zamyslene pouziti.

aaa158

  • ***
  • 238
    • Zobrazit profil
    • E-mail
Re:Šifrování pomocí hesla v Pythonu
« Odpověď #7 kdy: 28. 07. 2015, 10:50:26 »
Odporucam pass: http://fedoramagazine.org/using-pass-to-manage-your-passwords-on-fedora/
Jednoduche, bezpecne, v prikazovom riadku.

xxxx

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #8 kdy: 28. 07. 2015, 10:59:46 »
a co pouzit proste passwordstore : http://www.passwordstore.org/

frk

Re:Jak jednoduse za-/odsifrovat text pomoci hesla v Pythonu
« Odpověď #9 kdy: 28. 07. 2015, 11:25:00 »
A teď vážně: třeba takový https://pypi.python.org/pypi/simple-crypt vypadá (aspoň na první pohled) o dost líp...

Tak jsem to zkousel a je to krasne jednoduche, blbuproste, bezpecne ... ale poo ...ma ..leeeee. Na starsim Core i5 mi to za-/desifrovani zabere kolem 2 sekund cimz se to nehodi pro zamyslene pouziti.

není důvod, aby bylo AES takhle pomalé. asi jedeš podle toho instantního receptu a používáš RSA, takže generování klíče nějakou chvilku zabere.. :) A nakonec to šifruješ vlastně 2x - zprávu i samotný klíč, úplně zbytečně.

Karlitos

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #10 kdy: 28. 07. 2015, 13:56:37 »
Vsem moc dekuji za rady, pass jsem doted neznal a splnuje presne to jsem potreboval vcetne kopirovani hesla do schranky.  :) Ted jeste vyresit jak prez nejake jednoduche Gui TK/PyQT mu predat passphrase. V man strankach jsem k tomu nenasel prislusny parametr.

czz

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #11 kdy: 28. 07. 2015, 14:46:52 »
Pozri man zenity. Pokial viem byva stabdardne predinslalovane skoro vsade. zenity --password ti na stdout vrati cokolvek zadas do toho dialogoveho okna, tak by si to snad mohol nejak cez pipe dostat do tvojho skriptu.

Shortpass

Re:Jak jednoduse za-/odsifrovat text pomoci hesla v Pythonu
« Odpověď #12 kdy: 28. 07. 2015, 17:25:13 »
Tak jsem to zkousel a je to krasne jednoduche, blbuproste, bezpecne ... ale poo ...ma ..leeeee. Na starsim Core i5 mi to za-/desifrovani zabere kolem 2 sekund cimz se to nehodi pro zamyslene pouziti.

Je to pomalé kvůli 100000 cyklům PBKDF2. Zpomalí to obdobně hádání hesla hrubou silou - proto se to takto používá. Jestli zadáváš hesla častěji než jednou za 2 sekundy (!?), tak se dá snížit počet cyklů: třeba na 10000 nastavením LATEST=1 (simplecrypt/__init__.py).

T

Re:Šifrování pomocí hesla v Pythonu
« Odpověď #13 kdy: 28. 07. 2015, 18:12:06 »
Vsem moc dekuji za rady, pass jsem doted neznal a splnuje presne to jsem potreboval vcetne kopirovani hesla do schranky.  :) Ted jeste vyresit jak prez nejake jednoduche Gui TK/PyQT mu predat passphrase. V man strankach jsem k tomu nenasel prislusny parametr.

Hledej dál, určitě to jde, neb mi to tak funguje - používám pass a pokud nějaký program chce heslo nebo o heslo požádám sám (na to používám dmenu), vyskočí na mě okno (GTK), které se mě zeptá na heslo. Klíčová slova budou patrně gpg-agent, pinentry, ale už si napamatuju, co je potřeba kde nastavit.