[ 
http://issues.apache.org/jira/browse/DERBY-962?page=comments#action_12366737 ] 

Sunitha Kambhampati commented on DERBY-962:
-------------------------------------------

I just started looking at this issue on how to know if the jvm in which the 
client is running can support encrypted userid and password mechanism or not;  
to decide if we can upgrade the default security mechanism.  

I wanted to share some thoughts I have, so I could get early feedback from the 
list.

Current client  driver supports encrypted userid/password (EUSRIDPWD) via the 
use of DH key-agreement protocol - however current Open Group DRDA 
specifications imposes small prime and base generator values (256 bits) that 
prevents other JCE's  (apt from ibm jce) to be used as java cryptography 
providers.  

-- org.apache.derby.client.am.EncryptionManager (EM) constructor is responsible 
for instantiating the appropriate Provider and the KeyPairGenerator.  The Sun 
JCE throws java.security.InvalidAlgorithmParameterException exception when 
trying to use the 256bits prime. 

I think we can conclude if the EM throws an exception, then the JCE doesnt 
support the required algorithms.
=> An exception from this constructor indicates that it is not possible to use 
encrypted userid/password.

The next step seems to me to decide where to put the call to new 
EncryptionManager(EM)
#A.Put in static initializer block in ClientBaseDataSource and store the result 
in a static variable.  The ClientBaseDataSource seems to be place where all the 
url attribute values' gets and sets methods are present. Also the upgrade logic 
for the security mechanism is in this class.

something like:
static boolean SUPPORTS_EUSRIDPWD = false;
static
{
    try
    {
        
        new org.apache.derby.client.am.EncryptionManager(null);
        SUPPORTS_EUSRIDPWD = true;
    }catch(Exception e)
    {
       //ignore
    }
}

---------------

#B. Another place this check could go was in the ClientDriver itself since this 
will be loaded  in the JVM. In the static initializer of ClientDriver, new of 
EM can be done to check if it will go through OK. If so, a static 'protected' 
variable in ClientDriver can be used to store the state that the driver 
supports the algorithms required for encrypted userid/password.

1. Are there any issues with adding code to the static initializer block of the 
Client Driver. I see the following comment in ClientDriver which sounds a 
little scary to me. 

static {
       // This may possibly hit the race-condition bug of java 1.1.
        // The Configuration static clause should execute before the following 
line does.
         if (Configuration.exceptionsOnLoadResources != null) {
......
}

I can see that the Configuration static initializer needs to run before the 
access to the static variable Configuration.exceptionsOnLoadResources. 

I'm curious and would like to look at it sometime. If someone could point me to 
some reference of this bug, I'd be grateful. I googled but didnt find any 
related to the static intializer blocks. 
--------------

#C Explicitly check the jvm and decide.  Not a good way for e.g. if SunJCE 
supports the DH with 256 bits prime some day, we would have to remember to 
remove this check that disables encrypted userid/password for this particular 
JVM. 

I like #A because it seems clean.    What do others think ? 

Comments/Thoughts.

Thanks much,
Sunitha. 

> Upgrade default security mechanism in client to use encrypted userid password 
> if client can support it.
> -------------------------------------------------------------------------------------------------------
>
>          Key: DERBY-962
>          URL: http://issues.apache.org/jira/browse/DERBY-962
>      Project: Derby
>         Type: Improvement
>   Components: Network Client
>     Reporter: Sunitha Kambhampati
>      Fix For: 10.2.0.0

>
> Currently in the client, if userid and password are set in the connection 
> url, the default security mechanism is upgraded to USRIDPWD (which is clear 
> text userid and password).  This seems to be a security hole here. 
> Current client  driver supports encrypted userid/password (EUSRIDPWD) via the 
> use of DH key-agreement protocol - however current Open Group DRDA 
> specifications imposes small prime and base generator values (256 bits) that 
> prevents other JCE's  (apt from ibm jce) to be used as java cryptography 
> providers.  
> Some thoughts:
> -- client can make a check to see if it the jvm it is running in supports the 
> encryption necessary for EUSRIDPWD. If it supports, then the client can 
> upgrade to EUSRIDPWD. 
> -- if the jvm the client is running is , doesnt support encryption 
> requirements for EUSRIDPWD, then the security mechanism will be set to 
> USRIDPWD.
> -- DERBY-528 will add support for strong userid and password which is another 
> option to send encrypted passwords across the wire. When this gets added, 
> maybe this can be considered as one of the upgrade options after EUSRIDPWD. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to