Skip to content
  • Eric Biggers's avatar
    crypto: speck - add support for the Speck block cipher · da7a0ab5
    Eric Biggers authored
    Add a generic implementation of Speck, including the Speck128 and
    Speck64 variants.  Speck is a lightweight block cipher that can be much
    faster than AES on processors that don't have AES instructions.
    
    We are planning to offer Speck-XTS (probably Speck128/256-XTS) as an
    option for dm-crypt and fscrypt on Android, for low-end mobile devices
    with older CPUs such as ARMv7 which don't have the Cryptography
    Extensions.  Currently, such devices are unencrypted because AES is not
    fast enough, even when the NEON bit-sliced implementation of AES is
    used.  Other AES alternatives such as Twofish, Threefish, Camellia,
    CAST6, and Serpent aren't fast enough either; it seems that only a
    modern ARX cipher can provide sufficient performance on these devices.
    
    This is a replacement for our original proposal
    (https://patchwork.kernel.org/patch/10101451/
    
    ) which was to offer
    ChaCha20 for these devices.  However, the use of a stream cipher for
    disk/file encryption with no space to store nonces would have been much
    more insecure than we thought initially, given that it would be used on
    top of flash storage as well as potentially on top of F2FS, neither of
    which is guaranteed to overwrite data in-place.
    
    Speck has been somewhat controversial due to its origin.  Nevertheless,
    it has a straightforward design (it's an ARX cipher), and it appears to
    be the leading software-optimized lightweight block cipher currently,
    with the most cryptanalysis.  It's also easy to implement without side
    channels, unlike AES.  Moreover, we only intend Speck to be used when
    the status quo is no encryption, due to AES not being fast enough.
    
    We've also considered a novel length-preserving encryption mode based on
    ChaCha20 and Poly1305.  While theoretically attractive, such a mode
    would be a brand new crypto construction and would be more complicated
    and difficult to implement efficiently in comparison to Speck-XTS.
    
    There is confusion about the byte and word orders of Speck, since the
    original paper doesn't specify them.  But we have implemented it using
    the orders the authors recommended in a correspondence with them.  The
    test vectors are taken from the original paper but were mapped to byte
    arrays using the recommended byte and word orders.
    
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    da7a0ab5