a java reference model of transacted memory for smart cards · a java reference model of transacted...

52
A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of Nijmegen Joint work with Pieter Hartel University of Twente Eduard de Jong Sun Microsystems Erik Poll – p.1/23

Upload: phungnguyet

Post on 02-Jan-2019

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

A Java Reference Model ofTransacted Memory for Smart Cards

Erik Poll University of Nijmegen

Joint work with

Pieter Hartel University of Twente

Eduard de Jong Sun Microsystems

Erik Poll – p.1/23

Page 2: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Overview

• Case study in specifying and testing (i.e. debugging)a piece of smart card OS software that providestransactions

• using the formal specification language JML

• using the runtime assertion checking tool for JML

Erik Poll – p.2/23

Page 3: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transactions

• Possible power loss due to card tear at any moment

• Therefore: smartcard OS supports transactions,atomic writes consisting of several EEPROM writes

• On power-up: OS cleans up any unfinished transaction

• This clean-up can again be interrupted by a card tear. . .

Erik Poll – p.3/23

Page 4: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transactions

• Possible power loss due to card tear at any moment

• Therefore: smartcard OS supports transactions,atomic writes consisting of several EEPROM writes

• On power-up: OS cleans up any unfinished transaction

• This clean-up can again be interrupted by a card tear. . .

Erik Poll – p.3/23

Page 5: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transactions

• Possible power loss due to card tear at any moment

• Therefore: smartcard OS supports transactions,atomic writes consisting of several EEPROM writes

• On power-up: OS cleans up any unfinished transaction

• This clean-up can again be interrupted by a card tear. . .

Erik Poll – p.3/23

Page 6: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transactions

• Possible power loss due to card tear at any moment

• Therefore: smartcard OS supports transactions,atomic writes consisting of several EEPROM writes

• On power-up: OS cleans up any unfinished transaction

• This clean-up can again be interrupted by a card tear. . .

Erik Poll – p.3/23

Page 7: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

Implementation idea by Bos & de Jong:

Tag NewTag(length)

InfoSeq Read(tag)

void Write(tag, infoSeq)

void Commit(tag)

void Tidy()

NB not as implemented in the current JavaCard API.

Provides multiple, concurrent, transactions and logging.

Erik Poll – p.4/23

Page 8: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

Erik Poll – p.5/23

Page 9: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | | | |

NewTag(4) returns tag1 with length 4

Erik Poll – p.5/23

Page 10: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 0 | 0 | 0 | 0

Write(tag1,[0,0,0,0]) possibly in several EEPROMwrites

Erik Poll – p.5/23

Page 11: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 1 | 1 | 1

Write(tag1,[1,1,1,1])

Erik Poll – p.5/23

Page 12: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 3 | 3 | 3 | 3

Write(tag1,[3,3,3,3])

Erik Poll – p.5/23

Page 13: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 5 | 5 | 5 | 5

Write(tag1,[5,5,5,5])

Erik Poll – p.5/23

Page 14: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7

Write(tag1,[1,3,5,7])

Erik Poll – p.5/23

Page 15: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7

Commit(tag1)

Erik Poll – p.5/23

Page 16: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7

tag1 | . . . | 2 | 4 | 2 | 4

Write(tag1,[2,4,2,4]), undone in case of card tear

Erik Poll – p.5/23

Page 17: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7

tag1 | . . . | 4 | 6 | 4 | 2

Write(tag1,[4,6,4,2])

Erik Poll – p.5/23

Page 18: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7

tag1 | . . . | 2 | 4 | 6 | 8

Write(tag1,[2,4,6,8])

Erik Poll – p.5/23

Page 19: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7==============

tag1 | . . . | 2 | 4 | 6 | 8

Commit(tag1) , removing previous committed generation

Erik Poll – p.5/23

Page 20: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7==============

tag1 | . . . | 2 | 4 | 6 | 8

tag1 | . . . | 9 | 7 | 5 | 3

Write(tag1,[9,7,5,3]), undone in case of card tear

Erik Poll – p.5/23

Page 21: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7==============

tag1 | . . . | 2 | 4 | 6 | 8

tag1 | . . . | 3 | 5 | 7 | 9

Write(tag1,[3,5,7,9])

Erik Poll – p.5/23

Page 22: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | . . . | 1 | 3 | 5 | 7==============

tag1 | . . . | 2 | 4 | 6 | 8==============

tag1 | . . . | 3 | 5 | 7 | 9

Commit(tag1) , removing previous committed generation

Erik Poll – p.5/23

Page 23: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Transacted Memory

EEPROM

tag1 | 0. . . | 1 | 3 | 5 | 7

tag1 | 1 . . . | 2 | 4 | 6 | 8

tag1 | 2 . . . | 3 | 5 | 7 | 9

Logging for free, by numbering committed generations

Erik Poll – p.5/23

Page 24: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Earlier work on Transacted Memory

Formal methods – Z and Promela – used for specification &implementation [Butler, Hartel, de Jong, Longley]:

abstractZ spec �� �� �� +3

concreteZ spec

� �� ��� �� � +3C/Promela

implementation

Model checked in SPIN.

But:

big gap between Z specs and C implementation

no formal relation between them

Erik Poll – p.6/23

Page 25: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Earlier work on Transacted Memory

Formal methods – Z and Promela – used for specification &implementation [Butler, Hartel, de Jong, Longley]:

abstractZ spec �� �� �� +3

concreteZ spec

� �� ��� �� � +3C/Promela

implementation

Model checked in SPIN.

But:

big gap between Z specs and C implementation

no formal relation between them

Erik Poll – p.6/23

Page 26: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Idea behind this paper

The idea was to

• translate C implementation to Java

• translate Z specs to JML

so that

• spec and code are in comparable languages,

• tools can be used to check implementation againstspec,

• we could ultimately prove that implementation iscorrect.

Erik Poll – p.7/23

Page 27: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Idea behind this paper

The idea was to

• translate C implementation to Java

• translate Z specs to JML

so that

• spec and code are in comparable languages,

• tools can be used to check implementation againstspec,

• we could ultimately prove that implementation iscorrect.

Erik Poll – p.7/23

Page 28: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Translating C implementationto Java

Erik Poll – p.8/23

Page 29: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Translating C implementation to Java

Done by hand - doable for a program of this size.

Only real differences between implementations:

• more type-safety in the Java implementation; e.g. for

#define Gen byte /* 0 .. maxgen */

we introduce a Java class Gen.

• exceptions used in Java to model card tears

Erik Poll – p.9/23

Page 30: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

modeling card tears in Java

A card tear is a form of abrupt control flow:

• card tear is like an exception

• clean up after power-on is like the exception handler

• card tear is uncatchable exception, caught only in themain repetition of the OS

A card tear can be faithfully modelled in Java by anexception, that may be thrown just before or after everyEEPROM write.

Erik Poll – p.10/23

Page 31: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Java implementation

public void Write (Tag t, InfoSeq is)

throws CardTearException

public void Commit (Tag t)

throws CardTearException

...

When testing, we randomly throw CardTearException’sto simulate card tears.

Erik Poll – p.11/23

Page 32: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Specifying the Javaimplementation using JML

Erik Poll – p.12/23

Page 33: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Java Modeling Language JML

Formal specification language tailored to Java

JML can be used to annotate Java programs with

• pre- and postconditions

• invariants

• . . .

Similar to Eiffel (‘Design by Contract’) but more powerful.

Several tools available, incl. runtime assertion checker byGary Leavens et al (from www.jmlspecs.org)

Erik Poll – p.13/23

Page 34: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Write

public void Write (Tag t, InfoSeq is)

throws CardTearException

/*@ requires inUse(t);

@ ensures

@ Read(t).equals(is)@*/

This gives a pre- and postcondition for Write.

Erik Poll – p.14/23

Page 35: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Commit (1)

public void Commit (Tag t)

throws CardTearException

/*@ requires inUse(t);

@ ensures

@ Read(t).equals(\old(Read(t)))@*/

Here \old is used to refer to the value that Read(t) had inthe pre-state.

Of course, this spec is far from complete . . .

Erik Poll – p.15/23

Page 36: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Commit (2)

public void Commit (Tag t)

throws CardTearException

/*@ requires inUse(t);

@ ensures

@ Read(t).equals(\old(Read(t)))

@ && ReadCommitted(t).equals(\old(Read(t)));@*/

where ReadCommitted(t) returns most recent committedgeneration for t.

This spec is still not complete: what if a card tear happensduring Commit . . . ?

Erik Poll – p.16/23

Page 37: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Commit (3)

public void Commit (Tag t)

throws CardTearException

/*@ requires inUse(t);

@ ensures

@ Read(t).equals(\old(Read(t)))

@ && ReadCommitted(t).equals(\old(Read(t)));

@ signals (CardTearException)

@ ReadCommitted(t).equals(\old(ReadCommitted(t)))

@ || ReadCommitted(t).equals(\old(Read(t)));@*/

Exceptional postcondition expresses atomicity of Commit

Erik Poll – p.17/23

Page 38: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Tidy (1)

public void Tidy() throws CardTearException

/*@ ensures (\forall Tag t; 0 <= t && t < MAXTAG;

@ Read(t).equals(

@ \old(CommittedRead(t))));@*/

Postcondition says that after Tidy-ing all tags are restoredto their old committed values.

Here \forall is used to quantify over all tags.

Erik Poll – p.18/23

Page 39: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

JML spec for Tidy (2)

public void Tidy() throws CardTearException

/*@ ensures (\forall Tag t; 0 <= t && t < MAXTAG;

@ Read(t).equals(

@ \old(CommittedRead(t))));

@ signals (CardTearException)

@ (\forall Tag t; 0 <= t && t < MAXTAG;

@ CommittedRead(t).equals(

@ \old(CommittedRead(t))));@*/

Exceptional postcondition says that if Tidy is interruptednone of the committed values change.

Erik Poll – p.19/23

Page 40: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Runtime assertion checking

We have translated

• C implementation to Java

• (parts of) the Z spec to JML

The runtime assertion checker can now be used to test theJava implementation against the JML specs.

The runtime assertion checker checks pre-, post-, andexceptional post-conditions, including uses of \old and\forall, if the domain of quantification is finite.

Erik Poll – p.20/23

Page 41: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Runtime assertion checking

We have translated

• C implementation to Java

• (parts of) the Z spec to JML

The runtime assertion checker can now be used to test theJava implementation against the JML specs.

The runtime assertion checker checks pre-, post-, andexceptional post-conditions, including uses of \old and\forall, if the domain of quantification is finite.

Erik Poll – p.20/23

Page 42: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 43: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 44: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 45: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 46: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 47: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Results

Bugs found:

• one typo - giving ‘version number’ instead of ‘generationnumber’Found during typechecking Java code

• one serious error - card tear at certain point is fatalFound using runtime assertion testingRepairing this bug was non-trivial!

Improvements made to code:

• throwing an exception when no unused EEPROM isavailable

• throwing an exception when no fresh tags are available

Erik Poll – p.21/23

Page 48: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Future/Ongoing work

• VHDL implementation

• fine-tuning the implementation: storing some data inRAM rather than EEPROM

• more detailed specs: translating the completefunctional specification from Z to JML

• going beyond testing:verification using theorem prover PVS & LOOP tool

Erik Poll – p.22/23

Page 49: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Conclusions

Modeling of card tears as Java exceptions allows

• realistic testing

• precise specification in JML

Benefit of formal JML specs (& runtime assertion checking)

• detailed & precise interface spec

• reduced effort for writing test code

• improved feedback when testing

JML-annotated Java code is a very accessible formal spec;spec and code together in same file, in similar languages

Erik Poll – p.23/23

Page 50: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Conclusions

Modeling of card tears as Java exceptions allows

• realistic testing

• precise specification in JML

Benefit of formal JML specs (& runtime assertion checking)

• detailed & precise interface spec

• reduced effort for writing test code

• improved feedback when testing

JML-annotated Java code is a very accessible formal spec;spec and code together in same file, in similar languages

Erik Poll – p.23/23

Page 51: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Conclusions

Modeling of card tears as Java exceptions allows

• realistic testing

• precise specification in JML

Benefit of formal JML specs (& runtime assertion checking)

• detailed & precise interface spec

• reduced effort for writing test code

• improved feedback when testing

JML-annotated Java code is a very accessible formal spec;spec and code together in same file, in similar languages

Erik Poll – p.23/23

Page 52: A Java Reference Model of Transacted Memory for Smart Cards · A Java Reference Model of Transacted Memory for Smart Cards Erik Poll University of ... Overview Case study in specifying

Conclusions

Modeling of card tears as Java exceptions allows

• realistic testing

• precise specification in JML

Benefit of formal JML specs (& runtime assertion checking)

• detailed & precise interface spec

• reduced effort for writing test code

• improved feedback when testing

JML-annotated Java code is a very accessible formal spec;spec and code together in same file, in similar languages

Erik Poll – p.23/23