[keycloak-dev] Storage protection
Bruno Oliveira
bruno at abstractj.org
Mon Jan 27 11:47:24 EST 2014
Hi Bill, some answers inline. I forgot to add references.
--
abstractj
On January 27, 2014 at 1:53:39 PM, Bill Burke (bburke at redhat.com) wrote:
> > More comments inline responding to Bruno's email:
>
> >> # 1
> >> - HSM or Java Security manager are perfect, but impractical
> for regular devs, that would require a lot of maintanance (a dream)
> >>
>
> What is HSM? How could the Java Security Manager protect clear
http://en.wikipedia.org/wiki/Hardware_security_module
> text
> private keys and OTP keys?
With Java Security Manager is possible to restrict code privileges to the resource specified (https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/Security_Guide/chap-Java_EE_Security_Manager.html).
>
>
> >> # 2
> >> - Entering a password for a PKCS#8/PBKDF2-derived key, also
> impractical assuming that someone would be required to enter
> the password at each app startup
> >>
> >> # 3
> >>
> >> - Not bullet-proof solution, but store the key into a text file
> that only sysadmins and the web server has access, doing our best
> with the usage of ACLs provided by environment. I understand
> Bill's concern (http://lists.jboss.org/pipermail/keycloak-dev/2014-January/001089.html)
> but at the same time, a file could have a very restricted access
> while the database is more acessible to developers.
> >> -
>
>
> Stian suggested having an SPI for this sort of feature. Either
> a
> password would be required at Keycloak server startup, or the
> password
> would be stored in a property file.
Is not the same thing, but do you mean something like Maven does? (http://maven.apache.org/guides/mini/guide-encryption.html). Maybe a “master password” and have some sorta of keychain? For example:
1. Master password generates the symmetric key
2. Encrypt the key pairs
3. Decrypt the key pairs on the fly for digital signatures for example.
That’s what do you mean?
>
> >> # 4
> >>
> >> Generate the keys per session, instead of use it per realm (it
> must be tested/implemented because that could slow down our
> server)
> >>
>
> Not sure this is feasible. In a clustered environment, you'd
> need a
> trusted way of transmitting all the realm keys. You also would
> need a
> way to transmit the public key of the realm to each adapter. Each
> adapter could make an HTTPS call on bootup to retrieve all relevant
> realm metadata, but you'd still have to provide a truststore
> for the
> adapter so it could make a trusted HTTPS call that verified the
> keycloak
> server's host. But maybe we need this truststore irregardless
> :) ???
>
> But, this still doesn't protect clear text OTP keys (i.e. "What
> is your
> mother's maiden name?”)
Option 4 must be tested/elaborated better, if you guys think that some of the other options worth to try, just let me know. Other than that, I will try to help in whatever you guys think is the best.
More information about the keycloak-dev
mailing list