OASIS eXtensible Access Control Markup Language (XACML) TC

Proposal for WI#2: Location Information

  • 1.  Proposal for WI#2: Location Information

    Posted 10-09-2003 14:07
     MHonArc v2.5.0b2 -->
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    xacml message

    [Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


    Subject: Proposal for WI#2: Location Information


    2: Location Information
    
      Way to pass location information needed to evaluate a policy.
      Examples of such information are:
        o where to find various Attributes,
        o where Attribute Authorities to be used are located
        o where to find function, combining algorithm, data-type,
          Attribute parsing code
      Such information might be embedded in either of
       a. an XACML Request
       b. an XACML policy
    
    MOTIVATING USE-CASE AND REQUIREMENT
    
      NEW FUNCTIONALITY
    
      Any XACML implementation that will use attributes other than
      those passed in from the PEP needs to have a way to locate and
      retrieve those attributes.  Often the PEP or the policy writer
      will know where and how a given attribute can or should be
      retrieved, but there is currently no way to express this
      information in XACML.
    
      XACML is also designed to be extensible to support new
      functions and data types.  Any XACML implementation will need
      to include new executable modules for handling these new
      functions and data types.  A policy writer may know where
      appropriate downloadable executable modules are located, but
      again, there is no way to express this information in an XACML
      policy.  In particular, PDPs implemented in languages such as
      the Java language can use such information to support
      extensions without needing to modify the standard PDP.
    
      This requirement is based on actual experience with XACML
      1.0/1.1 and the comments and requests received from users of
      Sun's XACML Implementation Open Source project at
      http://sunxacml.sourceforge.net/
    
    SUMMARY OF OPEN ISSUES
    
      1. What is the syntax for such information
    
    PROPOSED SOLUTION #1
    
      The following is a portion of another non-XML policy language
      that included such functionality.  The <Definitions> portion of
      the following BNF specifies a syntax for expressing this
      functionality.  I propose modifying it to a suitable XML
      format consistent with XACML.
    
    <BooleanPolicy> ::= [ <Definitions> ] <BooleanCondition>
    
      A <BooleanPolicy> is a statement that evaluates to 'TRUE' or
      'FALSE'.  The evaluation is done by taking a set of
      <AttributeName> <AttributeValue> pairs supplied by the PEP and
      by the configured AEPs, matching the <LocalAttributeName>s in
      the <BooleanCondition> with the <AttributeName>s in the input
      using 'define attribute' statements, substituting the
      <AttributeValue> for each corresponding <LocalAttributeName> in
      the <BooleanCondition>, then evaluating the <BooleanCondition>.
    
    <Definitions> ::= <Definition> ';' |
                      <Definition> ';' <Definitions>
    
    <Definition> ::= <AttributeDefinition> |
                     <PKIDefinition> |
                     <CertDefinition> |
                     <PolicyDefinition>
    
      A <BooleanPolicy> may begin with one or more <Definitions> that
      provide information for interpreting the <BooleanCondition> of
      the policy.  There are four types of <Definition>:
    
    <AttributeDefinition> ::=  'DEFINE' 'ATTRIBUTE'
                               <LocalAttributeName>
                               'TYPE' ':' <AttributeTypeDefinition>
    
    <LocalAttributeName> ::= <LocalName>
    
      For each <LocalAttributeName> that is used in a
      <BooleanCondition>, there must be an <AttributeDefinition>
      statement that describes how to establish a value for that
      attribute and how to compare values of that attribute.
    
    <AttributeTypeDefinition> ::= ( <HowToGetValue> [ <HowToGetCode> ] ) |
                                  'INHERITED'
    
      An <AttributeTypeDefinition> tells how to obtain a value for
      the corresponding attribute and, optionally, how to obtain code
      for comparing the attribute to another value.
    
      If <HowToGetCode> is omitted, then it is assumed that the
      <BooleanPolicy> implementation knows how to compare the
      associated attribute with another value.
    
      An <AttributeTypeDefinition> of 'INHERITED' is only valid when the
      <BooleanPolicy> in which it occurs is referenced as a
      <ReferencedBooleanPolicy> from another <BooleanPolicy>
      statement.  'INHERITED' indicates that the definition of the
      attribute is to come from the <BooleanPolicy> in which the
      current <BooleanPolicy> is referenced (that is, the outer
      <BooleanPolicy>).
    
    <HowToGetValue> ::= ( 'AC' <ValueSearchParameters> ) |
                        ( 'INPUT' <InputIdentifier> )
    
      'AC' indicates that the value for the attribute is to come from
      an Attribute Certificate.  'INPUT' indicates that the value for
      the attribute is to come from the PEP or from one of the
      configured AEPs.  If no value is supplied by the PEP, then the
      configured AEPs are asked for a value.
    
      There may be other <HowToGetValue> options added to the
      language in the future.
    
    <ValueSearchParameters> ::= 'OID' ':' <OID>
                                'HOLDER' ':' <Holders>
                                'AA' ':' <AAName>
    
      For an 'AC' attribute, which will be obtained from an Attribute
      Certificate, the <OID> of the attribute and the <Holder> of the
      Attribute Certificate must be specified.  The
      <ValueSearchParameters> may also specify the name of the
      Attribute Authority (AA) trusted to certify this attribute
      value.
    
    <Holders> ::= <Holder> |
                  <Holder> ',' <Holders>
    
    <Holder> ::= <TypedName> |
                 <PublicKeyValue> |
                 <LocalAttributeName>
    
    <PublicKeyValue> ::= <Hex-EncodedValue>
    
      The <Holders> list contains names or public key values that are
      allowed as Holder names in any Attribute Certificate used to
      establish a value for this <LocalAttributeName>.  The <Holders> list
      may contain names of other attributes, the values of which are
      to be substituted for the <Holder>.
    
    <AAName> ::= <TypedName> | <LocalCertName>
    
      An <AAName> is the name of an Attribute Authority trusted to
      initiate chains of Attribute Certificates assigning values for
      the associated attribute.
    
    <InputIdentifier> ::= 'INPUTID' ':' ( <String> | <OID> )
    
      The <InputIdentifier> is how the attribute value will be tagged
      as it comes in from the PEP or as it is known to the configured
      AEPs.
    
    <HowToGetCode> ::= 'CODE' ':' <TypedCodeMethod>
    
    <TypedCodeMethod> ::= ( 'PKI' <PKICodeSearchParameters> ) |
                          ( 'CLASS' <ClassCodeSearchParameters> )
    
      'PKI' indicates that the code is obtained from an X.509
      Attribute Definition Certificate located through the PKI.
      'URL' indicates that the code is obtained from a URL.  'CLASS'
      indicates that the code is to be obtained from a Java class
      binary.  Additional <TypedCodeMethod>s could be added in the
      future.
    
    <PKICodeSearchParameters> ::= [ 'OID' ':' <OID> ]
                                  [ 'ADA' ':' <ADAName> ]
    
      If <TypedCodeMethod> is 'PKI', then code for the attribute may
      be obtained from an Attribute Definition Certificate in the
      Public Key Infrastructure under the <ADAName>.  The attribute
      is defined by the specified <OID>.
    
      If the <OID> is omitted, then there are two possible defaults.
      If the attribute is an 'INPUT' type, then the <InputIdentifier>
      from the <HowToGetValue> is used, and must be an <OID>.  If the
      attribute is an 'AC' type, its <OID> is used.  If the <ADAName>
      is omitted, then attribute must be an 'AC' attribute, and the
      ADA defaults to the <AAName>
    
    <ClassCodeSearchParameters> ::= [ <JavaClassName> ]
                                    [ 'URL' ':' <URL> ]
                                    [ 'SIGNER' ':' <SignerNames> ]
    
      If the <TypedCodeMethod> is 'CLASS', then the code for the
      attribute must be a Java class binary with name
      <JavaClassName>.  If <JavaClassName> is omitted, then the
      'INPUTID' is used as the <JavaClassName>.
    
      This Java class binary must be of one of the following types:
    
      - extends the 'java.security.Permission' abstract class,
      - is a 'java.security.CodeSource' object,
      - is a 'java.security.ProtectionDomain' object,
      - is a 'java.security.Principal' object,
      - implements the 'java.security.Principal' interface, or
      - implements a new 'java.security.PolicyAttribute' interface
        (see Appendix \ref{java.security.PolicyAttribute Interface}).
    
      If a <URL> is supplied, then the class or a Java jar file
      containing the class is expected to be located at the URL.  If
      no <URL> is specified, then the default is the classpath used
      by the PDP.
    
      If 'SIGNER' is specified, then the class or the entire jar file
      must be signed by all the public key(s) associated with
      <SignerNames> in the PKI.  If no 'SIGNER' is specified, then
      signature checking will not be done: the class or jar file may
      be signed by any signer or may be unsigned.  Note that all jar
      files and class binaries in the <URL> should be signed unless
      they are accessed via a secure channel.
    
    <JavaClassName> ::=
    
      A <JavaClassName> is a fully qualified Java class name, such as
      "java.security.Principal".
    
    <SignerNames> ::= <SignerName> |
                      <SignerName> ',' <SignerNames>
    
    <SignerName> ::= <TypedName> | <LocalCertName>
    
      A <SignerName> is the name associated in the PKI with the
      private key used to create a cryptographic signature.  In order
      to verify the signature, a certificate having <SignerName> as
      its Subject is located in the PKI and the public key from this
      certificate is used.  If the <LocalCertName> form is used, then
      the code is expected to be signed by the certificate defined by
      the <LocalCertName>.
    
    <ADAName> ::= <TypedName> | <LocalCertName>
    
      An <ADAName> is the name of an Attribute Definition Authority
      trusted to sign an Attribute Definition Certificate defining
      the associated attribute.  The definition of an attribute
      includes its ASN.1 syntax, identifiers for its Matching
      Rule(s), and possibly pointers to executable code for
      constructing instances of the attribute and its matching rule.
    
    <PKIDefinition> ::= 'DEFINE' 'PKI' <LocalCertNames>
                        'CS' ':' <CertStores>
                        [ <ValidationParameters> ]
    
      A <PKIDefinition> defines the parameters required to map names
      to public keys using a Public Key Infrastructure.  Each Trust
      Anchor is expressed using its <LocalCertName> as defined in a
      <CertDefinition> statement.
    
      Associated with the set of Trust Anchors is a set of
      certificate stores, and a set of optional
      <ValidationParameters>.  A certificate for each Trust Anchor
      must be located in the certificate stores and verified using
      the certificate fingerprint specified in the
      <CertDefinition> statement that defines that Trust
      Anchor.  There can be at most one <PKIDefinition> statement in
      a single policy.  The scope of the <PKIDefinition> is the
      <BooleanPolicy> in which it occurs.  It applies to any
      <ReferencedBooleanPolicy> that does not have its own
      <PKIDefinition>.
    
      If the Trust Anchor certificate found in the specified
      <CertStores> contains a Subject Information Access extension
      with an access method of "id-ad-caRepository", then
      certificates and CRLs issued by that Trust Anchor may be
      located either in the location specified in the Subject
      Information Access extension or in the specified <CertStores>.
      Otherwise, certificates and CRLs may be obtained from the
      specified <CertStores> or using other mechanisms, such as the
      Subject Information Access extension, the CRL Distribution
      Points extension, etc.
    
      If no <PKIDefinition> statement is present in a policy, then
      the <PKIDefinition> used for its enclosing <BooleanPolicy> will
      apply.  If there is no enclosing <BooleanPolicy>, then the PDP
      will use its configured default PKI definition.
    
    <LocalCertNames> ::= <LocalCertName> |
                         <LocalCertName> ',' <LocalCertNames>
    
    <LocalCertName> ::= <LocalName>
    
      A <LocalCertName> is a mnemonic name defined in a
      <CertDefinition> statement.  The scope of the <LocalCertName>
      is the immediate <BooleanPolicy>.
    
    <CertStores> ::= <CertStore> |
                     <CertStore> ',' <CertStores>
    
    <CertStore> ::= <CertStoreType> ':' <CertStoreURL>
    
      A <CertStore> is a repository for one or more certificates.
      The <CertStoreType> indicates the type of the repository and
      the URL points to the repository.
    
    <CertStoreType> ::= 'LDAP' | 'KEYSTORE'
    
      If the type is 'LDAP', then the <CertStoreURL> must be an
      "ldap:" URL.  If the type is 'KEYSTORE', then the
      <CertStoreURL> must be a locator that will retrieve a Java
      Keystore file.
    
    <CertStoreURL> ::= <URL>
    
      A <CertStoreURL> is the Uniform Resource Locator for a
      certificate store.
    
    <ValidationParameters> ::= <ValidationParameter> |
                               <ValidationParameter> ','
                                  <ValidationParameters>
    
    <ValidationParameter> ::= 'POLICIES' ':' <OIDs> |
                              'INHIBITANYPOLICY' |
                              'REQUIREEXPLICITPOLICY' |
                              'INHIBITPOLICYMAPPING' |
                              'NOREVOCATION'
    
      <ValidationParameters> provide controls over the way chains of
      Public Key Identity Certificates are verified.  Each
      <ValidationParameter> has a default value as follows:
    
         POLICIES: default is none.
         INHIBITANYPOLICY: default is not inhibited.
         REQUIREEXPLICITPOLICY: default is not required.
         INHIBITPOLICYMAPPING: default is not inhibited.
         NOREVOCATION: default is revocation checked.
    
      In addition, the date for which the certificate validation is
      performed is always the current time and date on the evaluating
      platform.  PolicyQualifiers are always rejected.  For more
      explanation, see the corresponding methods in
      java.security.cert.PKIXParameters.
    
    <CertDefinition> ::= 'DEFINE' 'CERT' <LocalCertName>
                         <CertSelector>
    
      A <CertDefinition> statement associates a mnemonic
      <LocalCertName> with a trusted certificate.  The trusted
      certificate is specified using a <CertSelector>.
    
      The <LocalCertName> defined in a <CertDefinition> statement can
      be used in a <PKIDefinition> statement, <AAName>, <ADAName>,
      or <SignerName>.
    
    <CertSelector> ::= ( 'SUBJECT' ':' <SubjectName>
                         'FINGERPRINT' ':' <FingerPrint> ) |
                       ( 'KEYSTOREURL' ':' <URL>
                         [ 'ALIAS' ':' <KeyStoreAlias> ]
                         [ 'FINGERPRINT' ':' <FingerPrint> ] )
    
      If <CertSelector> is the 'SUBJECT' form, then the trusted
      certificate in the <CertDefinition> is the certificate with
      Subject of <SubjectName> and certificate fingerprint of
      <FingerPrint>.  The certificate must be located in the PKI
      specified in the 'define PKI' statement.
    
      If <CertSelector> is the 'KEYSTOREURL' form, then the trusted
      certificate in the <CertDefinition> is the certificate in the
      indicated Java KeyStore file with the indicated
      <KeyStoreAlias>.  If no ALIAS is supplied, then the alias
      defaults to the <LocalCertName>.  If the 'FINGERPRINT' option
      is used, then the certificate's fingerprint must match the
      value of <FingerPrint>.  Note that, while 'FINGERPRINT' is
      optional for a KeyStore certificate, it is strongly
      recommended, particularly where the 'KEYSTOREURL' is not
      accessed over a secure, authenticated channel.  If
      'FINGERPRINT' is not included, there is no guarantee that the
      certificate and public key selected are correct.
    
    <SubjectName> ::= <TypedName>
    
      The <SubjectName> is the typed name used as the Subject of a
      public key certificate.
    
    <FingerPrint> ::= <Hex-EncodedValue>
    
      A <FingerPrint> is a 128-bit MD5 hash of a public key
      certificate.
    
    <KeyStoreAlias> ::= <String>
    
      A <KeyStoreAlias> is the mnemonic name by which a certificate
      in a Java KeyStore is located.  Case is not significant in a
      <KeyStoreAlias>.
    
    <PolicyDefinition> ::= 'DEFINE' 'POLICY' <LocalPolicyName> 
                           'ID' ':' <PolicyName>
                           'AA' ':' <AAName>
    
      A <PolicyDefinition> is a way of referencing one policy from
      inside of another.  The referenced policy will be expressed as
      a value for the "IssuerPolicy" attribute in an X.509 Attribute
      Certificate (see Appendix \ref{IssuerPolicy Attribute Syntax}).
      The attribute value must have a policyName field with a name
      matching the <PolicyName> specified.
    
      The X.509 Attribute Certificate is located in the PKI using
      <AAName> as the SOA.  If the Attribute Certificate has expired
      or been revoked since it was last downloaded, then a fresh copy
      is downloaded.  The Attribute Certificate containing the policy
      must validate using the indicated AA name as the SOA.
    
    <LocalPolicyName> ::= <LocalName>
    
      This is the <LocalName> by which this policy will be referenced
      in a <ReferencedBooleanPolicy> statement.
    
    <PolicyName> ::= <String>
    
      Each policy in an IssuerPolicy attribute has a name indicating
      what the policy is used for.  This name might be "SunTEA
      approval policy" or "Anne's file use policy".
    
    DETAILED SOLUTION
    
      [Actual text and schema changes or additions, referencing line
       numbers in the XACML 1.1 PDF Specification, required to
       express this solution in the 2.0 specification.
    
       This may be in the form of edits to the source XACML 1.1
       Specification, attached to the e-mail containing the
       Proposal.
    
       Don't bother with this until the SUMMARY indicates there are
       no issues that remain to be resolved, and there is consensus
       on one PROPOSED SOLUTION above.]
    
    -- 
    Anne H. Anderson             Email: Anne.Anderson@Sun.COM
    Sun Microsystems Laboratories
    1 Network Drive,UBUR02-311     Tel: 781/442-0928
    Burlington, MA 01803-0902 USA  Fax: 781/442-1692
    
    


    [Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]