Grails Jasypt Encryption Plugin

39
Grails Jasypt Encryption by Ted Naleid

description

The Jasypt Encryption plugin for Grails allows field level encryption in your database. It's integrated into GORM/Hibernate for ease of use. It can also be extended to encrypt any type of information you store in your database.

Transcript of Grails Jasypt Encryption Plugin

Page 1: Grails Jasypt Encryption Plugin

Grails Jasypt Encryption

by Ted Naleid

Page 2: Grails Jasypt Encryption Plugin

Who am I?

Page 3: Grails Jasypt Encryption Plugin

Overview

What is it?

Why did we need it?

Advantages

Limitations

How is it used?

Page 4: Grails Jasypt Encryption Plugin

What Is It?

Page 5: Grails Jasypt Encryption Plugin

grails plugin that integrates strong encryption into GORM

Page 6: Grails Jasypt Encryption Plugin

allows field-level encryption on any domain object or field type

Page 7: Grails Jasypt Encryption Plugin

import com.bloomhealthco.jasypt .GormEncryptedStringType

class Member { String name String ssn

static mapping = { ssn type: GormEncryptedStringType }}

integrated into domain objects

Page 8: Grails Jasypt Encryption Plugin

built on Jasypt Simplified Encryption framework

Page 9: Grails Jasypt Encryption Plugin

Jasypt leverages Java Cryptography Extensions (JCE)

Page 10: Grails Jasypt Encryption Plugin

Bouncy Castle JCE provider jar included

(you can still use any JCE compatible encryptors you want)

Page 11: Grails Jasypt Encryption Plugin

Why did we need it?

Page 12: Grails Jasypt Encryption Plugin

constant automated hacking attempts happen on every computer

on the public internet

Page 13: Grails Jasypt Encryption Plugin

cloud computing potentially adds security weak points

Page 14: Grails Jasypt Encryption Plugin

if you have users, you have data to protect

social security numbers

medical claims/PHI

credit card numbers

birth dates

security question answers

Page 15: Grails Jasypt Encryption Plugin

full disk encryption has many drawbacks and limitations

Page 16: Grails Jasypt Encryption Plugin

field level encryption lets you protect the sensitive things – everything else is at full speed

Page 17: Grails Jasypt Encryption Plugin

don’t need to outrun the bear

Page 18: Grails Jasypt Encryption Plugin

advantages

Page 19: Grails Jasypt Encryption Plugin

encrypt only what you need to

Page 20: Grails Jasypt Encryption Plugin

strongly protects info even if your database gets rooted or someone

steals a database dump

Page 21: Grails Jasypt Encryption Plugin

painless integration into your domain

Page 22: Grails Jasypt Encryption Plugin

Limitations

Page 23: Grails Jasypt Encryption Plugin

encrypted fields take up extra space in database

Page 24: Grails Jasypt Encryption Plugin

import com.bloomhealthco.jasypt .GormEncryptedStringType

class Member { String name String ssn

static mapping = { ssn type: GormEncryptedStringType }

static constraints = { ssn( matches: '^\\d{3}-\\d{2}-\\d{4}$', maxSize: 44 // unencrypted 11 ) }}

currently need to use two grails

validators

Page 25: Grails Jasypt Encryption Plugin

breaks using field in WHERE clause(so dynamic finders for this field don’t work)

Page 26: Grails Jasypt Encryption Plugin

How is it used?

Page 27: Grails Jasypt Encryption Plugin

grails install-plugin jasypt-encryption

how do I install it?

Page 28: Grails Jasypt Encryption Plugin

// add to Config.groovy or external config file

jasypt { algorithm = "PBEWITHSHA256AND128BITAES-CBC-BC" providerName = "BC" password = "<my super secret passphrase>" keyObtentionIterations = 1000}

how do I configure it?

Page 29: Grails Jasypt Encryption Plugin

% cat default_local.policy // Some countries have import limits on crypto strength. This policy file is worldwide importable.grant { permission javax.crypto.CryptoPermission "DES", 64; permission javax.crypto.CryptoPermission "DESede", *; permission javax.crypto.CryptoPermission "RC2", 128, "javax.crypto.spec.RC2ParameterSpec", 128; permission javax.crypto.CryptoPermission "RC4", 128; permission javax.crypto.CryptoPermission "RC5", 128, "javax.crypto.spec.RC5ParameterSpec", *, 12, *; permission javax.crypto.CryptoPermission "RSA", *; permission javax.crypto.CryptoPermission *, 128;};

what encryption does Java allow by default?

Page 30: Grails Jasypt Encryption Plugin

% cat default_local.policy // Country-specific policy file for countries with no limits on crypto strength.grant { // There is no restriction to any algorithms. permission javax.crypto.CryptoAllPermission; };

what you actually want(download “unlimited” crypto jar from Sun^wOracle)

Page 31: Grails Jasypt Encryption Plugin

import com.bloomhealthco.jasypt.GormEncryptedStringType

class Member { String name String ssn

static mapping = { ! ssn type: GormEncryptedStringType }}

after that, it’s easy

Page 32: Grails Jasypt Encryption Plugin

all encrypted values stored as strings in the database

Page 33: Grails Jasypt Encryption Plugin

java.lang.String supported out of the box

Page 34: Grails Jasypt Encryption Plugin

just implement 3 methods

protected Object convertToObject(String)

protected String convertToString(Object)

public Class returnedClass()

encrypt your own objects

Page 35: Grails Jasypt Encryption Plugin

import org.jasypt.hibernate.type.AbstractGormEncryptedStringType

public class GormEncryptedMyObjectType extends AbstractGormEncryptedStringType {

protected Object convertToObject(String string) { new MyObject(string) }

protected String convertToString(Object object) {MyObject.toString()

}

public Class returnedClass() { MyObject }}

create your own GORM encrypted type

Page 36: Grails Jasypt Encryption Plugin

class Foo { MyClass value

static mapping = { ! value type: GormEncryptedMyObjectType }}

then use it in your mapping

Page 37: Grails Jasypt Encryption Plugin

Quick Demo

Page 38: Grails Jasypt Encryption Plugin

Links

Grails Jasypt Pluginhttp://bitbucket.org/tednaleid/grails-jasypt/wiki

Jasypthttp://www.jasypt.org/

Bouncy Castle (AES)http://www.bouncycastle.org/java.html

Unlimited Strength Jars http://www.oracle.com/technetwork/java/javase/downloads/index.html (under “other”)

Page 39: Grails Jasypt Encryption Plugin

Questions?