Encryption, Entity Framework and Projections

We just got another email asking how Crypteron's CipherDB encryption works with Entity Framework's projections. So I decided it's time to write a blog post about it.

For starters, Crypteron works very well with Entity Framework. And for the most past Entity Framework works with - well - Entities. But there are some cases where one may use projections that result in non-Entity classes.

What are projections?

In the simplest words, a projection is when the Entity class is 'projected' into another class or an anonymous class. This is typically done when your entity may have a very large number of properties (i.e. very wide row) but you need only a few properties. For example: Select(product => new { product.price }). This will project only the price of the entity into an anonymous object and that's the return type (not the entity). Note that in most cases Entity Framework will deliver Entities - so you're all good. This is for advanced use cases.

Problem?

The issue is that because the return type is NOT an Entity, CipherDB, our Entity Framework plugin on the C# stack, will skip decryption on that object.

Solution?

The solution is dead simple - just use Crypteron CipherObject to decrypt that object 🙂 ... details below, read on.

But how?

We've designed all Crypteron agent's to be cross-compatible with each other. So for example, data encrypted by a Java CipherObject agent - perhaps a large Apache Spark cluster - can be blindly copied into SQL storage use with the C# CipherDB agent. The only requirement is that these agent's use the same AppSecret. Crypteron's cross-compatibility enables many such powerful scenarios.

Show me the code

The solution is to use CipherObject.Protector.Unseal(projectedObject)on the projected object. A full code example will make this clear. We'll use the Crypteron sample apps on GitHub for a reference so you can try yourself. Install the Crypteron CipherObject NuGet package. Then put the code below in the Test() method within ProcessCustomer.cs. Run it and choose "t" at the menu.

// We define a concrete class for our projection and decorate it with
// the [Secure] attribute
public class ProjectedUser
{
    [Secure]
    public string Name { get; set; }

    [Secure]
    public string CreditCard { get; set; }

    [Secure]
    public byte[] SSN { get; set; }

    public string OrderItem { get; set; }
}

public void Test()
{
    // Placeholder for anything you want ...
    using (var secDb = new SecDbContext())
    {
        // This will work ...
        foreach (var o in secDb.Users.Take(5).Select(u => new ProjectedUser()
        {
            Name = u.CustomerName,
            CreditCard = u.SecureSearch_CreditCardNumber,
            SSN = u.Secure_SocialSecurityNumber,
            OrderItem = u.OrderItem
        }))
        {
            // ... because of CipherObject
            CipherObject.Protector.Unseal(o); // <===
            
            // do some work
        }

        // This will NOT work, they're just anonymous objects
        // NOT entities
        foreach (var o in secDb.Users.Take(5).Select(u => new {
            u.CustomerName,
            u.SecureSearch_CreditCardNumber,
            u.Secure_SocialSecurityNumber,
            u.OrderItem
        }))
        {
            // do some work
        }
    }
}

Conclusion

That's it! That's how you can get projections working with Entity Framework. In fact, with CipherObject, you have tremendous flexibility and power to architect a wide variety of solution. If you have any question or need some guidance, please feel free to drop us a line at [email protected]. We look forward to hearing from you.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Recent blog posts

Encryption, Entity Framework and Projections

We just got another email asking how Crypteron’s CipherDB encryption works with Entity Framework’s projections. So I decided it’s time to write a blog post about it. For starters, Crypteron works very well with Entity Framework. And for the most past Entity Framework works with – well – Entities. But there are some cases where […]

PCI DSS and key rotations simplified

PCI compliance requires data encryption keys to be changed frequently. Here is how you can do it easily.

Your data-center is not secure and what you can do about it

There is no secure perimeter anymore. Neither in your corporate network nor in your data center. Fight a winning battle armed with self-protecting data rather than a losing one trying to protecting the infrastructure.

Introducing the Crypteron Startup Innovators Program

Qualifying startups get up to 50% off all plans. Tell us how you’re changing the world and the our Startup Innovators Program will support your journey.

6 encryption mistakes that lead to data breaches

If encryption is so unbreakable, why do businesses and governments keep getting hacked? Six common encryption mistakes that lead to data breaches.

Announcing the new Crypteron Community Edition

Starting today you can now sign up for the Crypteron Community Edition for free with no performance limitations.

Data breach response – One click to save your business

Get breathing room – when you need it the most. Respond to a data breach with a single click.

Why We Need Proper Data-At-Rest Encryption: 191M U.S. Voters’ Data Exposed

Adding security at the application level is a large step forward in protecting data from the constant threat of data breaches

How to encrypt large files

CipherStor is blazingly fast! Here we show how to use it within your data-flow pipeline to maintain high performance when encrypting large files.

Crypteron CipherStor Performance Benchmarks

Blazing fast performance by Crypteron CipherStor that hits several gigabytes/sec enabling security even in high bandwidth scenarios

Encryption, Entity Framework and Projections

by Sid Shetye time to read: 2 min
0