Jacob Weightman's Homepage

Magma FHE

In my last post many months ago, I offered some speculation about what sorts of homomorphic encryption schemes are possible:

So we have these two “impossibility results” for vector spaces and fields. But then on the simpler side of algebraic structures, we’ve already seen that there are secure homomorphic encryption schemes for groups like RSA, but these are really limited in the computations that they can express. I would guess there are also secure homomorphic encryption schemes for even simpler structures like monoids or even magmas.

Since then, I’ve circled back to this idea of homomorphic encryption schemes for magmas a number of times, which didn’t really amount to much of anything. Until now. (No, I didn’t solve a large open problem in cryptography).

Computing on Encrypted Data

A couple of years ago, I was at a cryptography conference for work. There were folks working on all kinds of exciting things, but I found myself in a long conversation with a fellow compiler engineer that happened to be working on systems for fully homomorphic encryption (FHE). While the term is rather fancy, the idea is pretty simple to understand, which is why it’s one of those things that I turn over and over again in my head from time to time. Typically when using encryption, one can translate data to and from an encrypted form, so that it’s hard for somebody else to learn what the original data is just by looking at its encrypted version. Unfortunately, because the encryption obscures the data, you can’t use that data in any way without first decrypting it. The whole idea of homomorphic encryption is to be able to do computations on this data in its encrypted form, with the idea being that even somebody you want to keep a secret from can do computations for you on your private data, and learn nothing about your secrets, or even the results of the computations they’re doing for you in the process. Seems like a neat idea, but it feels a bit far-fetched, right? Well, this is possible today, and its getting more and more practical all the time thanks to hard-working cryptographers and compiler engineers.

Solving Simple Tag Problems

This post is a continuation of my last post on The Problem of Tag where I introduced a marble machine called a tag system, and the possible behaviors they can have, namely halting, looping, and diverging. I also talked about the problem of tag, which asks whether a particular tag system operating on a particular starting sequence eventually halts, loops, or diverges.

The Problem of Tag

Sometime last year, I was reading up on a longstanding open math problem that turns out to have a really deep connection with computability theory [1]. For the unfamiliar reader, this is a corner of theoretical computer science that deals with “math computers” — basically, defining mathematical objects that can do computations, and proving mathematical theorems about them. These math computers are more formally called models of computation, and there are some really common ones like state machines and context free grammars that every programmer probably encounters at some point in their career. I’m probably biased though, since I’m a compiler engineer during standard working hours, so these are kind of my bread and butter.

A Gas Made of Bouncy Balls

Lately, I’ve been reminiscing about the physics simulations I used to make back in the day. A lot of them were kind of crude, but I’m older and hopefully a bit wiser now, so hopefully I can do it a bit better this time around. Revisiting my old nerdy projects take me back to when I was first grappling with a lot of ideas that would come up over and over again in my education — I’ve heard it said that studying physics is learning a series of progressively smaller lies, and true to form by the time I finished my undergrad physics major I’d studied the same sorts of systems a bunch of times in progressively greater detail and with progressively fancier math. One such system is a gas in a box.

What does a circle look like in a finite field?

I recently read a fun paper Reed Solomon Codes over the Circle Group that uses circle groups to perform an important kind of error correcting code in finite fields where it’s otherwise difficult. If that sounds like gibberish to you, be not afeard! That’s not really what I’m here to talk about! While quite tangential to the contents of the paper, I was intrigued by the idea of translating circle groups into the context of finite fields, and wondered if there was a good way to understand these groups spatially, given how weird finite fields tend to be. Hence the title of the blog post!