From Versatile Monkey Wiki
How Secure is HoneyDew?
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.
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)
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>
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:
[[email protected] ~]# echo -n 'Hello World!' | openssl enc -a -e -salt -aes256 -pass pass:foo
[[email protected] ~]# echo 'U2FsdGVkX1/uTCW4DNk1KVINSTKoEHuZruLnU+cHJ6k=' | openssl enc -a -d -salt -aes256 -pass pass:foo
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.