Intel joins DARPA in search of encryption 'holy grail'
zdnet.com
zdnet.com
Edit: And what's even a good use case for it?
Conditional logic can be expressed in terms of arithmetic:
if c then t else f = c*t + (1-c)*f
You can also do boolean logic: NOT y = 1 - y
x AND y = x * y
x OR y = (x + y) - (x * y)
(Where 1 indicates truth and 0 falsity.)What you can't do, however, is conditional execution, as this would leak information. Which doesn't limit the capabilities of the system in principle, but does in practice because this harms performance. E.G. ‘select count(*) from users where name = bob’ will be much slower with HFE than with a traditional database because there will be no possibility of using precalculated indices.
Also, some schemes offer extra stuff for free. BFV (https://eprint.iacr.org/2012/078) for example lets you compute Frobenius endomorphisms very cheaply. That is, given ciphertext c, you can compute c^q without having to do log(q) many squarings, where q is the characteristic of your ring.
That is basically the problem statement that FHE is trying to solve.
Imagine a central exchange building, serving few million customers in a region, each connecting from VT110 over ISDN line, handling imagined Internet thing pre-Internet. Something like “Tanaka-san is making a golf course reservation using easy to learn SQL language”.
FHE-based database fits the bill there; there’s a risk that equipment technicians might get hold of a key. FHE can offer protections all-around.
Performances and privacy of logic is irrelevant; it’s responsibilities of service providers to account for technical implications. Code to run is supplied. Customers are not required to/expected to write it.
Researchers doing FHE works today would be fully aware of Internet, but models in some papers to explain it might still carry that Transatlantic accent.
Do I have this right: FHE is useful for running queries across a dataset without revealing what the queries are nor the result? If so, would write operations even be possible?
For write operations you could do a similar trick to select a new version of each value based on the query key matching. You are in effect writing all rows, but using the old value when you don't want to change it.
Now, due to some quirks of FHE you can only do this write operation a limited number of times before you have to perform a more expensive operation called bootstrapping to "refresh" ciphertexts. I find bootstrapping to be the coolest part of homomorphic encryption: you encrypt the secret key itself with homomorphic encryption and then use it to decrypt inside FHE. The result is still encrypted but closer to a freshly encrypted ciphertext.
> The value would entail that operations on a remote server are necessary to the function
Yes, not every organization has the compute power necessary, or even prefer to not handle it at all in house. If you only manage keys locally, that's a significantly smaller attack surface.
I'm not sure the value proposition is clear cut. In terms of security, while the server data itself is secure, and the nature of the transactions are inscrutable, there's now reason to share a single key between multiple users, and only one of those users needs to be compromised. The key could be generated and stored in some super secure silicon with a small attack surface, but if the data needs to be available to multiple users, you're back to duplicating and distributing the key, and social engineering remains the best attack vector. A benefit could be gained with multiple users with multiple keys and limited sharing to reduce vulnerability, like sharing sensitive documents between between select individuals. But that's a pretty niche use case.
If you could add/multiply cryptographically securely, such that the current_variable - initial_random = delta != data is meaningless to third parties without the key, that will be a secure write to a secure database.
Dynamic allocation is probably not possible.
From that you get "Turing completeness" because, for any computation you want to do, you can unwind it into a static Boolean circuit that computes (some appropriately sized version of) it. Note that this means you're limited to primitive recursive functions i.e. all loops must be compile-time bounded.
The use case is stuff like, "add up my numbers without knowing what the numbers are or their sum is". I think there are also end-to-end auditable voting systems that preserve privacy.
Since FHE operations are Boolean circuits, we can consider basic stuff like "AND" or "NOT" - but all the inputs, outputs and the operation itself are encrypted, so the owner of the server won't even know if someone called an AND gate, a NOT gate, or something else.
Which means that if primitive Boolean operations are supported, you can chain them to create a general purpose, Turing complete computer.
However if you were a nefarious actor looking at the order and frequency at which various primitives were called, then you could be able to discern a call graph (or at least, a statistical "heatmap"), and you might figure something about the nature of the program, and therefore be able to glean some kind of understanding of the information passing through it, however abstract.
However since FHE can represent boolean circuits, we're not just limited to primitives. A futuristic compiler could create a single boolean circuit to represent a complex application - however for something like a blog or eCommerce store, that would result in inordinate amount of cyphertext to represent the code, and undoubtedly be very slow to run.
I think more likely is the compiler would optimise layers or stacks of black-boxes that are not simply boolean primitives. Your plaintext code (in the language of you choosing) would have every branch of the call stack from input, processing, and output analysed n-levels deep optimising for a balance of runtime and obfuscation.
In such a case, the nefarious actor would see a blob of cypher going into a blob of other cypher to generate a blob of cypher as input into the next blob of cypher. Maybe there are parallel cypher blobs, but their internals are completely hidden. An inside actor might have intimate knowledge of how long each blob takes to execute for various inputs, so assuming that knowledge is shared we're back at good old timing attacks - which would probably become irrelevant on the next compiler pass anyway.
Use-cases I can think of are any kind of transactional situation where various actors have competing interests, where it may be in one or more actor's best interests to game the system. Anything peer-to-peer is a good example.
Gaming seems trite, but in the early days, gaming was full of client side cheats. The current model for multiplayer gaming to avoid cheating is centralised - every client has to interface with a central server that then has to figure out which moves were legal in the game's rules - peer-to-peer is fraught with cheaters since they can analyse and change the code client-side. Realtime FHE would allow game developers to come back to peer-to-peer gaming, since it would be mathematically improbable that a peer is cheating.
Escrow is another peer-to-peer type activity, where it would be useful to have a trusted middleman. Maybe provenance for digital / physical goods (that's a bit of a stretch). But essentially, right now, a lot of development effort is expended to make sure individuals in a system can't gain an advantage on the client side - if we didn't have to trust a user's computer to do the right thing, then the client/server trust barrier collapses.
It also won't know the size of the result, only seeing a fixed-size buffer.
You could run statistics on data or do a grid-based simulation.
Running a neural net would be almost trivial.
General purpose code is extremely difficult to adapt, since it loves to branch based on data.
All you have to do is multiply each weight and add up each node.
Pure bulk arithmetic is both simple and a perfect match for FHE.
Hell, I’m not an ML practitioner and I almost never use python, and yet it took me maybe a day or two learn enough about covnet training to detect my dog on a home security camera.
If you mean is it useless as a replacement for the mysql backend of your php app, the answer is yes.
Because simply querying the database a billion times and replacing SSN with 1, 2 etc. is never going to work in any reasonably secure environment. Queries are logged and people will know if you're trying to brute force a table.
Especially for data lakes where the act of manipulating data can sometimes involve moving actual files around a distributed cluster in a potentially insecure environment e.g. cloud.
One example is a private OCSP. Every time you open a TLS-secured webpage, your browser has to check whether or not the TLS certificate has been revoked (I'm leaving out some complications but bear with me). In order to do that, you browser has to contact the certificate authority (CA) and ask "has anyone revoked this cert?". But in doing that, the browser is revealing your browsing patterns to the CA!
It would be nice, instead, to use Private Information Retrieval to ask the CA "please process this encrypted query and return the result". Then the CA knows nothing about your browsing patterns, and you still get your data. Well, (computational) Private Information Retrieval is super inefficient today, and the best asymptotic solution we have is based on FHE (https://eprint.iacr.org/2017/1142). So getting efficient FHE would hopefully make something like this a lot more reasonable for moderately sized databases.
For the record, this is only a toy example. We actually have really good solutions for private OCSP that don't require FHE. We can side-step the difficult of Private Information Retrieval in this case because OCSP databases are small enough for anyone to download. If this interests you, check out CRLite https://blog.mozilla.org/security/2020/01/09/crlite-part-1-a...
that kind of thing.
I would like to see adiabatic physical computing to reduce power consumption too.