Department of Computer Science and Technology

Here are a few ideas for student projects — note that they are meant to be used as inspiration or a starting point for choosing a project, not ready-made proposals. If any of them sound interesting, or you have an idea of your own related to signal processing, technical aspects of cybersecurity, or cryptography, get in touch (by email, or find me in GE14 in the CL if pandemic-related restrictions allow).

For other ideas in these areas, take a look at Markus Kuhn's project ideas webpage.

Streaming signal processing for Julia

The Julia signal procssing library DSP.jl assumes that all input to a function is available before it is called. For example, to filter a (potentially very large) array of samples s, one would call filter(F, s), which would require all of s to be available in memory. This is a convenient interface, but makes operating on inputs that don't fit in RAM difficult.

Common operations such as filtering and resampling can be done in one pass through the input, using a constant amount of memory. This makes them amenable to a stream-based implementation, similar to flowgraph blocks in GnuRadio. A Julia library that implements this, possibly using DSP.jl to provide some of the underlying processing, would be very useful for dealing with large inputs.

Some care should be taken to make the library as convenient for the programmer as possible, using the available language features in Julia (perhaps channel-based composition of transformations, taking care to make the implementation generic so it can operate on any appropriate input type, ...).

Multiparty secret raffle

The idea comes from a somewhat silly discussion about organising a raffle for a paranoid group: imagine that you have several prizes your group won at a competition, and you want to distribute them with a random draw. Further, let's say you don't want to trust anyone not to rig the random selection. The simple solution is for every participant to provide an input to the random pool, combine them in some way (for example, hash them together), and use that to seed your generator.

This works if the draw is simple, but now imagine that you want to introduce preferences: each participant can say "I prefer to get prize X", and this will adjust the final probabilities in some way. This is still simple if everyone publishes their preferences and uses the joint random pool, but can you run the raffle without revealing this information?

The basic idea would be to use secure multiparty computation techniques (a subfield of cryptography dealing with the problem of multiple participants computing a function, where everyone contributes an input, without anyone learning anything other than the output) to solve this "problem". In theory, general multiparty computation is possible — the real question is how to do this in an efficient and usable manner.


Here is a short list of bits of hardware we have laying around that would be available if you come up with an interesting project using them:

  • Low-cost software defined radio: can you do something unusual with cheap (receive-only) radio receivers? We also have high-quality SDRs, but these might not be available for a long period because they are in use, and pandemic-related uncertainty means relying on access to Cambridge and the lab a bad idea.
  • Miniature cameras: I have multiple small cameras (such as these) that can record to an SD card or emulate an USB webcam. If you need them for any kind of project, contact me.
  • RFID: NFC readers, a Proxmark, a card emulator, ...