Compare commits

..

10 Commits

12 changed files with 168 additions and 14 deletions

View File

@ -1,5 +1,5 @@
+++ +++
title = "Homepage" title = "Home"
template = "index.html" template = "index.html"
date = 2023-11-01 date = 2023-11-01
sort_by = "weight" sort_by = "weight"
@ -9,8 +9,9 @@ sort_by = "weight"
Hello, Hello,
I'm Fabrice Mouhartem, currently working as a R&D Engineer at I'm Fabrice Mouhartem (`/fa.bʁis mu.aʁ.tεm/`), currently working as a R&D
[XWiki](https://xwiki.org) on the [Cryptpad](https://cryptpad.org) project. Engineer at [XWiki](https://xwiki.org) on the [Cryptpad](https://cryptpad.org)
project.
I defended a PhD in 2018 at ÉNS de Lyon about privacy preserving cryptography I defended a PhD in 2018 at ÉNS de Lyon about privacy preserving cryptography
from pairings and lattice assumptions under the supervision of Benoît Libert. from pairings and lattice assumptions under the supervision of Benoît Libert.
@ -27,6 +28,6 @@ post-quantum signatures.
# Contact # Contact
You can join me by email at “fabrice • mouhartem (at) xwiki • com”. You can join me by email at “`fabrice • mouhartem (at) xwiki • com`”.
# News # News

View File

@ -0,0 +1,88 @@
+++
title = "UCBL: Projets de Licence"
date = 2018-03-13
slug = "lifproj-18"
lang = "fr"
+++
Projets de Licence 1 à l'UCBL. Trois sujets autour de l'implémentation de
primitives cryptographiques.
<!-- more -->
**Travaux pratiques:** Lundi ou mardi.
Une description plus détaillée du cours est disponible [[ici]](http://perso.univ-lyon1.fr/fabien.rico/site/projet:2018:pri:start).
Le but de ce cours est de mener à bien un projet collaboratif. Les sujets que je propose sont principalement orientés autour de la cryptologie : cryptographie et cryptanalyse.
### FM1. Chiffrement fondé sur l'identité
**Six groupes :** 2, 11, 21, 27, 33, 44
[[Sujet Complet]](documents/FM1.pdf)
[[Exemple jouet pour Cocks]](documents/cocks-test.txt)
Le but de ce projet est de coder une infrastructure de chiffrement sur l'identité (**IBE**) pour une possible intégration à un client mail lourd (par exemple thunderbird).
Un chiffrement fondé sur l'identité est une infrastructure qui s'articule autour de plusieurs acteurs :
* une autorité qui délivre les clefs secrètes ;
* les utilisateurs autorisés à déchiffrer à l'aide de leur clef secrète ;
* tout le monde, en mesure de chiffrer pour n'importe qui à l'aide de son identifiant (par exemple une adresse e-mail).
Un exemple d'interface pour la cryptographie est gpg, qui même si elle n'est pas nécessairement très _user friendly_, ça reste un exemple pour les premières interfaces du programme.
Au delà de l'interface d'utilisation et de déboggage, il reste la question des méthodes cryptographiques à utiliser. Pour cela, je propose aux groupes de choisir parmi les schémas qui suivent :
* L'[IBE de Cocks](http://joye.site88.net/papers/Joy16gcocks.pdf). Qui repose sur de l'arithmétique modulaire (comme [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA) par exemple). Nécessite de manipuler des grands entiers, et donc de passer par une bibliothèque de calcul multiprécision, comme [GMP](https://gmplib.org/).
* L'[IBE de Boneh et Franklin](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf). Qui repose sur une structure un peu plus velue que l'arithmétique modulaire : les couplages. Ceux-ci reposent sur des calculs un peu poussés sur les courbes elliptiques. Une bibliothèque pour la manipulation des couplages serait [Relic](https://github.com/relic-toolkit).
* L'[IBE de Gentry, Peikert et Vaikuntanathan](https://people.csail.mit.edu/vinodv/GentryPeikertV-STOC2008.pdf). Qui est construit sur les réseaux euclidiens. La partie technique est la manipulation des distributions de probabilités sur les réseaux. Une bibliothèque pour manipuler les réseaux pourrait être [HElib](https://github.com/shaih/HElib).
Quel que soit le choix du protocole de chiffrement, celui-ci sera utilisé -- pour des raisons d'efficacité -- dans le cadre d'un chiffrement hybride. C'est-à-dire que le chiffrement fondé sur l'identité sera utilisé pour chiffrer une *clef de session* pour un schéma symétrique (par exemple [AES](https://fr.wikipedia.org/wiki/Advanced_Encryption_Standard) déjà implémenté à [plusieurs reprises](https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)) qui chiffrera le message.
Parmi ces choix, la manipulation des opérations de base sur les différentes structures pourra être effectuée à l'aide de bibliothèques (GMP pour les grands entiers par exemple). En revanche, l'implantation des algorithmes cryptographiques devra être faite « à la main ».
**Autres ressources** :
* [Comment écrire une extension pour thunderbird](https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_extensions/Building_a_Thunderbird_extension).
* Répertoire <tt>git</tt> d'enigmail: <git://git.code.sf.net/p/enigmail/source>
* [rfc5408 Identity-Based Encryption Architecture and Supporting Data Structures](https://tools.ietf.org/html/rfc5408)
### FM2. Cryptanalyse de schémas asymétriques
**Un groupe :** 8
[[Sujet Complet]](documents/FM2.pdf)
Le but de ce projet est l'implantation d'un algorithme de calcul de factorisation de grands nombres.
Un premier échauffement consiste à implanter le [crible quadratique](https://fr.wikipedia.org/wiki/Crible_quadratique), qui est une méthode simple de calcul de la factorisation d'un grand nombre, et qui repose sur la relation $$(x+y)(x-y) = x^2 - y^2.$$
Un autre algorithme classique pour la factorisation d'entiers de taille moyenne est la [factorisation sur les courbes elliptiques](https://en.wikipedia.org/wiki/Lenstra_elliptic-curve_factorization) (ou **ECM** en anglais pour *Elliptic-Curve Method*). Soit $N$ notre nombre à factoriser, l'idée consiste à construire une courbe sur $\mathbb{Z}_{/N \mathbb{Z}}$ (qui n'est pas un groupe, puisqu'il existe des éléments non inversibles, qui sont les facteurs de $N$) et de parcourir cette courbe jusqu'à trouver un « problème », qui indique la présence d'un élément non inversible, et donc nous donne des informations sur un facteur de $N$.
Cette méthode probabiliste a pour avantage d'être facilement parallélisable, par exemple en parcourant sur différents cœurs des courbes différentes.
Une fois ceci fait, et s'il reste du temps, une implantation du [crible algébrique](http://www.ams.org/notices/199612/pomerance.pdf) pourra être faite. Elle nécessite l'utilisation d'une algèbre linéaire creuse efficace que vous implémenterez vous-même.
Le but de ce projet sera donc de factoriser des grands nombres (par exemple les challenges RSA) après avoir parallélisé le code (par exemple en utilisant <tt>MPI</tt>).
La manipulation de grands entiers pourra être fait par le biais d'une bibliothèque ([GMP](https://gmplib.org/) par exemple), des batteries de tests unitaires et leur vérification pourra être faite par le biais de [sage](https://sagemath.org/).
### FM3. Système de sondage anonyme
**Un groupe :** 41
[[Sujet (*presque*) Complet]](documents/FM3.pdf)
Dans ce projet, vous devrez implanter une interface web connectée à un moteur cryptographique codé dans un langage suffisamment bas-niveau pour éviter les attaques par canaux cachés par exemple.
L'ergonomie de l'interface sera aussi importante que la réalisation du *backend*.
L'idée sera d'implanter un mécanisme d'[accréditation anonyme](https://courses.cs.washington.edu/courses/csep590a/11wi/slides/CSEP590a-anoncredsv3.pdf) pour gérer les droits d'accès au sondage.
Les votes seront ensuite agrégées via un chiffrement additivement homomorphe (comme le [chiffrement de Paillier](https://fr.wikipedia.org/wiki/Cryptosyst%C3%A8me_de_Paillier) par exemple).
Dans ce projet, les structures de données (manipulation de gros entiers pourront être gérées par une bibliothèque. Le reste devra être codé à la main, en faisant attention autant que possible à la sécurité générale du système.
L'interface web pourra être gérée par python (via [django](https://fr.wikipedia.org/wiki/Django_(framework)) ou [flask](https://fr.wikipedia.org/wiki/Flask_(framework)) par exemple) pour permettre un branchement au programme cœur plus aisé.

View File

@ -0,0 +1,23 @@
+++
title = "M2 Cysec: Advanced Cryptography"
date = 2022-01-13
lang = "en"
slug = "cysec-21"
+++
This course aims at presenting the recent advances in privacy-preserving cryptography.
More precisely, it covers the topics of advanced cryptographic primitives to protect the privacy of their users.
<!-- more -->
**Lectures**: Wednesdays from 2PM to 5PM.
Lecture notes are available [here](https://fmouhart.epheme.re/documents/M2CySec.Adv.Crypto.pdf).
### Useful Resources
* About cryptography in general (will not be covered by the course, but it is still useful in general to understand the topics covered during the course:
* Jonathan Katz and Yehuda Lindell,
[Introduction to Modern Cryptography](http://www.cs.umd.edu/~jkatz/imc.html): A very resourceful book about cryptography.
* The lectures of Dan Boneh on [coursera](https://fr.coursera.org/learn/crypto#syllabus), also available on [youtube](https://www.youtube.com/watch?v=LHKeOkD6gMQ&list=PLbzglpgjus5F71Q24JMxF2O1YmVsB7R5g).
* M. Bellare, D. Micciancio, B. Warinschi. Foundations of group signatures: formal definitions, simplified requirements, and a construction based of general assumptions. [[pdf]](https://cseweb.ucsd.edu/~daniele/papers/BMW.pdf)

View File

@ -2,8 +2,7 @@
title="Teaching" title="Teaching"
date = 2023-11-01 date = 2023-11-01
weight = 30 weight = 30
sort_by = "date"
+++ +++
# Teaching # Teaching
Hello world!

View File

@ -1,5 +1,6 @@
$light-fonts: "Fira Sans Light", sans-serif; $light-fonts: "Fira Sans Light", sans-serif;
$normal-fonts: "Fira Sans", sans-serif; $normal-fonts: "Fira Sans", sans-serif;
$mono-fonts: "Fira Mono", monospace;
$page-width: 800px; $page-width: 800px;
$primary-color: #333; $primary-color: #333;
$bg-color: #eee; $bg-color: #eee;
@ -33,6 +34,12 @@ html {
font-weight: 400; font-weight: 400;
src: local("Fira Sans"), local("FiraSans-Regular"), url("fonts/Fira Sans.woff2") format("woff2"); src: local("Fira Sans"), local("FiraSans-Regular"), url("fonts/Fira Sans.woff2") format("woff2");
} }
@font-face {
font-family: "Fira Mono";
font-style: normal;
font-weight: 400;
src: local("Fira Mono"), local("FiraMono-Regular"), url("fonts/FiraMono-Regular.woff2") format("woff2");
}
body { body {
max-width: $page-width; max-width: $page-width;
margin: auto; margin: auto;
@ -137,3 +144,25 @@ nav {
float: left; float: left;
} }
} }
strong {
font-family: $normal-fonts;
}
code {
font-family: $mono-fonts;
font-size:14px;
}
.post {
margin: 10px;
background-color: #ddd;
font-size: 20px;
.post_title {
background-color: #ccc;
padding: 5px;
}
.post_title a {
font-family: $normal-fonts;
}
.post_summary {
padding: 5px;
}
}

Binary file not shown.

BIN
static/img/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

View File

@ -5,8 +5,9 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="generator" content="zola" /> <meta name="generator" content="zola" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>fmouhart.epheme.re</title> <title>{% if section.title %}{{section.title}} |{% endif %} Fabrice Mouhartem</title>
<link rel="stylesheet" href="{{ get_url(path="/style.css") }}" /> <link rel="stylesheet" href="{{ get_url(path="/style.css") }}" />
<link rel="shortcut icon" type="image/png" href="{{ get_url(path="/img/lock.png") }}" />
</head> </head>
<body> <body>
{% block header %} {% block header %}

View File

@ -1,3 +1,3 @@
<footer> <footer>
fmouhart.epheme.re fmouhart.epheme.re | Powered by <a href="https://getzola.org/">Zola</a> (<a href="https://git.epheme.re/fmouhart/fmouhart.epheme.re">source</a>)
</footer> </footer>

View File

@ -1,9 +1,12 @@
{% if page %}
{% set page_section = get_section(path=page.ancestors[1], metadata_only = true) %}
{% endif %}
<nav> <nav>
<menu> <menu>
<li><a {% if section and section == root %} class="nav_current" {% endif %} href="/">Home</a></li> <li><a {% if section and section == root %} class="nav_current" {% endif %} href="/">Home</a></li>
{% for subsection in root.subsections %} {% for subsection in root.subsections %}
{% set subsection = get_section(path=subsection, metadata_only=true) %} {% set subsection = get_section(path=subsection, metadata_only=true) %}
<li><a href="{{ subsection.permalink }}" {% if section and section == subsection %} class="nav_current" {% endif %}>{{ subsection.title }}</a></li> <li><a href="{{ subsection.permalink }}" {% if section and section.title == subsection.title or page and page_section.title == subsection.title %} class="nav_current" {% endif %}>{{ subsection.title }}</a></li>
{% endfor %} {% endfor %}
</menu> </menu>
</nav> </nav>

View File

@ -2,13 +2,13 @@
{% block header %} {% block header %}
<header id="title-block-header"> <header id="title-block-header">
<h1 class="title">Fabrice Mouhartem's Webpage</h1> <div id="header-logo"></div>
<p class="date">{{ page.date }}</p> <h1 class="title">Fabrice Mouhartem</h1>
<p class="date">{{ page.date }}</p>
</header> </header>
{% endblock %} {% endblock %}
{% block main %} {% block main %}
<h1>{{ section.extra.hero.title | markdown(inline = true) | safe }}</h1> <h1>{{ page.title | safe }}</h1>
<p>{{ section.extra.hero.description | markdown(inline = true) | safe }}</p> <p>{{ page.content | safe }}</p>
<h1>{{ section.extra.news.title | safe }}</h1>
{% endblock %} {% endblock %}

View File

@ -2,4 +2,14 @@
{% block main %} {% block main %}
{{ section.content | markdown(inline = true) | safe }} {{ section.content | markdown(inline = true) | safe }}
<div class="pages">
{% for sub in section.pages %}
<article class="post">
<div class="post_title">
<a href="{{ sub.path }}">{{ sub.title }}</a>
</div>
{% if sub.summary %}<div class="post_summary">{{ sub.summary | markdown(inline=true) | safe }}</div>{% endif %}
</article>
{% endfor %}
</div>
{% endblock %} {% endblock %}