• Aucun résultat trouvé

Information Flow Inference for ML

N/A
N/A
Protected

Academic year: 2022

Partager "Information Flow Inference for ML"

Copied!
23
0
0

Texte intégral

(1)

Information Flow Inference for ML

POPL ’02

Fran¸cois Pottier and Vincent Simonet INRIA Rocquencourt – Projet Cristal

[email protected] [email protected] http://cristal.inria.fr/~fpottier/ http://cristal.inria.fr/~simonet/

(2)

Information flow analysis

account number

%%L

LL LL LL LL LL LL LL LL

L bank

applet

<<

yy yy yy yy yy y

""

EE EE EE EE EE E

L ≤ H

order

99r

rr rr rr rr rr rr rr rr r

vendor

accountH × orderL → bankH × vendorL

(∀αβγδ) [α t β ≤ γ, β ≤ δ] accountα × orderβ → bankγ × vendorδ

(3)

Information flow analysis

Some existing systems (for sequential languages)

Volpano Smith (1997)

A simple procedural language

Heintze Riecke Abadi Banerjee SLam Calculus (1998)

Dependency Core Calculus (1999) Pottier Conchon (2000)

λ-calculus with polymorphic let

Heintze Riecke (1998) Imperative SLam

Myers (1999)

JFlow / JIF (based on Java)

Correctness formally proved but not realistic programming

languages

Realistic programming languages but no formal proof (or statement)

of correctness

(4)

The ML language

Call-by-value λ-calculus with let-polymorphism

x k λx.e

e1e2 let x = e1 in e2

with references

ref e e1 := e2 !e

and exceptions

raise ε e e1 handle ε x e2 e1 handle-all e2 e1 finally e2

(5)

Information flow examples

Direct flow

x := not y

x := (if y then false else true)

Indirect flow

if y then x := false else x := true x := true; if y then x := false else ()

(6)

Information flow examples

Program counter

Assume y represents “secret” data (H).

if y then x := false

| {z }

pc=H

else x := true

| {z }

pc=H

x := true

| {z }

pc=L

; if y then x := false

| {z }

pc=H

else () let f = λb.(x := b) in f true

| {z }

pc=L

; if y then f false

| {z }

pc=H

else ()

Following Denning (1977), a level pc is associated to each point of the program. It tells how much information the expression may acquire by gaining control; it is a lower bound on the level of the expression’s effects.

(7)

Information flow examples

Program counter with exception handlers

Assume y represents “secret” data (H).

x := true; (if y then raise A

| {z }

pc=H

) handle A x := false

| {z }

pc=H

x := false; (if y then raise A

| {z }

pc=H

); x := true

| {z }

pc=H

handle A ()

Another example with two distinct exception names:

(if !x then raise A

| {z }

pc=L

); (if y then raise B

| {z }

pc=H

) handle A x := false

| {z }

pc=L

(8)

The type algebra

The information levels `,pc belong to the lattice L. Exceptions are described by rows of alternatives:

a ::= Abs | Pre pc r ::= {ε 7→ a}ε∈E

Types are annotated with levels and rows :

t ::= int` | unit | t × t | (t −−−→pc [r] t)` | t ref`

Typing judgements carry two extra annotations:

pc,Γ ` e : t [r]

(9)

The type algebra

Constraints

Subtyping constraints t1 ≤ t2

The subtyping relation extends the order on information levels. E.g.:

int`1 ≤ int`2def `1 ≤ `2 t1 ref`1 ≤ t2 ref`2def t1 = t2 and `1 ≤ `2 t1 × t01 ≤ t2 × t02def t1 ≤ t2 and t01 ≤ t02

“Guard” constraints ` C t

Guard constraints allow marking a type with an information level:

pc C int`def pc ≤ ` pc C t ref`def pc ≤ ` pc C t × t0def pc C t ∧ pc C t0

(10)

Non-interference

Let us consider an expression e of type intL with a “hole” x marked H: (x 7→ t) ` e : intL H C t

Non-interference If

` v1 : t

` v2 : t and

e[x ⇐ v1] → v10

e[x ⇐ v2] → v20 then v10 = v20

The result of e’s evaluation does not depend on the input value inserted in the hole.

(11)

Non-interference proof

1. Define a particular extension of the language allowing to reason about the common points and the differences of two programs.

2. Prove that the type system for the extended language satisfies subject reduction.

3. Show that non-interference for the initial language is a consequence of subject reduction.

(12)

Non-interference proof

ML with sharing: ML

2

e ::= . . . | he | ei

ML2 allows to reason about two expressions and to prove that they share some sub-terms throughout reduction.

if true then 0 else 1

YY YY YY YY YY YY YY YY YY YY YY YY YY

YY if false then 0 else 1

eeeeeeeeeeeeeeeeeeeeeeeeeeee

J·|·K

if htrue | falsei then 0 else 1

b·c1

bb

b·c2

<<

(13)

Non-interference proof

Reducing ML

2

The reduction rules for ML2 are derived from those of ML. When h· | ·i constructs block reduction, they have to be lifted.

(λx.e)v → e[x ⇐ v] (β)

hv1 | v2iv → hv1 bvc1 | v2 bvc2i (lift-app)

Examples

hλx.x | λx.x + 1i3 → h(λx.x)3 | (λx.x + 1)3i

→ h3 | (λx.x + 1) 3i → h3 | 4i hλx.x | λx.x + 1ih3 | 2i → h(λx.x)3 | (λx.x + 1)2i

(14)

Non-interference proof

Typing ML

2

Bracket

Γ ` v1 : t Γ ` v2 : t H C t Γ ` hv1 | v2i : t

For instance:

• A value of type intH may be an integer k or a bracket of integers hk1 | k2i.

• A value of type intL must be an integer k.

(15)

Non-interference proof

Sketch of the proof

ML ML2

(x : H) ` e : intL e[x ← v1] → v10

e[x ← v2] → v20 Completeness of ML2 semantics

Bracket

//

Non-interference

` e[x ⇐ hv1 | v2i] : intL e[x ⇐ hv1 | v2i] → v0

Subject reduction

` v0 : intL

Bracket

v10 = v20 bv0c1 = bv0c2

Correctness of

oo

(16)

Non-interference proof

Some techniques

Our proof combines several orthogonal techniques:

• All the semantics are untyped. Therefore the bisimulation proof between ML and ML2 is also untyped.

• Polymorphism is handled thanks to a semi-syntactic approach. Then it has little impact on the proof.

• We introduce a segregation between expressions and values. It enables a lighter formulation of the type system (and the proofs). It also allows to remain independent of the evaluation strategy.

• The invariant of the proof is directly encoded within the typing rules.

(17)

Noticeable features

Our type system has simultaneously:

• Subtyping: gives a directed view of the program’s information flow graph.

• Polymorphism: allows the reuse of code for manipulating data of different security levels.

• Type inference: the code does not need to be annotated. The information flow policy may be specified in module interfaces.

One special form of constraints may be added to deal with built-in polymorphic primitives (structural comparisons, hashing, marshaling...)

(18)

Ongoing work

We are currently implementing this type system as an extension of the Objective Caml compiler.

• This project relies on developing an efficient constraint solver for structural atomic subtyping.

• It also requires some work on language design, in order to obtain a realistic and efficient programming system.

• We intend to assess its usability through a number of case studies.

(19)

A concrete example

type (’a, ’b) list = []

| (::) of ’a * (’a, ’b) list level ’b

type (’a, ’b, ’c) queue = { mutable in: (’a, ’b) list;

mutable out: (’a, ’b) list }

level ’c

(20)

A concrete example

Manipulating lists

let rec length = function [] -> 0

| _ :: l -> 1 + length l val length : ∀[].αlistβ −→ intβ

let rec iter f = function [] -> ()

| x :: l -> f x; iter f l

val iter : ∀[tδ ≤ γ].(α −−−→ ∗γ [δ] )γ −→ αlistγ γ−−−→[δ] unit

(21)

A concrete example

Manipulating queues

let push p elt =

p.in <- elt :: p.in

val push : ∀[γ ≤ β].(α, β)queueγ −→ α −−−→γ [] unit

let rec pop p = match p.out with hd :: tl -> p.out <- tl; hd

| [] -> match p.in with

[] -> raise Empty

| _ -> balance p; pop p

val pop : ∀[α ≤ α0, β C α0, γtπ ≤ β].(α, β)queueγ π−−−−−−−−→[Empty:β;] α0

(22)

Typing rules for references

Ref

Γ ` v : t pc C t pc,Γ ` ref v : t ref` [r]

Deref

Γ ` v : t0 ref` t0 ≤ t ` C t pc,Γ ` !v : t [r]

Assign

Γ ` v1 : t ref` Γ ` v2 : t pc C t ` C t pc,Γ ` v1 := v2 : unit [r]

(23)

Typing rules for exceptions

Raise

Γ ` v : typexn(ε)

pc,Γ ` raise ε v : ∗ [ε : Pre pc;∗] Handle

pc,Γ ` e1 : t [ε : Pre pc1;r]

pc t pc1,Γ[x 7→ typexn(ε)] ` e2 : t [ε : a2;r] pc1 C t pc,Γ ` e1 handle ε x e2 : t [ε : a2;r]

Finally

pc,Γ ` e1 : t [r1] pc,Γ ` e2 : ∗ [r2] tr2 ≤ ur1 pc,Γ ` e1 finally e2 : t [r1 t r2]

Références

Documents relatifs

First introduced by Faddeev and Kashaev [7, 9], the quantum dilogarithm G b (x) and its variants S b (x) and g b (x) play a crucial role in the study of positive representations

McCoy [17, Section 6] also showed that with sufficiently strong curvature ratio bounds on the initial hypersur- face, the convergence result can be established for α &gt; 1 for a

Prove that the gamma distribution is actually a continuous probability distributions that is it is non-negative over x &gt; 0 and its integral over R + is equal to 1.. Exercise 8

Dirichlet theorem implies the following statement: if h and k are any two integers with (h, k) = 1, then there exists at least one prime number of the form kn + h.. Prove that

Write down the transition matrix between the bases

3) In den Überfachlichen Kompetenzen (Lehrplan 21 – Grundlagen, 2014, S. 11ff.), das heisst, in den nicht- fachspezifischen Kompetenzbeschreibungen sind Sprachkompetenzen zwar

If such a board were created and were truly independent (and met often enough to avoid undue delay), based on the mandate required of the board by TCPS2, it

The Nyquist formula quantifies the thermal noise driven fluctuations of voltage across a resistance in equilibrium.. We deal here with the case of a resistance driven out of