If the security of your filesystem is questionable, or you want a secure means of retrieving the configuration, the best thing I can come up with is to have create a keypair, and install it to the java keymanager, then store your master private key in a keylocker somewhere. You could then create your own implementation of the SecurityConfiguration Interface that stores an encypted properties file on disk, then use the key loaded into your JVM&#39;s keymanager to decrypt the properties file and load it into memory. <br>
<br>Kevin might have some better ideas, but this is the first thing that comes to mind.<br><br><div class="gmail_quote">On Sat, Jan 30, 2010 at 6:57 PM, Yi Li <span dir="ltr">&lt;<a href="mailto:yi.li26@gmail.com">yi.li26@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Kevin, chris:<br>  thanks for the great reply. I am using ESAPI 2.0.<br>  If I fetch the master key from a database, then the application would need to be able to connect to a database, which would require a login password.<br>

  it seems that I have to store the username/password to the database in a clear text conf file so that the application could load and connect to database? <br>  it seems to introduce another weakness.<br>  this is a question on how we could use ESAPI and in the mean time have a secure key management. <br>

  it would be great if you could share your insight.<br>  thanks.<div><div></div><div class="h5"><br><br><div class="gmail_quote">On Fri, Jan 29, 2010 at 4:56 PM, Kevin W. Wall <span dir="ltr">&lt;<a href="mailto:kevin.w.wall@gmail.com" target="_blank">kevin.w.wall@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div>Yi Li wrote:<br>
&gt; greetings, all:<br>
&gt;     will appreciate if anyone could provide insight here.<br>
&gt;     I would like to store the master encryption key<br>
&gt; (encryptor.masterkey) with some sort of protection, instead of keeping<br>
&gt; it clear text in the properities file even though i can place access<br>
&gt; control via the file system.<br>
&gt;    i am thinking to either store the encryption key either in a database<br>
&gt; or in a flat file but encrypted (where to store the master&#39;s master key<br>
&gt; become another problem to solve).<br>
&gt;    will appreciate if anyone could point me to an implementation that<br>
&gt; will support this or point me the way to write my own implementation to<br>
&gt; implement this.<br>
<br>
</div></div>Yi,<br>
<br>
How you do this depends greatly on whether you are using ESAPI 1.4 or<br>
2.0.<br>
<br>
If you are using 2.0 and concerned about it, your best course of action<br>
would be to retrieve it from wherever you wish to store it (e.g., TPM,<br>
HSM, database, etc.) and then use the encrypt / decrypt methods that<br>
take a secret key, i.e.,<br>
<br>
        public interface Encryptor {<br>
                ...<br>
                CipherText encrypt(SecretKey key, Plaintext plaintext)<br>
                        throws EncryptionException;<br>
                PlainText decrypt(SecretKey key, CipherText ciphertext)<br>
                        throws EncryptionException;<br>
                ...<br>
        }<br>
<br>
The way you calculate this SecretKey value, given the Encryptor.MasterKey<br>
value, is quite simple:<br>
<br>
    String masterKey = ... retrieve from some secure storage ...;<br>
    byte[] skey = ESAPI.encoder().decodeFromBase64( masterKey );<br>
    String encryptAlgorithm =<br>
        ESAPI.securityConfiguration().getEncryptionAlgorithm();<br>
    SecretKeySpec secretKeySpec = new SecretKeySpec(skey, encryptAlgorithm);<br>
<br>
and then use secretKeySpec for the SecretKey parameter on the above<br>
encrypt / decrypt methods.<br>
<br>
<br>
OTOH, if you are using ESAPI 1.4.x, then I&#39;m afraid that this is going<br>
to be much harder. It does not have such encrypt / decrypt methods so it<br>
can only use the single key. The value of this property is retrieved and<br>
base64-decoded by the reference encrypt/decrypt Encryptor implementation<br>
using ESAPI.securityConfiguration().getMasterKey(), so you would need<br>
to write your SecurityConfiguration implementation and change getMasterKey()<br>
to retrieve the master key from whatever secure data store you wish<br>
to keep it in. You would then have to call<br>
ESAPI.setSecurityConfiguration(new MySecurityConfigurationImpl())<br>
before you encrypt/decrypt with this. You could write your own<br>
SecurityConfiguration implementation by either wrapping (delegation)<br>
or extending DefaultSecurityConfiguration and then change getMasterKey()<br>
to act differently.<br>
<br>
I might be missing some of the details, which I&#39; sure others will<br>
correct, but I think this is the guts of it.<br>
<br>
HTH,<br>
-kevin<br>
<font color="#888888">--<br>
Kevin W. Wall<br>
&quot;The most likely way for the world to be destroyed, most experts agree,<br>
is by accident. That&#39;s where we come in; we&#39;re computer professionals.<br>
We cause accidents.&quot;        -- Nathaniel Borenstein, co-creator of MIME<br>
</font></blockquote></div><br>
</div></div><br>_______________________________________________<br>
Esapi-user mailing list<br>
<a href="mailto:Esapi-user@lists.owasp.org">Esapi-user@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/esapi-user" target="_blank">https://lists.owasp.org/mailman/listinfo/esapi-user</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Chris Schmidt<br><br>OWASP ESAPI Developer<br><a href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API">http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API</a><br>
<br>Check out OWASP ESAPI for Java<br><a href="http://code.google.com/p/owasp-esapi-java/">http://code.google.com/p/owasp-esapi-java/</a><br><br>OWASP ESAPI for JavaScript<br><a href="http://code.google.com/p/owasp-esapi-js/">http://code.google.com/p/owasp-esapi-js/</a><br>
<br>Yet Another Developers Blog<br><a href="http://yet-another-dev.blogspot.com">http://yet-another-dev.blogspot.com</a><br><br>Bio and Resume<br><a href="http://www.digital-ritual.net/resume.html">http://www.digital-ritual.net/resume.html</a><br>
<br>