Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3156264imu; Mon, 19 Nov 2018 11:30:55 -0800 (PST) X-Google-Smtp-Source: AJdET5fOeDzuxuz84IoBVPLlokZoc23Jd6Y8dma0rCl1pfHQJpeHb7pA6GLKcjIop4SKweWHarHg X-Received: by 2002:a63:fb0b:: with SMTP id o11mr21145152pgh.211.1542655855358; Mon, 19 Nov 2018 11:30:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542655855; cv=none; d=google.com; s=arc-20160816; b=JKDpGTw2rqPGlzAjge/n4EqGR25CZ/mtGoACMdINjB5eN5sv5zcIVmi291UDko5qIv gIAVK/QMcEc40gRikbmEfK7TccitT7VPKdItnGVgleYxRhuSrcIt0fgADJggcuhvj/8F mszSC6Tk8Bdr29PsHe1N4s8ewIJt33aF5+BWnS53s754FaWJriRYQ2Ve7aX7t6d73LHP hokoCU2asswMSYZ2b6txCE8+QC5Pg0UXNI9XsccD25etOtV5Y+BW/DcunzC9IT0Mxdpo A7KdMfY4yEv5/qcCBsKvBBH+xZ5hpcbmu7uQqBVL8HlNZC5kC4uNO5nvqq0r9+wYnEUX WG2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=SvykpjYetI8Nps7EynhIVcCS0RkXUQhpBlHsZAPhJWs=; b=nTyZI2Eic3pfOVgBmjdDhLlpxNn2yBZUsVDAo956jaNuV3AXPZoIeTe68G4/JeaiDP U6fQut47SkDHUPXmREZQlYCs8+fGVG+/TQNQ/4QXG+vDKiC5AUXIcSYe2cj+npxx64Kd 8VjYiNWeoNS7zyIwTFG1RRdFD8vU/ukuHqbZJb8OcJHqj62WfIViCGzGGDwedvcLexHI a1nP9fl+Qze4t4dEmhBtHiU2QyVmLbGfuP9cROyRLKTNWEuHW2FuJZctaujIr6k6ZapG NKzBSq4wAD5Oli3+FIEBa75Bf51OaFwrQYpijSVknDR5lhn8k5rhJUeIS/BDn7gZMZfn EoIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="PDJO/dU6"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 20si38468656pgg.271.2018.11.19.11.30.40; Mon, 19 Nov 2018 11:30:55 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="PDJO/dU6"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730428AbeKTFx2 (ORCPT + 99 others); Tue, 20 Nov 2018 00:53:28 -0500 Received: from mail.kernel.org ([198.145.29.99]:48324 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726350AbeKTFx2 (ORCPT ); Tue, 20 Nov 2018 00:53:28 -0500 Received: from gmail.com (unknown [104.132.1.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CEFD52075B; Mon, 19 Nov 2018 19:28:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542655705; bh=jgpIpAM0rs970Ruia3VshFPvXqgVqIfGCBdkhUciuv0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=PDJO/dU6EqoDmCmLfMGp3MWJSXQYOh0l+xeTcSPKIkaMHp0996o6oI8jhSNQOM1K8 66W3ftBFsDFM0478UkPYALhM8A0z5y58E/kcyL51Kk1cJB0QL73GI2d9PkUgL2xl+B AKErCIvVyOTpO8EIfH0t8EG+DqkO89/VmnAntRHE= Date: Mon, 19 Nov 2018 11:28:23 -0800 From: Eric Biggers To: Milan Broz Cc: "Jason A. Donenfeld" , Linux Crypto Mailing List , linux-fscrypt@vger.kernel.org, linux-arm-kernel@lists.infradead.org, LKML , Herbert Xu , Paul Crowley , Greg Kaiser , Michael Halcrow , Samuel Neves , Tomer Ashur Subject: Re: [RFC PATCH v2 00/12] crypto: Adiantum support Message-ID: <20181119192821.GA258711@gmail.com> References: <20181015175424.97147-1-ebiggers@kernel.org> <20181019190411.GB246441@gmail.com> <1f65ce09-93b3-f43e-49d5-9d9d6c0bb9e0@gmail.com> <20181116215249.GA27149@gmail.com> <56883f08-26cb-ecef-5698-1c2948714773@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56883f08-26cb-ecef-5698-1c2948714773@gmail.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Milan, On Sat, Nov 17, 2018 at 11:29:23AM +0100, Milan Broz wrote: > On 16/11/2018 22:52, Eric Biggers wrote: > > Hi Milan, > > > > On Sat, Oct 20, 2018 at 12:26:20PM +0200, Milan Broz wrote: > >> > >> Adiantum (as in your current git branches on kernel.org) can be used for dm-crypt > >> without any changes (yes, I played with it :) and with some easy tricks directly > >> through cryptsetup/LUKS as well. > >> > >> I think we should have this as an alternative to length-preserving wide-block > >> cipher modes for FDE. > >> > > > > Yes, dm-crypt can use Adiantum by specifying the cipher as > > "capi:adiantum(xchacha12,aes)-plain64". > > > > But, I'm having trouble getting cryptsetup/LUKS to use Adiantum. > > Using LUKS1, the following works: > > > > cryptsetup luksFormat /dev/$partition --cipher='capi:adiantum(xchacha12,aes)-plain64' --key-size 256 > > > > However, when possible we'd like people to use 4K sectors for better > > performance, which I understand requires using the LUKS2 format along with > > cryptsetup v2.0.0+ and Linux v4.12+. But the following does *not* work: > > > > cryptsetup luksFormat /dev/$partition --cipher='capi:adiantum(xchacha12,aes)-plain64' --key-size 256 --type luks2 --sector-size 4096 > > Hi Eric, > > actually I planned to test it and then reply to these patches with example cryptsetup > commands, but did not have time for it yet. > So thanks for a reminder ;-) > > Recent cryptsetup supports sector-size even for plain device. > > You actually do not need to use capi: prefix, Adiantum is a composition, > so "xchacha20,aes-adiantum-plain64" works as well (and it should work even for old cryptsetup). > (It is ugly, but it should be compatible.) Okay, good to know the "capi:" prefix is not needed. That makes things slightly easier for us. > > # cryptsetup open --type plain -c xchacha20,aes-adiantum-plain64 -s 256 --sector-size 4096 /dev/sdb test > > For LUKS and benchmark, Adiantum need to use 32 bytes IV. And we have these parameter, > unfortunately, hardcoded... > (I guess there is already a way how to get this dynamically from userspace crypto API now.) > > So, I already added patch to devel branch patch for benchmark to support Adiantum few days ago > https://gitlab.com/cryptsetup/cryptsetup/commit/bce567db461e558af7d735c694a50146db899709 > > This allows trivial benchmark (but it just encrypts one big blob of data): > > # cryptsetup benchmark -c xchacha20,aes-adiantum -s 256 > # Tests are approximate using memory only (no storage IO). > # Algorithm | Key | Encryption | Decryption > xchacha20,aes-adiantum 256b 146.6 MiB/s 148.0 MiB/s > ... > > # ./cryptsetup benchmark -c xchacha12,aes-adiantum -s 256 > xchacha12,aes-adiantum 256b 181.7 MiB/s 184.6 MiB/s Note that Adiantum benchmarks on x86 are misleading at the moment, since the initial kernel patchset doesn't include SSE2 and AVX2 optimized XChaCha and NHPoly1305. To start, only C and arm32 NEON implementations are included. Hence, on x86 Adiantum will appear much slower than it should be. But I'm planning to add the x86 and arm64 implementations, so it will get much faster. > > For LUKS2, we need a similar change to cryptoAPI IV size (unfortunately it does not > fallback to old keyslot handling, so LUKS2 does not work currently now). > > I quickly added a workaround that fallbacks to default keyslot encryption for keyslots > in this case > https://gitlab.com/cryptsetup/cryptsetup/commit/29e87add5aac9d5eb0087881146988d9c4280915 > > then you can use LUKS2 > # cryptsetup luksFormat --type luks2 --sector-size 4096 -c xchacha20,aes-adiantum-plain64 -s 256 /dev/sdb > > (Example above will encrypt keyslots with AES-XTS and use Aviantum for data only.) > > So, unfortunately yes, we need some small changes in cryptsetup for LUKS; > plain mode should work out of the box (with the syntax above). I think that when using AF_ALG, cryptsetup should get the IV size from /proc/crypto, or else have it hardcoded that "adiantum" uses 32-byte IVs. (Actually Adiantum can formally can use any size IV, but we had to choose a fixed size for Linux's crypto API.) Getting the IV size via CRYPTO_MSG_GETALG via NETLINK_CRYPTO is also an option, but that requires the kconfig option CONFIG_CRYPTO_USER which isn't guaranteed to be enabled even if CONFIG_CRYPTO_USER_API_SKCIPHER is. Also: why is cryptsetup's default keyslot encryption AES-128-XTS instead of AES-256-XTS? People can choose a cipher with a 256-bit key strength such as AES-256-XTS or Adiantum, so the keyslots should use at least that strength too. Thanks, - Eric