RFC 4768
Desired Enhancements to Generic Security Services Application Program Interface (GSS-API) Version 3 Naming
Desired Enhancements to GSS-API Version 3 Naming ๐
Network Working Group ๐ง: this one is by S. Hartman from MIT ๐ฆ. It's an Informational doc (so it's giving "here's some info," not a rule book ๐ ), dated December 2006, and it doesn't list any documents it obsoletes or updates. The RFC number is 4768 โจ.
Status of This Memo ๐
okay so this memo is just here to share info with the Internet community ๐ it does NOT set any Internet standard, so don't treat it like one ๐ and distribution is totally unlimited, so share away ๐ธ
Copyright Notice ๐
Copyright (C) The IETF Trust (2006).
Abstract ๐
bestie, the Generic Security Services API (GSS-API) has a naming setup built for name-based authorization ๐. GSS-API authenticates two named parties to each other ๐ซถ, and those names can live on access control lists (ACLs) so the system can decide who gets in ๐ช. but security mechanisms are glowing up and the way implementers want to use GSS-API is changing, so this model needs to be extended for the next version of GSS-API ๐ฅ
the problem is names keep changing. when people move around an org or change their names, the name GSS-API authenticates can change too ๐ญ a constant identifier would keep ACLs way more stable ๐. also, some mechanisms (like public-key ones) don't have one single name that works everywhere, and others (like Kerberos) can bring group membership or role info along with authentication ๐. this doc explains why these extensions are needed and describes the extensions that are being talked about ๐ฆ
Table of Contents ๐๏ธ
1. Introduction ....................................................2
2. Kerberos Naming .................................................3
3. X.509 Names .....................................................4
4. Composite Names .................................................5
4.1. Usage of Name Attributes ...................................6
4.2. Open Issues ................................................6
4.3. Handling gss_export_name ...................................7
5. Credential Extensions ...........................................7
6. Mechanisms for Export Name ......................................8
7. Selection of Source Identity ....................................8
8. Compatibility with GSS-API V2 ...................................9
9. Security Considerations .........................................9
10. Acknowledgements ..............................................10
11. Informative References ........................................10
1. Introduction โจ
okay so the Generic Security Services API [2] authenticates two named parties to each other, and that's the whole vibe ๐ซถ. GSS names can be imported in a bunch of formats using the gss_import_name call ๐ฅ. there are a few mechanism-independent name formats, including GSS_C_NT_HOSTBASED_SERVICE for services running on an Internet host ๐ฅ๏ธ and GSS_C_NT_USER_NAME for user names ๐ง. other mechanism-specific name types exist too ๐
. before a name gets used to acquire a mechanism-specific credential or set up a security context, it's been transformed into one of these mechanism-specific name types โจ
GSS-API also has a function called gss_export_name that turns a GSS-API name into a binary blob you can compare directly ๐งฉ. that blob can go on an ACL, and then authorization is basically just comparing the name exported from a newly accepted context with the name on the ACL. simple and iconic ๐
but storing names on ACLs can get messy ๐ฉ because names tend to change over time. if the name has org info in it, like a domain part or what department someone works in, it changes when the person moves around the org ๐ข. even if there's no org info, the name still changes when people change their names ๐. and updating ACLs to match name changes is a pain ๐. the other big problem is that names can get reused. for example, if a Unix user ID is on an ACL, and the account gets deleted and then a brand new user is given that same old ID, the new user could end up with privileges meant for the old user ๐
here's the key idea: the GSS naming model assumes mechanism names can be represented in one single canonical form ๐. anyone who imports a name needs to be able to get that canonical form back ๐
some security mechanisms have been proposed where this naming architecture is way too restrictive ๐ โโ๏ธ. sometimes it's not possible to canonicalize every name that gets imported, and other times there just isn't one single canonical name at all ๐
also, as GSS-API gets used in more complex environments, people want to use attribute certificates [6], Kerberos authorization data [3], or other non-name-based authorization models ๐. GSS-API needs to be extended so it can support these uses in a mechanism-independent way ๐ธ
this document digs into the naming problems with two important classes of GSS-API mechanisms ๐ฌ. it also covers the proposed solutions and their open issues. the doc keeps its discussion limited to these solutions and describes the problem they're meant to solve, so they can be judged against it ๐. these solutions are aimed at being included in GSS-API Version 3 โญ
2. Kerberos Naming ๐
the Kerberos mechanism shows off both the naming stability problem and the authorization extension problem, so it's a perfect example ๐ฆ
the Kerberos Referrals document [4] proposes a new kind of Kerberos name called an enterprise name ๐ท๏ธ. the idea is that the enterprise name is an alias the user knows for themselves and can use to log in ๐. the Kerberos Key Distribution Center (KDC) translates this name into a normal Kerberos principal and gives the user tickets for that principal ๐๏ธ. that normal principal is what's used for authorization. so the enterprise name follows the user as they move through the org, even if they end up in parts of the org with different naming policies ๐ถโโ๏ธ. the name they type at login stays the same, but the Kerberos principal used to authenticate them to services changes ๐
here's the catch ๐: unauthenticated services generally can't map an enterprise name to a principal name. even authenticated services might not be allowed to map any name other than their own. Kerberos also doesn't provide (and doesn't plan to provide) a way to map enterprise names to principals other than authenticating as the enterprise name itself. so any such mapping would be vendor-specific ๐ช. because of this, it isn't possible to implement gss_canonicalize_name for enterprise name types ๐ญ. sure, other name types, like traditional principal names, could be used for GSS-API applications instead ๐คทโโ๏ธ. but naturally, that loses the benefits of enterprise names ๐
โ ๏ธ bestie, this is the big gotcha: if you go with principal names to dodge the canonicalization problem, you give up the stability that made enterprise names worth it in the first place.
there's another issue with enterprise names too ๐. sometimes it would be really nice to put the enterprise name on the ACL instead of a principal name, since that's more stable ๐
. at first glance, you could make this happen by including the enterprise name in the name that gss_export_name exports. but nope, that backfires ๐: the exported name would change whenever the mapping changed, which would invalidate any ACL entries based on the old exported name and totally defeat the purpose of putting the enterprise name in there. in some cases you'd want the exported name based on the enterprise name, and in others based on the principal name. but the current GSS-API doesn't allow that ๐ซ
and Kerberos naming gets even more complicated ๐. several vendors have been looking at ways to put group membership information into Kerberos authorization data ๐ฅ. it would be really desirable to put these group names on ACLs too. again, GSS-API doesn't currently have any mechanism to use this info ๐ค
more coming in part 2 with X.509 names, composite names and everything after ๐ซถ๐
4.1. Usage of Name Attributes ๐
okay so since attributes are part of GSS-API names, the acceptor can pull up the attributes of both the initiator's and the acceptor's name right from the context ๐. And those attributes can then be used for authorization, which is literally the whole point ๐
most name attributes probably won't come from someone explicitly adding them to a name ๐ they'll more likely show up through mechanism-specific credentials. Pieces of those credentials might come from platform or environment-specific names. Mechanism-specific naming and group membership can get turned into name attributes by the mechanism implementation ๐ง The exact way that mapping works will generally need a protocol specification for each mechanism, so it's not one-size-fits-all bestie ๐
4.2. Open Issues ๐ค
this section is basically the "stuff we still need to figure out" list ๐ these are parts of the proposal to add attributes to names that have to be explored before the proposal can turn into an actual protocol specification.
first up: are mechanisms expected to be able to carry arbitrary name attributes as part of a context establishment? At first glance it seems like yes, that would be super desirable โจ but GSS-API exists to set up an authenticated context between two peers. A context authenticates two named entities to each other, and the names of those entities plus the attributes tied to them are what get used for authorization decisions. So if an initiator or acceptor is allowed to assert name attributes and the mechanisms don't validate that those assertions are authentic, then security problems will happen ๐ญ On the flip side, requiring that name attributes be mechanism-specific, and only carried by mechanisms that understand them and can validate them, would wreck GSS-API's vibe as a generic API ๐ Application authors would be forced to understand mechanism-specific attributes just to make authorization decisions. And if mechanisms aren't required to transport arbitrary attributes, app authors would have to deal with different implementations of the same mechanism that support different sets of name attributes ๐ฅด One possible fix is to carry a source along with each name attribute. That source could say whether the attribute comes from a mechanism data structure or from the other party in the authentication ๐ซถ
another related question is how name attributes get mapped into their mechanism-specific forms. For example, it would be desirable to map a lot of Kerberos authorization data elements into name attributes ๐ With the Microsoft PAC (privilege attribute certificate), some applications would want the entire PAC. But in many cases the specific lists of security IDs inside the PAC would be way more directly useful to an application ๐ So there may not be a good one-to-one mapping between the mechanism-specific elements and the representation that's desirable at the GSS-API layer.
specific name matching rules still need to be developed ๐ฆ How do names with attributes compare? And what is the effect of a name attribute on a target name in gss_accept_sec_context?
4.3. Handling gss_export_name ๐
for a lot of mechanisms there'll be an obvious choice for the name exported by gss_export_name ๐ For Kerberos, for instance, the principal name can keep being used as the exported name. That lets applications that depend on existing GSS-API name-based authorization keep working, which is so important โจ Still, it's probably desirable to allow GSS-API mechanisms where gss_export_name can't meaningfully be defined. In those cases, the behavior of gss_export_name should probably be to return some error ๐ Those mechanisms may not work with existing applications and can't conform to the current version of the GSS-API. Rough, but that's the tea โ
5. Credential Extensions ๐ง
an alternative to the name attributes proposal is to extend GSS-API credentials with extensions labeled by OIDs ๐ท๏ธ Interfaces would be needed to manipulate these credential extensions, and to retrieve the credential extensions for credentials used to establish a context. Even if name attributes get used, credential extensions might still be useful for other unrelated purposes ๐
it's possible to solve the problems discussed in this document using some credential extension mechanism ๐ง Doing that will have a lot of the same open issues as the composite names proposal. The main advantage of a credential extensions proposal is that it avoids specifying how name attributes interact with name comparison or target names ๐
the primary advantage of the name attributes proposal over credential extensions is that name attributes seem to fit better into the GSS-API authorization model ๐ Names are already available at all the points where authorization decisions get made. Plus, for many mechanisms, the sort of information carried as name attributes will also be carried as part of the name in the mechanism ๐ซง
6. Mechanisms for Export Name ๐ง
another proposal is to define some GSS-API mechanisms whose only purpose is to have an exportable name form that's actually useful ๐ซ For example, you might be able to export a name as a local machine user ID with such a mechanism.
this solution works well for name information that can be looked up in a directory ๐ It was unclear whether it would let mechanism-specific name information be extracted from a context. If it could, then this solution would meet a lot of the goals of this document ๐ฏ
one advantage is that it requires few, if any, changes to GSS-API semantics ๐ธ But it's not as flexible as the other solutions. Also, it's not clear how to handle mechanisms that don't have a well-defined name to export with this solution ๐ตโ๐ซ
7. Selection of Source Identity ๐ฆ
today, applications like e-mail clients and Web browsers need connections to multiple targets ๐ง For each target, there may be one or more source identities that are appropriate for the connection. Right now each application has to choose the source name to use when acquiring credentials or initiating a security context. The thing is, the rules apps use can be generalized to a large extent ๐ง GSS-API could simplify application design and implementation by taking a bigger role in selecting the source identity to use when connecting to a particular target ๐ฅ
right now, GSS-API credentials represent a single mechanism name. That means that by the time credentials are acquired, they have to act as if one particular identity has been chosen for each mechanism in the credential ๐ค All of those identities must correspond to a single mechanism-independent name.
two possibilities have been proposed for getting GSS-API involved in selecting source identities ๐ First, the restriction that a mechanism name must be chosen when credentials are acquired could be relaxed. Some name form would need to be used, but this name form could represent a set of possibilities. The particular identity would then be chosen when context establishment happens. This could involve information received from the target in identity selection ๐
the other possibility is to provide a mechanism to acquire credentials and to provide information about the target when the credentials are acquired ๐ This would be way less of a change to GSS-API, but it wouldn't let information received from the target choose the identity selection.
with both approaches, information is required to communicate the needs of the application to the GSS-API mechanism ๐ฎ For example, hinting about whether information can be cached, and about the scope of cache entries, is required.
there's one more possibility that can be implemented in GSS-API V2 today: don't bind the credentials to a mechanism name until either the credentials are queried or they're used to set up a context ๐ฐ๏ธ This is undesirable, though, because if an application uses the credential inquiry interface, it'll get different behavior than in cases where that interface isn't used ๐ฌ For this reason, the working group favors an extension to GSS-API V3 ๐
8. Compatibility with GSS-API V2 ๐ซถ
in order to avoid breaking existing applications or mechanisms, the following backward compatibility requirements need to be met ๐ก๏ธ
- Existing APIs must continue to behave as they do in GSS-API V2.
- GSS-API V2 mechanisms must produce the same exported name forms; composite names cannot change the existing exported name forms.
- Extensions add new optional behavior.
if GSS-API V3 mechanisms are more permissive than GSS-API V2 mechanisms, then care must be taken so that GSS-API V2 applications don't select these mechanisms ๐จ
9. Security Considerations ๐
okay this part is SERIOUS, bestie ๐ญ GSS-API sets up a security context between two named parties. The GSS-API names are security assertions that get authenticated by the context establishment process. As such, the GSS naming architecture is critical to the security of GSS-API ๐
right now, GSS-API uses a simplistic naming model for authorization. Names can be compared against a set of names on an access control list. This architecture is relatively simple, and its security properties are well understood โ However, it doesn't provide the flexibility and feature set needed for future deployments of GSS-API.
this proposal will significantly increase the complexity of the GSS naming architecture ๐ As the proposal gets fleshed out, we need to consider ways of managing the security exposures created by this increased complexity. Yikes ๐
one area where the complexity may lead to security problems is composite names with attributes from different sources โ ๏ธ This may be desirable so that name attributes can carry their own authentication. But the design of any solution needs to make sure that applications can assign appropriate trust to name components. Trust is everything, periodt ๐
10. Acknowledgements ๐ท
John Brezak, Paul Leach, and Nicolas Williams all participated in discussions that led to a desire to enhance GSS naming ๐ Martin Rex provided descriptions of the current naming architecture and pointed out many ways the proposed enhancements would create interoperability problems or increase complexity. Martin also provided excellent information on which aspects of GSS naming have tended to be implemented badly, or haven't met the needs of some customers ๐ซก
Nicolas Williams helped describe the possible approaches for enhancing naming ๐
11. Informative References ๐
[1] Adams, C., "The Simple Public-Key GSS-API Mechanism (SPKM)", RFC 2025, October 1996.
[2] Linn, J., "Generic Security Service Application Program Interface Version 2, Update 1", RFC 2743, January 2000.
[3] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The Kerberos Network Authentication Service (V5)", RFC 4120, July 2005.
[4] Zhu, L., "Generating KDC Referrals to Locate Kerberos Realms", Work in Progress, June 2006.
[5] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3280, April 2002.
[6] Farrell, S. and R. Housley, "An Internet Attribute Certificate Profile for Authorization", RFC 3281, April 2002.
Author's Address ๐
Sam Hartman
MIT
EMail: hartmans-ietf@mit.edu
Full Copyright Statement โจ
Okay, legal bit time, but make it cute ๐. The IETF Trust owns the copyright on this doc (2006 vibes ๐ธ). It's bound by the rights, licenses, and restrictions in BCP 78, and apart from what BCP 78 says, the authors keep all their own rights ๐.
The doc and everything in it is handed over "AS IS", no guarantees ๐. THE CONTRIBUTOR, the organization they represent or are sponsored by (if any), THE INTERNET SOCIETY, THE IETF TRUST, and THE INTERNET ENGINEERING TASK FORCE all say NO to ALL WARRANTIES, express or implied. That includes no promise that using the info won't infringe anyone's rights, and no implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE ๐.
Intellectual Property
Real talk: the IETF takes no position on whether any Intellectual Property Rights (or other rights) someone might claim over the tech in this doc are valid or how wide they are ๐ฆ. It also doesn't say whether licenses for those rights exist or are available, and it hasn't done any independent digging to find out what rights are out there ๐. If you want the procedures for rights in RFC docs, check BCP 78 and BCP 79 ๐.
Copies of IPR disclosures sent to the IETF Secretariat, plus any promises of licenses, or the results of trying to get a general license or permission to use proprietary rights by implementers or users of this spec, can all be found in the IETF online IPR repository at http://www.ietf.org/ipr ๐.
The IETF also invites anyone to flag any copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard ๐. Send that info to the IETF at ietf-ipr@ietf.org โจ.
Acknowledgement
Shoutout to the people keeping the RFC Editor function running: funding for it is currently provided by the Internet Society ๐ซถ๐.
๐ฆ where this page comes from
- ietf: rfc4768 2006-12
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms