Top Banner
Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr
40

Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Jan 02, 2016

Download

Documents

Jade Harrison
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Formal specification of Gemplus’ electronic purse

case study

Néstor Cataño & Marieke HuismanINRIA Sophia-Antipolis

{ncatano, mhuisman}@sophia.inria.fr

Page 2: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

The electronic purse

• Developed by trainee at Gemplus

• Goal: develop more complex application, using object-oriented features

• Revision by members research lab and new trainee

• Result: not completely finished , not fully representative

Page 3: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Software documentation

• Management & history of the development

• Clear, concise and unambiguous

• Correspondance with implementation

Page 4: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Some Fragments from LoyaltiesTable

// huge modifications on 31/07/2000

// now, we handle AID objects instead of byte arrays that represents them.

// that way, we gain some space, and code is clearer.

/* the purse stores in this object the loyalties that are allowed to communicate with it*/

class LoyaltiesTable {

//////////////// ATTRIBUTES ////////////////

// temporarily modified by RM on 26/07/2000 for memory reason

// private final static byte NB_MAX = (byte)20;

private final static byte NB_MAX = (byte)3;…/* suppress all the entries of the loyalty specified by aid */void delLoyalty(AID aid) {…}

…/* suppress the notification of the loyalty specified by aid*/void removeNotification(AID aid) {…}

Page 5: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Software documentation

• Management & history of the development

• Clear, concise and unambiguous

• Correspondance with implementation• Formal specification• And verification

Difficult and labour-intensive

Page 6: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

This talk

• Different approaches to formal specification and verification

• Static checking (lightweight formal methods)

• The electronic purse case study

• Static checking of the electronic purse: class invariants

Page 7: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Specification language

• Close to programming language

• Expressions from programming language

Eiffel, JML, ESC/Java, Jass

with specification-specific constructs (forall, exists, implication etc.)

Page 8: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Checking techniques

• Run-time checking

• Full verification

(syntactic or

semantic)

(Eiffel, JML, Jass)

(Jive)

(LOOP)

• Static checking (ESC/Java)

Page 9: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Static checking with ESC/Java

• Compaq Research (Leino et al.)

• Focus on finding common program errors (nullpointers, array index out of bounds)

• Proof obligations to dedicated theorem prover (assume - assert pairs)

• Issues warnings

Page 10: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Static checking with ESC/Java

ESC/Java =

Compromise

between

soundness,

completeness,

and

efficiency

Page 11: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

ESC/Java pragmas

• Preconditions (requires)• Postconditions (ensures)• Exceptional postconditions (exsures)• Modifies clause• Class invariants• Implication, quantification• Value expression in pre-state (\old(E))• Result value of method (\result)

Page 12: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

The electronic purse

• Supports debit, credit and currency change operations

• Interaction with loyalty, card issuer and terminal

• Packages: utils, pacapinterfaces and purse

Page 13: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

The purse package

• PurseApplet: installation, (de)selection, communication with terminal

• Purse:

– implements basic functionalities

– keeps track of balance, transactions, currency changes, loyalties

Page 14: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

The purse package

• AccessControl: restricted set of users for certain operations

• Currencies

• Cryptographic concepts

Page 15: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• For each method: requires, ensures, exsures, modifies

• First basic classes (utils), then more application-specific

• Appropriate class invariants, e.g. restricting domain of instance variables

Page 16: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• Discrepancies between documentation and implementation

Page 17: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• Discrepancies between documentation and implementation

Page 18: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• Discrepancies between documentation and implementation

• Usage of existing API specification

Page 19: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• Discrepancies between documentation and implementation

• Usage of existing API specification

• .spec files for e.g. visa and crypto classes

Page 20: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

• Discrepancies between documentation and implementation

• Usage of existing API specification

• .spec files for e.g. visa and crypto classes

• Avoid warnings as much as possible, but still full specification

Page 21: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Class invariants

Restrict state space of a class– reference never null pointer

//@ invariant purse != null;

– variable within a certain range/*@ invariant decPart >= 0 && decPart < PRECISION; invariant intPart >= 0 &&

intPart < MAX_DECIMAL_NUMBER; */

Easy to write, easy to check

Page 22: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Enumeration types/* the transaction status*/

public static final byte INDETERMINE = (byte)0;

. . .

/* the transaction status*/

public static final byte TYPE_CREDIT = (byte)50;

/* the transaction status*/

public static final byte TYPE_DEBIT = (byte)51;

. . .

/* the transaction type: debit or credit*/

private byte type;

. . .

/* set all this transaction attributes to 0*/ void reset() {

isValid = false;

number = (short)0;

type = INDETERMINE;

typeProduit = (short)0;

. . .

}

Page 23: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

/* the transaction type: debit or credit*/

private byte type;

. . .

/* set all this transaction attributes to 0*/

void reset() {

isValid = false;

number = (short)0;

type = INDETERMINE;

typeProduit = (short)0;

. . .

}

Page 24: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

public AccessCondition() {super();// commented by Rodolphe Muller on 16/06/2000// strange to set the condition here to 0 and to// FREE above setCondition((byte)0); }

Enumeration types

/*@ invariant condition == FREE || condition == LOCKED || condition == SECRET_CODE || condition == SECURE_MESSAGING ||

condition == (SECRET_CODE | SECURE_MESSAGING)

*/public AccessCondition() {super();// commented by Rodolphe Muller on 16/06/2000// strange to set the condition here to 0 and to// FREE above setCondition((byte)0); }

public AccessCondition() {super();// commented by Rodolphe Muller on 16/06/2000// strange to set the condition here to 0 and to// FREE above setCondition((byte)0); } NB. FREE == (byte)1;

Page 25: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

switch(condition) {

case FREE: ...

case SECRET_CODE: ...

case SECURE_MESSAGING: ...

case SECRET_CODE | SECURE_MESSAGING: ...

case LOCKED: ...

default:

//@ assert false;

t = AccessConditionException.C_C_INVALIDE; AccessConditionException.throwIt(t);

}

Avoiding dead code

switch(condition) {

case FREE: ...

case SECRET_CODE: ...

case SECURE_MESSAGING: ...

case SECRET_CODE | SECURE_MESSAGING: ...

case LOCKED: ...

default:

t = AccessConditionException.C_C_INVALIDE; AccessConditionException.throwIt(t);

}

Page 26: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Other problems

• Incorrect coding• Forgetting variable modifiers (final)

• Underspecified documentation Is MAX_DECIMAL_NUMBER.999 legal?And how do you round it?

• Superfluous methods (isNegatif())

• Complex and undocumented datastructures (with incorrect corrections)

Page 27: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Complete specification

Available from

http://www-sop.inria.fr/lemme/verificard/electronic_purse

Page 28: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Conclusions

• Using lightweight formal methods, applications can be improved

• Class invariants make implicit assumptions explicit and check them

• Case study convinced Gemplus to look at JML and ESC/Java

• ESC/Java useful, but possibilities for improvement

Page 29: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Complete specification

Available from

http://www-sop.inria.fr/lemme/verificard/electronic_purse

Page 30: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.
Page 31: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

/*@ modifies M;

requires true;

ensures Q;

exsures (E) !P;

*/

void m () {

. . .

}

Page 32: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Writing the specification

Offensive

/*@ modifies M;

requires P;

ensures Q;

exsures (E) false;

*/

void m () {

. . .

}

Defensive

/*@ modifies M;

requires true;

ensures Q;

exsures (E) !P;

*/

void m () {

. . .

}

Page 33: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Experiences with ESC/Java

• Pleasant tool, easy to work with

• Specifications written by non-experienced user

• Two/three months work all together

Page 34: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Suggestions for ESC/Javaspecification language

• Richer specification languagemodifies \nothing, modifies \field_of(E)

• Extra quantifiers

• Run-time exceptions without explicit throws clause

• Use of pure methods in specifications

Page 35: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

modifies sessionNumber, date.jour, date.mois, date.annee, heure.heure, heure.minute; modifies ancienneDevise, nouvelleDevise, isValid, status;modifies id[*], terminalTC[*], terminalSN[*] ; requires es != null ; requires es.id != terminalTC & es.id != terminalSN & es.terminalTC != terminalSN; ensures sessionNumber == es.sessionNumber ;ensures ancienneDevise == es.ancienneDevise ; ensures nouvelleDevise == es.nouvelleDevise ; ensures isValid == es.isValid ; ensures status == es.status ; ensures (\forall int i;0 <= i & i < ID_LENGTH ==> es.id[i] == id[i]); ensures (\forall int i;0 <= i & i < TTC_LENGTH ==>

es.terminalTC[i] == terminalTC[i]);ensures (\forall int i;0 <= i & i < TSN_LENGTH ==>

es.terminalSN[i] == terminalSN[i]);exsures (TransactionException e)

e._reason == TransactionException.BUFFER_FULL && JCSystem._transactionDepth == 1; exsures (NullPointerException) false; exsures (ArrayIndexOutOfBoundsException) false;

modifies sessionNumber, date.jour, date.mois, date.annee, heure.heure, heure.minute; modifies ancienneDevise, nouvelleDevise, isValid, status;modifies id[*], terminalTC[*], terminalSN[*] ; requires es != null ; requires es.id != terminalTC & es.id != terminalSN & es.terminalTC != terminalSN; ensures sessionNumber == es.sessionNumber ;ensures ancienneDevise == es.ancienneDevise ; ensures nouvelleDevise == es.nouvelleDevise ; ensures isValid == es.isValid ; ensures status == es.status ; ensures (\forall int i;0 <= i & i < ID_LENGTH ==> es.id[i] == id[i]); ensures (\forall int i;0 <= i & i < TTC_LENGTH ==>

es.terminalTC[i] == terminalTC[i]);ensures (\forall int i;0 <= i & i < TSN_LENGTH ==>

es.terminalSN[i] == terminalSN[i]);exsures (TransactionException e) e._reason == TransactionException.BUFFER_FULL && JCSystem._transactionDepth == 1; exsures (NullPointerException) false; exsures (ArrayIndexOutOfBoundsException) false;

Example specification

Page 36: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

And as we would like it to be...

modifies sessionNumber, date.jour, date.mois, date.annee, heure.heure, heure.minute; modifies ancienneDevise, nouvelleDevise, isValid,

status;modifies id[*], terminalTC[*], terminalSN[*] ; requires es != null ; requires es.id != terminalTC & es.id != terminalSN &

es.terminalTC != terminalSN; ensures this.equal(es);exsures (TransactionException e)

e._reason == TransactionException.BUFFER_FULL && JCSystem._transactionDepth == 1;

exsures (NullPointerException) false;

exsures (ArrayIndexOutOfBoundsException) false;

Page 37: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Verification of modifies clauses

/*@ modifies x; ensures x == 3; */ void m() { x = 3; n (); }

void n() { x = 4; }

Missing modifies clause

Specification accepted

NO

Page 38: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Modifies clauses

• Implementation of modifiable checker• Extension of JML• Static checking technique, based on

syntax• Neither sound, nor complete• Fully described in separate paper

(ask Néstor or me)

Page 39: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.

Future work

• Develop application with annotations from scratch

• Extension to multi-threading• Automated verification technique for

termination of loops• Cryptographic aspects of the

specification

Page 40: Formal specification of Gemplus’ electronic purse case study Néstor Cataño & Marieke Huisman INRIA Sophia-Antipolis {ncatano, mhuisman}@sophia.inria.fr.