Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Benoit Viguier
coqveriftweetnacl
Commits
7faffc34
Commit
7faffc34
authored
Jul 22, 2019
by
Benoit Viguier
Browse files
improve Preliminaries + correct typos
parent
b16f57e0
Changes
1
Hide whitespace changes
Inline
Sidebyside
paper/preliminaries.tex
View file @
7faffc34
...
...
@@ 7,38 +7,39 @@ We then provide a brief description of the formal tools we use in our proofs.
\subsection
{
The X25519 key exchange
}
\label
{
preliminaries:A
}
% \begin{definition}
% Let $E$ be the elliptic curve defined by $y^2 = x^3 + 486662 x^2 + x$.
% \end{definition}
% \begin{lemma}
% For any value $x \in \F{p}$, for the elliptic curve $E$ over $\F{p^2}$
% defined by $y^2 = x^3 + 486662 x^2 + x$, there exist a point $P$ over $E(\F{p^2})$
% \end{lemma}
For any value
$
x
\in
\F
{
p
}$
, for the elliptic curve
$
E
$
over
$
\F
{
p
^
2
}$
defined by
$
y
^
2
=
x
^
3
+
486662
x
^
2
+
x
$
, there exist a point
$
P
$
over
$
E
(
\F
{
p
^
2
}
)
$
such that
$
x
$
is the
$
x
$
coordinate of
$
P
$
. Remark that
$
x
$
is also the
$
x
$
coordinate of
$

P
$
.
Given a natural number
$
n
$
and
$
x
$
, X25519 returns the
$
x
$
coordinate of the
scalar multiplication of
$
P
$
by
$
n
$
. Note that the result would is the same with
$

P
$
.
scalar multiplication of
$
P
$
by
$
n
$
, thus
$
[
n
]
P
$
. Note that the result is the
same with
$
[
n
](
P
)
=
[
n
]
P
$
.
Using X25519,
RFC~7748~
\cite
{
rfc7748
}
formalized
a
Diffie–Hellman keyexchange algorithm.
E
ach party generate a secret random number
$
S
_
a
$
(respectively
$
S
_
b
$
), and computes
$
P
_
a
$
(respectively
$
P
_
b
$
),
the resulting
$
x
$
coordinate of the scalar multiplication of the base poin
t
where
$
x
=
9
$
and
$
S
_
a
$
(respectively
$
S
_
b
$
).
RFC~7748~
\cite
{
rfc7748
}
formalized
the X25519
Diffie–Hellman keyexchange algorithm.
Given the base point
$
B
$
where
$
x
=
9
$
, e
ach party generate a secret random number
$
s
_
a
$
(respectively
$
s
_
b
$
), and computes
$
P
_
a
$
(respectively
$
P
_
b
$
), the resul
t
of the scalar multiplication between
$
B
$
and
$
s
_
a
$
(respectively
$
s
_
b
$
).
The party exchanges
$
P
_
a
$
and
$
P
_
b
$
and computes their shared secret with X25519
over
$
S
_
a
$
and
$
P
_
b
$
(respectively
$
S
_
b
$
and
$
P
_
a
$
).
over
$
s
_
a
$
and
$
P
_
b
$
(respectively
$
s
_
b
$
and
$
P
_
a
$
).
\subsection
{
X25519 in TweetNaCl
}
\label
{
preliminaries:B
}
\subheading
{
Arithmetic in
\Ffield
}
In X25519, all computations are done over
$
\F
{
p
}$
.
Numbers in that field can be represented with 256 bits.
We represent them in 8bit limbs (respectively 16bit limbs),
making use of a base
$
2
^
8
$
(respectively
$
2
^{
16
}$
).
Consequently, inputs of the X25519 function are seen as arrays of bytes
in a littleendian format.
Computations inside this function makes use of the 16bit limbs representation.
In order to gain space, TweetNaCl uses a few shortcuts.
\begin{lstlisting}
[language=Ctweetnacl]
#define FOR(i,n) for (i = 0;i < n;++i)
#define sv static void
typedef unsigned char u8;
\end{lstlisting}
The subsequent blocks of code are valid C.
\subheading
{
Arithmetic in
\Ffield
.
}
In X25519, all computations are done over
$
\F
{
p
}$
.
Numbers in that field can be represented with 256 bits packed in 8bit limbs
(respectively 16bit limbs), making use of a base
$
2
^
8
$
(respectively
$
2
^{
16
}$
).
Consequently, inputs of the X25519 function are seen as bytes arrays in littleendian format.
Computations inside the crypto scalar multiplication and intermediates function
makes use of the 16bit limbs representation.
Those are placed into 64bits signed container in order to mitigate overflows or underflows.
\begin{lstlisting}
[language=Ctweetnacl]
typedef long long i64;
...
...
@@ 115,7 +116,7 @@ It first performs 3 carry propagations in order to guarantee
that each 16bit limbs values are between
$
0
$
and
$
2
^{
16
}$
.
Then computes a modulo reduction by
$
\p
$
using iterative substraction and
conditional swapping. This guarantees a unique representation in
$
\Zfield
$
.
After which
each 16bit limbs are splitted into 8bit limbs.
Then,
each 16bit limbs are splitted into 8bit limbs.
\begin{lstlisting}
[language=Ctweetnacl]
sv pack25519(u8 *o,const gf n)
{
...
...
@@ 144,13 +145,13 @@ sv pack25519(u8 *o,const gf n)
}
\end{lstlisting}
\subheading
{
The Montgomery ladder
}
In order to compute scalar multiplication
s
, X25519 uses the Montgomery
\subheading
{
The Montgomery ladder
.
}
In order to compute scalar multiplication, X25519 uses the Montgomery
$
x
$
coordinate doubleandadd formulas.
First extract and clamp the value of
$
n
$
. Then unpack the value of
$
p
$
.
As per RFC~7748~
\cite
{
rfc7748
}
, set its most significant bit to 0.
Finally compute the Montgomery ladder over the clamped
$
n
$
and
$
p
$
,
pack the result into
$
q
$
.
and
pack the result into
$
q
$
.
\begin{lstlisting}
[language=Ctweetnacl]
int crypto
_
scalarmult(u8 *q,
const u8 *n,
...
...
@@ 208,15 +209,16 @@ int crypto_scalarmult(u8 *q,
Coq~
\cite
{
coqfaq
}
is an interactive theorem prover. It provides an expressive
formal language to write mathematical definitions, algorithms and theorems coupled
with their proofs. As opposed to other systems such as F*~
\cite
{
DBLP:journals/corr/BhargavanDFHPRR17
}
,
Coq does not rely on the trust of
a
SMT solver. It uses its type
system to verify the applications of hypothesis, lemmas
,
theorems~
\cite
{
Howard1995HOWTFN
}
.
Coq does not rely on the trust of
an
SMT solver. It uses its type
system to verify the applications of hypothesis, lemmas
and
theorems~
\cite
{
Howard1995HOWTFN
}
.
The
Hoare logic is a formal system which allows
to
reason about programs.
It uses trip
p
les such as
Hoare logic is a formal system which allows reason
ing
about programs.
It uses triples such as
$$
\{
{
\color
{
doc@lstnumbers
}
\textbf
{
Pre
}}
\}\texttt
{
~Prog~
}
\{
{
\color
{
doc@lstdirective
}
\textbf
{
Post
}}
\}
$$
where
${
\color
{
doc@lstnumbers
}
\textbf
{
Pre
}}$
and
${
\color
{
doc@lstdirective
}
\textbf
{
Post
}}$
are assertions and
\texttt
{
Prog
}
is a piece of Code.
It is read as ``when the precondition
$
Pre
$
is met, executing
\texttt
{
Prog
}
while yield to postcondition
$
Post
$
''.
are assertions and
\texttt
{
Prog
}
is a piece of code.
It is read as ``when the precondition
$
Pre
$
is met, executing
\texttt
{
Prog
}
will
yield postcondition
$
Post
$
''.
We use compositional rules to prove the truth value of a Hoare tripple.
For example, here is the rule for sequential composition:
\begin{prooftree}
...
...
@@ 225,10 +227,10 @@ For example, here is the rule for sequential composition:
\LeftLabel
{
HoareSeq
}
\BinaryInfC
{$
\{
P
\}
C
_
1
;C
_
2
\{
R
\}
$}
\end{prooftree}
Separation
L
ogic is an extension of
the
Hoare logic which allows
to
reason about
pointers and memory manipulation. This
provides the
strict condition
that considered
memory share
s are disjoint, forcing nonalias
in
g
. We discuss
further about
this limitation in Section~
\ref
{
usingVST
}
.
Separation
l
ogic is an extension of Hoare logic which allows reason
ing
about
pointers and memory manipulation. This
logic enforces
strict condition
s on the
memory share
d such as being disjo
in
t
. We discuss this limitation
further
in Section~
\ref
{
usingVST
}
.
The Verified Software Toolchain (VST)~
\cite
{
cao2018vstfloyd
}
is a framework which uses
the
Separation logic to prove the functional correctness of C programs.
It
s
can be seen as a forward symbolic execution of the program.
Its uses a strongest postcondition approach to prove that a
code
matches its specification.
Separation logic to prove the functional correctness of C programs.
It can be seen as a forward symbolic execution of the program.
Its uses a strongest postcondition approach to prove that a
program
matches its specification.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment