Imagine the following scenario: Alice is a well-respected chef. She is famous for reviewing recipes. Anyone can send her a recipe. If she likes it she'll add her famous line of approval to the end: "This is delicious, y'all". Cryptographically signed with her public key of course. Alice-approved recipes are universally delicious.
But let's be honest, cooking isn't that hard. Tasty food is pretty much just making adding a ton of salt, sugar, oil and MSG. Alice's seal of approval can be replicated by a computer program that makes sure the above are present in sufficient concentrations. Alice would like to kick-back and let the program do the hard work.
So, she hires an untrustworthy middleman, Bob. She hands Bob the computer program. Bob pretends to be Alice. Someone sends her a recipe, which gets forwarded to Bob. Bob runs the computer program, if the recipe passes, he adds her trademark seal and cryptographically signs it with her keys. However Alice only wants Bob to be able to sign recipes that pass. She wants to avoid a scenario where she has to trust Bob with access to her private keys.
Is there anyway to practically accomplish the above? As I understand, homographic encryption, garbled circuits and blind Turing machines can evaluate arbitrary computations. But current implementations are extremely inefficient for complex programs. The logic of the program itself doesn't need to be encrypted. The only thing Alice cares about is protecting her private keys, and restricting Bob to signing inputs that pass the function. Any ideas about whether this is feasible and what the best approach might be?