Re: [kitten] [nfsv4] draft-ietf-nfsv4-rpcsec-gssv3: request for review

Nico Williams <nico@cryptonector.com> Mon, 04 August 2014 15:47 UTC

Return-Path: <nico@cryptonector.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 718231A0356; Mon, 4 Aug 2014 08:47:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.666
X-Spam-Level:
X-Spam-Status: No, score=-1.666 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, IP_NOT_FRIENDLY=0.334, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TOvfYGGDhEw6; Mon, 4 Aug 2014 08:47:51 -0700 (PDT)
Received: from homiemail-a33.g.dreamhost.com (sub4.mail.dreamhost.com [69.163.253.135]) by ietfa.amsl.com (Postfix) with ESMTP id DA9041A014D; Mon, 4 Aug 2014 08:47:51 -0700 (PDT)
Received: from homiemail-a33.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a33.g.dreamhost.com (Postfix) with ESMTP id 88C9D594069; Mon, 4 Aug 2014 08:47:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=cryptonector.com; h=date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=cryptonector.com; bh=1L6btOT4W4QYyS kHOn+4WquZyM4=; b=la4ZVSMRM2Pnqv288elHS8GDYt5NfV578uYi2TqY5WIxyc t2OmEyvUIlJLXTqBRApQOnOa44YULJKZnqL5J7IpJivvDDF/Kupa3qdE+aEf2CmG bIruop2r5LY4dX9TSHhu0TJSDvvk4f1iymlQS9Yybew61/NqWhciVj3PdARoo=
Received: from localhost (108-207-244-174.lightspeed.austtx.sbcglobal.net [108.207.244.174]) (Authenticated sender: nico@cryptonector.com) by homiemail-a33.g.dreamhost.com (Postfix) with ESMTPA id 1B0ED594061; Mon, 4 Aug 2014 08:47:51 -0700 (PDT)
Date: Mon, 04 Aug 2014 10:47:47 -0500
From: Nico Williams <nico@cryptonector.com>
To: Benjamin Kaduk <kaduk@MIT.EDU>
Message-ID: <20140804154746.GE3579@localhost>
References: <DC941FEB-725A-49E1-8C38-FF765454827C@netapp.com> <alpine.GSO.1.10.1407301239260.21571@multics.mit.edu> <20140801224505.GB3579@localhost> <alpine.GSO.1.10.1408030123160.21571@multics.mit.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <alpine.GSO.1.10.1408030123160.21571@multics.mit.edu>
User-Agent: Mutt/1.5.21 (2010-09-15)
Archived-At: http://mailarchive.ietf.org/arch/msg/kitten/3fk-25Fwu6-Q6FMNrE67IN7W6kY
Cc: "kitten@ietf.org" <kitten@ietf.org>, "Adamson, Andy" <William.Adamson@netapp.com>, NFSv4 <nfsv4@ietf.org>
Subject: Re: [kitten] [nfsv4] draft-ietf-nfsv4-rpcsec-gssv3: request for review
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 04 Aug 2014 15:47:57 -0000

On Sun, Aug 03, 2014 at 01:47:06AM -0400, Benjamin Kaduk wrote:
> On Fri, 1 Aug 2014, Nico Williams wrote:
> >We should agree as to data model for this, but not necessarily as to
> >encoding.  NFS uses XDR.
> 
> I think we're talking past each other.  AFS and NFS both use XDR;
> AFS is proposing to add a new fundamental data structure, in
> addition to the existing 'struct' and 'union' types.  This is a
> union type to which additional discriminant values (and
> corresponding data branches) may be added without causing existing
> implementations to fail to decode the binary data.  To do this
> requires that the encoded form for each branch of the union include
> a length field, for the length of the encoded form of the data
> branch.

Fair enough.

> >>---
> >
> >They aren't assertions in the send of a programming language "assert".
> >They are the client's assertions about local conditions, which the
> >client and only the client can know about.  The server's job is to
> >decide whether to accept those assertions considering all the context at
> >hand, including the compound authenticated principals.
> 
> I understand what they are.  All I am saying is that, while talking
> about "assertions" in this sense is normal for, e.g., SAML, it is
> not common in the GSS-API world.  This is an observation, not an
> actionable statement.

But this isn't GSS.  It's RPC, using GSS.  The term assertion here has
nothing to do with GSS.  What's being asserted has nothing to do with
GSS.

And incidentally, assertion in the SAML sense does fit what's happening
here.  Here the client makes assertions about the identity and/or
authorization attributes of a subject, "signs" them, and the server
decides what to do with them.

Other words can fit the bill, no doubt, but "assertion" seems best,
because it resembles the SAML usage, and because the English language
meaning of "assertion" fitst best.

> >>---
> >[...]
> 
> I don't think it's quite that cut-and-dried, as I can see cases
> where the client should be able to make non-critical requests, but
> also cases where the client should ask the server to fail the RPC if
> the request is not fulfillable.

Then you're proposing that criticality be described for the other cases
where it's provided, correct?  I agree.

> >>In 2.6.1.1, the following text is a little confusing:
> >>   Thus a server may refuse to
> >>   grant requested authority to a user acting alone (e.g., via an
> >>   unprivileged user-space program), or to a client acting alone (e.g.
> >>   when a client is acting on behalf of a user) but may grant requested
> >>   authority to a client acting on behalf of a user if the server
> >>   identifies the user and trusts the client.
> >>
> >>It makes more sense when one reads "client" to mean "in-kernel NFS
> >>client", but would probably be more clear if the "client is acting
> >
> >This is tricky.  What's a "client"?  The TCP client?  The physical
> >hardware running it and the NFS client stack?  The process running the
> >NFS client?  Does it matter if it's in-kernel or a FUSE process, or some
> >micro-kernel thing?  For me the only thing that matters is if it has
> >access to GSS credentials that the server will understand as being a
> >"client's" as opposed to a "user's".
> >
> >Wording this is hard, yes.
> >
> >>on behalf of a user" is reworded, possibly to "on behalf of a single
> >>user, using only that user's credentials).  It looks like the
> >
> >That's more verbose!  Yes, we need to distinguish "user with
> >credentials" from "user without credentials" (since identity assertions
> >are partly about the latter), but I think that should be clear anyways.
> 
> Hmm, I was talking about the distinction between "host with
> credentials" and "host without credentials".  Clearly there is still
> room for improvement :)

I'm not sure that we can have a "host without credentials" any more
since anonymous PKINIT (and equivalents for other mechanisms[*])
suffices for the purpose of protecting the client from the user.

And, obviously, in the case of a user-level, per-user inplementation of
NFSv4, there's no need for host credentials at all.

The server doesn't need to the client to use compound authentication --
that's for the client's protection.  But it may demand it in order to
grant more-than-normal privilege to the user.  Clearly anonymous client
credentials won't do in that case.  It's fair to expect that the clients
that should be authorized to have assertions honored must have
credentials!

[*] The key is that the user must not be able to determine the client's
    security contexts' session keys, even if the user is in full control
    of the wire.

> >>"client" vs. "kernel service" distinction is fuzzy throughout the
> >>rest of the section, too.  I would prefer if the word "client"
> >
> >We should absolutely not refer to "kernel" -- that's just an
> >implementation detail.  Instead we should refer to a "multi-user client"
> >or something of the sort.
> 
> I agree that we should not refer to "kernel"; this was intended as a
> comment about the use of the word "client" in this document and that
> it may not be appropriate in all the cases where it is currently
> used.

Sure, that may be.  I'll take a look.

Nico
--