Data encryption solutions

I have been tasked with throwing together a small web app that will hold the passwords to different projects for my company.

I would like to use seaside to do this, but the biggest requirement is that we need to be able to either:

– encrypt the entire database, so that if the machine was compromised physically, the data would be useless.

or..

– encrypt the username and password fields to facilitate the above, also.

i am thinking that the first option might be easiest to implement.

any ideas on how i would pull this off with pharo?

Thanks!


 

Have a look at the ApplicationSecurity package:

http://80738163270632.blogspot.com/2014/03/application-security-presentation.html
http://80738163270632.blogspot.com/2014/10/application-security-2-checkpoint.html
http://80738163270632.blogspot.com/2015/02/application-security-3-setting-your.html

 

The NativeBoost version of my SQLite library supports SQLcipher which adds
transparent full database encryption to SQLite. It is not in the UFFI version
yet though.

http://sqlcipher.net

 

Hi!
If it help I’m using NaCl to do secure the passwords. You should not store the passwords of your users, not even encrypted.

For securing the passwords I use Sha-512 over the salted password.
————————————
User>>initialize
super initialize.
salt := (Nacl randomBytes: 16)

User>>setPassword: aPassword
hashedPassword := Nacl hash: (salt , aPassword asByteArray)

User>>validatePassword: aPassword
^ hashedPassword asByteArray = (Nacl hash: salt asByteArray , aPassword asByteArray)
————————————

Notice that:
1) I have a different salt for each password, if a bad guy want the passwords he is going to need a different rainbow table for each user.
2) I do not store the password. I do not even store the hash of the plain password.
3) Still I’m able to validate the password.

* Note that I’m using Nacl>>randomBytes: to generate a cryptographically safe random value. Here is not really necessary, BUT you should use it if you are creating Session-IDs or Tokens.

Encrypting the database is *tricky*. You not only have to encrypt the database, but also secure the key. First you need to know how much security you want:
1) Be secure if someone hack into the user running pharo.
3) Be secure if someone steal the server.
4) Be secure if someone has physical access to the running server. (All your keys are in RAM)
2) Be secure if someone hack root. (I doubt anything is going to save you here)

For most projects/business (unless working with really sensitive data, such as medical data) securing the OS (users and root) and encrypting the hard-disk should be enough. Also do not forget to encrypt the connections. If everything is on the same server just use https. But you may need more if you use Load Balancers, multiple servers and databases.

Cheers,
Alejandro

 

Hi Alejandro,

Coincidentally, I’ve just updated my SHA256/512 password hashing library, which
wraps a C library of the same. The salt is variable length between 8 and 16
octets long, and the output is in the informally standard md5crypt format
“$id$salt$passwordhash”.

Words:
http://www.samadhiweb.com/blog/2017.02.18.shacrypt.html
http://www.samadhiweb.com/blog/2013.11.17.shacrypt.html
https://www.akkadia.org/drepper/sha-crypt.html

Code:
https://github.com/PierceNg/PasswordCrypt

Pierce

 

This is speculation without knowing your scope and architecture,
but perhaps part of the puzzle is two factor authentication
via a $20 Yubico FIDO U2F Security Key.
https://www.yubico.com/store/
https://www.yubico.com/about/background/fido/
https://www.yubico.com/2016/02/use-of-fido-u2f-security-keys-focus-of-2-year-google-study/

BSD licensed C library for server-side..
https://developers.yubico.com/libu2f-server/
https://developers.yubico.com/U2F/Libraries/Using_a_library.html

cheers -ben
P.S. It might be cool to link the yubico client-side libraries (LGPL)
into the VM for Iceberg to authenticate via U2F to github.
https://github.com/blog/2071-github-supports-universal-2nd-factor-authentication
https://www.yubico.com/why-yubico/for-ind

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: