- A remote side channel attack that uses javascript to perform timing attacks. One possibility is to use the web-worker attack that was discussed in a meeting last Wednesday to slow down the computer in a consistent way, and then time how long a certain computationally heavy action takes and use the variations in that time as the side channel. Possibly try to steal RSA exponents for a SSL connection by injecting javascript in a different unencrypted page loaded at the same time.
- Provably correct implementations of cryptographic functions. Use a proof assistant to prove the correctness of the implementation, then use a tool to extract the program code directly from the proof. I haven't looked into it much, but I know there has been work done with provably correct micro-kernels, such as showing that they are immune to buffer overflows.
I spent most of the week switching from Crypto++ to OpenSSL for the cryptographic library in the publisher program. It was brought to my attention that Crypto++ isn't nearly as actively maintained as OpenSSL. I had originally avoided OpenSSL because of the implementation issues brought up, however, the OpenSSL cryptographic library is the standard cryptographic library for C/C++. The main reason to switch was precautionary, it is unclear how many people are using Crypto++ in a major product, so we switched to the de facto standard.
I underestimated how long it would take me to switch from Crypto++ to OpenSSL. I estimated it would take me a few hours, but it ended up taking 3 days. The main reason is that I was unfamiliar with the OpenSSL interface, which isn't well documented, and has a steep learning curve. I was also using Crypto++ for some tasks other than encryption and signing, such as key handling and encoding. On top of that, I ran into a bug that I had an incredibly hard time fixing. I was allocating memory for objects using OpenSSL's allocation functions, which call malloc, and then freeing them with delete, or visa versa. I wasn't aware that this causes undefined behaviour, which caused a bug later in the program. I have finished the transition and implemented a command line interface around the API.
No comments:
Post a Comment