Friday, August 8, 2014

Week 13

Basic key import and management is available now. The private keys are encrypted with a passphrase provided by the user and stored locally, while the public keys are stored unencrypted. Every private key stored is encrypted with a key generated from the associated passphrase using AES in CBC mode. The following figures show how to import a private key:

1. Click "Set a private key".

2. Copy and paste your private key, and then enter the passphrase used for encryption.

3. Click "Set". Now your private key is stored locally and encrypted with the key generated from your passphrase.

To import the public keys from the publishers, first login with your passphrase.

Then click "Import a public key".

Copy and paste the public key you want to import, and enter your publisher's group number.

Hit "Import" and you are all set. Now you can use the extension as shown in the previous blogs.

Monday, August 4, 2014

Week 12

Here is a brief summary of the progress last week.

I removed the google closure library from the extension last week and imported a new crypto library called forge, since forge is more compatible with openssl (we are using openssl for the publisher) and more developer-friendly in terms of API. Also, I added the function of signature verification to the client extension.

If the signature is verified with the publisher's public key, the content or what's signed under the signature is displayed.

If the signature is not verified, the extension prompts the user that the signature is not verified.

What's more, group key unwinding was implemented. We adopt the RSA scheme for group key winding and unwinding, which allows easy revocation and group state update. Basically, with the RSA private key (n, e, d), where n is the public modulus, e is the public exponent, and d is the private exponent, the group state mi+1 = mid mod n for winding or updating the group state, where mi+1 is the updated group state, and mi is the previous group state. Reversely, for unwinding the group state and retrieving the group key, mi = mi+1e mod n, and the group key at state i is HASH(mi).