[PATCH net 00/24] net/rxrpc, crypto: Add Kerberos crypto lib and AF_RXRPC GSSAPI security class

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here's a set of patches to add basic support for the AF_RXRPC GSSAPI
security class.  It provides transport security for keys that match the
security index 4 (OpenAFS) and security index 6 (YFS) for connections to
the AFS fileserver and VL server.

It can also be used to provide transport security on the callback channel,
but a further set of patches is required to provide the token and key to
set that up when the client responds to the fileserver's challenge.

[!] Note that these patches are on top of two fixes previously posted:

	https://lore.kernel.org/netdev/20250203110307.7265-1-dhowells@xxxxxxxxxx/

This series of patches consist of four parts:

 (1) Provide an AEAD crypto driver, krb5enc, that mirrors the authenc
     driver, but that hashes the plaintext, not the ciphertext.  This was
     made a separate module rather than just being a part of the authenc
     driver because it has to do all of the constituent operations in the
     opposite order - which impacts the async op handling.

     Testmgr data is provided for AES+SHA2 and Camellia combinations of
     authenc and krb5enc used by the krb5 library.  AES+SHA1 is not
     provided as the RFCs don't contain usable test vectors.

 (2) Provide a Kerberos 5 crypto library.  This is an extract from the
     sunrpc driver as that code can be shared between sunrpc/nfs and
     rxrpc/afs.  This provides encryption, decryption, get MIC and verify
     MIC routines that use and wrap the crypto functions, along with some
     functions to provide layout management.

     This supports AES+SHA1, AES+SHA2 and Camellia encryption types.

     Self-testing is provided that goes further than is possible with
     testmgr, doing subkey derivation as well.

 (3) Push reponding to CHALLENGE packets over to recvmsg() or the kernel
     equivalent so that the application layer can include user-defined
     information in the RESPONSE packet.  In a follow-up patch set, this
     will allow the callback channel to be secured by the AFS filesystem.

 (4) The AF_RXRPC RxGK security class that uses a key obtained from the AFS
     GSS security service to do Kerberos 5-based encryption instead of
     pcbc(fcrypt) and pcbc(des).

Can these all go through the same tree rather than the crypto bits going
via the crypto tree and the rxrpc bits needing to go via the networking
tree?

The patches can be found here also:

	http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=crypto-krb5

David

David Howells (24):
  crypto/krb5: Add API Documentation
  crypto/krb5: Add some constants out of sunrpc headers
  crypto: Add 'krb5enc' hash and cipher AEAD algorithm
  crypto/krb5: Test manager data
  crypto/krb5: Implement Kerberos crypto core
  crypto/krb5: Add an API to query the layout of the crypto section
  crypto/krb5: Add an API to alloc and prepare a crypto object
  crypto/krb5: Add an API to perform requests
  crypto/krb5: Provide infrastructure and key derivation
  crypto/krb5: Implement the Kerberos5 rfc3961 key derivation
  crypto/krb5: Provide RFC3961 setkey packaging functions
  crypto/krb5: Implement the Kerberos5 rfc3961 encrypt and decrypt
    functions
  crypto/krb5: Implement the Kerberos5 rfc3961 get_mic and verify_mic
  crypto/krb5: Implement the AES enctypes from rfc3962
  crypto/krb5: Implement the AES enctypes from rfc8009
  crypto/krb5: Implement the Camellia enctypes from rfc6803
  crypto/krb5: Implement crypto self-testing
  rxrpc: Pull out certain app callback funcs into an ops table
  rxrpc: Pass CHALLENGE packets to the call for recvmsg() to respond to
  rxrpc: Add the security index for yfs-rxgk
  rxrpc: Add YFS RxGK (GSSAPI) security class
  rxrpc: rxgk: Provide infrastructure and key derivation
  rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)
  rxrpc: rxgk: Implement connection rekeying

 Documentation/crypto/index.rst   |    1 +
 Documentation/crypto/krb5.rst    |  262 ++++++
 crypto/Kconfig                   |   13 +
 crypto/Makefile                  |    3 +
 crypto/krb5/Kconfig              |   26 +
 crypto/krb5/Makefile             |   18 +
 crypto/krb5/internal.h           |  247 ++++++
 crypto/krb5/krb5_api.c           |  452 ++++++++++
 crypto/krb5/krb5_kdf.c           |  145 ++++
 crypto/krb5/rfc3961_simplified.c |  797 +++++++++++++++++
 crypto/krb5/rfc3962_aes.c        |  115 +++
 crypto/krb5/rfc6803_camellia.c   |  237 ++++++
 crypto/krb5/rfc8009_aes2.c       |  362 ++++++++
 crypto/krb5/selftest.c           |  544 ++++++++++++
 crypto/krb5/selftest_data.c      |  291 +++++++
 crypto/krb5enc.c                 |  504 +++++++++++
 crypto/testmgr.c                 |   16 +
 crypto/testmgr.h                 |  351 ++++++++
 fs/afs/Makefile                  |    1 +
 fs/afs/cm_security.c             |   54 ++
 fs/afs/internal.h                |    6 +
 fs/afs/misc.c                    |   13 +
 fs/afs/rxrpc.c                   |   16 +-
 include/crypto/authenc.h         |    2 +
 include/crypto/krb5.h            |  160 ++++
 include/keys/rxrpc-type.h        |   17 +
 include/net/af_rxrpc.h           |   37 +-
 include/trace/events/rxrpc.h     |   53 +-
 include/uapi/linux/rxrpc.h       |   63 +-
 net/rxrpc/Kconfig                |   10 +
 net/rxrpc/Makefile               |    5 +-
 net/rxrpc/af_rxrpc.c             |   45 +-
 net/rxrpc/ar-internal.h          |   57 +-
 net/rxrpc/call_accept.c          |   31 +-
 net/rxrpc/call_object.c          |    5 +-
 net/rxrpc/conn_event.c           |   97 ++-
 net/rxrpc/conn_object.c          |    2 +
 net/rxrpc/insecure.c             |   13 +-
 net/rxrpc/io_thread.c            |    8 +-
 net/rxrpc/key.c                  |  185 ++++
 net/rxrpc/output.c               |   58 +-
 net/rxrpc/protocol.h             |   20 +
 net/rxrpc/recvmsg.c              |  114 ++-
 net/rxrpc/rxgk.c                 | 1360 ++++++++++++++++++++++++++++++
 net/rxrpc/rxgk_app.c             |  285 +++++++
 net/rxrpc/rxgk_common.h          |  138 +++
 net/rxrpc/rxgk_kdf.c             |  287 +++++++
 net/rxrpc/rxkad.c                |  287 ++++---
 net/rxrpc/rxperf.c               |   10 +-
 net/rxrpc/security.c             |    3 +
 net/rxrpc/sendmsg.c              |   69 +-
 net/rxrpc/server_key.c           |   40 +
 52 files changed, 7737 insertions(+), 198 deletions(-)
 create mode 100644 Documentation/crypto/krb5.rst
 create mode 100644 crypto/krb5/Kconfig
 create mode 100644 crypto/krb5/Makefile
 create mode 100644 crypto/krb5/internal.h
 create mode 100644 crypto/krb5/krb5_api.c
 create mode 100644 crypto/krb5/krb5_kdf.c
 create mode 100644 crypto/krb5/rfc3961_simplified.c
 create mode 100644 crypto/krb5/rfc3962_aes.c
 create mode 100644 crypto/krb5/rfc6803_camellia.c
 create mode 100644 crypto/krb5/rfc8009_aes2.c
 create mode 100644 crypto/krb5/selftest.c
 create mode 100644 crypto/krb5/selftest_data.c
 create mode 100644 crypto/krb5enc.c
 create mode 100644 fs/afs/cm_security.c
 create mode 100644 include/crypto/krb5.h
 create mode 100644 net/rxrpc/rxgk.c
 create mode 100644 net/rxrpc/rxgk_app.c
 create mode 100644 net/rxrpc/rxgk_common.h
 create mode 100644 net/rxrpc/rxgk_kdf.c





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux