Home
        Spi2Java User Manual - Version 3.1
         Contents
1.     actor  are given only when they significantly differ from the    sofA    actor     4 2 Hints for the Formal Verification Step    Once a spi calculus model has been written  it can be analyzed for verifying  its logical correctness  Formal verification of protocols is not the goal of the  spi2java tools  nor of their user manual  Nevertheless  some hints and support  to use the S  A  3  and proverif  2  formal verification tools are provided    The input language of S A is the original spi calculus as defined in  1    whereas the Spi2Java parser accepts a slightly larger language  e g  else branches  and the shared key constructor operator   Only description that do not use  these features can be analyzed by S A  Note also that the S A native parser  does not accept comments and do not support the const  declaration section   Nevertheless  the css symbol table created by the Spi2Java parser is compatible  with the one used by   A  So it is possible to feed the css file produced by  the Spi2Java parser directly to S  A  and this is actually the recommended way   write a spi calculus specification and use the Spi2Java parser to get a symbol  table  css file  for the whole protocol  then feed S  A with the resulting css file    For example  the command    java  jar  JARS spiParser tui jar  i spi sof spi   o spi sof css    creates a symbol table for the    top level  process  because the  p option is  not specified   which is the Inst process  actually representing the full pr
2.   The reference example introduced in the previous section will be used for  explaining and exemplifying the approach and the use of the Spi2Java tools   Moreover  in  6  the interested reader can find a case study  where the spi2java  framework has been used to automatically generate an SSH Transport Layer  Protocol client implementation     4 1 Writing and Compiling the Formal Model    The programmer normally starts from an informal description of the protocol   e g  an Internet RFC or other standard document   and manually derives a    11           errors   Formal  verification    S A  ProVerif                Spi Calculus  parser        Formal protocol  model    Encoding layer  implementation      Informal protocol  description         eSpi  specification    j Spi2Java  errors           SpiWrapper  library    Encoding Generated      layer protocol code    Testing for functionality  and or interoperability    Figure 2  A data flow diagram of the suggested model based development tech   nique        errors     formal spi calculus model that only captures the high level logic of the protocol  in an abstract way  For the reference example  the informal protocol description   without low level details  and the formal spi calculus model have already been  described in the previous section  and is available in the spi sof spi file    By using spi calculus parser tool  included in the jar spiParser tui jar  the  syntax of the descriptions can be validated  and a symbol table for e
3.   new IdentifierSR KeyStore  perand GET operand        For convenience  the sofA 0  Callback java edited file contains the Java  source code in its final state  with manual modifications  while the plain gener   ated source code can be found in so  A  0  Callback java orig  The sofA 0 Callback java  file distributed with Spi2Java is already in its final state  but it will be over   written if the code is generated again    Note that in the sofB client process similar initializations must be done  but  on the sofB  0 Main  java file  because it is a client implementation  Again    edited and  orig files are included for convenience  and the distributed ver   sion of the sofB  0  Main  java file is already in its final state    It is worth noting that the new operators used in these statements refer  to target classes that provide concrete data types  i e  classes that include the  implementation of an encoding layer  e g  the IdentifierSR   Classes belonging  to the it polito spiWrapper package  such as Message  cannot be instantiated   because they are abstract classes  In this case  the classes using Java Serial   ization as the default encoding layer have been used  i e  classes belonging to  the it polito spiWrapperSR package   The names of these classes slightly differ  from those included in the it polito spiWrapper package  because their name  ends with the SR post fix    Finally  the sofA actor can be compiled and ran by the following commands    Compiling     javac  c
4.  4 4 2    Each param element has an attribute called type  which is used in order to  specify whether the parameter is assigned at compile time  type  const   or it    23    must be resolved at run time  type  var    If the parameter must be resolved  at run time  then its value must be the numeric identifier of another term that  will contain the value of the parameter at run time  When a term is used as an  input parameter  the Spi2Java refiner automatically forces its type to Identifier   For example  the following snippet is semantically correct      lt term id  0  name  alg  type  Identifier  gt    lt codify gt IdentifierSR lt  codify gt    lt  term gt    lt term id  1  name  H data   type  Cryptographic Hashing  gt    lt codify gt CryptoHashingSR lt  codify gt    lt parameters gt    lt param name  algorithm  type  var  gt 0 lt  param gt    lt param name  provider  type  const  gt SUN lt  param gt    lt  parameters gt    lt  term gt     It states that term 1  which is a cryptographic hashing  will use at run time the  content of term 0 as the name of the hash algorithm to be used  Conversely  the  cryptographic provider is chosen to be    SUN    statically at compile time  Note  that term 0 will be forced to be an Identifier by the Spi2Java refiner  so trying  to change its type will result in an error in step 2 2  If a different type should  be assigned to alg  then the cast channel can be used    The provider parameter accepts a semicolon separated list of allowed JCA 
5.  It must be pointed out that refinement  step 2  can be repeated as many  times as needed  until a satisfactory eSpi document is generated by the spi2Java  refiner  However  in most cases  like in this example  one run of step 2 is enough     4 3 2 Practice    Now we will show how the above presented steps can be accomplished in prac   tice   Step 1  Creating an eSpi Template   The eSpi document for the sofA process can be created by using the SpiTyperTextual  program  included in the typer tui jar archive   So  to create a first eSpi document from the symbol table of the sofA process  the following command can be used     java  jar  JARS typer tui jar  s spi sofA sofA css   o spi sofA sofATemplate xml    As a result  the eSpi document is created as  sofATemplate xml   since  o  option specifies this as the output file   from the symbol table file  specified by  the  s option   The optional  f option can be supplied to instruct the program  to silently overwrite the output file if this already exists    Note that the default eSpi specification will be used by the program  If you  added custom types to the eSpi specification  you can instruct the program to  use your custom eSpi specification by using the  e option     21    In the eSpi document  a term element contains additional information about  a spi calculus term declared in the formal model  Three attributes are present  in this element  id is a unique identifier for the term  used internally by the  spi2Java tools  nam
6.  a new coupled sofATemplate xml  which must be refined from  scratch  The eSpiMerger program can be invoked like this     java  jar  JARS espiMerger tui jar  a  spi sofA sofATemplate xml   b  spi sofA sofAFinal xml   o  spi sofA sofAMerged  xml    where  a indicates the new file   b the old file  and  o the resulting output file   As a best practice  the sof AMerged xml file can then be copied in a file called  sofAEdited xml  and the normal manual refining steps can be performed     5 3 Spi2Proverif    The Spi2Proverif auxiliary tool translates a spi calculus specification expressed  in the syntax accepted by the Spi2Java framework  into a semantically equiva   lent specification expressed in the syntax accepted by the ProVerif verification    31    tool  This allows the Spi2Java users to verify their models with the ProVerif  analyzer  2    Two things must be noted about the translation     e As the current version of Spi2Java does not support replication  the trans   lated process will not include replication either  it is needed to add repli   cation operators manually in the generated ProVerif specification     e A Spi2Java protocol specification only describes the protocol behavior  it  does not contain any information about the intended security properties   For this reason  the translated ProVerif specification does not include any  security query  nor protocol execution events  They have to be manually  added to the ProVerif specification  before the analysis of the 
7.  advantage of the capabilities of high level formal anal   ysis tools such as ProVerif 2  and S  A 3   while at the same time ensuring the  correspondence between high level formal models and their implementations    In short  the main Spi2Java tools and their aims are as follows     spi calculus parser is a pre processor and parser for the spi calculus descrip   tion of the protocol     spi2java refiner is a type checker that infers Java types for the spi calculus  terms used in the  untyped  protocol description     spi2java code generator is an automatic code generator that emits the Java  code implementing the protocol described in spi calculus     The rest of this document is organized as follows  Section 2 specifies sys   tem requirements for running the Spi2Java framework and explains how to get  started with it  Section 3 introduces the spi calculus language with the syn   tax accepted by the tools and presents a reference example that will be used  throughout this document  Section 4 shows in detail  mainly through the full  development of the reference example  how the tools can be used to produce  an implementation of a cryptographic protocol  Section 5 explains how to use  some correlated auxiliary tools     2 Getting Started with Spi2Java    2 1 Prerequisites    The Spi2Java tools are entirely implemented in Java  For this reason  a Java  Runtime Environment version 1 6 x or later is required to run the tools com   posing the framework    An Apache Ant version 1 
8.  o means that A sends message o to    B    The sof protocol subsumes that a long term key is pre shared between the  protocol participants  At the implementation level  one way to achieve this is to  use a key store  Each participant has its own key store  which associates a key  with the participants identities  A simple key store modeling strategy is to rep   resent the key store as a separate process that interacts with the corresponding  protocol principal through a dedicated communication channel  the key store  channel  not accessible by the intruder  The operations of getting and storing  a key are modeled as pairs of inputs outputs on the key store channel  For  example  at line 4  the sofA process sends the message  KEYSTORE_GET   A  xB     on the cKS channel  By the KEYSTORE_GET operand  sofA is asking the key store  to retrieve the key associated with the  A xB  identifier  being  A xB  a pair   the resulting identifier will be the concatenation of the A and xB identifiers  At  line 5  sofA reads back the retrieved key from the key store  If they key could  not be found  then the process would be stuck  More details about key store  interaction can be found in section 4 3 1  when describing the key store channel    In a run of the sof protocol  three messages are exchanged through a public  communication channel named cAB     1  At line 3 B sends to A a Pair composed of its identifier B and a nonce  Rb  created at line 2  When A receives the message  it retrieves t
9.  of the send   must have the form   PUT    LIST  KEY   MODE    where KEY is an object of the Key   Pair  PublicKey  or Certificate   or SharedKey classes  and MODE is  taken from the KeyStoreMode enumeration  Currently  MODE is dis   carded  and the key store behavior is as if OV ERRI DE was always given   The PUT operand asks the key store to save the given KEY under the  given alias LIST  The following receive  method invocation will inform  the user whether the key was successfully inserted or not     The PUT IP operand has the same meaning of PUT  but uses a LISTCH  as alias     After a send    method has been invoked  a receive   method must be  invoked  The argument to be passed to the receive   method depends  on the previous call to the send   one     If the requested action was a CH ECK or CH ECK IP  then the received  message will be OUTCOM E  where OUTCOM E is an Identifier storing  one of the values of the KeyStoreQutcome enumeration  If OUTCOME  is SUCCESS  then the alias previously given with the CH EC K operand  is associated with some key  otherwise the outcome will be FAILURE     If the requested action was a GET or GET IP  then the received message  will be KEY  where KEY will be the retrieved key  or an exception will  be thrown if no key was associated with the previously given alias     If the requested action was a PUT or PUT IP  then the received message  will be OUTCOM E  Currently  as the OV ERRIDE mode is the only  one implemented  a PUT will always 
10.  operand  the argument of the send    method must  have the form  CH ECK IP  LISTCH   where LISTCH   CH  LIST CH    where CH is an object of any of the classes extending Channel that sup   port the getRemoteURI   method  e g  TcpIpChannel   In this case  the  checked alias will be the concatenation of the LIST  identifiers  concate   nated to a string representing the URI of the given channel  This CHECK  variant is especially useful when a client wants to deal with server keys   because a server will have a constant and unique URI  which can be used   as a key store alias     16    When the operand is GET  then the argument of the send   method  must have the form  GET  LIST   The GET operand asks the key store  to retrieve the key associated with the alias LIST  The retrieved key will  be provided by the key store when the receive   method will be invoked   or an exception will be thrown if there is no key associated with the alias  LIST  more on this later      The GET_IP operand has the same meaning of GET  but uses a LISTCH  as alias     If protocol execution can stop immediately if a key is not found in the  keystore  then the GET operands can be used directly  if the key is not  found an exception will be thrown  and the protocol execution stopped   Otherwise  if different actions should be taken depending whether a key  is present or not  one can first use the CHECK operands  and then use  the GET operands only if a key was found     With the PUT operand  the argument
11.  order to get the early prototype  the tool can fill  all the missing needed data with default values  which allows to immediately  get a complete specification  The user can later change the default values to  accommodate needs  after editing  the spi2Java refiner checks the user given  values for correctness and coherence with the reference spi calculus specification    The low level implementation details can be grouped into two main cate   gories     1  Cryptographic and Configuration parameters  2  Encoding decoding functions  or  simply  encoding functions     The first group of details specifies parameters such as    what algorithm must  be used for a particular encryption operation  or  what network interface must  be used by a particular channel     In order to make the generated code compliant  with the implemented protocol  it is necessary that these parameters can be set  independently  at compile time or at run time  for each data item     The second group of details deals with the transformation from the internal  representation of messages into their external representation  and vice versa    The internal representation is the one used to perform all the operations pre   scribed by the protocol logic on the data  whereas the external representation is  the stream of bytes that must be exchanged with the other parties  Decoupling  internal and external representations is necessary in order to obtain interoper   ability  because the external representation must c
12.  pairs  nonces  also called  fresh names  and any other unstructured data    The informal meaning of the term composition operators is as follows     e  c  p  is the pairing of c and p  It is a compound term whose components  are o and p  Pairs can always be freely split into their components     e suc c  is the successor of c  This operator has been introduced mainly to  represent successors over integers  but it can be used  more generally  as  the logical successor of any term        o  p      terms  m name   x variable   c p  pair   0 Zero    suc c    successor  H o  hashing    o  shared key    op shared key encryption  o  public part   g    private part      o  e public key encryption    o  p  private key encryption  signature        Table 1  Term syntax of Spi Calculus    e H c  is the hashing of o  H co  represents a function of    that cannot be  inverted     e Term o  represents a shared key obtained by some key material        e Term  c p is the ciphertext obtained by encrypting o under key p using  a shared key cryptosystem     e g  and o    represent respectively the public and private half of a key pair  o  o  cannot be deduced from o    and vice versa     e   c  p is the result of the public key encryption of o with p     e   o  p is the result of the signature  private key encryption  of    with the  private key p     In addition to the basic term composition operators shown in Tab  1  some  syntactic shortcuts are available for common combinations of term comp
13.  private key decryption process and behaves as  Pl n x  if o is a term 7 encrypted under a public key whose corresponding  private key is p  Otherwise it is stuck  unless an else Q branch follows     e case o of   x  o in P is a public key decryption  or signature check   process and behaves as P n x  if o is a term 7 encrypted under a private  key whose corresponding public key is p  Otherwise it is stuck  unless an  else Q branch follows     e check o of T with p in P checks whether o is a valid signature of the  message T using public key p  If this is the case  then P is executed   otherwise the process is stuck  or it behaves like Q if an else Q branch  follows     Some of the above expressions can have an optional else branch  representing  the behavior that occurs when the operation does not succeed  For example  in  expression case o of  x p in  P  else  Q  process Q represents the behavior  that occurs when the decryption of e with key p does not succeed  Note that  brackets are mandatory when the else branch is defined  Moreover  there is no  way to join if else branches  much like it happens in compositions  When the  else branch is missing  the process gets stuck in case of unsuccessful completion  of the operation  This means that the execution of the protocol stops with an  exception  If we indicate unsuccessful termination by fail  expressions without  the else branch can be interpreted as expressions having a default else fail  suffix  In this respect  the two
14.  processes    case o of  x p in P  and  case o of  x p in  P  else  0     are semantically equivalent from a spi calculus point of view  but result in two  different Java implementations  If decryption fails  the first process implicitly  terminates with a failure  that is  throwing an exception in Java   while the  second process    gets stuck   that is correctly terminates  thus not throwing an  exception  but normally returning to its caller  The user can never invoke a fail  process  it is implicitly added by the parser when no else branch is specified    Behavior expressions are used to define processes  A process definition takes  the syntax   Procname zi         n  n  P    where Procname identifies the process  P is the behavior expression that spec   ifies the process behavior and z  are the process formal arguments    In order to facilitate modular definitions of processes and process definition  reuse  a behavior expression may include a process instantiation whenever a  process is expected  A process instantiation takes the form    Procname oi      04     where c  are the actual arguments that replace the corresponding formal ones     3 3 Spi Calculus Source Files Syntax    A spi calculus source file is divided in two sections  constants definition  and  processes definitions    Constants are defined by the keyword const  followed by a comma sep   arated list of free names  ended by a dot          For example  a valid constants  definitions is    const  A B C     I
15.  providers  ordered by preference  The most preferred provider supporting the  requested algorithm will be chosen  For example  given two providers    provA     and    provB     the following line     lt param name  provider  type  const  gt provA  provB lt  param gt     asks to use    provA     if it supports the algorithm to be implemented  and it is  installed in the Java Virtual Machine being used   otherwise     provB    will be  chosen  If no listed provider supports the requested algorithm  an exception will  be thrown at run time    Remark  It may be argued that manual modification of the eSpi document  is not very user friendly  This is true  however the whole spi2Java tool  which  is currently a prototype  has been designed to be an integrated development  environment  IDE   In this context  a convenient user interface could accept  user input  and then could transparently handle XML documents  automati   cally filling default values or adding required elements  as defined in the eSpi  specification  With this design in mind  the use of the machine readable XML  document format  and the definition of the eSpi specification get even more  importance  For example  when refining the type of a term from Message to  Nonce  the IDE  according to the eSpi specification  can automatically change  the default encoding layer  and can add all the required parameters for the new  type  filling them with default values  or asking for custom values    Step 2 2  Using the refined 
16.  specified via the  n switch  The configuration file must contain one mapping  per line  everything after a   is a comment  The following is the content of an  example mapping file       This is a comment line     The format is  AbstractType DefaultConcreteType   Channel Tcp Ip Channel   Hashing Cryptographic Hashing    A usage example of the tool is presented when refining the reference example     5 2 eSpi Merger    Sometimes it happens that  when manual refinement of the eSpi document is  almost complete  one discovers some errors in the protocol specification  Fixing  the protocol leads to a new coupled eSpi document  which must be manually  refined from scratch again    In order to reduce the impact of this issue  the eSpiMerger program can  be used  It accepts two files  a new file and an old file  The new file is the  eSpi document obtained from the latest protocol specification  thus containing  up to date but still unrefined terms  The old file is the eSpi document obtained  from the previous protocol specification  thus containing not up to date  but  refined terms  The eSpiMerger program will try to refine the terms in the new  file  by looking at how similar terms in the old file had been refined    For example  suppose a flawed specification of the sofA actor was given  and  that it had been refined up to the point that a complete sofAFinal xml eSpi  document was ready    At some point  the flaw is discovered  and the sofA specification is updated   This leads to
17.  where eSpi stands for    extended Spi    which is coupled with  the original spi calculus source  The eSpi document is automatically generated  by the spi2Java refiner  and  when no information can be automatically inferred   default values are used    In order to let the type hierarchy and the associated parameters be extensi   ble  an XML document  called the eSpi specification  which contains these pieces  of information  is parsed at run time by the spi2Java refiner  no information is  hard coded into the tool  The default encoding layer and default values of pa   rameters are also stored into the eSpi specification  so that they can be modified  at any moment too    For example  the type Nonce is represented by the following fragment of the  eSpi specification      lt type name  Nonce  gt    lt default_marshall_class name  NonceSR   gt    lt requires gt    lt param name  size  default_value  8   gt    lt  requires gt    lt  type gt     A type named    Nonce    is defined  and the class implementing the default en   coding layer is called    NonceSR     more on this below   This type requires one  parameter  named    size     whose default value is 8 bytes    Adding a custom type to the hierarchy is rather straightforward  and is  documented in section 4 5     20    Moreover  the Spi2Java refiner allows the specification of cryptographic and  configuration parameters to be done either statically at compile time  or dynam   ically at run time  The latter behavior enables 
18. 4 An Example    Spi2Java comes with a full example that can be used to get acquainted with  the framework  All required steps to get a working implementation from the spi  calculus specification are detailed in this manual  The relevant data are placed  in data full_example  From now on  if not otherwise stated  we will assume  that this directory is the base for any referenced file or issued command    The chosen protocol is the key exchange one presented in section 6 1 5 of  5    Since this protocol has no specific name  we will call it    sof     standing for    six   dot  one  dot  five       The spi sof spi file contains a possible full spi calculus specification of sof   To make it more understandable  figure 1 shows an alternative representation  of that content    The const  section contains the declaration of the A and B agents identities   as well as the key store GET operand  more on this later   Note that in this  example  A and B identities are fixed  This means that this specification only  handles the case where two known actors are interacting  other third party  protocol actors are not taken into account  The goal of this example is to show  the usage of spi2java  rather than implementing a real security protocol indeed        Constant data section                                                       const  A  B  KEYSTORE_GET   Line   sofA Actor sofB Actor Meaning  1   sofA A cAB cKS     sofB B cAB cKS      2   Rb   3 cAB  xB xRb    cAB lt  B Rb  gt   B     
19. 7 x or later build xml script is provided  in order  to compile the tools from sources or to perform other distribution related tasks   However  Apache Ant  and the Java SDK  is not needed for the typical user  as  the distribution includes ready to use executable jar files     2 2 Getting the Software and Setting It Up    You should have downloaded a copy of the framework  which includes this user  manual  from the Spi2Java web site  at http   spi2java polito it      The framework comes in a compressed archive  either in tar gz or in zip  format  Whatever archive you downloaded  extract it  it will create a new  directory containing the extracted content    Please take a look at the README file  it contains general information on the  framework  and a description of the files included in the distribution    No other installation steps are required  In particular  as this user manual is  concerned  the jars directory contains all pre compiled jars  Those containing  a tui in their name are the executable jars  providing a    textual user interface      also known as cli        command line interface   to the Spi2Java tools  In general   on a UNIX platform  assuming that the JARS environment variable points to  the jars directory of the Spi2Java framework  you can run one of the tools by  invoking the following command from the command line     java  jar  JARS  lt jar_filename jar gt   options     All programs support a  h option that prints an help screen and exits  and  a  d
20. A  B  Rb  4 cKS    KEYSTORE  GET   A xB   gt    5 cKS  Kab    6   Ra   7   K   8 cAB lt  A  H xRb   Ra A K  Kab  gt   cAB  xA encData    A     B  A   H Rb  Ra A K Kab  9 cKS    KEYSTORE  GET   xA B   gt    10 cK   Kab    11 case encData of  plainText Kab in  12 let  hashOfRb xRa xA K    plainText in  13   hashOfRb is H Rb     14 cAB  xB encData    cAB    B   H xRa   K  gt   B     A  B   H Ra  K  15 case encData of  hashOfRa K  in  16   hashOfRa is H Ra     17 0 0    Key Store Process  keyStore cKS Kab      cKS  request params       request is KEYSTORE GET     params is  A B     cKS lt  Kab  gt    0  Protocol Sessions Instantiation  Inst cAB        Kab     generate secret shared key        processes A       10         cKS     create secret keystore channel           keyStore cKS Kab      run keystore instance for A     sofA A cAB cKS     run A instance             processes B       10         cKS     create secret keystore channel     keyStore cKS Kab      run keystore instance for B     sofB B cAB cKS     run B instance                   Figure 1  A possible spi calculus specification of the    sof    protocol     Then  the specifications for the A and B agents are given     The    Line       column enumerate the specification lines  while the    sofA Actor    and    sofB  Actor    columns contain the specifications of the A and B agents respectively   The    Meaning    column provides an informal  intuitive representation often en   countered in the literature  where A     B
21. P is an input process  ready to perform an input from channel o when  a synchronization occurs  The behavior after a synchronization in which  the received message is term p is described by behavior expression P with  any occurrence of x replaced by p  which is denoted P p z      P   Q is a parallel composition where P and Q run in parallel  They  may either synchronize with each other or with the external environment  separately  This operator is commutative and associative      Qm P is a restriction process which makes a fresh  private name m and  then behaves as described by P     IP is a replication where an unbounded number of instances of P run in  parallel      o is p P is a match process which behaves as described by P if the terms  c and p are the same  and is stuck otherwise  If an else Q branch follows   the process behaves as described by Q if the two terms do not match     0 is the nil process  it is a stuck process     let  x  y    c in P is a pair splitting process  If term c is a pair  p1  pa    this process behaves as P p1 z  p2 y   otherwise it is stuck or it behaves  as Q if an else Q branch follows     case o of 0  P suc z    Q is an integer case process  If    is 0  it behaves  as P  if o is suc p   it behaves as Q op x   It is stuck otherwise     e case c of  x p in P is a shared key decryption process  If o is a ciphertext  taking the form  7    it behaves as P n x   otherwise it is stuck unless an  else Q branch follows     e case o of   x  p in P is a
22. Spi2Java User Manual   Version 3 1  Alfredo Pironti  Davide Pozza  Riccardo Sisto    Politecnico di Torino  Dipartimento di Automatica e Informatica  C so Duca degli Abruzzi  24  10129   Torino   Italy    Disclaimer  Please consider that the Spi2Java framework is a research pro   totype  It has not undergone all testing and validation that is usually expected  for a production environment software  We are already conscious of some of  its deficiencies and possible improvements  Please feel free to contact us by  email if you encounter or find any problem  Feedbacks and suggestions are very  appreciated  When you contact us  please write to all of us    falfredo pironti riccardo sisto Opolito it    and use    Spi2Java    as a prefix in the subject  We will answer as soon as possi   ble     License  Creative Commons Attribution ShareAlike  For license details  please see  http   creativecommons org licenses by sa 3 0 legalcode    Contents    1    2    Introduction    Getting Started with Spi2Java  24  Prere  quistt  s  A    c B s aru Pep etsi  2 2 Getting the Software and Setting It Up            ss     Spi Calculus and Reference Example   3i Tern Syntax 2228 mg i3 bed xe Va ak a  3 2     Process Syntax  Le no ao ui ma woe Rp ac ve RR Um EH EE  3 3 Spi Calculus Source Files Syntax          lien  3 4  An Example ayer seu  ds xxt    Spi2Java Development Methodology and Tool Support   4 1 Writing and Compiling the Formal Model                 4 2 Hints for the Formal Verification 
23. Step                   4 3 Refining the Formal Model                     AZE  Theory 20h hd eee os y edem ae cee ao seth A eec e eut a  4 3 2  PTACUGO   amp  Y av sabe uU teen do re quate forte o C Tes   4 4 Implementing the Java Application               len   4 4 1 Obtaining a protocol prototype implementation             4 4 2 Customizing the Encoding Layer                  4 5 Adding Custom eSpi Types        ln    Spi2Java Auxiliary Tools   5 1 Typer by Default           22er  5 2   eSpDMerger  ie us osea chow ox we E QUE EURO Re EAE xd  5 9  Spi2Provenrfe oec cau  ee BE a ae UR Aer    1 Introduction    Formal methods have the potential to significantly improve the trustworthiness  of critical software  especially when development turns out to be intrinsically  error prone  and bugs difficult to discover  as it happens with cryptographic  protocols  However  one of the problems that still limit the widespread use of  formal methods is the high level of expertise that they normally require and the  high cost of development that their use implies  A way to partially overcome  the above problem and to improve the acceptance and productivity of formal  methods is to provide methodologies and tools that simplify the use of formal  methods  introducing automation and hiding underlying complexity    Spi2Java is a set of tools that support a model based approach to crypto   graphic protocol implementation based on the spi calculus  1   By using these  tools it is possible to take
24. ach role is  produced    Symbol table for actor A can be generated by issuing the following command     java  jar  JARS spiParser tui jar  i spi sof spi  p sofA   o spi sofA sofA css  r spi sofA sofA rev    Please remember that the  JARS environment variable points to the location of  the jars distributed with the Spi2Java framework  and that all command are  executed from the base data full  example directory  The  i option indicates  the input source file  which is the file containing the full spi calculus specifica   tion  as already explained  The  p option asks to extract a symbol table for the     sofA    process only  we will generate Java code implementing only one actor at  a time  not the whole protocol description  The  o option indicates the symbol    12    table output file  The extension css stands for Canonical Spi Specification   and is the internal format used by the Spi2Java tools  Finally  note that the  Spi2Java parser translates any syntactic shortcut into its low level expansion   e g  term sequences are translated to nested pairs  and the else fail suffix is  added to any expression supporting the else branch   The optional  r switch  saves the expanded spi calculus like version to a file  which may be useful in  the refinement phase  since the expanded version of the specification shall be  refined    The same steps can be repeated for the    sofB    actor  updating the command  line option arguments accordingly  Specific instructions about the    sofB
25. ansactions on Software  Engineering and Methodology  vol  12  no  2  pp  222 284  2003     4  R  Milner  J  Parrow  and D  Walker     A calculus of mobile processes  parts  I and I     Information and Computation  vol  100  no  1  pp  1 77  1992     5  J  Clark and J  Jacob     A survey of authentication protocol literature  Ver   sion 1 0   1997           6  A  Pironti and R  Sisto     An experiment in interoperable cryptographic pro   tocol implementation using automatic code generation     in IEEE Int  Symp   on Computers and Communications  2007  pp  839 844     32     7  D  Pozza  R  Sisto  and L  Durante     Spi2java  Automatic cryptographic  protocol java code generation from spi calculus   in  nternational Conference  on Advanced Information Networking and Applications  2004  pp  400   405     33    
26. ava spiWrapperSR package  and implement the remaining  four methods of the encoding layer  by using serialization    When using the Spi2Java tools  if custom types are added  always remember  to use the custom eSpi specification file  by specifying the proper option on the  command line  Otherwise  the default eSpi specification will be used  which does  not contain information about the custom types  and errors will be reported     5 Spi2Java Auxiliary Tools     This section enumerates and briefly describes some auxiliary tools that are in   cluded in the Spi2Java framework  For a reference of all options available in  each tool  included the main tools explained above   please refer to the online  help     5 1 Typer by Default    Some eSpi types  for instance Channel or Hashing  are abstract  and cannot be  instantiated  Moreover  when automatically inferring types  it is not possible    30    to choose an appropriate concrete type for these abstract types  When such  abstract types are inferred  manual refinement becomes necessary in order to  let the code compile and execute  However  if agile prototyping is aimed to  or  all abstract types would be refined to the same concrete type  then it is possible  to use the TyperByDefault program  that automatically refines each abstract  type to a default concrete type    The mapping between each abstract type and its default concrete type can  be specified via the command line  by the  m switch  or through a configuration  file 
27. based upon user input     4 4 1 Obtaining a protocol prototype implementation    When the eSpi specification file is in its final version  code generation can take  place  The JavaGenerator program can be used to complete this task    It is now shown how to get an early prototype of the protocol implementa   tion  where the default encoding layer is used  This means that messages are  encoded using the Java object serialization mechanism  Later on  it will be  shown how a custom encoding layer can be implemented  In order to generate  the code that uses the default encoding layer  the JavaGenerator program has  to be fed with the name of the packages  i e  it polito spi2java spiWrapperSR  and inner packages  that contain the implementation of the encoding layer  This  can be done by using the  i option  that specifies the name of packages that  will be imported by the generated code  If many packages need to be imported   their names can be written in a text file  one per line  and the text file is passed  to the JavaGenerator program by the  j option    The JavaGenerator program can be invoked by using the following com   mand     java  jar  JARS javaGenerator tui jar  o java generated fullExample sofA   p fullExample sofA  j java imports  s spi sofA sofA css   x spi sofA sofAFinal xml    An explanation of the used options follows  The  j option is used to import  the set of packages required to use the encoding layers  all the required imports    26    are specified in the 
28. d invokes the protocol and then the application     sofA 0 Protocol java   contains the implementation of a protocol session     SofA O0 Application java   contains the skeleton of an application that is  invoked after each protocol session execution     For the sofB client implementation  the following files are generated     sofB 0 Main java   contains the main that initializes the parameters of the  protocol and that invokes the protocol and then the application     sofB_0_Protocol java   contains the implementation of a protocol session     sofB_0_Application  java   contains the skeleton of the application that is  invoked after each protocol session execution     It is worth noting that the Java code generator does not know what are  the values of the protocol parameters and  hence  their initialization must be  manually provided  Therefore  if you try to run the generated code without  providing parameters  the generated code execution stops  even before the code  actually implementing the spi calculus model is run  So  in order to initialize  the parameters  with respect to the sofA actor  the sofA 0 Callback  java file  needs to be modified   First  a backup copy of sofA 0 Callback  java is created into sofA 0 Callback  java orig   Then the generated file sofA 0 Callback java is modified such that the fol   lowing lines    Identifier A O   null   Identifier KEYSTORE GET O   null     27    become    Identifier A 0   new IdentifierSR  A      Identifier KEYSTORE GET O  
29. default concrete type  The following  command    java  jar  JARS typerByDefault tui jar  s spi sofA sofA css   x spi sofA sofATemplate xml   o spi sofA sofATemplateWithDefault xml    creates the sofATemplateWithDefault xml eSpi document  where all abstract  channels are downcast to Tcp Ip Channel  and all abstract hashes to Cryp   tographic Hashing  Also note that the default downcast rules for the typer   by default are fully customizable  through command line parameters  See sec   tion 5 1 for more information about the tool   Now  the obtained eSpi document can be manually modified  First of all  be   fore modifying the file  it can be useful to create a sandbox copy of sofATemplateWithDefault xml  that we call sof AEdited xml   In this specific case the terms to be refined are     e terms 0  4  7  downcast to the Identifier type  and updating the encoding  layer accordingly      e term 1  specify that this channel will be a server channel  using the     TcpIpServer    implementation  more on this later      e term 2  change from the default Tcp Ip Channel  to the Java Key Store  Channel  and updating the encoding layer and parameters accordingly     e terms 5  11  12  downcast to Nonce  and update encoding layer and pa   rameters accordingly     22    e terms 10  18  change cryptographic algorithm and strength  In order to  comply with the protocol specification  when using the pre shared session  key  we must use 3DES  with strength of 192 bits  Since no initialization  
30. e is a human readable representation of the term  useful in  order to uniquely identify it when manually modifying the eSpi document  type  contains the information about the type that has been statically assigned to  the current term  The value of the type attribute must be present in the eSpi  specification  and must be coherent with the use of the term in the model  as  inferred by the spi2Java refiner  The codify element contains the name of a  Java class implementing the encoding layer for the current term    Note that the eSpi document refers to the expanded form of the input de   scription  where for example sequences of terms of length greater than 2 are  transformed into nested pairs  For this reason  it is possible that some new  terms  not present in the original specification  appear in the eSpi document   In order to understand the meaning of these terms  it is possible to look at the  expanded form of the input specification  that can be generated by using the  r  when compiling the spi calculus sources with the Spi2Java parser    Step 2 1  Refining the eSpi document    Once the sofATemplate xml document has been created  there may be the need  of specializing the type of some terms    First  all channels and hashings must be manually specialized to any of their  subtypes  as the Channel and Hashing types are abstract types  that cannot be  instantiated  For this purpose  the dedicated typer by default tool is available   which downcasts all abstract types to a 
31. eSpi document    Now that the sofAEdited xml file has been modified  the SpiTyperTextual pro   gram has to be run again to check that the file does not contain any syntactic  error and that there are no refinements that are not admissible by the Java class  hierarchy  Moreover  the refiner could exploit the added information in order to  further refine other terms  The SpiTyperTextual can be invoked in this way     24    java  jar  JARS typer tui jar  s spi sofA sofA css   x spi sofA sofAEdited xml   o spi sofA sofAFinal xml    It is worth noting that now the sofAEdited xml file is provided to the tool  too  by the  x option   and a new output file is being specified  i e  sof AFinal xml    In this case it may be useful to perform a diff between the sof AEdited xml and  the sofAFinal xml files to see if there are some differences  i e  if some terms  have been further refined  In this case  no terms have been further refined    Since there are no more terms to refine  it is possible to proceed with code  generation  Anyway  should the specification be not yet complete  step 2 can  be repeated until a satisfactory specification is created     4 4 Implementing the Java Application    Once the final eSpi documents of the prototype version are done  the Spi2Java  code generator is used in order to obtain a Java implementation of the given  spi calculus model  refined with the information contained in the coupled eSpi  document    The generated code uses classes and methods provid
32. ebug option that enables debugging mode  with extensive error reporting   useful for troubleshooting or bug reporting     3 Spi Calculus and Reference Example    The spi calculus is defined in  1  as an extension of the 7 calculus  4  with cryp   tographic primitives  It is a process algebraic language designed for describing  and analyzing cryptographic protocols  These protocols heavily rely on cryptog   raphy and on message exchange through communication channels  accordingly   the Spi Calculus provides powerful primitives to express cryptography and com   munication     This section illustrates the spi calculus syntax accepted by the framework  and describes the language semantics informally    The language used by Spi2Java is basically the spi calculus as defined in  1   with some extensions  The syntax has been slightly modified with respect to  1    in order to make it machine readable   A spi calculus specification is a system of independent processes  executing in  parallel  they synchronize via message passing through named communication  channels  The spi calculus has two basic language elements  terms  to represent  data  and processes  to represent behaviors     3 1 Term Syntax    Terms can be either atomic elements  i e  names  including the special name 0  representing the integer constant zero  and variables  or compound terms built  using the term composition operators listed in Tab  1  Names can represent for  example communication channels  atomic keys  key
33. ed by the spiWrapper  Java library  previously called secureClasses in  7      It is worth noting that the spi2Java code generator does not only generate  the security critical Java code implementing the spi calculus model  instead   it also generates complete application templates  By initializing some values   these applications can be compiled and executed  This strongly reduces user  interaction  enabling agile prototyping    The Spi2Java code generator can currently implement applications using two  different architectures  whose flowcharts are reported in figure 4  If an applica   tion must act as an initiator  that is  no term element has the server attribute  in the eSpi document  then the Spi2Java code generator automatically uses the  client architecture  Otherwise the application must act as a responder on the  channel having the server attribute  and the Spi2Java code generator auto   matically uses the concurrent server architecture  The Spi2Java code generator  is designed so that it is easy to add new implementation architectures  such as  concurrent crew servers  also known as  prefork   and the like    It is worth noting that  in the application templates currently provided  while  the performHandshake   method implements the logic of a protocol session  the  act   method is executed only if the current protocol session ends successfully   that is  performHandshake O returns and does not throw an exception   and  is initially empty  This method can be impleme
34. f no constants are to be declared  this section can be omitted  The spi calculus  parser of spi2java checks that any declared constant is used at least once in  the specification  Conversely  for each process P  the parser checks that all of  its free names are declared in the process formal parameters  or in the const   section    The following  mandatory section  is a collection of process definitions  Pro   cesses cannot be recursive  not even indirectly   There is no semantic difference  between constant data  and formal parameters of a process  In fact  constant  data can be regarded as implicit formal parameters that are automatically added  by the parser to process definitions  when necessary  As a general rule  it is rec   ommended to put constant data of the protocol in the const  section  so that  all processes can use them  without the need to declare them in the formal pa   rameters list  this may include  for example  identifiers of protocol messages   constant strings  or enumerations  Session specific values  such as session iden   tifiers  should be put in the processes formal parameters lists    A top level process is a process that is not instantiated by any other process   A specification can contain more than one top level process    Comments are supported in C style  They can begin with a    and extend  until the end of the line  or they can be enclosed within    and     spanning on  multiple lines  like in C  this form of comment cannot be nested      3 
35. he key  Kab shared with B from its local key store  lines 4   5   If key retrieval is  successful  line 6   A generates its nonce Ra  line 7   and some fresh key  material K that will be used for the generated session key  line 8      2  Then at line 9 A sends a pair to B  The left part of the pair is A s identity   the right part is the encryption under the pre shared key Kab of the hash  of B s nonce  as received in message one  stored locally in variable xRb    A s nonce Ra  A s identity  and finally the session symmetric key K   When  B receives the message  it uses A s provided identifier to retrieve the pre   shared key Kab from the local key store  lines 10 11   If key retrieval is  successful at line 12  the received data are decrypted  line 13  and split  into their parts  line 14      3  If at line 15 the received term hashOfRb matches the locally reconstructed  H Rb   B sends the last protocol message to A and terminates  This mes   sage contains B s identity again  followed by the hash of the received A s  nonce  encrypted under the session key K  Note that in A  the key material  is a fresh name called K  and the shared key built upon this material takes  the form K   Instead  in B  K is a variable that is supposed to be bound to  the shared key sent by A     When A receives the message  at line 17 it tries to decrypt it using the  session key K   and checks that the plaintext matches H Ra   line 18   If  all checks are successful  A correctly terminates     In t
36. his is the classical marshaling needed by  communication protocols    This approach gives high flexibility  by allowing different and independent  encodings for cryptographic and networking operations    The third and fourth methods are dual with respect to the first and sec   ond ones  decodePayload   transforms the encoded payload into the internal  representation of the term  while deSerialize   extracts the payload from a  received message coming from a communication channel    The class NonceRaw  java provided in the java customMarsh directory is an  example of how a custom encoding layer can be implemented  When encoded   this nonce just outputs its raw bytes  with no header or trailer  It is used as key  material when generating the shared session key in the protocol  The shared  session key constructor uses the first 8 bytes of the key material  that are taken  by the encoded nonce  By not using a fixed header or trailer in the nonce  encoding  it is avoided that the same constant header data are always used as  key material in each protocol run    In the NonceRaw class  deserialization and decoding have not been imple   mented as they are not necessary  no raw nonces are ever read from the net   work or decoded as a result of cryptographic operations  If needed  they could    29    be implemented as the inverse of their respective serialization and encoding  functions     4 5 Adding Custom eSpi Types    Adding custom types to the eSpi types hierarchy is rather straig
37. his simple abstraction of the key store  the keyStore process just waits  for a request  When a request comes  if the operand is KEYSTORE  GET and the  identifier matches the concatenation of A and B constant identities  then the pre   shared key is returned  else the process becomes stuck  effectively not returning  any key  It is straightforward to enhance the key store to handle more than one  key identifier pair     10    The Inst process puts all pieces together  by generating the pre shared key  between A and B  and running several concurrent instances of A  and its key  store  and B  and its key store   Note that this version of Spi2Java does not  support replication  this is why the replication operator    n  is commented out  in the specification of Inst  In future versions of Spi2Java  replication is going  to be supported  The n parameter in the    n  operator shall be an integer  indicating the number of replicated processes  in case of bounded replication   Not currently supporting replication is not a limitation during code generation   because in fact only the sofA and sofB processes will be used  Very often indeed   processes describing protocol actors are simple sequential specifications  so no  composition nor replication are usually required  Not supporting replication  in Spi2Java is not a limitation in the formal verification phase too  Assuming  the verification tool supports the same syntax as Spi2Java  it is enough to un   comment the replication opera
38. htforward   First get a copy of the espi specification xml file  which is located in the  data eSpi directory from the root of the released framework     Then  suppose the type    UDP IP Channel    must be added  as a subtype of     Channel     Within the type element representing the    Channel    type  add a  nested type element representing the    UDP IP Channel    type  This new type  element could look like      type name  UDP IP Channel  gt     default marshall class name  UDPIPChannelSR        requires     lt param name  host  default  value  localhost      Xparam name  service  default value  2006       lt param name  timeout  default value  0       lt  requires gt    lt  type gt     Afterwards  create the abstract class UDPIPChannel extends Channel  in the it polito spi2java spiWrapper package and implement the custom  logic for this type  The name of the class can actually be arbitrary  but it  is a best practice to name it after the type name  with spaces and special  characters removed  Note that the it polito spi2java spiWrapper package  can be a package local to your project  there is no need to add the new class  into the Spi2Java package with the same name  The Java compiler and run time  tools will be able to handle dependencies correctly  Also note that all abstract  methods of the supertypes  except the four methods of the encoding layer  are  supposed to be implemented    Finally  create the class UDPIPChannelSR extends UDPIPChannel in the  it polito spi2j
39. java imports file  The  o option specifies the path where  the tool must place generated files and the  p option specifies the name of the  package for the generated code  Note that the user must specify the output  directory including the path corresponding to the package name  so it is the  user s responsibility to ensure that the last part of the output directory path  matches the package name  The  s and  x options specify the symbol table file  and its coupled eSpi document respectively  from which the code is generated   Note that a default eSpi specification and default template files for code gener   ation are used  A custom eSpi specification can be specified by the  e option   this option is needed when custom types have been added  and so a custom  eSpi specification must be used by the program  Custom template files for code  generation can be provided too  via the  t option  In this case  the argument  to the option must be a directory  which will contain the set of template files    This option is usually not needed for most users   The Java code generator produces  in the java generated fullExample sofA   directory specified on the command line  the following files for the sofA server  implementation     sofA 0 Main java   contains the main function starting the server process   listening for clients     sofA 0 Callback java   contains the code that is called each time a client  request has been accepted  This code initializes the parameters of the  protocol an
40. l that  uses the Java key store implementation  Other implementa   tions could be defined  such as an openSSH compatible key  store    File Channel provides access to the local file system    Cast Channel is an artificial channel used to implement Java  type casts    Key Pair represents a pair of public private keys for use with asym   metric cryptosystems  Note that a key pair is still an atomic  message  because public private keys are obtained by   and    constructors  and not by pair splitting    Nonce represents a randomly chosen sequence of bits    Identifier represents some information which identifies an entity in  a unique way  For example  it can be used as an alias to identify  a key or a certificate stored inside a key store  It cannot be  instantiated fresh  In order to obtain a random string  the Nonce  type should be used    Timestamp represents a time snapshot    Integer represents an integer number    Integer With Bounds represents an integer number that must  fit within a given range     Shared Key represents a key for use with symmetric cryptosystems     Public Key represents the public component of a key pair used with  asymmetric encryption     Certificate represents a digital certificate  It is considered a spe   cialization of Public Key because each digital certificate contains  a public key  along with some other information     Private Key represents the private component of a key Pair     Hashing represents the result of applying a non invertible fu
41. lt can be computed     The DH Key type takes one argument of the form  f  x   where each f  and z are of type Integer or DH ModPow  The f value is supposed to  be the public part of the other participant  while x is the private part of  this participant  This type has one cryptographic parameter  namely p   so that the shared secret f    mod p can be computed     By using these two types  equation  1  can be rewritten as  DH Key DH Pub y  x    DH Key DH Pub x   y     which is supported by protocol analyzers such as ProVerif     Note that the DH ModPow and DH Pub DH Key representations are  completely equivalent  because Spi2Java allows cryptographic parameters  to be resolved either at compile time  or at run time     The extensible type hierarchy allows new types to be added when the need  arises  For instance  new channel extensions could be defined  in order to provide  access to other communication layers  such as UDP IP  or to other system  provided functions  such as databases    Types are assigned by the Spi2Java refiner using a set of inference rules   that  based upon the use of a term in the spi calculus model  assign it the  correct type  As stated above  it is possible that the type of a term needs  to be manually refined into a more specialized type  However  the Spi2Java  refiner checks that the type hierarchy is not infringed  For instance  if a term  is automatically typed to Channel  it can be manually refined to the Tcp Ip  Channel or the Java Key Store Chan
42. nction on  some data     Cryptographic Hashing represents the result of applying a cryp   tographic hash function  also known as message digest   such as  SHA 256 or MD5  to some data    DH ModPow represents the result of applying exponentiation g  mod  p to its arguments    DH Pub represents a Diffie Hellman public part  obtained by  the modular exponentiation of the argument x  private part   with the parameters g and p    DH Key represents a Diffie Hellman shared secret  obtained by  the modular exponentiation of the arguments x  private part   and y  other party public part  and parameter p     15    Shared Key Ciphered represents the result of a symmetric encryption  performed using a Shared key     Private Key Ciphered represents the result of an asymmetric encryp   tion performed using a Private key     Digital Signature represents a digital signature  obtained from a  Message and a Private Key     Public Key Ciphered represents the result of an asymmetric encryp   tion performed using a Public key     Successor represents the logical successor of some data   Currently only  implemented as successor of an Integer      Pair represents a container of a pair of objects that can be of heteroge   neous types  A tuple of objects is translated  inside the program   into nested Pair objects     It must be pointed out that Shared Key  Private Key and Public Key are  not considered atomic names because they are built using the key construction  operators from a Key Pair or from 
43. nel  but it cannot be typed as Message or  Timestamp    Furthermore  there is a relationship between the type of a term and its  associated low level parameters  On one hand  each type has its own extensible  set of cryptographic and configuration parameters  For instance  the Shared Key  type has the algorithm  strength and provider parameters  which respectively  specify the key cryptographic algorithm  the key strength and the cryptographic  provider that will implement the required cryptographic functions  On the    19       Message    DH Pub  Successor DH ModPow  j  amp       DH Key  Hashing                                                          Public Key Ciphered             Cryptographic Hashing                                                                                                                                     Certificate Be Public Key Private Key Ciphered      Digital Signature  Pair Private Key  Shared Key Shared Key Ciphered  Name  Integer Identifier Timestamp Channel Key Pair Nonce  Integer With Tcp Ip Channe Key Store Channel File Channel Cast Channel  Bounds A                Java Key Store Channel             Figure 3  The currently defined eSpi type hierarchy     other hand  for each type  an extensible set of Java classes can implement the  encoding  decoding functions    In order to store  for each spi calculus term  the assigned type and its low   level implementation details  the Spi2Java refiner uses an XML document  called  eSpi document 
44. nt  incompatible types  One common case is to derive  shared secrets from raw data  In this case  cast channels are still not  needed  The provided    Shared Key    term does the job  enabling to create  shared keys from any other term     Another common case  where cast channels are needed  is when some  non atomic data should be used as cryptographic parameters of other  terms  Suppose a two party protocol  where both client and server derive  a raw shared secret material RAW  Suppose they extract some initial   ization vector from RAW  In spi calculus  this can be modeled with the  H RAW IV MARKER  term  where IV MARKER is a marker that  signals which part of the RAW material to use  Now  H RAW  IV MARKER   will be typed as Hashing  but we would like to use it as the initializa   tion vector of some cryptographic operation  which requires it to be typed  as Identifier  Cast channels help solving this problem  the following  spi calculus snippet shows how to do it     cast H  RAW  IV M ARKER    cast IV   P     That is  one sends the original term to the cast channel  and then reads  another term from it  Semantically  it will be the same term  but two  different types can be assigned to the terms  So  now the IV term can  be typed as Identifier  and used as initialization vector for some cryp   tographic operation  Like the key store channel  a send receive policy is  enforced     Note that the cast channel will keep the encoded  marshaled  version of  the term in memory be
45. nted by the user in order to  perform any action that must be done after a successful end of the protocol  session    It must be also pointed out that  although the Spi2Java code generator  always generates code that can be compiled and executed without any mod   ification  the input parameters of the performHandshake   method must be  manually initialized before the program can be correctly executed  because no  information can be automatically inferred on their contents  The method in   put parameters are all the free variables that are used in the process being  implemented  with the exception of channels  that get configured automati   cally because the eSpi document already contains enough information for their    25    Initiator  client architecture Responder  concurrent server architecture             Accept a client on the responder  channel Listen for user interrupt    Open communication  channel    Run refined Spi Calculus  implementation  performHandshake                 User interrupt  asking to terminate     Run user defined  application    act    Run refined Spi Calculus    implementation  performHandshake       Run user defined  application  act      Go    Figure 4  Flowchart of the initiator and responder architectures     initialization  For this reason  in the sof protocol example  variables A and  KEY STORE GET must be initialized in the sofA process  It is worth noting  that input parameters can be initialized at compile time  or at run time  for  example 
46. ociating stored keys with their iden   tifiers  For the reference example  these two files  namely sof keystore and  sof  keystore data  are provided  which are already filled with the pre shared  3DES key  associated with the    AB    identifier  Unfortunately  the current ver   sion of Spi2Java does not provide any user interface to handle the key store  data files  However  a key store and its related files can be managed program   matically by interacting with channels  as any protocol actor implementation  would do  The program written for the purpose of filling the sof  keystore  and sof  keystore data files is provided with the reference example  under the  java fillKS directory  Please remember that there is no need to run this tool   as its resulting files are already provided  Anyway  for the sake of completeness   to compile the tool  run     javac  cp java fillKS  JARS spiWrapper jar  JARS spiWrapperSR  jar  java fillKS   java java customMarsh    java    To run the tool     java  cp java  JARS spiWrapper  jar  JARS spiWrapperSR  jar  fillKS FillKS8    If    SUCCESS     is printed on stdout  then everything is fine  and the sof   keystore  and sof keystore data files are created in the current directory  Otherwise     FAILURE    is printed  should not happen     When refining term 16  the class implementing the encoding layer was changed  to a non default encoding layer  Please ignore this detail by now  Implementing  a custom encoding layer is explained in section
47. onform to the agreed binary  formats defined for the protocol    In order to enable agile prototyping  a default encoding decoding layer   which uses the Java serialization  is provided  however  in real environments   this default encoding decoding layer normally has to be substituted with a  user given layer  in order to implement the desired protocol encoding scheme    Another task that the spi2Java refiner carries out is to statically assign a  type to each spi calculus term  This is necessary because the spi calculus is an  untyped language  while Java is statically typed  An extensible type hierarchy   reported in figure 3  has been defined for this purpose    Here is a brief description of the meaning of types shown in figure 3  more  detailed information about some specific types is given after this listing     Message is the most generic type  it represents an opaque message     Name is a partially specialized type that represents any atomic spi cal   culus term  i e  a spi calculus name   Subtypes of this type are used  to specialize the meaning of atomic data  Terms belonging to most  of the subtypes of the Name type can be instantiated as fresh data     14    Channel is the abstract representation of generic communication  channels and has some extensions that are worth noting   Tcp Ip Channel provides access to the Tcp Ip communica    tion layers    Key Store Channel provides access to an abstract key store   One of its specialization is the Java Key Store Channe
48. ositions     e  01 02      05  isa shortcut for the left associated nested pairs          o1  02   03       On      e any unary operator can be applied to a sequence of terms  with the  meaning that it is applied to the corresponding nested pair  For ex   ample  H o1 02 03  stands for H  o  02 03    which in turn stands for  H   01  02   03      3 2 Process Syntax    Besides term specification  spi calculus also offers a set of operators to build  behavior expressions which formally specify the behavior of processes    Tab  2 shows the operators available to build behavior expressions  Their  informal meaning is     e c p  P is an output process  ready to output term p on the channel repre   sented by term o when a synchronization occurs  The behavior after the  synchronization is described by behavior expression P        PR  Qas process behavior expressions    a p  P output   a x  P input   P Q parallel composition  Qm  P restriction   IP replication   0 nil   lo is p  P match    o is p   P  else  Q    let  x  y    oin P pair splitting   let  x  y    c in  P  else  Q    case c of 0  P suc zx    Q integer case   case o of  xp in P shared key decryption  case o of  x p in  P  else  Q    case o of   x   p in P private key decryption  case o of   a  p in  P  else  Q    case o of  x  p in P public key decryption  case o of   x  p in  P  else  Q    check o of T with pin P signature check    check o of T with p in  P  else  Q        Table 2  Process Syntax of Spi Calculus    c  x  
49. otocol  execution  modulo replication     In order to analyze a spi calculus model by ProVerif  a syntax conversion  is needed  because proverif uses different syntactic conventions  This operation  can be performed by using the provided Spi2Proverif tool  see section 5 3   Note  that  differently from S  A  ProVerif can handle all the language features admit   ted by Spi2Java and even others  In addition  it accepts unbounded replications   which are useful in the instance process for analyzing the protocol behavior with  an unbounded number of sessions     4 3 Refining the Formal Model  4 3 1 Theory    In order to derive a Java application from the spi calculus source  the spi2Java  refiner tool can be used to fill the low level implementation details that are  abstracted away by the spi calculus language     13    A tool like the spi2Java refiner can automatically infer some information  about the missing details that are not present in the formal high level model   the type of certain data can be automatically inferred by looking at how they  are used  For example  in the output process c M  P  c can be inferred to be  a channel  The implementation details that cannot be automatically inferred  must be manually provided by the user  who can get them from the informal  protocol description    However  an interesting feature of the tool is the possibility to get early  prototyping without any  or very few  manual intervention  just after having  written the formal model  In
50. p  JARS spiWrapper jar  JARS spiWrapperSR jar  java generated fullExample sofA   java java customMarsh   java    Running     java  cp  JARS spiWrapper jar  JARS spiWrapperSR  jar  java generated  java  fullExample sofA sofA_O_Main    And similar can be done for the sofB client    Let us now comment on how the protocol logic expressed in spi calculus  translates into Java code  For example  please look at the generated sofA_O_Protocol  java  file  It is worth noting that the Spi2Java code generator automatically adds com   ments to the code  So  they both improve code readability and make clear the  mapping between each spi calculus statement and its Java implementation  In  particular  it can be noted that each spi calculus statement is mapped on a few  corresponding Java statements  and all the operations on a spi calculus term are  handled by methods of the spiWrapper class implementing the type assigned to  the term    By now  although the used encoding scheme may not be compliant with the  protocol description  the prototype programs are fully implementing the proto   col logic  so they can be used to test the protocol behavior and functionality   This test step is important  because a protocol could have been formally verified  and resulted to be safe  even if it is not functional  and thus useless  For exam   ple  suppose a protocol where all sessions abort at the very beginning  because    28    of a wrong design  Then this protocol is probably satisfying secrecy  and 
51. pos   sibly authentication  requirements  because the intruder cannot get the secret   since no message is ever exchanged  However  such a protocol is useless    Once the protocol functionality has been tested on the prototype applica   tions  the encoding layer can be implemented  in order to obtain fully functional  and interoperable applications     4 4 2 Customizing the Encoding Layer    In order to create the encoding layer  four abstract methods declared in the  spiWrapper classes must be implemented by the programmer for each type of  encoding that is required by the specification  More precisely  the four methods  can be implemented by extending the spiWrapper class representing the type for  which the encoding scheme is going to be written  It is worth noting that this  approach isolates hand written code with respect to automatically generated  code   The four methods that must be implemented are     e _encodePayload     e _serialize      e decodePayload     e deSerialize       Note that _encodePayload   and _serialize   begin with a leading _  because of legacy reasons    The first method is responsible for translating the internal representation of  a term into the payload  It is used when some cryptographic operations  such  as encryption or hasing  must be applied on the term    The second method is used to serialize the term into a message  i e  a byte  stream including payload and any needed headers and trailers  ready to be  sent on a communication channel  T
52. protocol     The reference    sof    protocol has been verified for secrecy and agreement by  using the ProVerif tool  and all related files are under the proverif directory   While usage of the ProVerif tool is outside the scope of this document  the steps  to translate the protocol specification to the ProVerif format and to decorate it  with the security queries are described    The sof protocol can be translated to the ProVerif syntax with the following  command     java  jar  JARS spi2proverif tui jar  i spi sof spi  o proverif sof proverif    Then  the generated sof   proverif file is copied into the sof   queries proverif  file  where the replication operators and the security queries are added    Finally  the ProVerif analyzer is run on the sof queries proverif file    Note that the top level process  i e  the Inst process  has been translated  to ProVerif  Indeed  it is necessary to translate the whole protocol description   and not  for example  single actors  to verify the whole protocol behavior     References     1  M  Abadi and A  D  Gordon     A calculus for cryptographic protocols  The  spi calculus     in ACM Conference on Computer and Communications Secu   rity  1997  pp  36 47      2  B  Blanchet     An efficient cryptographic protocol verifier based on prolog  rules   in Computer Security Foundations Workshop  2001  pp  82 96      3  L  Durante  R  Sisto  and A  Valenzano   Automatic testing equivalence  verification of spi calculus specifications   ACM Tr
53. return a SUCCESS status  In  future  a PUT action may fail  for example if the key already exists and  the NOT OV ERRIDE mode was requested     The JavaDoc documentation of the KeyStoreChannel provides sample  code useful to interact with the key store     In the running example  the sofA and sofB actors interact with the key  store in the way described here  and the key store process models a simple  interaction implementing the described policy     17    Cast Channel Since spi calculus is untyped  there is no concept of type casts   and any term can be used in any place  For example  the following term   Mj xn  that uses an hash as a shared key is a valid spi calculus term   Even the following input process H N  x  P  which uses an hash as a  channel  is a valid spi calculus process  While this is a useful feature of  spi calculus  as it enables one to find type flaw attacks  such terms or  processes are considered non well formed by the Spi2Java refiner  as two  incompatible types should be assigned to the same term  In general  check   ing for well formedness is the intended behavior when generating Java  code  because only objects of a given type offer the appropriate methods   For example  only channels offer the receive   and send O methods used  to implement the spi calculus input output processes  an hashing does not  offer such methods  and should not be used as a channel     However  there are circumstances where it is needed to use the same data  under two differe
54. some key material  e g  a nonce     Some detailed information is given on usage of the following types  Key Store  Channel  Cast Channel  and the DH ModPow  DH Pub and DH Key hashings     Key Store Channel Key store channels can be used to save and restore cryp   tographic keys associated with some alias  In order to interact with the  key store through this channel  a send receive policy is enforced  The user  must begin an operation with a send   method invocation  and end it by  reading its result via a receive   method invocation     In order to get a persistent behavior  closing a key store after it has been  used is mandatory  otherwise all newly saved keys will be lost  and deleted  keys will not be actually deleted in the backing files     In general  the argument to the send O call will have the form  OP        where OP is an operand taken from the KeyStoreOperand enumeration     When the operand is CHECK  then the argument of the send    method  must have the form  CHECK  LIST   where LIST is defined as LIST     ID  LIST  ID  and where ID is an object of the Identifier class  That is   LIST is a left associated nested pair of Identifiers   The resulting alias  used in the key store will be the concatenation of all provided Identifiers   The CH ECK operand asks the key store to check whether any key is  associated with the alias LIST  The outcome will be provided by the key  store when the receive   method will be invoked  more on this later      With the CH EC K  IP
55. the implementation of protocols  that use the cryptographic algorithms in the way they have been negotiated at  run time by a cryptographic agreement pre protocol handshake  In such case   the Spi2Java refiner enables specifying that the value of a certain spi calculus  term has to be used as a parameter for a cryptographic operation    With respect to the data flow diagram in figure 2  the Spi2Java refiner can be  used in order to obtain the initial eSpi document coupled with the spi calculus  protocol that is going to be implemented    In particular  the eSpi document for the sofA process can be obtained in two  steps     Step 1 Only the spi calculus model  and implicitly the eSpi specification  are  given as input to the spi2Java refiner  The tool generates an eSpi doc   ument using all the information that can be automatically inferred from  the given model  In particular  types are assigned to terms based on their  use  while cryptographic and configuration parameters and the encoding  layer are set to their defaults     Step 2 1  The generated eSpi document is manually refined  adding the  needed information that could not be automatically inferred     2  The spi2Java refiner runs again  taking the manually modified eSpi  document and the spi calculus model  and implicitly the eSpi speci   fication  as input  The newly generated eSpi document contains all  the information that could be automatically inferred from the model  and from the manually provided information    
56. tors to get the complete behavior    Note that each agent runs in parallel with its key store  and each agent key  Store pair has its own dedicated channel  Moreover  if present  replication would  be put outside the agent key store composition  and not  for example  close to  each agent and to each key store  This model ensures that in each protocol  session  each agent can only communicate with its own key store  and not with  key stores of other sessions    Also note how spi calculus enables the precise specification of all the opera   tions performed by the protocol participants  including their interactions with  their local key stores  though at an abstract level  no information about message  encodings or encryption algorithms is specified     Of course  this specification would not be complete if cryptographic details  were not given  Although they are not needed for the spi calculus specification   we provide them here for completeness  They will be referenced later when  implementing the protocol actors    We prescribe that the pre shared cryptography must use the 3DES algo   rithm  with the standard key strength of 192 bits  while the session key must  be a DES key  with the standard key strength of 56 bits  All nonces must be 8  bytes long     4 Spi2Java Development Methodology and Tool  Support    This section describes the Spi2Java approach to model based development of  cryptographic protocols  The approach is illustrated by the data flow diagram  in figure 2  
57. tween the send receive operations  In particular  it  is important that both the original term and the cast term agree on the  marshaled representation of data     As a matter of fact  the default encoding layer using serialization cannot  be used with the cast channel  because the marshaled version of the object  stores its type  making it impossible to deserialize the object under another  type  In order to use cast channels  a custom encoding layer must be  provided  which is the code actually implementing the cast logic by the  way     18    Finally note that cast channels can be used to rename terms too  if the  original and final types are the same   In this case  the default encoding  layer works too     DH types The DH ModPow is a special hash that accepts one argument of  the form   g 2  p   where each of g x and p are of type Integer or DH  ModPow  or any of their subtypes   The result of the hash is the modular  exponentiation g    mod p  Along with the equation    DH ModPow DH ModPow g y p  x p    DH ModPow DH ModPow g  x  p   y  p    1    this type can be used to implement Diffie Hellman key agreement    Unfortunately  some protocol analyzers such as ProVerif cannot handle   equation  1   For this reason  the two DH Pub and DH Key types are   provided  which work around the issue  The DH Pub accepts one argument   of the form x  where x is either an Integer or a DH ModPow  This type   has two cryptographic parameters  namely g and p  so that the g    mod p   resu
58. vector has been prescribed  we can use the constant default one     e term 16  the agreed session key is a protocol return value  let this value be  available to the caller of this protocol run  by setting the return attribute  to true  In an eSpi document  the return attribute can be set in as many  terms as needed  the Spi2Java code generator will take care of making  all protocol return parameters available to the Java code that is executed  after a successful protocol session     An important difference between the sofA and sofB roles concerns the com   munication channel  sofA must behave as a responder  or server   while sofB  must behave as an initiator  or client   Therefore  in the sofA case  the server  attribute is set for the term 1  cAB_0  to specify that the process owning this  term will act as a responder on the cAB 0 channel  using the responder channel  implementation provided in the TcpIpServer Java class   so the Spi2Java code  generator will take this into account  Since no term in the sofB process has been  manually given a server attribute  it will be implemented as an initiator  Only  when a channel is set as    server     it is possible to specify the keyword    any    for  the host parameter  letting the server listen on any available network interface   In each eSpi document  at most one channel can be set as the server channel    When casting term 2 to be a key store  the user must specify two files that  will contain persistent key store data  ass
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
ÿþM icrosoft W ord  NORMAL con PARK 230V  bricosergio - guida all`acquisto di macchine per il legno  www.fisher-price.com  Lexmark 30G2127 Printer User Manual  Nombre d`impulsions pour GEL 293  SERVICE MANUAL  Historique des pièce à durée de vie limitée  Samsung SAMSUNG PL170 Uporabniški priročnik  Conclusions du commissaire enquêteur - format : PDF    Copyright © All rights reserved. 
   Failed to retrieve file