From patchwork Wed Jul 4 07:54:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steffan Karger X-Patchwork-Id: 399 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director7.mail.ord1d.rsapps.net ([172.27.255.57]) by backend30.mail.ord1d.rsapps.net (Dovecot) with LMTP id FF8FABQKPVvCIQAAIUCqbw for ; Wed, 04 Jul 2018 13:55:32 -0400 Received: from proxy3.mail.iad3a.rsapps.net ([172.27.255.57]) by director7.mail.ord1d.rsapps.net (Dovecot) with LMTP id 28bGFxQKPVtoaQAAovjBpQ ; Wed, 04 Jul 2018 13:55:32 -0400 Received: from smtp21.gate.iad3a ([172.27.255.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy3.mail.iad3a.rsapps.net with LMTP id QGPEFRQKPVulTAAAYaqY3Q ; Wed, 04 Jul 2018 13:55:32 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp21.gate.iad3a.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=karger-me.20150623.gappssmtp.com; dmarc=none (p=nil; dis=none) header.from=karger.me X-Suspicious-Flag: YES X-Classification-ID: 713aa7da-7fb3-11e8-8503-525400e75841-1-1 Received: from [216.105.38.7] ([216.105.38.7:29709] helo=lists.sourceforge.net) by smtp21.gate.iad3a.rsapps.net (envelope-from ) (ecelerity 4.2.1.56364 r(Core:4.2.1.14)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id A7/0C-31792-31A0D3B5; Wed, 04 Jul 2018 13:55:31 -0400 Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1falzL-0001Px-U7; Wed, 04 Jul 2018 17:54:47 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1falzJ-0001PV-Io for openvpn-devel@lists.sourceforge.net; Wed, 04 Jul 2018 17:54:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=FLWm3VDSOL+Sxe1w9eRoKMgC/Nf2xhGCExwFqsxdZqM=; b=OON4vtmf5d0FnUDrWF0ULcdGrh pBO6DLBUXPgOkDm/8OK+YzY68uj6qLAGdxVWq9Tt0RhCHn70ESolbS7mIMR7pswXtMNHDyk5gZsDv Ru0Ln60jh/jrRLTL3GvYqoQv2zSSgh1TDXkpJ0PjLlrrCXIB4g3JLd+47cKj56YalzzA=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To :MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=FLWm3VDSOL+Sxe1w9eRoKMgC/Nf2xhGCExwFqsxdZqM=; b=XsE8yqyFw5lnlmjUyfv4HGTGwZ m7QLF+cPxGEVLhzEQlqg01OxeaJbhZuC4MgVg3XrUs1Qs6luouUTtO9vaZ/7rEoUh429EToTzmWR9 cGAhICfm8Lxop8UUcULw9JCKj2xtkITS9KuJf6o5cjk+ubbzmNPOj8mPUQaRI3G1fzVM=; Received: from mail-ed1-f41.google.com ([209.85.208.41]) by sfi-mx-4.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) id 1falzI-00CwKj-6f for openvpn-devel@lists.sourceforge.net; Wed, 04 Jul 2018 17:54:45 +0000 Received: by mail-ed1-f41.google.com with SMTP id r17-v6so4563418edo.13 for ; Wed, 04 Jul 2018 10:54:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karger-me.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FLWm3VDSOL+Sxe1w9eRoKMgC/Nf2xhGCExwFqsxdZqM=; b=DKin4uZ3PM82kT7LsNAU0VlHVZf5t+JsWhyapO0rdbseo2GX5Tx/MvrQBHC9eYO5VL /F5tm9/3iK4JaLFkqF6qjpHc4t06hnR34YukSpfnCEJU3o9q/pbPgHb4KBPYPGtrqHea W58rAOcOLBVKbVtNuCZTFq7l4m4XOvnEPPobLdufay7qo+IiPOhTP7u3s167CRT9KGDA yVj606KOgcUHlcKYYQ+FBQC73GsXQY6yWJ0iGOTBbOk6eyywXZf/K6gckR3/Cn5glbMd GkL5YCi1yBPGg5QqCH6Q3EVBwr4x8wKPviiJWLvdZpvsj+GPGUqqpDzJE06Xzr9hGIur SKOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FLWm3VDSOL+Sxe1w9eRoKMgC/Nf2xhGCExwFqsxdZqM=; b=bQjn70OwyDhinyBFWetiUekDjR3sDFhLLUvEOhBh1n84HVf8Nqm1eFM2LAutHmsif1 BT5d2qN3BU9VLYmYM+flBKUnzbwdJo9bf0UoI4FM5XkfKUueY48swh7sait5JE4psic+ +u1Mk4AbSC/WM9WOWO/yaHcL7HAzO1mIUb8MQVJpBFlRjCN4a2kj80Fj0B5BV+Inqy2B E3T1c6KD8k9lYZyywHuXlJpJoNPfrkdVDztRvy59wlm4aPnxvqiA3RxCiXrssj5Af7o0 0wX1+1wXqmPDTb37/O2peTSalp4Xjs4RfEqDjcsbKbbc5c2GF5+WsWGFaFra/e/GIcdL 2dYg== X-Gm-Message-State: APt69E221ZqWPbSlLuHt8t3dhfwYLEG53P6DN/LK86Ymp+bLIMIvcd4W 9Q9Z1Mq2aJpN+8SDpBJU+xJ/V8Qm7iY= X-Google-Smtp-Source: AAOMgpfqcJz387ip0ZPe97Edu6ZTrCYUUqSQu8+o0fq3VbNd5oz1J0TFwDwN5NmXnPeGYMfE5nnq3g== X-Received: by 2002:a50:d2d7:: with SMTP id q23-v6mr3784090edg.183.1530726877396; Wed, 04 Jul 2018 10:54:37 -0700 (PDT) Received: from vesta.fritz.box ([2001:985:e54:1:f598:331e:3cdf:2649]) by smtp.gmail.com with ESMTPSA id o2-v6sm1948961edd.84.2018.07.04.10.54.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 Jul 2018 10:54:36 -0700 (PDT) From: Steffan Karger To: openvpn-devel@lists.sourceforge.net Date: Wed, 4 Jul 2018 19:54:02 +0200 Message-Id: <20180704175404.22371-7-steffan@karger.me> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180704175404.22371-1-steffan@karger.me> References: <1512734870-17133-1-git-send-email-steffan.karger@fox-it.com> <20180704175404.22371-1-steffan@karger.me> X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.208.41 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [209.85.208.41 listed in list.dnswl.org] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 T_DKIMWL_WL_MED DKIMwl.org - Whitelisted Medium sender 0.0 AWL AWL: Adjusted score from AWL reputation of From: address X-Headers-End: 1falzI-00CwKj-6f Subject: [Openvpn-devel] [PATCH v2 7/9] tls-crypt-v2: add P_CONTROL_HARD_RESET_CLIENT_V3 opcode X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Steffan Karger Not used yet, but prepare for sending and receiving tls-crypt-v2 handshake messages. Signed-off-by: Steffan Karger --- src/openvpn/ps.c | 3 ++- src/openvpn/ssl.c | 23 ++++++++++++++++++----- src/openvpn/ssl.h | 5 ++++- src/openvpn/ssl_common.h | 2 ++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/openvpn/ps.c b/src/openvpn/ps.c index 25ab3749..adec0724 100644 --- a/src/openvpn/ps.c +++ b/src/openvpn/ps.c @@ -985,7 +985,8 @@ is_openvpn_protocol(const struct buffer *buf) { return p[0] == 0 && p[1] >= 14 - && p[2] == (P_CONTROL_HARD_RESET_CLIENT_V2<= 2) { diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c index 669f941b..bfe37fcd 100644 --- a/src/openvpn/ssl.c +++ b/src/openvpn/ssl.c @@ -792,6 +792,9 @@ packet_opcode_name(int op) case P_CONTROL_HARD_RESET_SERVER_V2: return "P_CONTROL_HARD_RESET_SERVER_V2"; + case P_CONTROL_HARD_RESET_CLIENT_V3: + return "P_CONTROL_HARD_RESET_CLIENT_V3"; + case P_CONTROL_SOFT_RESET_V1: return "P_CONTROL_SOFT_RESET_V1"; @@ -864,7 +867,8 @@ is_hard_reset(int op, int key_method) if (!key_method || key_method >= 2) { - if (op == P_CONTROL_HARD_RESET_CLIENT_V2 || op == P_CONTROL_HARD_RESET_SERVER_V2) + if (op == P_CONTROL_HARD_RESET_CLIENT_V2 || op == P_CONTROL_HARD_RESET_SERVER_V2 + || op == P_CONTROL_HARD_RESET_CLIENT_V3) { return true; } @@ -1095,8 +1099,15 @@ tls_session_init(struct tls_multi *multi, struct tls_session *session) } else /* session->opt->key_method >= 2 */ { - session->initial_opcode = session->opt->server ? - P_CONTROL_HARD_RESET_SERVER_V2 : P_CONTROL_HARD_RESET_CLIENT_V2; + if (session->opt->server) + { + session->initial_opcode = P_CONTROL_HARD_RESET_SERVER_V2; + } + else + { + session->initial_opcode = session->opt->tls_crypt_v2 ? + P_CONTROL_HARD_RESET_CLIENT_V3 : P_CONTROL_HARD_RESET_CLIENT_V2; + } } /* Initialize control channel authentication parameters */ @@ -3427,7 +3438,8 @@ tls_pre_decrypt(struct tls_multi *multi, { /* verify client -> server or server -> client connection */ if (((op == P_CONTROL_HARD_RESET_CLIENT_V1 - || op == P_CONTROL_HARD_RESET_CLIENT_V2) && !multi->opt.server) + || op == P_CONTROL_HARD_RESET_CLIENT_V2 + || op == P_CONTROL_HARD_RESET_CLIENT_V3) && !multi->opt.server) || ((op == P_CONTROL_HARD_RESET_SERVER_V1 || op == P_CONTROL_HARD_RESET_SERVER_V2) && multi->opt.server)) { @@ -3812,7 +3824,8 @@ tls_pre_decrypt_lite(const struct tls_auth_standalone *tas, /* this packet is from an as-yet untrusted source, so * scrutinize carefully */ - if (op != P_CONTROL_HARD_RESET_CLIENT_V2) + if (op != P_CONTROL_HARD_RESET_CLIENT_V2 + && op != P_CONTROL_HARD_RESET_CLIENT_V3) { /* * This can occur due to bogus data or DoS packets. diff --git a/src/openvpn/ssl.h b/src/openvpn/ssl.h index a2501c9b..bbc84192 100644 --- a/src/openvpn/ssl.h +++ b/src/openvpn/ssl.h @@ -63,9 +63,12 @@ #define P_CONTROL_HARD_RESET_CLIENT_V2 7 /* initial key from client, forget previous state */ #define P_CONTROL_HARD_RESET_SERVER_V2 8 /* initial key from server, forget previous state */ +/* indicates key_method >= 2 and client-specific tls-crypt key */ +#define P_CONTROL_HARD_RESET_CLIENT_V3 10 /* initial key from client, forget previous state */ + /* define the range of legal opcodes */ #define P_FIRST_OPCODE 1 -#define P_LAST_OPCODE 9 +#define P_LAST_OPCODE 10 /* * Set the max number of acknowledgments that can "hitch a ride" on an outgoing diff --git a/src/openvpn/ssl_common.h b/src/openvpn/ssl_common.h index 08ef6ffa..e3c852af 100644 --- a/src/openvpn/ssl_common.h +++ b/src/openvpn/ssl_common.h @@ -286,6 +286,8 @@ struct tls_options const char *config_authname; bool ncp_enabled; + bool tls_crypt_v2; + /** TLS handshake wrapping state */ struct tls_wrap_ctx tls_wrap;