====== Security ====== ===== Google ===== Quick links in case you need to verify things: * [[https://myaccount.google.com/security?pli=1|Security Home]] * [[https://security.google.com/settings/security/permissions|Connected Apps]] * [[https://security.google.com/settings/security/apppasswords|One time app passwords]] ===== General Security ===== [[http://www.shamusyoung.com/twentysidedtale/?p=11523|Shamus attempts to explain hashing]] then [[http://codahale.com/how-to-safely-store-a-password/|Use bcrypt to store passwords]]. Consider [[http://code.google.com/p/py-bcrypt/|py-bcrypt]] at code.google. No documentation there, yet. [[http://www.mindrot.org/projects/py-bcrypt/|Old documentation]]. At the bottom of this page, is the compiler used to make Python 2.6 and 2.7 [[http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express#Visual_Studio_2008_Express_Downloads|Visual Studio 2008 Express]]. On Windows, you'll have to make the following change: $ diff bcrypt_python.c.org bcrypt_python.c 70a71,72 > char *password_copy; > char *salt_copy; 76,77c78,79 < char *password_copy = strdup(password); < char *salt_copy = strdup(salt); --- > password_copy = strdup(password); > salt_copy = strdup(salt); Then you can build it with setup, like so: c:\Python27\python.exe setup.py build import bcrypt # Hash a password for the first time, with a randomly-generated salt hashed = bcrypt.hashpw(password, bcrypt.gensalt()) # gensalt's log_rounds parameter determines the complexity. # The work factor is 2**log_rounds, and the default is 12 hashed = bcrypt.hashpw(password, bcrypt.gensalt(10)) # Check that an unencrypted password matches one that has # previously been hashed if bcrypt.hashpw(password, hashed) == hashed: print "It matches" else: print "It does not match" Never use passwords whose unsalted MD5 hash can be looked up here: [[http://md5.gromweb.com/]] [[http://eli.thegreenplace.net/2010/06/25/aes-encryption-of-files-in-python-with-pycrypto/|AES encryption of files in Python with PyCrypto]]. Note that pycrypto-2.3 can be built with the same ''c:\Python27\python.exe setup.py build'' mechanism. Someone suggested [[wp>Whirlpool_(cryptography)]], it's offered in [[http://labix.org/python-mhash|mhash]], and a pure-python implementation from Bjorn Edstrom 16 december 2007 is here [[http://www.bjrn.se/code/whirlpoolpy.txt]]. ==== Verification ==== Maybe I should try to automate a way to verify the SHA1 Checksums of PGP signatures and upon success, verify the PHP signatures. Here's an old recipe: [[http://dannyman.toldme.com/2007/03/30/howto-verify-pgp-signature/|HOWTO: Verify a PGP Signature]]. **Keywords**: crypt, cryptography pgp sha