Hi,

Here's the summary of the previous IRC meeting.

---

COMMUNITY MEETING

Place: #openvpn-devel on irc.freenode.net
List-Post: openvpn-devel@lists.sourceforge.net
Date: Thursday 9th Jan 2014
Time: 18:00 UTC

Planned meeting topics for this meeting were on this page:

<https://community.openvpn.net/openvpn/wiki/Topics-2014-01-09>

Your local meeting time is easy to check from services such as

<http://www.timeanddate.com/worldclock>

or with

$ date -u


SUMMARY

cron2, dazo, jamesyonan, janjust, mattock, plaisthos and syzzer
participated in this meeting.

--

Discussed the "definition of the new data frame format with and without
session ID" issue previously discussed here:

<http://thread.gmane.org/gmane.network.openvpn.devel/8128/focus=8142>
<https://community.openvpn.net/openvpn/wiki/MunichHackathon2013#results>

The conclusions reached in Munich (see second link) still mostly hold.
The session ID can be embedded into both ping packets and into small
data packets; this will ensure that the MTU will not be exceeded.
Specific timing and configuration of feature is subject to further
discussion when we have a prototype to experiment with. James will
document both the old and new packet formats once the definition has
crystallized fully.

--

Discussed the "Missing "IV_OPENVPN_GUI_VERSION" in OpenVPN Connect" issue.

James has added this string to OpenVPN Connect, but it was decided to
shorten the string to IV_GUI_VER to save some space before this feature
is in wide use.

--

Discussed the "​ssl: enable basic ecdsa" patch:

<http://thread.gmane.org/gmane.network.openvpn.devel/7958/focus=7961>

Syzzer will do further review on this patch and hopefully ACK it soon,
even if it only provides partial EC support; this because having full EC
support is not easily doable at this point.

--

Full chatlog as an attachment

-- 
Samuli Seppänen
Community Manager
OpenVPN Technologies, Inc

irc freenode net: mattock

(20.01.19) mattock: hi
(20.01.25) mattock: so meeting time for a change
(20.01.31) dazo: :)
(20.01.33) ***syzzer reporting
(20.01.36) mattock: james should hop in here very soon
(20.01.44) ***cron2 is here
(20.02.06) dazo: I can't promise to be mentally present the whole time, but 
I'll do my best to pay attention :)
(20.02.42) jamesyonan [~jamesy...@c-24-9-78-222.hsd1.co.comcast.net] è entrato 
nella stanza.
(20.02.42) modalità (+o jamesyonan) da ChanServ
(20.02.51) ***cron2 sends a glass of coffee liqueur to dazo
(20.03.37) dazo: heh :)  thx!
(20.03.39) mattock: https://community.openvpn.net/openvpn/wiki/Topics-2014-01-09
(20.03.40) vpnHelper: Title: Topics-2014-01-09 – OpenVPN Community (at 
community.openvpn.net)
(20.03.55) mattock: janjust said he tries to get in this meeting
(20.04.18) mattock: so we have some heavy-duty stuff today: "Figure out 
definition of the new data frame format with and without session ID"
(20.04.34) mattock: links to previous discussion on the topic page
(20.04.53) cron2: I think that one is pretty much "remind james that he wants 
to tell us how it should look like" :)
(20.05.03) mattock: :P
(20.05.19) mattock: james: do you have any documentation on this matter?
(20.07.55) mattock: plaisthos: are you present?
(20.08.00) plaisthos: mattock: yes
(20.08.03) mattock: ok, great!
(20.08.15) mattock: you will be needed for the next topic
(20.09.29) mattock: jamesyonan?
(20.11.01) jamesyonan: hi, just refreshing my memory on this
(20.11.26) mattock: ok
(20.11.51) mattock: these is a summary of our Munich discussions here: 
https://community.openvpn.net/openvpn/wiki/MunichHackathon2013#results
(20.11.53) vpnHelper: Title: MunichHackathon2013 – OpenVPN Community (at 
community.openvpn.net)
(20.12.19) mattock: under "packet format and alignment" if I'm not mistaken
(20.14.04) jamesyonan: right, the basic idea is that if bandwidth were never an 
issue we just send the full session ID with every packet, but...
(20.14.32) jamesyonan: to save bandwidth, optimize this in some way so that 
both peers only need to send the session ID when necessary
(20.15.23) plaisthos: So basically two new opcode for IS_SWAPPED and 
HAS_SESSION ID
(20.15.23) jamesyonan: we already do this to some extent, in that currently 
only control channel packets contain a session ID
(20.15.53) plaisthos: so the new session ID is only needed for DATA packets?
(20.15.58) jamesyonan: yes
(20.15.59) cron2: yep
(20.16.26) plaisthos: so P_DATA_SWAPPED and P_DATA_SESSIONID 
(20.16.57) cron2: which source files do I need to read to understand frame 
format, and opcode definitions?
(20.16.58) plaisthos: (and the sessionid would have also a nice alignment)
(20.17.14) plaisthos: cron2: ssl.h has the opcodes
(20.17.21) plaisthos: packet format is iirc implicit
(20.17.44) cron2: plaisthos: session ID would be swapped as well
(20.18.07) cron2: plaisthos: well, "which .c file builds packets"?  never had 
to research *that*
(20.20.17) plaisthos: cron2: hm it is in forward.c but spread over multiple 
functions
(20.20.30) cron2: *note*
(20.20.45) plaisthos: but the problem we are talking about is [opcode - one 
byte][encrypted data]
(20.21.20) cron2: plaisthos: I think I fully understand the problem and 
solution proposed ;-) - I just had no idea where to look for actual code
(20.21.43) cron2: the compression layer also does the 
byte-swapping-for-alignment
(20.21.44) plaisthos: cron2: tls_post_encrypt for the op code adding to data
(20.21.58) cron2: thanks (I'll go and read)
(20.24.16) plaisthos: how many bits do we need for a session id?
(20.24.25) plaisthos: 24, 32, 56?
(20.24.38) jamesyonan: 64
(20.25.41) plaisthos: that is the session id size of the control session, right?
(20.26.04) jamesyonan: yes
(20.27.08) plaisthos: so for the new P_WITH_SESSION ID should we use the 
session id to align the packet or keep it in place and do swapping?
(20.27.28) plaisthos: like [op][first 3 byte of session][tls data][5 byte of 
session id]?
(20.27.45) jamesyonan: I think we have to swap
(20.27.46) cron2: I'd go for "with the new opcode, you always swap the first 
byte"
(20.28.00) cron2: opcodes
(20.28.12) jamesyonan: otherwise the first opcode byte will misalign everything 
that comes after
(20.28.29) janjust [~janjust@openvpn/community/support/janjust] è entrato nella 
stanza.
(20.28.29) modalità (+v janjust) da ChanServ
(20.29.02) jamesyonan: we also need to add some capabilties negotiation so that 
peers can indicate whether or not they support P_DATA_SWAPPED and 
P_DATA_SESSIONID
(20.29.12) cron2: all in the minutes from Munich :)
(20.29.51) cron2: right at the end there's a TODO list for this
(20.30.00) plaisthos: we could do this by adding a IV_FORMAT 1?
(20.30.46) cron2: well, I called it IV_PROTO=2, but you can name it IV_FORMAT=1 
if you want
(20.30.58) plaisthos: IV_PROTO sounds nice
(20.30.59) plaisthos: r
(20.30.59) cron2: peer-info is transmitted in the control stream, as is pushed 
config
(20.31.06) janjust: hi y'all ; did the meeting start? or is it 2000 euro time?
(20.31.23) plaisthos: janjust: did start at 1900 cet
(20.31.29) mattock: janjust: the meeting started 30 mins ago, we're still at 
first topic
(20.31.35) janjust: whoops, sorry for being late 
(20.31.51) jamesyonan: the buffer where IV_x parms are staged is small, so we 
want to be conservative in terms of space
(20.32.05) jamesyonan: maybe IV_FLAGS=x and we can add flags as needed
(20.32.21) plaisthos: jamesyonan: we can still make IV_PROTO count up
(20.32.57) cron2: that was my assumption, just count up for new wire-format 
changes
(20.33.23) jamesyonan: sure, that's reasonable
(20.36.43) plaisthos: we could also mandate that all IV_PROTO=2 client support 
at least STUB compression (or even lz4)
(20.36.57) mattock: once you guys are done with the discussion, please 
summarize it for me, all this goes over my head :D
(20.37.09) mattock: for me + the general public
(20.37.12) cron2: mattock: as far as we're today, it's all in the notes from 
Munich :-)
(20.37.20) cron2: except that we now have opcode names
(20.37.30) mattock: ok
(20.37.43) mattock: we'll see where this goes and update the docs
(20.38.18) jamesyonan: I'm wary of making compression algs part of IV_PROTO 
because sometimes for space or licensing reasons a given alg might not be 
included, even though the OpenVPN implementation uses a higher IV_PROTO level
(20.38.35) plaisthos: jamesyonan: ah okay
(20.38.49) plaisthos: was just a quick idea
(20.42.30) cron2: ok, I think we have all we need, except for one thing - is 
one of us volunteering to go forward with this "soonish" (mainly to avoid two 
persons starting and doubling effort)
(20.42.46) janjust: I am still reading up on the IV_PROTO part ... (I've been 
out of openvpn & its development for some time). Does IV_PROTO=2 allow for some 
sort of negotiation (say similar to PPP style negotation) ?
(20.43.07) cron2: yes and no, we already have negotiation of many sorts :-)
(20.43.29) cron2: client sends capabilites in IV_ strings in the "peer info", 
server sends back result as part of PUSH_REPLY
(20.43.35) janjust: well, how about encryption/compression/hashing negotiation? 
(20.43.45) plaisthos: janjust: different topic :)
(20.44.05) plaisthos: compression is in there 
(20.44.06) cron2: this works for all but --cipher and --auth, but that's 
primarily due to the 2.x code base not permitting pushed --cipher - 
protocolwise, it would work
(20.44.30) janjust: plaisthos: true, but when designing a new IV_PROTO 
mechanism it would be nice to ensure that a negotation is possible in the future
(20.44.45) dazo: and pushing --cipher would be quite hard, as you would need to 
re-setup the tunnel with the new parameters
(20.44.46) cron2: janjust: listen closely :-)
(20.44.50) cron2: dazo: no
(20.45.05) cron2: I said "2.x code base".  The 3 code base already understands 
this
(20.45.05) plaisthos: dazo: no
(20.45.17) jamesyonan: the basic concept that OpenVPN currently uses for 
negotiation is to have the client send a list of key value pairs (IV_x) to 
server stating capabilities then server sends "push" commands back based on the 
intersection of its own capabilities and those of the client
(20.45.22) janjust: pushing  a ciphier is not the same as negotiating one - for 
example , the TLS channel cipher that is chosen is actually negotiated by the 
OpenSSL TLS session layer in most cases
(20.45.47) cron2: PUSH_REPLY and peer-info happens in the TLS bit, data layer 
is crypted+authed by --cipher/--auth
(20.45.54) dazo: no?  The push comes after the TLS authentication and 
encryption setup, doesn't it?
(20.46.13) cron2: dazo: yes, but the *TLS* parameters are not used for *data* 
packets
(20.46.20) plaisthos: dazo: yes but typtically you have different encryption 
ciphers for control and data packets
(20.46.21) dazo: ahh, okay
(20.46.32) cron2: this is actually quite nice :-)
(20.46.44) dazo: agreed
(20.46.47) janjust: but I'm digressing here - as long as the new IV_PROTO 
system is extensible in the future then I'm happy
(20.46.47) cron2: janjust: the client would send a list of supported ciphers, 
and the server would pick the "best" and push the result back
(20.47.14) cron2: so it might not be full two-way negotiation (like in PPP 
where you can go back and forth numerous times) but a client/server thing
(20.47.37) cron2: we can do it today for compression protocol (lzo/snappy/lz4), 
just not yet for --cipher and --auth
(20.47.40) janjust: cron2: agreed
(20.48.21) cron2: (and I've not yet spent thoughts whether it would work for 
peer-to-peer mode where you don't have push)
(20.48.40) janjust: there are other parameters that might be worthwhile to 
'negotiate', e.g assymetric tun-mtu sizes
(20.49.06) janjust: but again, I'm digressing, so I'll shut up for now
(20.51.32) mattock: so has this topic been covered?
(20.51.52) plaisthos: Think so 
(20.52.09) plaisthos: Aside from someone coding a prototype
(20.52.18) syzzer: Yeah, except that we need commitments ;)
(20.52.55) syzzer: not sure about coding prototype, a clear doc on the (old 
and) new packet format would be a good start I think
(20.53.02) mattock: syzzer: +1
(20.53.14) mattock: who could do that? James?
(20.53.17) cron2: you crypto guys are so obsessed with documentation...
(20.53.34) mattock: who need any frigging documentation, right? :P
(20.53.52) dazo: R T F code
(20.53.59) krzee: crypto code documents itself, amirite?
(20.54.01) krzee: :D
(20.54.02) syzzer: hehe, yeah, we tend to do that ;)
(20.54.09) dazo: :)
(20.54.13) plaisthos: krzee: have fun reading openssl code 
(20.54.17) jamesyonan: yes, I can document
(20.54.24) dazo: plaisthos++
(20.54.34) krzee: plaisthos, i couldnt even handle openvpn code ;]
(20.54.44) plaisthos: krzee: have no idea
(20.54.47) plaisthos: +you
(20.55.03) plaisthos: try reading openssl 
(20.55.16) syzzer: jamesyonan: well at least I would appreciate that ;)
(20.55.22) cron2: +1
(20.55.25) plaisthos: and you start asking yourself why this horrible code is 
one of the most used security libraries
(20.55.31) jamesyonan: openssl is so retro 90s C -- gotta love it :)
(20.55.36) janjust: lol @ plaisthos  ; I'm a little too familiar with the 
openssl code
(20.55.42) mattock: ok, I'll make a note that "James will document the old and 
new packet format"
(20.55.42) janjust: at least it's C and not C++ :P
(20.55.57) plaisthos: I can code an intial protype for the new format in 
OpenVPN 2.x
(20.55.58) cron2: should we tell janjust about OpenVPN 3?
(20.56.07) plaisthos: cron2: nah
(20.56.09) janjust: hehe cron2, I'm aware that that's written in C++
(20.56.10) ***dazo grabs some popcorn
(20.56.20) jamesyonan: C++ is great
(20.56.39) mattock: dazo: good idea :)
(20.56.45) janjust: well written C++ is great, horribly written C++ is far 
worse than horribly written C
(20.56.57) jamesyonan: agreed
(20.57.22) plaisthos: (like without fancy automatic recovery and stuff, just 
always send the session id)
(20.58.40) plaisthos: but so client and server understand the new formats
(20.59.08) jamesyonan: plaisthos: are you saying we should always send the 
session ID even in data packets?
(20.59.14) cron2: plaisthos: well, not "alway" please, just once a second or so
(20.59.22) cron2: (for the prototype)
(20.59.51) plaisthos: jamesyonan, cron2: I have to look at the timer stuff in 
OpenVPN 
(21.00.08) ***cron2 is in the "we only send the session ID if we haven't heard 
from the other side in a suspicously long time" camp
(21.00.13) plaisthos: I have no idea how hard it is to figure out (is the last 
timestamp 1s ago)
(21.00.32) cron2: it's not exactly "timer" as in "tell me about this in <x> 
ms", more in "keep a timestamp $somewhere"
(21.01.14) jamesyonan: well one starting point would be to initially only send 
the session ID on ping (keepalive) packets
(21.01.43) cron2: is a ping packet a normal data packet?
(21.01.53) jamesyonan: yes, mostly
(21.02.11) jamesyonan: it follows the data channel
(21.04.43) jamesyonan: one approach could be something like (a) when sending 
packet, include session ID if last session ID was transmitted more than n 
seconds ago, and (b) always include session ID on pings
(21.05.22) cron2: if it's easy to do, I'd go for "if the last packet from the 
other side was heard longer than <n> time units ago"
(21.05.39) cron2: because if both sides are happily sending packets back end 
forth, we have no need whatsoever for a session ID
(21.06.02) cron2: but if we do not see packets from the other side, we might 
have "lost" the peer
(21.06.43) cron2: (module some "no more often than <x>" if we have truly 
unidirectional traffic)
(21.08.03) plaisthos: or just relay on PING alltogether
(21.08.26) plaisthos: so we don't run into the packets with session id have a 
smaller mtu than packets without 
(21.08.50) cron2: people tell me that they want to send pings very seldom 
(battery life) but have fast float failover for their mobile stuff...
(21.09.13) cron2: but I think this is something that can be nicely tuned if the 
basic mechanics are there
(21.09.15) syzzer: cron2++
(21.09.38) jamesyonan: right now pings are only sent during traffic quiet time
(21.10.07) jamesyonan: so an active connection with packets flowing in both 
directions will never xmit a ping
(21.10.08) plaisthos: cron2: I meant sending an out of order ping with session 
id 
(21.10.34) plaisthos: or if we have session ids just reduce the mtu by 8 
(21.10.48) plaisthos: otherwise we might get strange mtu problems :/
(21.11.00) cron2: plaisthos: ah, yes, that would work as well.  Or just do it 
for non-full packets.
(21.11.02) jamesyonan: yes, good point
(21.11.31) cron2: jamesyonan: but if packets are flowing both ways, you have no 
need to send the session ID anyway
(21.12.34) jamesyonan: but using only ping packets could potentially add to the 
delay before peers can reconnect on new network
(21.13.16) syzzer: if one side is sending out packets, I guess it won't send 
out ping packets
(21.13.38) cron2: true, so use "non-full" packets or artificial ping, if the 
other side went silent suddenly
(21.13.52) plaisthos: cron2: non full won't work
(21.14.00) jamesyonan: is it the case that the only purpose of this feature is 
to allow client to change its IP address without full TLS renegotiation?
(21.14.07) cron2: "if there is no non-full packet around, send a ping"
(21.14.22) plaisthos: jamesyonan: as I understood it, yes
(21.14.38) cron2: jamesyonan: the session ID is only for --float in TLS mode
(21.14.44) cron2: ("as I understood")
(21.15.03) jamesyonan: what if we think about this differently… suppose we just 
add a new control channel message that says "client changed IP address"
(21.15.04) cron2: the IV_PROTO=2 is for alignment, and it gives us a nice 
vehicle to do the other bit right away
(21.15.18) cron2: you don't necessarily know that the IP address has changed
(21.15.30) cron2: there are broken enough setups with layers of NAT...
(21.16.06) plaisthos: jamesyonan: the client might not know that
(21.16.39) cron2: a mobile client that roams wifi/3G will know, but someone 
behind an expiring/rebooting NAT might not
(21.16.40) plaisthos: the NAT of my mobile provider has a timeout of 60s for 
UDP  unless I use the SIP UDP port
(21.17.13) jamesyonan: on mobile though, usually the client gets a message 
about network transitions
(21.18.21) syzzer: well, Android for example tries to do that, but (at least 
about a year ago) fails to report properly quite regularly...
(21.20.03) plaisthos: jamesyonan: not about the expiring NAT session :/
(21.21.05) plaisthos: the control channel message with "client changed IP 
address" is ping with session id, right?
(21.21.38) cron2: +1 :)
(21.22.12) jamesyonan: ping with session ID would be a data channel message
(21.23.29) jamesyonan: I would tend to agree that adding the session ID to a 
ping packet is probably the best/easiest-to-implement solution
(21.24.48) jamesyonan: however then we would need to change the ping timing alg 
to always ping even when traffic exists
(21.24.55) plaisthos: ah a ping packet is basically a data packet with lenght 0
(21.25.05) ***plaisthos found it in the source
(21.25.15) jamesyonan: and the ping delay would become the worst case delay for 
network transition detection
(21.25.42) jamesyonan: no, a ping is a specific sequence of bytes
(21.25.58) plaisthos: okay I misread the source then
(21.26.23) plaisthos: yeah I did
(21.26.39) jamesyonan: it's a 16 byte constant message sent within the framing 
of a data channel packet
(21.30.26) cron2: ok, I think this topic has been exhaustively covered :-)
(21.30.37) jamesyonan: the downside of session ID hitching a ride on a ping 
packet is that we might want to increase the ping delay in the future to reduce 
overhead, and this means that we will also be increasing worst-case failover 
delay
(21.30.45) cron2: shall we jump to GUI VERSION and come back to this when we 
have a prototype
(21.31.14) cron2: jamesyonan: this is why I proposed to do "ping with ID" and 
as well "data packet with ID if we feel like it" and the "if we feel like it" 
can be fine tuned when we have experience
(21.31.59) jamesyonan: agreed, but plaisthos has a good point about not wanting 
to push against mtu limits
(21.31.59) mattock: yeah, let's continue
(21.32.16) mattock: let's "sleep over it"
(21.32.30) mattock: maybe discuss it on the ml and/or next week in a meeting
(21.32.54) cron2: jamesyonan: if no suitable data packet can be found, we can 
just send an out-of-order ping "because we feel like it"
(21.33.54) jamesyonan: right, maybe hitch session ID on smaller data packets, 
and only resort to out-of-order ping if necessary
(21.34.08) cron2: that was my idea
(21.36.27) jamesyonan: that sounds good with the added logic that sess ID only 
added to packets if doing so does not increase packet size beyond mtu
(21.36.57) cron2: yep, "suitable data packet"
(21.37.32) jamesyonan: is this something that will be on by default, or enabled 
with a directive?
(21.37.54) jamesyonan: and if it's a directive, does it include a 
max-seconds-delay parameter?
(21.38.48) ***cron2 hasn't thought about that question yet (but I assumed there 
would be a configurable "delay" parameter)
(21.40.42) jamesyonan: ok, shall we move on?
(21.40.46) cron2: yep
(21.40.54) mattock: sounds good, 100 minutes for one topic is a lot :P
(21.41.06) mattock: "Missing "IV_OPENVPN_GUI_VERSION" in OpenVPN Connect"
(21.41.21) mattock: so plaisthos added this thing to OpenVPN for Android 
already, right?
(21.41.22) jamesyonan: ok, good new is that I just added it
(21.41.31) mattock: nice!
(21.41.31) cron2: is it on staging?
(21.41.42) plaisthos: jamesyonan: you said earlier that IV_ space is precious
(21.41.57) plaisthos: we can also still change that to something small like 
IV_GUI_VER
(21.42.52) jamesyonan: yes,  IV_GUI_VER would be better if it's not too much 
trouble to change 
(21.43.25) cron2: as it is in no released 2.x version yet, now would be a good 
time to do so
(21.43.41) mattock:  could someone review/fix this very brief summary of the 
previous discussion: http://fpaste.org/67160/29653413/
(21.43.49) mattock: something is surely missing :P
(21.43.59) cron2: IV_OPENVPN_GUI_VERSION=net.openvpn.connect.ios_1.0.4-133
(21.44.02) cron2: \o/
(21.45.07) jamesyonan: + for IV_GUI_VER
(21.45.10) jamesyonan: +1
(21.45.19) cron2: mattock: "specific timing and configuration of feature is 
subject to further discussion when we have a prototype to experiment with"
(21.45.31) mattock: cron2: ok, fixing
(21.47.33) mattock: ok, next topic?
(21.48.15) mattock: which would be "Signal handling is a bit funny in some 
places"
(21.48.22) mattock: of course, we don't have to discuss everything today
(21.48.31) cron2: I've just sent a IV_GUI_VER= patch to the list
(21.48.40) mattock: oh, that was quick
(21.50.09) cron2: trivial change :)
(21.50.18) mattock: yep :)
(21.50.43) mattock: actually, maybe we should discuss the "​ssl: enable basic 
ecdsa" patch?
(21.50.53) mattock: janjust is here primarily for that reason
(21.51.15) mattock: and we're at 1:50 and counting :P
(21.51.51) janjust: hehe yep
(21.52.14) janjust: my main question about that patch is:  is something 
blocking it?
(21.52.33) janjust: I know it is not full EC support, but at least it allows 
for ecdsa+sha2 signed certs
(21.53.21) syzzer: ah, I think this is my cue :p
(21.53.35) janjust: yep
(21.53.50) syzzer: the patch actually is ECDH, not ECDSA, but still it's nice 
and should be integrated
(21.54.31) cron2: syzzer: so ACK.  For 2.4, or do you feel it's safe+needed for 
2.3?
(21.54.34) janjust: agreed, I misnamed it because openssl itself misnames it
(21.54.36) jamesyonan: the patch only addresses OpenSSL right now?
(21.54.40) syzzer: I've started looking at it a couple of weeks ago, and the 
basis is good
(21.54.43) janjust: jamesyonan: yes
(21.54.57) syzzer: jamesyonan: but hat is not an issue, I've got patches for 
polar lying around
(21.54.58) jamesyonan: it might be nice to have a PolarSSL patch as well
(21.55.08) jamesyonan: what more is required for full EC support?
(21.55.24) syzzer: problem is, it needs stuff that's not yet released by 
pkcs11-helper (well, it is in git master...)
(21.55.40) jamesyonan: like what?
(21.55.43) janjust: "full EC support" means that the key exchange in openvpn 
needs to be altered
(21.56.01) janjust: encryption is still done using AES - but ECDH replaces 
regular DH key exchange
(21.56.24) syzzer: jamesyonan: the ECDH patch from janjust uses a fixed or 
chosen curve for ECDH, while the TLS spec actually says 'use the curve from the 
certificate'
(21.56.40) janjust: syzzer: the second version of my patch allows a user to 
choose a curve
(21.56.44) jamesyonan: but if it's just a change to TLS negotiation, wouldn't 
it be transparent to OpenVPN data channel?
(21.57.05) syzzer: yeah, so security-wise it's fine, its just not really 
TLS-compliant
(21.57.14) janjust: jamesyonan: yes, but it might be nice to alter the key 
exchange for the data channel as well to support Elliptic Curves
(21.57.33) syzzer: ECDH is the key exchange, ECDSA the signature algorithm
(21.57.40) jamesyonan: but the data channel is purely a symmetric crypto 
operation
(21.57.48) syzzer: for full EC-support we'll need ECDSA too
(21.58.00) syzzer: yep, no EC stuff neede for the data channel
(21.58.14) janjust: ah good, this is new for me  :)
(21.58.23) syzzer: furthermore, TLS also keeps using AES or some other 
symmetric cipher for the tls-encryption
(21.58.40) syzzer: it will just use EC for key exchange and signature algorithm
(21.58.48) syzzer: just the way it does for RSA
(21.58.59) jamesyonan: syzzer: but what do you mean by "not really 
TLS-compliant"?
(21.59.30) syzzer: TLS expects ECDH to use the same curve as was used in the 
certificate, so same curve as for ECDSA
(21.59.40) syzzer: but for that, we'll need ECDSA support
(22.00.23) janjust: syzzer: what would we need for ECDSA support? I'm willing 
to investigate/contribute
(22.00.53) jamesyonan: but can this be done in a way that only affects OpenVPN 
code that configures the SSL/TLS connection properties, not the control 
channel or data channel code?
(22.01.04) syzzer: I'n not sure yet, I'm not too familiar with the OpenSSL API.
(22.01.27) syzzer: jamesyonan: yes, I think so
(22.01.41) janjust: errrr, if we do full ECDSA (signing) support, wouldn't it 
make sense to sign the datachannel using ECDSA also?
(22.01.42) jamesyonan: OpenVPN tries to treat SSL/TLS protocol as a black box 
(other than initial setup)
(22.02.12) syzzer: data channel uses HMAC
(22.02.26) syzzer: which is way faster and very secure
(22.02.53) syzzer: it needs the slow (and less trusted) asymmetric stuff just 
for key exchange
(22.03.13) jamesyonan: Right -- I don't think the asymmetric stuff belongs in 
the ovpn data channel
(22.03.19) janjust: I agree
(22.04.04) janjust: it's just that I'm a bit confused about hashing and signing 
- certs can be signed using ECDSA or using SHA1; the data channel can be 
protected using SHA HMAC signing. 
(22.04.06) syzzer: TLS basically does the same, it uses (EC)DH for key 
exchange, ECDSA/RSA for proving identity and then exchanges AES/SHA keys for 
encrypting and authenticating data packets
(22.04.33) syzzer: ECDSA certificates still use SHA
(22.04.41) janjust: ah ok syzzer
(22.04.49) syzzer: the data is first hashed, and the hash is signed using RSA 
or ECDSA
(22.05.26) syzzer: HMAC-SHA is different from 'regular' SHA
(22.06.03) janjust: if that's the case then all EC stuff can be kept outside of 
the data channel
(22.06.12) cron2: mattock: as complete cross-talk - I've looked at the "new 
tickets" and there is nothing which I consider urgent for 2.3.3, so we can 
safely postpone that
(22.06.13) syzzer: yes, I'm sure of that :)
(22.06.33) mattock: cron2: ok, good
(22.06.38) janjust: cron2: I added a few comments to some tickets, esp about 
the pkcs11 stuff
(22.06.42) syzzer: data channel is symmetric cipher only
(22.06.48) cron2: janjust: cool, thanks
(22.06.55) plaisthos: cron2: I acked your IV_GUI_VER patch
(22.07.09) syzzer: so, commitments then...
(22.07.11) cron2: plaisthos: already pushing
(22.07.21) plaisthos: cron2: :)
(22.08.03) syzzer: I'm planning for a while now to at least review janjust's 
ECDSA patch, and even wanted to look into the ECDSA additions
(22.08.19) syzzer: problem is, life keeps getting in the way :p
(22.08.28) janjust: hehe I know that problem a bit too well
(22.08.29) cron2: syzzer: haha :-)
(22.08.30) syzzer: so I'm a bit afraid to make primises
(22.08.34) syzzer: *promises
(22.09.03) cron2: syzzer: as long as you don't feel annoyed with me poking you 
here and then :-)
(22.09.20) syzzer: nope, I'm perfectly fine with that :)
(22.10.00) syzzer: I do think I'll be able to ACK janjust's patch "soonish"
(22.10.19) janjust: it's only been lying around for a year or so, what's a few 
more weeks?
(22.10.48) syzzer: I need to dig in OpenSSL a bit further, I don't trust their 
API to do what one would expect...
(22.11.03) plaisthos: syzzer: :D
(22.11.30) plaisthos: like rsa_sign with the SIGN_FOR_TLS actually being to 
sign for TLS :D
(22.12.09) syzzer: yeah, or their use functions with 'sslv23' in their name to 
enable cipher negotiation...
(22.13.28) vpnHelper: RSS Update - gitrepo: Reduce IV_OPENVPN_GUI_VERSION= to 
IV_GUI_VER= 
<https://github.com/OpenVPN/openvpn/commit/7efaca734b8d633441ec3d7def2a2768864dedcf>
(22.13.30) syzzer: as for polarssl, they've already included my patches in 
1.3.3, and pkcs11-helper has included my patch in their tree, so I could send 
my patches to the mailinglist
(22.14.06) syzzer: but then users would need an unreleased pkcs11-helper 
version on their system to get it to work
(22.14.15) mattock: you guys still want some more punishment, or shall we call 
it a day after this topic?
(22.14.20) janjust: only if they want pkcs11+ec support
(22.14.42) plaisthos: ecdsa unfortunately will require me/someone else to patch 
external-key-management to something different than only RSA
(22.14.44) cron2: syzzer: I think that stuff would go to 2.4, which we're not 
going to release for a few more months...
(22.15.05) syzzer: no, for polar ec-support needs polar 1.3, which needs these 
patches for pkcs11-helper
(22.15.38) cron2: (release planning is "2.3.3 in a few weeks, 2.4_alpha when 
the dual-stack stuff is fully merged and stable, and d12fk's stuff is in"
(22.15.49) syzzer: plaisthos: polar itself needs more patches for ec+pkcs11 
indeed
(22.15.55) syzzer: openvpn could then just copy that code ;)
(22.16.22) plaisthos: syzzer: that stuff is OpenSSL specific 
(22.16.28) mattock: cron2: that makes sense - all we need is d12fk to push his 
patches to the ml :P
(22.16.33) plaisthos: like changing from rsa_method to ENGINE_*
(22.16.42) syzzer: cron2: okay, I'll dig the polar 1.3 patches up soon then
(22.17.59) syzzer: plaisthos: yes, you are right, management-external-key needs 
more patches for ecdsa too...
(22.20.14) mattock: so, continue the discussion next week / on the ml?
(22.20.53) syzzer: yep, I think so
(22.20.55) cron2: yep...
(22.21.00) mattock: excellent!
(22.21.13) mattock: rather lengthy and technical meeting, but we made some good 
progress

Reply via email to