[keycloak-dev] Storage protection
Bill Burke
bburke at redhat.com
Mon Jan 27 10:53:36 EST 2014
On 1/27/2014 10:28 AM, Anil Saldhana wrote:
> It is going to be a choice between usability and protection.
>
> Security sensitive deployments are going to be using HSM and vaulted
> networks.
>
> For everybody else, best is to go with usability thereby choosing an
> approach that gives good-enough security.
>
> One of the challenges we have faced is the non-availability of a
> database for default deployments and the use of filesystem as the
> default mechanism for storage. In the case of KeyCloak, it is using the
> DB as the storage mechanism.
>
I will throw out my red BS flag!...Can't see anybody seriously
considering using a flat file for production systems. There's no
reason you can't have a local-only, locked down DB with either HQL,
Mongo, or one of the other better Java databases. But anyways, Keycloak
only uses RDBMS by default, it has an SPI, and there's still the
Picketlink IDM API option available to us which we're going to seriously
consider after all major features have been implemented and we've
planned comprehensively about federation and scalability.
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 text
private keys and OTP keys?
>> # 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.
>> # 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?")
--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
More information about the keycloak-dev
mailing list