Auto insurance

ExaNotes – An Overdue Introduction

Posted in Programming, Technology on June 17th, 2009 by Carl Zulauf

Several months ago I started working on ExaNotes as a lightweight personal tool to write, access, and search notes from one of the many computers I may use throughout the day. I told a good friend of mine about the simple web app I was building and she said it sounded like a great tool for keeping a journal. I asked her if she could help test the app by keeping a journal and she hesitated. As good of friends as we were the idea of me having access to her journal was not a comfortable one. The convenience of being able to access her journal from any computer was appealing but she didn’t want to trade control of her privacy for convenience. Her desire for privacy gave me the idea of developing a system that was so secure that even the developer or administrator of the tool could not access the content users of the application have stored within it.

I decided to use this as a chance to learn much more about building secure web applications and I spent a few hours diagramming the concept. Then, I spoke with my friend again. I explained the design to her and she agreed the design would keep her journal secure enough that she would feel comfortable testing it and using it.

The basic design of ExaNotes is that the a user’s password is used to encrypt each user’s notes using the very strong AES-256 cipher. This password is only available to ExaNotes during the duration of the user’s browsing session. Once a logout or timeout has occurred the session data is destroyed and there is no longer any information left on the server which could be used to decrypt a user’s notes. The only thing stored on the server are the salted SHA-256 cryptographic hashes of the user’s username and password. Even the username is anonymized!

In reality there is no way to completely secure any web application from someone who has all the keys and the knowledge. A sufficiently skilled developer or administrator could modify ExaNotes in such a way that user credentials were captured at the time of login and stored somewhere, allowing them the ability to decrypt the notes of users whose logins they have captured. As it currently stands ExaNotes only retains the login credentials for the duration of the user’s session and the session data is not easily accessible. More than just my good nature allows me to promise ExaNotes will remain this way as long as I am administrating it. My own self interest is to thank as well. If I had access to the content of ExaNotes’ users I would assume a level of liability I do not want. Building a way to gain access to user content could force me to reveal content to a 3rd party. If the 3rd party was a good intentioned police officer wanting access to content to solve or prevent a murder there is very little ethical dilemma from my perspective. However, if an agent of an oppressive political organization attempted to coerce or force me into providing access to a user’s notes in an attempt to track and suppress political dessent it would be nice if I could avoid the ethical quandary by being able to truthfully respond that I simply have no way to provide access. I feel preventing myself from assuming that liability and building a truly secure and anonymous system is even more important than providing any mechanism for 3rd party investigation.

For some my promise is understandably not enough. To allow for independent validation of ExaNote’s design and security and to allow people to run ExaNotes on their own server I am offering the source code to anyone who requests it. For now anyone interested can send me an email and I will send you the source. Eventually I plan to start an open source project and release the source code under an open source license. I simply have not found the time and have not yet had requests from other developers to do so. For those interested ExaNotes is built using PHP,MySQL,HTML,CSS, and JavaScript. ExaNotes makes use of the prototype javascript library and tinyMCE rich text editor for its web interface. ExaNotes also contains a small API which could be used for desktop or “native” clients. If there is interest the API will be published with documentation.

The user interface of ExaNotes is clean, simple, and easy to learn. I generally follow the KISS principle in my interface design, which stands for “Keep It Simple, Stupid!” I’m sure you will agree that I have done that with ExaNotes. While the interface is simple I do not believe it is boring. ExaNotes provides a slick, even elegant interface for writing and managing your notes. This interface is lightweight yet modern, making use of modern web development tools like Ajax and Rich Text Editing while running fast on even the slowest computers and the smallest screens. ExaNotes even runs well on some mobile devices and is particularly optimized for use with the Palm Pre.

ExaNotes has been functional for a few months now and has been my primary note taking tool for roughly as long. I have been developing ExaNotes to fit my needs and those of a few of my friends and colleagues. I now feel this application is mature enough that it is ready for a larger audience and hopefully there is a large audience out there who will find it as useful as I do.

The public beta begins today. Simply visit ExaNotes to participate.

Please send me questions, criticism, suggestions, bugs, or any other feedback you have regarding ExaNotes. Leave a comment here, send me an email, message me on twitter, even find me on AIM or Facebook.

Tags: , , ,

One Response to “ExaNotes – An Overdue Introduction”

  1. Lakshmi Mareddy Says:

    Hi Carl! Now I know, how you came up with the change pwd instrxn.. You have been working on ExaNotes.. I dont see tweeterfollow using my ID until now atleast..

    To think of the gazillion number of times I imported emails from my email a/cs into unscrupulous apps such as FB etc. Makes you think doesnt it? Everything boils down to the ethic question doesnt it..?

Leave a Reply

Please answer the following question to confirm you are a human.
If you were sheep hurding two sheep and you walk them eleven miles in the morning and 5 miles in the afternoon, how many miles have you walked?