Feature Highlights

Screen Shots

EnterMasterPassword.gif
View to enter the master password. Nothing can be done until the correct password is entered.

SetMasterPassword.gif
View to set the master password. Follows the standard practice of requiring the same value to be input twice, for error checking. This is where the number of iterations can be set for the encryption algorithm. (Changing this value requires coverting all existing encrypted values, the same as if the password itself were changed.)

ViewOptions.gif
This is the View options "dialog" view. In addition to View options, there are Security options and following that Browser options. The views are navigated to sequentially, similar to a wizard style interface.

GroupedByTag.gif
Here is the list view, grouping by Tag. Clicking on the small arrow which is visible at the right of the selected item will navigate to that item's details page, for viewing and/or editing. (Right arrow will also navigate to details page of the active item.) New items can be created through the context menu of using the button at the bottom right corner of the window.

CreditCardDetails.gif
This shot is showing the credit card details view. Notice the Tag combo box, which allows you to select multiple values. New tags are created right here.

LogonDetails.gif
This is the Logon tab of the web site details view, showing the password generating tool.

Security Overview

Encryption Algorithm

Encryption is implemented in two basic parts, first, generating a 256 bit key from the supplied master password, and second, using that key to encrypt the values contained in the data file. Both the master key generation and the encryption steps are performed using built-in .Net utilities.

Key generation takes three parameters: the user entered password, a random value called a SALT, and a value which specifies the number of iterations used in the method internally when generating the key. The larger the number of iterations, the more secure - harder to crack - is the key that is generated and, it follows, more securely encrypted values.

When a new file is created the user is prompted to enter a password to serve as the master password for the file. At this point the master key is generated for the first time; the random value SALT that is generated and used in the key generation is stored in the file along with the number of iterations. These values along with the password serve as the data for regenerating the key each time the user logs in. Along with the SALT and number of iterations, a value called a HASH is generated from the key. Creating a hash is a one-way operation - given the same input the output is always the same, but the input cannot be arrived at from the output. Because of this property, a hash can be used to validate the password that the user enters.

The key itself is not stored in the data file, of course, as that would be giving away the means to decrypt all the encrypted values in the file. The Key is generated when the user enters the password. It is stored in a single location of memory within the running program, where it remains until either the program is terminated or is wiped from memory in response to the user setting for invalidating the password. Additionally, the memory used for storing the secret key is protected using the ProtectedMemory class in the .Net cryptographic library, making it secure against memory scanning, memory dumping and other potential points of attack.

The master password (and the master key) is required for both encrypting and decrypting values. Both operations use the Rijndael symmetric encryption algorithm as provide by Microsoft as part of the .Net framework. The main parameter to the encryption algorithm is a 256 bit key. Instead of using the master key directly, an intermediate key value is generated with the master key as input along with a separate, unique SALT value that is then stored with the encrypted value in the data file. This maneuver adds another layer of obfuscation to the final encrypted value.

For more detailed information about the algorithms used for encrypting values, start with Microsoft documentation on the cryptography library:

Internal Security Measures

Significant measures have been taken to ensure that the executing program is safe from external attacks such as memory snooping. These measures include: