"Creativity is thinking up new things. Innovation is doing new things." Theodore Levitt
Welcome to
iAccess project!
Marie Curie Intra-European Fellowships (EIF) Europa - The European Union
Marie Curie Intra-European
Fellowship 038978 iAccess


iAccess Negotiation-based Authorization Service




iAccess v2.0 iAccess v1.1



      iAccess project is the result of the efforts of few researchers, namely Hristo Koshutanski, Fabio Massacci and Aliaksandr Lazouski. Thanks to Marie Curie EIF fellowship 038978 the project is available to you with release v1.1.
      iAccess is a credential-based authorization service based on automated bilateral access rights establishment. iAccess stands for interactive access control, the core model the project started from. The main goal of the project is to put in practice the theoretical part behind the model and its extension to automated trust negotiation. Trust negotiation is a policy-based technique that provides clients with the right to protect their own credentials and to negotiate with servers access to resources. Trust negotiation is a suitable methodology for establishing access rights with unknown and potentially malicious entities.
      iAccess well fits into agent-based models where agents run on behalf of clients and encode specific autonomic behavior. iAccess is a complimentary service to those agents allowing for automated access rights establishment. iAccess agent requires another iAccess agent to talk with.
      An iAccess agent acts as a Policy Decision Point (PDP) for resources it protects. The outcome of a successful negotiation is an authorization token digitally signed by the iAccess agent protecting the resource. iAccess works with X.509 identity and attribute certificates for access rights establishment, and with SAML assertions (embedding a SAML access decision statement) for issuing authorization tokens.
      The software is provided as two separate agents. The two agent packages come with already configured and installed security policies and X.509 certificates of an example illustrated below.
      Regarding the research behind iAccess, we refer to the publications section below where one can find a couple of papers describing iAccess foundations and functionality. The article in [2] defines the foundations and motivations of the interactive access control model. The article in [3] steps on the work in [2] and defines the core negotiation protocol and schema automating two agents interactive process. We found appropriate to refer also to the article in [4] where one can read on how to extend the negotiation model to handle conflict detection and resolution of credentials making a policy inconsistent. Current iAccess software does not implement the research in [4]. Publication [1] reflects some results from integration of iAccess software into a Grid system.

Publications



 [1]
 
H. Koshutanski, A. Lazouski, F. Martinelli and P. Mori, Enhancing Grid Security by Fine-grained Behavioral Control and Negotiation-based Authorization. International Journal of Information Security, Vol. 8, No. 4 (August 2009). © Springer.
 [2]
 
H. Koshutanski and F. Massacci, Interactive Access Control for Autonomic Systems: from Theory to Implementation. ACM Transactions on Autonomous and Adaptive Systems, Vol. 3, No. 3 (August 2008). ACM press. © ACM.
 [3]
 
H. Koshutanski and F. Massacci, A Negotiation Scheme for Access Rights Establishment in Autonomic Communication. Journal of Network and System Management, Vol. 15, No. 1,pp. 117-136 (March 2007). Springer press. © Springer.
 [4]
 
 
H. Koshutanski and F. Massacci, Interactive Credential Negotiation for Stateful Business Processes. In proceedings of the 3rd International Conference on Trust Management (iTrust), May 2005, Rocquencourt, France. LNCS 3477, pages 257-273. Springer press. © Springer.

Software



      The software has been implemented in Java. iAccess software package contains all necessary libraries to function. The figure below shows an iAccess agent architecture and communications with other iAccess agents.


      An iAccess agent is an authorization server thanks to the integrated negotiation dispatcher functionality. The multithreaded negotiation protocol together with the dispatcher implementation allows an iAccess agent to handle multi-user negotiations simultaneously. This functionality would be well in place in multi-agent systems where multiple transactions take place, even between same agents. The software package provides a GUI that visualizes negotiations between an agent and other agents.
       Why multithreaded negotiation? We aimed at splitting a negotiation process into multiple negotiations that allow a better load on fast (multi-core) CPUs. Over the last few years computational power has significantly increased with a multi-core microprocessor technology. Having a single negotiation process will not take as much advantage of a fast CPU performance as separating it in several independent to compute threads. The core element of negotiation is a set of requirements (credentials) to be agreed upon with an opponent. We transformed such a set of requirements to a set of threads each negotiating on a single credential requirement. Thus with a proper synchronization between different threads one achieves a single logical negotiation process (for a resource) but physically split in multiple threads.
       The negotiation protocol performs negotiations on logic level credential tokens, while the dispatcher handles corresponding session management of all request/response steps. Credential negotiation steps have been simplified to: (i) request for a token value as specified by an access/disclosure policy, and (ii) await (until session expires) for a response. A response is either the credential requested or a denial message. We note that a denial message is actually any message different from the token expected. An agent accepts (marks as presented) a credential response if a given digital certificate is valid, trusted, and its (transformation to) logic value matches the one requested. At initialization time, an iAccess agent builds a table in memory matching (available) digital certificates tokens with their logic level values. A negotiation process is bootstrapped with an opponent's identity token from the SSL channel, the only place where identity challenge/response verification takes place.
       iAccess acts as a PDP for resources it protects. iAccess can be used in two main authorization modes.
  • Default mode: An iAccess agent of a client initiates an authorization request to another iAccess agent protecting a resource. After a successful negotiation, the client's agent obtains an authorization token used to authorize itself to a PEP of the domain the resource is located. This mode assumes that a PEP and its iAccess agent are located on different machines.
  • Server mode: A client requests a PEP to access a service. The PEP, in turn, contacts its iAccess agent for an authorization decision. The PEP's agent starts negotiations with the client's agent, and returns a respective answer to the PEP, which enforces the decision. In this scenario, the client's agent initiates a negotiation request to the PEP's agent along with the client's service request to the PEP. The PEP's authorization agent awaits on the PEP's explicit request in order to complete the pending negotiation with the client's agent. In this mode, the PEP and its iAccess agent are locally run on a same machine.

Software License



      iAccess software Copyright © 2006, 2008 Hristo Koshutanski, Aliaksandr Lazouski, Associazione CREATE-NET, and Universita' degli Studi di Trento.
      iAccess authorization service software (called iAccess) is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
      iAccess is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for details.

      Note: iAccess software requires an Answer Set Programming (ASP) solver as an underlying engine implementing the logic reasoning of deduction and abduction. Current iAccess release uses the DLV system (as an externally executable component). When downloading the DLV system read the DLV license of use. An important step of evolving iAccess project is to make it use of an ASP solver that is free software.


Download & Install iAccess Software



       Software version v1.1:
Download from the current site: Download the two agents from Sourceforge.net project space:        Software version v1.1 includes some improvements over v1.0 as well as includes two modes of authorization (refer to section Software). If you have any doubts/questions on the source code and documentation do not hesitate to contact Hristo Koshutanski (refer to Team section). Consult also the list of open issues at the end of this section.
       The software is provided as two separate iAccess agents. There is no difference in the software of the two agents. The two packages come with already configured and installed security policies and X.509 certificates of the example illustrated below (refer to section How it works). Install the two agents to test negotiations, and run the client agent to initiate negotiations. To get running negotiations one should be within working days (Mon-Fri) and within 08:00--23:00h. Otherwise change the disclosure policy of iAccess_agent_McKinleyClinic (IACCESS_ROOT/data/security_policies/disclosure_policy.txt).
       Each of the iAccess packages comes with additional attribute certificates installed so that one can use them to design more negotiation scenarios. We used the java keytool to generate X.509 public-key certificates and the respective trusted storages which iAccess works with. We used the bouncycastle.org java libraries to generate X.509 attribute certificates as well as for signing identity and attribute certificates of the example.

  Q: How to install an iAccess agent?

  1. Download an iAccess_agent_XXX.zip
  2. Unzip it to a directory of your choice (let's call it IACCESS_ROOT).
    Make sure that there are no spaces in the path to that directory.
  3. Download the DLV solver (command-line version) for you platform: here.
  4. Rename the downloaded DLV file to dlv.exe if Windows or to dlv.bin if Unix-based system (Linux, MacOSX).
    Make sure that dlv.bin is executable.
  5. Copy the dlv.exe/dlv.bin into the respective subdirectory of IACCESS_ROOT/data/dlv/.

  Q: How to run an iAccess agent?

  • To run an iAccess agent one has to execute in a terminal (command line mode) iAccess.sh if Unix-based system (Linux, MacOSX) or iAccess.bat if Windows system. Make sure that iAccess.sh is executable. In this way one can see messages complementing those displayed on the iAccess GUI. You have to be in IACCESS_ROOT to run the iAccess package.

  Q: What are the minimum requirements to run an iAccess agent?

  • iAccess software was developed under Java version "1.4.2_12".
    One should have Java version higher than or equal to "1.4.2_12". The current release (v1.1) is compiled under Java "1.6.0_07". Please, recompile it if incompatibility issues arise.
  • We have successfully run iAccess agent negotiations on Windows XP, Intel Pentium III 600MHz, 384MB RAM.

  Q: What does an iAccess agent package contain?

  • IACCESS_ROOT/iAccess.sh and iAccess.bat scripts that run the iAccess software package.
  • IACCESS_ROOT/config.xml the main configuration file of the agent. It configures the negotiation level settings.
  • IACCESS_ROOT/README a text file describing what license iAccess is copyrighted upon, and contact details of authors and institutions.
  • IACCESS_ROOT/license/ a directory where a copy of the GNU General Public License and the GNU Lesser General Public License are located.
  • IACCESS_ROOT/lib/ a directory where the iAccess library package and all necessary third-party packages are located. iAccess.jar contains all iAccess libraries.
  • IACCESS_ROOT/src/ a directory where iAccess libraries source code is located.
  • IACCESS_ROOT/src/javadoc/ a directory where iAccess java libraries documentation is located. The documentation is to be further improved with more details on libraries' functionalities.
  • IACCESS_ROOT/log/ a directory where iAccess logs negotiation information as well as where it stores a copy of SAML authorization tokens of successful negotiations.
  • IACCESS_ROOT/work_dir/ a directory where iAccess stores temporal files during a negotiation process. iAccess automatically deletes all temporal files.
  • IACCESS_ROOT/data/config_dlv.xml the logic level configuration file of the agent. It configures the logic access control settings and how to run the DLV solver in different stages of a negotiation process.
  • IACCESS_ROOT/data/certificates/ a directory where agent's own certificates are placed. All certificates must be with an extension .cer to be considered by iAccess. All certificates must be in Base64 printable encoding format (RFC 1421). All certificates that come with the default installation have a validity period till September 1, 2009.
  • IACCESS_ROOT/data/dlv/ a directory where iAccess selects the DLV solver for the current platform. All subfolders are internally fixed and should not be modified.
  • IACCESS_ROOT/data/security_policies/ a directory of agent's security policies. It also contains complimentary policy files for internal computations.
  • IACCESS_ROOT/data/ssl/ the directory where agent's identity information is located. It contains key stores each defining a private/public key pairs used for an SSL channel establishment.
  • IACCESS_ROOT/data/trusted_authorities/ a directory where trusted identity and attribute certification authorities are placed. It contains only two keystores one for CAs and one for SOAs, respectively.

  List of open issues:

  • To make iAccess a free software one should integrate it with a free ASP solver supporting the two reasonings.
  • DLV abduction front-end defines a restriction on 20 characters in a field of a predicate. For example, the predicate cred(mckinley_clinic_ca,legal_clinic,governmental_health_dept_soa) will cause syntactic error of the abductive front-end because of its third argument contains 28 characters. Although, the default front-end (deductive reasoning) relaxes this aspect to a much longer field length, one should respect this limit in the access and disclosure policies.
  • iAccess agents' interactions require direct network (socket) connection, and require active interactions by both sides agents. One should make iAccess negotiations traverse firewalls (peer-to-peer negotiations across firewall networks).
  • ...

How it works



      iAccess is a policy-driven authorization service, that is, based on security policies behind governing its behavior. The main advantage of the policy-driven authorization is the fact that once the security policies are well-designed they completely automate the behavior of an iAccess agent when interacting with other (iAccess) agents, i.e. protected resources and sensitive credentials will be given access only to authorized agents.
       iAccess policies are programmable, i.e. an access control specification can be encoded (programmed) in different ways depending on the specific goals a policy designer has. Thus, the behavior of a negotiation agent may vary even run on a same access control specification.
      However, well-designed security policies is a nontrivial task, and that's why we want to take you over a few points of how iAccess enforces security policies.

Point 1: iAccess is governed by the three security policies:

  • Access Policy (Pa) protects resources which iAccess is responsible for. Pa states what resources are protected and under what foreign credential requirements. When an agent wants to use a protected resource of another agent, it has to present the required credential set to be authorized for that resource.
  • Credential Policy (Pc) protects agent's own credentials from undesired disclosure. Agent's own credentials (credentials installed in the agent) are necessary for the agent to authorize itself to other agents. In some sense, agent's own credentials become protected "resources" and access to them is given analogously to the access policy.
  • Disclosure Policy (Pd) controls what foreign credentials are disclosable and under what conditions. Pd complements Pa and Pc by controlling how/when foreign credentials are "visible" to be requested to an opponent. Thus, credentials considered by Pd should be at least those occurring in Pa and Pc.
      We note that Pd in a combination with Pa and Pc plays an essential role of defining the behavior of an agent during a negotiation process.

Point 2: iAccess policies are logic programs. A logic program is a set of rules of the form:

  A :- B1,..., Bn, not C1,..., not Cm.  (1)

    :- B1,..., Bn, not C1,..., not Cm.  (2)

Where A, B to Bn are positive literals and not C1 to not Cm are negative literals (negation-as-failure). iAccess uses DLV system as a back-end engine for logic computations on the three security policies. We refer to the DLV language syntax for more information.
       Rules of form (1) define conditions under which a literal A is entailed in a model of a logic program, i.e. if all B1 to Bn are true and all of C1 to Cm are false then A is true in a model. While rules of form (2) define constraints that rule out from a set of acceptable models situations where all B1 to Bn are true and all of C1 to Cm are false.
      A typical example of usage of constraints is to express the principle of separation of duties in RBAC models, or in a more general case limiting escalation of privileges. iAccess enforces only static separation of privileges, i.e, those that hold regardless of session information.
       iAccess restricts the use of constraints (2) to only positive literals occurring in a constraint rule body, i.e. no negation-as-failure. Generally, we do not recommend the use of negation-as-failure in security policies. However, in case negation-as-failure is really necessary to express certain policy requirements (allowed only in Rules of type 1) please ensure that the respective policy is a stratified logic program (i.e., avoid non-stratified negation).

Point 6: Security policies enforcement. First, we will show how iAccess enforces (negotiates based on) the three security policies. The figure below shows a simple example of a sequence of steps two iAccess agents perform based on the security policies.

       On Bob's side there is a resource with two credential requirements in the access policy and an own credential protected by a foreign credential in the credential policy. All necessary credentials are disclosed by the disclosure policy. On Alice's side there are three own credentials in the credential policy, two of them granted on demand and one of them protected with a foreign credential. Alice's disclosure policy discloses all necessary foreign credentials.

      Next figure shows that if there are two solutions for a resource the iAccess agents will negotiate on the right solution. The minimality criterion chosen for this scenario is the minimal cardinality. Thus, on a service request R1 Bob's agent starts with {CA1,CA2} set. The disclosure policy on Bob's side discloses CA1, CA2 and CA5 on demand, but CA3 is disclosed if CA1 has been presented to the agent and, analogously, CA4 is disclosed if CA3 has been given. The whole interaction process one can follow on the figure.

Point 3: Expressing credential information in security policies. iAccess divides digital certificates in identity certificates and attribute certificates. Identity certificates are represented as a predicate of arity two, e.g., id(subject_id,issuer_id), and attribute certificate with a predicate of arity three, e.g., cred(holder_id,attribute_id,issuer_id).
      iAccess works with X.509 certificates. It has a local storage of public key certificates of trusted certification authorities (CAs) for issuing identity certificates and a local storage of public key certificates of trusted source of authorities (SOAs) for issuing attribute certificates. X.509 identity (public-key) certificates are verified against trusted CAs in order to be accepted as facts for logic reasoning, respectively, X.509 attribute certificates are verified against trusted SOAs to be accepted as facts for the underlying reasoning.
       Once a X.509 certificate is successfully verified against trusted authorities, iAccess transforms it to a logic predicate of the respective arity. iAccess first extracts the X.500 structure of the Subject or Holder fields and then extracts the common name (CN) to be used in the logical predicate. iAccess extracts the X.500 name of the Issuer field and first checks if a CN field exists to obtain an issuer identifier, if it does not exist, iAccess takes an Organization (O) field as an issuer identifier and uses it for a predicate generation. iAccess extracts the Attribute field from an X.509 attribute certificate and treats it as a string value, i.e. without analyzing it for a specific structure.
       We explicitly acknowledge that such a logic certificate representation is not expressive enough, and next iAccess release will provide better handling of certificate expressiveness on a logic level.
       Since logic level syntax used by DLV does not allow special characters as part of a logic program specification, iAccess performs a character replacement on the subject, holder, issuer and attribute identifiers (as extracted from a certificate) to obtain an acceptable logic representation. The table below summarizes the replacement done.
"s+" (reg.expr.) "-" "\" "/" "@" "." "," "?" "!" "\"" (doub.quote) "\'" (sing.quote) "=" "%" "$"
"_" "_" "_" "_" "_" "" "" "" "" "" "" "" "" ""

       The same replacement process is also applied on a service request (service name and action).

Example: if we have an X.509 attribute certificate with the following fields:

  • Holder ::= "CN=Alice Milburk, OU=Computer Science Department, O=University of Trento, C=IT"
  • Attribute ::= "Ph.D. Student"
  • Issuer ::= "CN=University of Trento CA-1, O=University of Trento, C=IT"
the resulting predicate would be cred(alice_milburk,phd_student,university_of_trento_ca_1) given that University of Trento is a trusted SOA.

Point 4: Time-aware security policies. iAccess security policies can use two time specific predicates:

  • TNOW(dow, mon, dd, hh, mm, ss, zzz, yyyy) indicates current system time and date. It has the Java Date().toString() format where:
    • dow is the day of the week: sun, mon, tue, wed, thu, fri, sat.
    • mon is the month: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.
    • dd is the day of the month: 01 through 31 , as two decimal digits.
    • hh is the hour of the day: 00 through 23 , as two decimal digits.
    • mm is the minute within the hour: 00 through 59 , as two decimal digits.
    • ss is the second within the minute: 00 through 61 , as two decimal digits.
    • zzz is the time zone (and may reflect daylight saving time). Standard time zone abbreviations include those recognized by the method parse. If time zone information is not available, then zzz is empty - that is, it consists of no characters at all. IN IACCESS CASE ::= TNOW(dow, mon, dd, hh, mm, ss, yyyy). One needs to test what is the right format tuple for its time zone settings.
    • yyyy is the year, as four decimal digits.
  • TNNOW(ms) indicates a current negotiation time. The negotiation time is measured either since a service request was submitted or since a service request was received. The value ms denotes the milliseconds passed since one of the two events above occurred. Use the predicate with cautious as a negotiation time is a function of many variables, such as network traffic, current CPU load, number of active negotiations at a time, etc.
       The two predicates are dynamically generated (as facts) every time a logic reasoning operation is taken over to DLV. iAccess takes the current system time at the "closest" possible point in the code before a logic reasoning takes place and, as such, the time predicates have an accuracy modulo the time necessary for the OS to run the DLV solver. However, this time remains within several milliseconds but the exact time frame is hard to state as it depends on the specific hardware configuration one has.

Point 5: Policy requirements. iAccess is based on the assumption that agents have no knowledge on security requirements of other agents. In this regard, it is important to define the minimum requirements guaranteeing that whenever possible two agents will successfully negotiate upon a resource. These requirements are to be defined independently of agent's knowledge about other agents. We refer to the article in [1] for definitions and detailed analysis of the properties stated below.

  • Access Control Policy (Pa) is to be a well-behaved policy (a subset of nonmonotonic policies) and to guarantee a fair access property. Note that in this requirement we exclude the use of negation-as-failure in Pa, i.e. we assume that there is a unique stable model of Pa. If one wants to use negation-as-failure he/she has to additionally guarantee that Pa is a stratified logic program (refer to Point 2).
    Some tips for specifying an access policy:
    • Use rules and constraints to define a specification of access control requirements.
    • Use the time predicates in rules/constraints bodies to express time dependent requirements.
    • Heads of rules in access policy must not be a credential attribute term or a credential identity term.
    • Use the predicate grant(resource_id,action_id) to specify that an action action_id is granted to be performed on a resource resource_id. Use the predicate in a head of a rule in the access policy to define when a service is granted.
  • Credential Control Policy (Pc) is equivalently treated as Pa but for credential resources. Thus, Pc inherits the requirements for Pa, i.e. a well-behaved policy with a fair access property.
    Some tips for specifying a credential policy:
    • Use rules and constraints to define a specification of access control requirements to own credentials.
    • Use the time predicates in rules/constraints bodies to express time dependent requirements.
    • Use the predicate for granting service requests to express access requirements relevant to a service request.
    • To specify that an attribute or identity credential is granted under some constraints there must be a rule in the policy having either id(subject_id,issuer_id) or cred(holder_id,attribute_id,issuer_id) predicate in the head.
    • All granting rules in a credential policy must have in their heads credential terms referring to agent's own credentials.
  • Disclosure Control Policy (Pd) is to be a monotonic policy and to guarantee a fair interaction property with respect to Pa and Pc.
    Some tips for specifying a disclosure policy:
    • Use rules to express disclosure control requirements.
    • The disclosure control policy has the following implicit semantics of rules:
      ask(cred_1) :- has(cred_2),...,has(cred_n).
      where cred_1 to cred_n are either a credential attribute predicate or a credential identity predicate.
    • Any credential term appearing in a head of a rule in a disclosure policy must refer to a foreign credential requirement.
    • Use the time predicates in rules' bodies to express time dependent disclosure requirements.
    • Use the predicate for granting service requests (grant(resource_id,action_id)) in rules' body to define disclosure requirements specific per a service request. In this way, one can define generic disclosure requirements applicable to any service request as well as specific ones applicable for a given service request.
    • We do not recommend the use of constraints and negation-as-failure for disclosure control. However, if one wants to experiment with those he/she has to ensure that Pd is a stratified logic program.

      Note: The above requirements guarantee that two agents will successfully negotiate upon a resource given that no deadlocks (interlocks) occur between agents' requirements. iAccess does not detect if credential requirements interlock a negotiation process or if a negotiation process takes too long. It simply awaits and denies a request when a session time expires.

Point 7: Example of security policies (McKinley Clinic [p. 4, Yu&Winslett'03]).
       [Access Scenario] McKinley clinic makes its patient records available for online access. Let record_amilburk be Alice's record. To gain read access to record_amilburk a requester must either present Alice's patient ID for McKinley clinic (id(alice_milburk,mckinley_clinic_ca)), or present a California social worker license (cred(Holder,social_worker,california_state_soa)), and a release-of-information credential issued to the requester by Alice (cred(Holder,medic_record_release,alice_milburk)).
       [Disclosure Scenario] Knowing that Alice's recordspecifically allows access by social workers will helppeople infer that Alice may have a mental or emotionalproblem. Alice wants to keep the latter constraint inaccessible to strangers. However, employees of McKinley clinic (cred(Holder,employee,mckinley_clinic_soa)) should be allowed to see the contents of this policy.

Designing policies: step 1
       The access and disclosure policies of the clinic are shown below.
Pa: grant(record_amilburk,read) :- id(alice_milburk,mckinley_clinic_ca).
grant(record_amilburk,read) :- cred(Holder,social_worker,california_state_soa),
                               cred(Holder,medic_record_release,alice_milburk).
Pd: cred(Holder,medic_record_release,alice_milburk) :- cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,social_worker,california_state_soa) :- cred(Holder,employee,mckinley_clinic_soa).

       In the example we will use an abbreviation for a certification authority (CA) responsible for certifying identity information, and an abbreviation for a source of authority (SOA) responsible for certifying attribute statements (privileges). We follow the notations of PKI/PMI models.
       The access policy, Pa, states that read access to Alice's record is given to Alice or to a holder of the certificates for a social worker and a release of information by Alice. We assume that McKinley clinic has the public-key certificate of a trusted CA for identifying entities in California state and that the clinic knows its patients' public-key certificates so that release of information statements are directly certifiable by the patients (Alice in our case).
       The disclosure policy, Pd, states that the need for a release of information credential by Alice and a social worker credential stated by a California state SOA are disclosable to entities that have presented their employee certificate issued by the McKinley clinic's SOA. Note that the variable Holder in Pd rules will require the identity of the disclosed certificates to be the same of the presented employee certificate.

Designing policies: step 2
       Now, let's enhance the two policies by taking into account that two iAccess agents establish mutual authentication (SSL channel) and an identity token is already bootstrapped from that.
Pa: grant(record_amilburk,read) :- id(alice_milburk,mckinley_clinic_ca).
grant(record_amilburk,read) :- cred(Holder,social_worker,california_state_soa),
                               cred(Holder,medic_record_release,alice_milburk).
Pd: cred(Subject,medic_record_release,alice_milburk) :- id(Subject,california_state_ca).
cred(Subject,social_worker,california_state_soa) :- id(Subject,california_state_ca).
cred(Subject,employee,mckinley_clinic_soa)       :- id(Subject,mckinley_clinic_ca).
cred(Holder,medic_record_release,alice_milburk)  :- cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,social_worker,california_state_soa)  :- cred(Holder,employee,mckinley_clinic_soa).
       The first two rules of Pd disclose the need for a medic record release and a social worker credentials but bound to the subject name of the entity being on the other side of the channel. Similarly, the third rule discloses the need for an employee credential bound to the subject name of the entity identified on the channel. The issuers of the two identity tokens are different thus defining two different disclosure (negotiation) scenarios.
       With the new Pd an iAccess agent will interact with entities identified by McKinley clinic CA for an employee certificate and, after a successful negotiation on the employee certificate, the agent will disclose the need for the other two certificates. In this way McKinley clinic employees are allowed to see the requirements for accessing Alice's medical record.
       However, as of now all entities signed by California State CA will see the need of the two certificates and may infer that Alice have mental problems, which is not exactly the original intention of the example. One can remove the first two rules of Pd thus requiring an opponent to push the two certificates in order to get access. This approach assumes that an opponent's agent has a priori knowledge of what credentials to push for what resources. In autonomic communications entities may not be aware of potential resources and requirements necessary for those resources.

Designing policies: step 3
       We will modify the two policies to capture the intention of the example scenario and will introduce the use of TNOW predicate.
Pa: grant(record_amilburk,read) :- id(alice_milburk,mckinley_clinic_ca).
grant(record_amilburk,read) :- cred(Holder,social_worker,california_state_soa),
                               cred(Holder,medic_record_release,alice_milburk).
Pd: cred(Subject,medic_record_release,alice_milburk) :- id(Subject,california_state_ca),
                                                    TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subject,social_worker,california_state_soa) :- cred(Subject,medic_record_release,alice_milburk),
                                                    TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subject,employee,mckinley_clinic_soa)       :- id(Subject,mckinley_clinic_ca).
cred(Holder,medic_record_release,alice_milburk)  :- cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,social_worker,california_state_soa)  :- cred(Holder,employee,mckinley_clinic_soa).
       We have changed the enforcement requirements to first ask for a release of information credential and then ask for a California social worker credential. In this case only entities evidenced by Alice will know for the need of a social worker credential to access Alice's record. Additionally, we restricted the disclosure information within the working hours 08:00 - 18:00h from Monday to Friday only for social workers entities. As we can see, the time restriction does not apply for McKinley employees.
       Since iAccess does not allow for pushing of credentials, one would ask why not to time restrict only the first rule of the disclosure policy. In this way, a negotiation starts if it is within the working days and hours. We want to force the disclosure of the whole solution set to be within the specified time limit and not only to when a negotiation starts. In this way, if a request arrives at 17:59h it will be denied if the release of information credential is presented at 18:00h or later.
       One can achieve same policy specification by moving the time restrictions from the disclosure policy to the access policy. However, the difference in the latter case is that service access is denied beyond the working hours, while in the former case we forbid the disclosure information which as a side effect denies access. iAccess has an option to keep client's set of active credentials until they expire or the agent is restarted. If an entity, with active credentials in the system, submits a request for a resource beyond the working hours, the same will be granted access in the former case (if enough access rights), while in the latter case it will be denied access.

Designing policies: step 4
       Let's include the access requirements for another patient's record of Linda Stoun.
Pa: grant(record_amilburk,read) :- id(alice_milburk,mckinley_clinic_ca).
grant(record_amilburk,read) :- cred(Holder,social_worker,california_state_soa),
                               cred(Holder,medic_record_release,alice_milburk).
grant(record_lstoun,read)   :- id(linda_stoun,mckinley_clinic_ca).
grant(record_lstoun,read)   :- cred(Holder,social_worker,california_state_soa),
                               cred(Holder,medic_record_release,linda_stoun).
Pd: cred(Subj,medic_record_release,alice_milburk)   :- grant(record_amilburk,read),id(Subj,california_state_ca),
                                                   TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,medic_record_release,linda_stoun)     :- grant(record_lstoun,read),id(Subj,california_state_ca),
                                                   TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,social_worker,california_state_soa)   :- cred(Subj,medic_record_release, _ ),
                                                   TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,employee,mckinley_clinic_soa)         :- id(Subj,mckinley_clinic_ca).
cred(Holder,medic_record_release,alice_milburk) :- grant(record_ amilburk,read),
                                                   cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,medic_record_release,linda_stoun)   :- grant(record_lstoun,read),
                                                   cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,social_worker,california_state_soa) :- cred(Holder,employee,mckinley_clinic_soa).
       We used the fact that a disclosure policy is a resource aware, i.e. iAccess dynamically adds a service request as a fact in the policy. Thus, the first two rules of the disclosure policy entail the need for a release of information credential by Alice or Linda depending on the exact request. Analogously, we have defined the fifth and the sixth rules. The third rule entails the need for a social worker credential regardless of the service request. In this way, some rules disclose information on a general level while others per request level.

Designing policies: step 5
       Now, let's define the credential policy, Pc, of the McKinley clinic.
Pa:    
grant(record_amilburk,read) :- id(alice_milburk,mckinley_clinic_ca).
grant(record_amilburk,read) :- cred(Holder,social_worker,california_state_soa),
    cred(Holder,medic_record_release,alice_milburk).
grant(record_lstoun,read) :- id(linda_stoun,mckinley_clinic_ca).
grant(record_lstoun,read) :- cred(Holder,social_worker,california_state_soa),
    cred(Holder,medic_record_release,linda_stoun).
Pd:    
cred(Subj,medic_record_release,alice_milburk) :- grant(record_amilburk,read),id(Subj,california_state_ca),
    TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,medic_record_release,linda_stoun) :- grant(record_lstoun,read),id(Subj,california_state_ca),
    TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,social_worker,california_state_soa) :- cred(Subj,medic_record_release, _ ),
    TNOW(D,_, _,H,_,_,_,2009),D!=sat,D!=sun,H>=08,H<18.
cred(Subj,employee,mckinley_clinic_soa) :- id(Subj,mckinley_clinic_ca).
cred(Holder,medic_record_release,alice_milburk) :- grant(record_amilburk,read),
    cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,medic_record_release,linda_stoun) :- grant(record_lstoun,read),
    cred(Holder,employee,mckinley_clinic_soa).
cred(Holder,social_worker,california_state_soa) :- cred(Holder,employee,mckinley_clinic_soa).
Pc:    
id(mckinley_clinic_ca,trusted_ltd_ca).    
id(mckinley_clinic_soa,trusted_ltd_ca).    
cred(mckinley_clinic,legal_clinic,gov_health_dept_soa) :- id(_,mckinley_clinic_ca).
cred(mckinley_clinic,legal_clinic,gov_health_dept_soa) :- id(_,california_state_ca),grant(record_amilburk,read).
cred(mckinley_clinic,legal_clinic,gov_health_dept_soa) :- id(_,california_state_ca),grant(record_lstoun,read).

       The first two rules of Pc grant access to McKinley clinic CA' and SOA's public-key certificates (signed by Trusted Ltd. CA) on demand. The third rule grants access to the clinic's own certificate of a legal US clinic to entities identified by McKinley's CA. While, the last two rules grant access to McKinley's legal clinic credential to entities certified by California state CA which have explicitly requested read access to either Alice's or Linda's medical records. We have used the fact that Pc is a resource aware policy, as is the case of Pd.

Designing policies: step 6
We have generated the following public key infrastructure for the example.


       iAccess installation package comes with already installed X.509 certificates representing the relations in the figure. iAccess agent of McKinley clinic has been installed with the following trusted authorities:
  • Trusted CAs:
    • California State CA self-signed public-key certificate,
    • McKinley Clinic CA public-key certificate signed by Trusted Ltd CA.
  • Trusted SOAs:
    • California State SOA self-signed public-key certificate,
    • McKinley Clinic SOA public-key certificate signed by Trusted Ltd CA,
    • Alice Milburk public-key certificate signed by McKinley Clinic CA,
    • Linda Stoun public-key certificate signed by McKinley Clinic CA.
       An iAccess agent on a client side is configured with the following trusted authorities:
  • Trusted CAs:
    • California State CA self-signed public-key certificate,
    • Trusted Ltd CA self-signed public-key certificate.
  • Trusted SOAs:
    • California State SOA self-signed public-key certificate,
    • Gov. Health Dept. SOA self-signed public-key certificate.
       We note that trusted CAs/SOAs in the context of an iAccess agent mean that X.509 identity certificates are accepted only if signed by any of the trusted CAs and X.509 attribute certificates are accepted only if signed by any of the trusted SOAs. But, the decision if a trusted CA or SOA is trusted to issue certain identities/attributes is subject to the security policies specification.
       For example, the case of Alice and Linda defined as trusted SOAs is to allow an iAccess agent to verify the authenticity of a certificate, but the decision if Alice and Linda are trusted to issue specific attribute statements is encoded in the security policies (in our case only the attribute statement of medical record release).

Designing policies: step 7
Client side security policies.
Pa:    
     
Pd:    
cred(mckinley_clinic_ca,legal_clinic,gov_health_dept_soa) :- id(mckinley_clinic_ca,trusted_ltd_ca).
Pc:    
id(john_couk,california_state_ca).    
cred(john_couk,social_worker,california_state_soa) :- id(_, trusted_ltd_ca).
cred(john_couk,medic_record_release,alice_milburk) :- id(mckinley_clinic_ca,trusted_ltd_ca),
    cred(mckinley_clinic_ca,legal_clinic,gov_health_dept_soa).
cred(john_couk,medic_record_release,linda_stoun) :- id(mckinley_clinic_ca,trusted_ltd_ca),
    cred(mckinley_clinic_ca,legal_clinic,gov_health_dept_soa).
id(john_couk,mckinley_clinic_ca).    
cred(john_couk,employee,mckinley_clinic_soa) :- id(_, trusted_ltd_ca).

       The access policy is empty since in the example scenario a client has no resources to provide. Pd discloses the need for a legal clinic credential to McKinley entities certified by the Trusted Ltd CA. Pc grants access to John Couk's public key certificates, signed by the California state CA and McKinley clinic CA, on demand. Access to social worker credential and McKinley employee credentials are granted to entities certified by Trusted Ltd CA. While access to release of information credentials certified by Alice and Linda, respectively, is granted to McKinley entities (iAccess agents running on behalf of McKinley CA) certified by the Trusted Ltd CA which have also a credential attesting that they are running on behalf of a legal US clinic (certified by the respective governmental authority).

Example Scenarios:
       iAccess agent package of a client comes with four different identities installed. They are all located in IACCESS_ROOT/data/ssl directory. Before to run an iAccess agent one can choose what identity to use for SSL connections establishment. The default identity is of John Couk signed by the California State CA. To specify a new identity one has to change the field SSLkeystore of the IACCESS_ROOT/config.xml file to point to a new identity.
The two negotiation scenarios of interest are with John Couk identity signed by California State CA and John Couk identity signed by the McKinley Clinic CA.

Point 8: Minimality criterion
       If there are more than one credential sets solutions for a service request iAccess chooses one of them. The choice is limited to either minimal cardinality or to minimal sensitivity. If we have two credential sets {attr1,attr2, id1} and {attr3,attr4} then the minimal set cardinality will filter out {attr1,attr2, id1} and will choose {attr3,attr4}. If we assign a sensitivity level to attributes, say, attr1--4, attr2--1, attr3--3, attr4--3, and specify as minimality criterion minimal sensitivity then iAccess will select the set {attr1,attr2, id1}. iAccess sums the sensitivity levels of all attributes in a solution set and compares any two solutions to select the less sensitive one. In our case iAccess compares {4+1=5} and {3+3=6}, and selects the first one. We do not implement sensitivity level for identity information.
       The sensitivity level has the meaning of "how expensive" an attribute is to be disclosed/negotiated upon. iAccess tries to find the least expensive set (among all applicable) by counting how expensive each set is.
       There are two options for minimality selection:

  • Minimal sensitivity over minimal cardinality (represented by MinimalityCriterion::=OFF)
    • iAccess compares any two sets and takes the one with lower cardinality. If same cardinality of the two sets then it filters the one with less sensitivity level. If two sets have same cardinality and sensitivity levels iAccess picks the first one.
  • Minimal cardinality over minimal sensitivity (represented by MinimalityCriterion::=ON)
    • iAccess compares any two solution sets by taking the one with less sensitive level. If equally sensitive, for example {4,2,1} and {7}, it takes the one with lower cardinality. We note that identity information in a solution set has no sensitivity level and counts only for cardinality filtering. If equally sensitive and same cardinality iAccess picks the first set.
       Minimality criterion can be used as an implicit (strategy) decision on what solution order to be asked to an opponent.
       If sensitivity level makes no sense to you or the way it is computed is not applicable to your requirements then one can set up zero '0' level to all attributes and with MinimalityCriterion::=OFF mode iAccess will filter only the minimal cardinality sets and will pick one of the least minimal sets.

Team



Should you have any questions/recommendation/feedback please contact us by following the links below. Contact Hristo Koshutanski for any issues regarding the project Web page, iAccess software, and the source code release.
People contributed to the project: