DTLS connection aborts after several minutes (rekeying problem?)

Michael Fritscher <michael.fritscher-yKeiVCf8cfZ30C+yQOVkaBRJbrLmWrcZ@public.gmane.org> Wed, 3 Jul 2019 08:25:01 +0200
Newsgroups gmane.comp.encryption.bouncy-castle.devel
Organization Zentrum für Telematik e.V.
Message-ID <[email protected]>
Good day,

I'm using bouncy castle to get DTLS functionality. I first tried to use adapt the DTLS test included in the package, but it doesn't seem to 
verify the certificates. So I tried https://github.com/mobius-software-ltd/java-dtls . It seems to work, but it seems to have problems with the 
rekeying process - so it aborts the connections after ca. 10 minutes with medium traffic. With a GCM suite, I get "GCM cipher cannot be reused 
for encryption, with CBC I get "org.bouncycastle.crypto.tls.TlsFatalAlert: bad_record_mac(20)"

Backtrace at Client:

 > org.bouncycastle.crypto.tls.TlsFatalAlert: bad_record_mac(20)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsRecordLayer.receive(AsyncDtlsRecordLayer.java:243)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsClientProtocol.receivePacket(AsyncDtlsClientProtocol.java:125)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsClientHandler.decode(AsyncDtlsClientHandler.java:49)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsClientHandler.decode(AsyncDtlsClientHandler.java:1)
 > 	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
 > 	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
 > 	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
 > 	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)
 > 	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
 > 	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
 > 	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
 > 	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
 > 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 > 	at java.base/java.lang.Thread.run(Thread.java:844)


Backtrace at server:

 > org.bouncycastle.crypto.tls.TlsFatalAlert: bad_record_mac(20)
 > 	at org.bouncycastle.crypto.tls.TlsBlockCipher.decodeCiphertext(Unknown Source)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsRecordLayer.receive(AsyncDtlsRecordLayer.java:220)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsServerProtocol.receivePacket(AsyncDtlsServerProtocol.java:409)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsServerHandler.decode(AsyncDtlsServerHandler.java:76)
 > 	at com.mobius.software.iot.dal.crypto.AsyncDtlsServerHandler.decode(AsyncDtlsServerHandler.java:1)
 > 	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
 > 	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
 > 	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
 > 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
 > 	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)
 > 	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
 > 	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
 > 	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
 > 	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
 > 	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
 > 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 > 	at java.base/java.lang.Thread.run(Thread.java:844)

I've also opened an issue at https://github.com/mobius-software-ltd/java-dtls/issues/1 , but I hope that you have an hint how to cope with this 
problem. If you know other ways to get DTLS in Java 8 up & running I'll interested as well.

Best regards,
Michael Fritscher

-- 
ZfT - Zentrum für Telematik e.V.
Michael Fritscher
Magdalene-Schoch-Straße 5
97074 Würzburg
Tel: +49 (931) 615 633 - 57
Fax: +49 (931) 615 633 - 11
Email: michael.fritscher-yKeiVCf8cfZ30C+yQOVkaBRJbrLmWrcZ@public.gmane.org
Web: http://www.telematik-zentrum.de

Vorstand:
Prof. Dr. Klaus Schilling, Prof. Dr. Andreas Nüchter,  Hans-Joachim Leistner
Sitz: Gerbrunn
USt.-ID Nr.: DE 257 244 580, Steuer-Nr.:  257/111/70203
Amtsgericht Würzburg, Vereinsregister-Nr.: VR 200 167
michael_fritscher.vcf (text/x-vcard, 416 B)
begin:vcard
fn:Michael Fritscher
n:Fritscher;Michael
org;quoted-printable:Zentrum f=C3=BCr Telematik
adr;quoted-printable;quoted-printable:;;Magdalene-Schoch-Stra=C3=9Fe 5;W=C3=BCrzburg;Bayern;97074;Deutschland
email;internet:michael.fritscher-yKeiVCf8cfZ30C+yQOVkaBRJbrLmWrcZ@public.gmane.org
tel;work:+49 (931) 615 633 - 57
tel;fax:+49 (931) 615 633 - 11
url:http://www.telematik-zentrum.de
version:2.1
end:vcard