formal verification of an implementation of crt-rsa ... · pdf fileformal verification of an...

29
Formal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina CHETALI, Louis GOUBIN and David VIGILANT PROOFS 2012, September 13 th 2012

Upload: hoangliem

Post on 18-Mar-2018

219 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Formal verification of an implementation ofCRT-RSA Vigilant’s algorithm

Maria CHRISTOFIJoint work with Boutheina CHETALI, Louis GOUBIN and

David VIGILANT

PROOFS 2012, September 13th 2012

Page 2: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Introduction

Implementations of cryptosystems can be sensitive to physical attacks, such asfault attacks

Improved attack methods⇒ more attack paths

Design more and more complex countermeasures

No proof of flaw absence in the implementation

This talk : Formal verification of cryptographic implementations• Example : Resistance of CRT-RSA Vigilant’s algorithm against fault attacks

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 2 / 21

Page 3: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

1 Formal verification

2 Our method

3 Case study

4 Conclusion

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 3 / 21

Page 4: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Formal verification of a cryptographic implementation

Formal Verification :

Use of formal methods (and the associated tools) to verify the correctness of analgorithm against its specification or/and a specific property

Two approaches :

formalize the specifications and prove properties on the formal model of thespecification⇒What about the implementation ?

“formalize” the source code⇒ That’s what we talk about in this talk !

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 4 / 21

Page 5: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Verification techniques

How to achieve a formal verification

Mathematical proof : completely manualTheorem Proving : mathematical reasoning mechanization• infinite models, partially automatic, human interaction

Model checking : systematic and exhaustive exploration of the mathematicalmodel• combinatoric exploration, finite model, completely automatic

Static analysis : Software analysis with symbolic execution of the program• partially automatic

Some of the existing tools for source code analysis

VeriFast : C and java program verifier. Programs first annotated with pre and postconditions (theorem proving)

Frama-C : Platform dedicated to source code analysis of C programs (theoremproving & static analysis)

CertiCrypt / EasyCrypt : Verification using games sequence

Tools oriented protocols : ProVerif, CryptoVerif, etc

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 5 / 21

Page 6: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Global viewAim :

Given an implementation of a cryptographic algorithm with countermeasures, define an attackmodel (here based on fault model) and formally verify that this implementation is resistant to thisattack model.

to be proved

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+

with frama-c/jessie

+ fault model

properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 6 / 21

Page 7: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Global view

Aim :

Given an implementation of a cryptographic algorithm with countermeasures, define an attackmodel (here based on fault model) and formally verify that this implementation is resistant to thisattack model.

to be proved

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+

with frama-c/jessie

+ fault model

properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 6 / 21

Page 8: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Fault model

Classifying faults

number of faults authorized per code execution

faults on instructions VS faults on data

fault types

Precise Bit Single Bit Byte Random Arbitrary

Fault Model Fault Model Fault Model Fault Model Fault Model

control on complete loose loose loose loose/no

location (chosen bit) (chosen variable)

control on precise no no no no

timing

number of 1 1 8 random random

affected bits

fault type bit set or reset bit flip random random unknown

persistence permanent permanent permanent permanent permanent

and transient and transient and transient and transient and transient

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 7 / 21

Page 9: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){

/* NextType(a,1) = read/write */

2 :

switch(f){

3 :

case 1 : a = 0 ; break ;

4 :

}

5 : int x = 0 ;6 :

switch (f) {

7 :

case 2 : a = 0 ; break ;

8 :

}

9 : a = a + 1 ;

/* Type(a,9) = read/write */

10 :

/* NextType(a,9) = read */

11 :

switch(f) {

12 :

case 3 : a = 0 ; break ;

13 :

}

14 : x = a + b ;

/* Type(a,14) = read */

15 :

/* NextType(a,14) = ∅ */

16 :

switch(f) {

17 :

case 4 : a = 0 ; break ;

18 :

}

19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 10: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){

/* NextType(a,1) = read/write */

2 : switch(f){3 : case 1 : a = 0 ; break ;4 : }5 : int x = 0 ;6 : switch (f) {7 : case 2 : a = 0 ; break ;8 : }9 : a = a + 1 ;

/* Type(a,9) = read/write */

10 :

/* NextType(a,9) = read */

11 : switch(f) {12 : case 3 : a = 0 ; break ;13 : }14 : x = a + b ;

/* Type(a,14) = read */

15 :

/* NextType(a,14) = ∅ */

16 : switch(f) {17 : case 4 : a = 0 ; break ;18 : }19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 11: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){ /* NextType(a,1) = read/write */2 : switch(f){3 : case 1 : a = 0 ; break ;4 : }5 : int x = 0 ;6 : switch (f) {7 : case 2 : a = 0 ; break ;8 : }9 : a = a + 1 ; /* Type(a,9) = read/write */

10 : /* NextType(a,9) = read */11 : switch(f) {12 : case 3 : a = 0 ; break ;13 : }14 : x = a + b ; /* Type(a,14) = read */15 : /* NextType(a,14) = ∅ */16 : switch(f) {17 : case 4 : a = 0 ; break ;18 : }19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 12: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){ /* NextType(a,1) = read/write */2 : switch(f){3 : case 1 : a = 0 ; break ;4 : }5 : int x = 0 ;6 : switch (f) {7 : case 2 : a = 0 ; break ;8 : }9 : a = a + 1 ; /* Type(a,9) = read/write */

10 : /* NextType(a,9) = read */11 : switch(f) {12 : case 3 : a = 0 ; break ;13 : }14 : x = a + b ; /* Type(a,14) = read */15 : /* NextType(a,14) = ∅ */16 : switch(f) {17 : case 4 : a = 0 ; break ;18 : }19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 13: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){ /* NextType(a,1) = read/write */2 :

switch(f){

3 :

case 1 : a = 0 ; break ;

4 :

}

5 : int x = 0 ;6 : switch (f) {7 : case 1 : a = 0 ; break ;8 : }9 : a = a + 1 ; /* Type(a,9) = read/write */

10 : /* NextType(a,9) = read */11 : switch(f) {12 : case 2 : a = 0 ; break ;13 : }14 : x = a + b ; /* Type(a,14) = read */15 : /* NextType(a,14) = ∅ */16 : switch(f) {17 : case 3 : a = 0 ; break ;18 : }19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 14: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Inject fault model

If NextType(var , i) ∈ {write, ∅} an attack on var injected on line i is useless andequivalent to the initial code.

If NextType(var , i) ∈ {read , read/write} and j the line that presents the next useof var , an attack on var injected on the interval [i, j] has exactly the same effectson var with an attack injected on line j , but it has no effect between lines i andj − 1.

Example : we are interested in variable a

1 : int example(int a, int b){ /* NextType(a,1) = read/write */2 :

switch(f){

3 :

case 1 : a = 0 ; break ;

4 :

}

5 : int x = 0 ;6 : switch (f) {7 : case 1 : a = 0 ; break ;8 : }9 : a = a + 1 ; /* Type(a,9) = read/write */

10 : /* NextType(a,9) = read */11 : switch(f) {12 : case 2 : a = 0 ; break ;13 : }14 : x = a + b ; /* Type(a,14) = read */15 : /* NextType(a,14) = ∅ */16 :

switch(f) {

17 :

case 4 : a = 0 ; break ;

18 :

}

19 : return x ;20 : }

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 8 / 21

Page 15: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

to be proved

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+ fault model X

+

with frama-c/jessie

properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 9 / 21

Page 16: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

to be proved

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+ fault model X

+

with frama-c/jessie

properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 9 / 21

Page 17: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Properties to be proved

Informally,

we want to check whether any possible attack can be detected by the defined set ofcountermeasures

Formally,

Let f ∈ {0} ∪ F , where F is the set of faults for the current implementation and f = 0the original execution of the implementation (without injected faults). Let also res be theoutput of the implementation, x1, ..., xn be the n variables of the input of theimplementation and g a function. Then :

[(f = 0)⇒ (res = g(x1, ..., xn))] AND[(∀f ∈ F )⇒ ((res = ERROR) OR (res = g(x1, ..., xn))]

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 10 / 21

Page 18: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

X

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+ fault model X

with frama-c/jessie

to be proved+ properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 11 / 21

Page 19: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

X

with annotationsC file transformed

transformed C file

.c file : implementation

verification

proof obligations

automatic

final result

proversinteractive

provers

+ fault model X

with frama-c/jessie

to be proved+ properties

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 11 / 21

Page 20: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Verification with Frama-C / WHY / Jessie

Frama-C

a platform for analyzing a Cprogram

includes different techniques ofstatic analysis

Why / Jessie

Why :• proof obligations generator• input : programs + first logic

assertions• output : logic assertions + proof

obligations on the chosen proverlanguage

Jessie :• Why plug-in• based on weakest precondition

computation techniques

program C(annotated)

Frama-C core(syntax error verification)

Why /Jessie

Proof obligations

interactiveproversautomatic

provers

FIGURE: Frama-C platform

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 12 / 21

Page 21: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

To sum up

Describe the implementation to verify

Define the fault model

Inject faults on the original code

Describe the properties to be proved

Proceed to the verification

Exploit the results

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 13 / 21

Page 22: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Let’s see a concrete example...

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 14 / 21

Page 23: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Case study

Algorithm :• CRT-RSA algorithm

Countermeasure :• Vigilant’s countermeasure

Implementation :• pseudo code published in Vigilant’s paper :

“RSA with CRT : A New Cost-Effective Solution to Thwart Fault Attacks”CHES 2008

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 15 / 21

Page 24: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

CRT-RSA algorithm

parameters

public key : (N, e)

private key : (p, q, dp, dq , iq)such that :

N = p · q (p, q large primes)

gcd (p − 1, e) = 1

gcd (q − 1, e) = 1

dp = e−1 mod (p − 1)

dq = e−1 mod (q − 1)

iq = q−1 mod p

CRT-RSA algorithm

Input : m ∈ ZN , p, q, dp, dq , iqOutput : md ∈ ZN

Sp = mdp mod p

Sq = mdq mod q

S = Sq + q · (iq · (Sp − Sq) mod p)

return S mod N

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 16 / 21

Page 25: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Vigilant’s countermeasure

Choose a random r , s.t. gcd(N, r2) = 1

We want : Exponentiation modulo N (md mod N).

Instead, compute exponentiation modulo Nr2 ( m′d mod Nr2).

m′ ≡{

m mod N1 + r mod r2

• Verification of the exponentiation result consistency modulo r2

((m′d mod r2) = (1 + dr))

Same principle for computation of Sp and Sq

Exponentiation result reduced modulo N

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 17 / 21

Page 26: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Verification of CRT-RSA Vigilant’s algorithm

Fault model

inject one fault per execution

modify the value in memory by setting the value of a variable to 0

inject both transient and permanent faults to any variable

modify only data (not the code execution)

cannot modify the boolean result of a conditional check

Property to prove

(f = 0)⇒((output mod p = mdp mod p) AND (output mod q = mdq mod q))

(f ∈ F )⇒((output = ERROR) OR((output mod p = mdp mod p) AND (output mod q = mdq mod q)))

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 18 / 21

Page 27: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Results

Faults with success probability 1

faults on random variables

output : the real signature

no information about the secret parameters is obtained

depending to the fault model this may give information on the faulty variable. It isthe case for our model.

Faults with a weak success probability

output : a faulty signature

probabilities manually calculated : 2−2|r|+1, 2−(|p′|−1)ln2 and 2−(|q′|−1)ln2

Faults with a high success probability : 1

faults on dp and dq during the computation of d ′p and d ′qoutput : a faulty signature

attacker can extract information about the secret data

no danger for the original fault model

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 19 / 21

Page 28: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Summary

Method :• Select a fault model

• Inject faults to the original code (w.r.t. the chosen fault model)

• Verify using frama-C

Verify methodically cryptographic implementations

Increase confidence to our implementations

Eliminate flaws due to countermeasures weaknesses

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 20 / 21

Page 29: Formal verification of an implementation of CRT-RSA ... · PDF fileFormal verification of an implementation of CRT-RSA Vigilant’s algorithm Maria CHRISTOFI Joint work with Boutheina

Questions / Remarks / Propositions are more than welcome ! [email protected]

Formal verification of an implementation of CRT-RSA Vigilant’s algorithm 21 / 21