Code Review Request, JDK-8167680, DTLS implementation bugs
Xuelei Fan
xuelei.fan at oracle.com
Thu Oct 27 12:50:56 UTC 2016
Updated to handle handle optional CertificateVerify message:
http://cr.openjdk.java.net/~xuelei/8167680/webrev.02/
Thanks,
Xuelei
On 10/21/2016 11:31 AM, Xuelei Fan wrote:
> Updated webrev per Jamil's comments:
>
> http://cr.openjdk.java.net/~xuelei/8167680/webrev.01/
>
> Xuelei
>
> On 10/13/2016 10:36 PM, Xuelei Fan wrote:
>> Hi,
>>
>> Please review the fix for JDK-8167680:
>> http://cr.openjdk.java.net/~xuelei/8167680/webrev.00/
>>
>> There are a few implementation bugs in JDK.
>>
>> 1. The sequence number is increased by 2 for GCM cipher suites.
>> Both GCM crypto operation and DTLS record use the sequence number. The
>> current implementation may increase the sequence number for each of the
>> two operations. It is not the expected behavior.
>>
>> 2. The implementation does not response to handshake retransmissions.
>> In the current implementation, receiving of retransmitted handshake
>> messages does not kick off a retransmission of the previous delivered
>> flight. Retransmission happens on timeout. Timeout is expensive.
>> Supporting response to peer retransmitted handshake messages would speed
>> up the handshaking.
>>
>> 3. the final CCC and finished message cannot be retransmitted.
>> It is an implementation bug. Every handshake message should be able to
>> get retransmitted.
>>
>> 4. the first application data may be discarded if the last flight get
>> lost.
>> Applications may send application data immediately after the handshake
>> completed. However, the peer may have not receive the handshake
>> complete message, and therefor discard the application data. As may
>> impact application logic.
>>
>> For example
>>
>> Client Server
>> ....
>> -- ClientKeyExchange -->
>> -- ChangeCipherSpec -->
>> -- Finished -->
>>
>>
>> X <-- ChangeCipherSpec --
>> X <-- Finished --
>>
>> <-- Application Data --
>>
>> ----- ... --->
>> -- ClientKeyExchange -->
>> -- ChangeCipherSpec -->
>> -- Finished -->
>>
>> <-- ChangeCipherSpec --
>> <-- Finished --
>>
>>
>> 1. (omit the previous handshake messages) server sends ChangeCipherSpec
>> and Finished messages.
>> 2. server handshake complete
>> 3. server send application
>> 4. client does not receive the ChangeCipherSpec or Finished messages.
>> 5. client receives the application data. Client cannot handle the
>> encrypted message, and may discard it. Client re-transmit the previous
>> flight.
>> 6. server retransmit the last flight.
>> 7. client receives the last flight.
>>
>> In this update, the last flight will be transmit twice. As may mitigate
>> the impact of the issue.
>>
>> 5. resuming handshaking need no cookie exchange.
>> It is an implementation bug. Cookie exchange is performed for
>> handshaking resuming now. It is not the expected behavior.
>>
>> 6. need more debug log for DTLS handshake message fragmentation and
>> reassembly.
>>
>>
>> Thanks,
>> Xuelei
More information about the security-dev
mailing list