Now that work on gathering random bytes from online sources
has finished, I have begun working on tracking keystrokes and attempting to
build a record of timestamps and cycles after boot-up for each key pressed. This
has been more challenging than expected because each major operating system
platform handles the raw input of the keyboard differently. The first platform
I worked on was Mac OS X. I thought the UNIX-based OS would use device event
files to record keystrokes but Apple changed the architecture so that the same
information was in a much more obscure location within Application Services.
Amir gave me a Macbook Air to work on but we did not have the passwords for any
of the accounts. Instead of having to load a new OS on the machine, Adam let me
borrow the Macbook Pro he had been working with. Eventually, the only solution
I could come up with was to use logKextClient, a software that is able to
capture all keyboard input. While it records the timespan range for the
collected data, it does not assign a timestamp to each individual key pressed,
let alone include the number of CPU cycles that have passed.
Trying to find a keylogger solution for Windows and Linux
have proven similarly difficult. While I would like to test a simple script
which reads the Linux device event file, that script failed when Ubuntu was
loaded as a virtual machine on the MBP. In fact, the device event file for the
keyboard was empty. This is probably because keyboard input is routed through
the VM interface and the data never gets written to the event file. I will need
to read more about device event files before I can work on the Linux platform.
I found PyKeylogger, a Python extension that is supposed to work for both
Windows and Linux. I downloaded it on my Windows 8 machine but the installation
process always fails. I will have to take a deeper look into my options for
Windows as well.
Meanwhile, I have started my Stanford online courses in
cryptography and startup engineering. Both courses will give me more knowledge
and experience to help me with my project on cryptographic randomness.