HoneyDew Security

From Versatile Monkey Wiki

Jump to: navigation, search

Contents

How Secure is HoneyDew?

Password Security

This gets very technical very fast, you've been warned.

Your password is never stored in plain text anywhere. Ever. The progress bar you see when you first log in is the device performing PBKDF2 hashing of your password using HMAC/SHA-1, with your email address as the salt. This is actually done twice. The result of the first set of PBKDF2 is used as your 'password' stored on the device. This will also be the basis of your encryption key if using encrypted mode (premium feature). This key is then run through PBKDF2 again, and this will be your 'server' password. The result of the second PBKDF2 is the only password related item that will ever leave the device. Both of the PBKDF2 results are stored on the device.

Device Security

Any obfuscation of the data stored on the device is pointless without a password required to access HoneyDew every time. I don't want to do this for a number of reasons (WAF is the largest), so HoneyDew relies on you to properly configure your device to be secure. I realize this is not always possible for every device, but hopefully it soon will be. (Yay device encryption in Honeycomb)

Server Security

As soon as the server gets your 'server password' from the device, it's again PBKDF2'd this time using a random salt from a properly seeded SecureRandom in java. This is what's stored in the DB and verified when the device sends it over. The server doesn't ever do the actual work of syncing, that's left to the devices, which enabled the server to never need to see the data. This allows for true device-side encryption. Note that this is a premium feature only, and not enabled by default even then. The reason is that if you forget your password and your DB is encrypted, it's gone. No one that can recover it if you used a decent password. This is a support issue for most HoneyDew users. If you don't have encryption enabled, then you're relying on me knowing how to properly secure a server and database. I think I'm decent. <Fingers crossed>

Database encryption

If you have DB encryption enabled, the result of the first set of PBKDF2 is used as your encryption key for 256-bit AES encryption using a random salt and following the OpenSSL algorithm for encryption. The encryption is directly equivalent to this Linux command line option:

[marwatk@bigguy ~]# echo -n 'Hello World!' | openssl enc -a -e -salt -aes256 -pass pass:foo

U2FsdGVkX1/uTCW4DNk1KVINSTKoEHuZruLnU+cHJ6k=

[marwatk@bigguy ~]# echo 'U2FsdGVkX1/uTCW4DNk1KVINSTKoEHuZruLnU+cHJ6k=' | openssl enc -a -d -salt -aes256 -pass pass:foo

Hello World!

Substituting the output of the PBKDF2 for the password. I don't pretend to know whether this is secure, but I do assume that the openssl guys know what they're doing, which is why I went this route.

Personal tools