commit 427545d625d3cc009fd512c7a66778831776f101 parent 5c5e76426281ebbf3ee7c6c4d51586d207bdeae8 Author: Emmanuel Benoist <emmanuel.benoist@bfh.ch> Date: Mon, 13 May 2024 21:07:54 +0200 source files for the presentation in Porrentruy to the Societe jurassienne d'émulation (in French) Diffstat:
10 files changed, 1719 insertions(+), 0 deletions(-)
diff --git a/presentations/2024-porrentruy/imagesPresentation/network-cloud-hi.png b/presentations/2024-porrentruy/imagesPresentation/network-cloud-hi.png Binary files differ. diff --git a/presentations/2024-porrentruy/imagesPresentation/qrcode-bitcoin.png b/presentations/2024-porrentruy/imagesPresentation/qrcode-bitcoin.png Binary files differ. diff --git a/presentations/2024-porrentruy/slides-societe-juracienne-emulation-2024-04-27.pdf b/presentations/2024-porrentruy/slides-societe-juracienne-emulation-2024-04-27.pdf Binary files differ. diff --git a/presentations/2024-porrentruy/slides-societe-juracienne-emulation-2024-04-27.tex b/presentations/2024-porrentruy/slides-societe-juracienne-emulation-2024-04-27.tex @@ -0,0 +1,1313 @@ +\documentclass[aspectratio=169,t]{beamer} + +\input texinputs/taler-macros + + + +% +% Anonymity lecture. Part of the NGI TALER lecture series. +% Copyright (C) 2024 Emmanuel Benoist +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% + +% *Especially* edit these... +% \setbeameroption{show notes on second screen=right} % Both + +\newcommand{\SPEAKER}{Emmanuel Benoist} +\newcommand{\DATE}{27 avril 2024} +\title{} +\date{27 avril 2024 - Lycée de Porrentruy} + + +\newcommand{\TITLE}{Bitcoin et cryptomonnaies} +\newcommand{\SUB}{Société Jurassienne d'émulation} +\newcommand{\AUTHOR}{Emmanuel Benoist} +\newcommand{\INST}{Haute école spécialisée bernoise - BFH} + +% Do not edit this part +\title{\TITLE} +\subtitle{\SUB} +\date{\DATE} +\author[\SPEAKER]{\AUTHOR} +\institute{\INST} + +\usepackage{amsmath} +\usepackage{multimedia} +\usepackage[percent]{overpic} +\usepackage{url} +\usepackage{pifont} +\usepackage[absolute,overlay]{textpos} +\usepackage{listings} + +\usepackage{tikz, xcolor} +\usetikzlibrary{shapes,arrows,positioning} +\tikzset{ + %Define standard arrow tip + >=stealth', + %Define style for boxes + punkt/.style={ + rectangle, + rounded corners, + draw=black, very thick, + minimum width=3.5em, + minimum height=2em, + text centered}, + % Define arrow style + pull/.style={ + <->, + thick,draw=red, + shorten <=2pt, + shorten >=2pt,}, + % Define arrow style + pil/.style={ + ->, + thick, + shorten <=2pt, + shorten >=2pt,} +} + + +%\usepackage{tikz, xcolor} +%\usetikzlibrary{shapes,arrows} + + +\tikzstyle{decision} = [diamond, draw, text width=4.5em, + text badly centered, node distance=2cm, + inner sep=0pt] +\tikzstyle{block} = [rectangle, draw, text width=5em, + text centered, rounded corners, + minimum height=4em, node distance=3cm] +\tikzstyle{line} = [draw, -latex'] +\tikzstyle{lineeee} = [draw] +\tikzstyle{cloud} = [draw, ellipse, node distance=2.5cm, minimum height=2em] +\tikzstyle{walet} = [draw, rectangle, node distance=0.2cm, minimum height=2em] +\tikzstyle{reseau} = [node distance=0.2cm, minimum height=2em] +\tikzstyle{blank} = [node distance=1cm] + +\usetikzlibrary{shapes,arrows} +\usetikzlibrary{positioning} +\usetikzlibrary{calc} + + + + + +\begin{document} + + + + + +%\setbeamertemplate{background}{\includegraphics[width=\paperwidth]{background-first-page-bfh.jpg}} +\frame{\maketitle +} +%\setbeamertemplate{background}{\pgfuseimage{background}} + + + + + + + +\begin{frame} +\frametitle{Bitcoin et cryptomonnaies} +\tableofcontents + +\end{frame} + + + + + + +% \section{Les } +% \begin{frame}[containsverbatim] +% \frametitle{Bitcoin: Electronic Currency} +% \begin{itemize} +% \item \textbf{History of currencies} +% \begin{itemize} +% \item From the antiquity to 20th Century: Gold and Silver +% \item From 1972 : Currency = Trust +% \item ``Trust in a central bank'' or ``Trust in an algorithm''? +% \end{itemize} +% \item \textbf{Protocol} +% \begin{itemize} +% \item I should not be able to spend money more than once +% \end{itemize} +% \item \textbf{The Block-Chain} +% \begin{itemize} +% \item Security by transparence: everybody knows every transaction +% \end{itemize} +% \item \textbf{Peer 2 Peer network} +% \begin{itemize} +% \item How does the information travel the network +% \end{itemize} +% \item \textbf{Limitations} +% \begin{itemize} +% \item Can it replace Visa/Mastercard/Banks in transactions? +% \end{itemize} +% \end{itemize} +% \end{frame} + +\section{Un peu d'histoire} + +\begin{frame}[containsverbatim] +\frametitle{Les monnaies dans l'histoire} + \begin{block}{Monnaie: quelquechose que l'on peut échanger pour + payer et être payé} + \begin{itemize} + \item Doit avoir une valeur pour les deux parties + \item Doit être thésaurisable (vous vendez un boeuf maintenant et + rachetez une vache dans deux mois) + \end{itemize} + \end{block} + \begin{block}{Exemples de monnaies dans l'histoire} + \begin{itemize} + \item Sel pour payer les légionnaires romains (d'où salaire), + \item les fèves de cacao dans l'empire Aztec, + \item certains coquillages ont même servi de monnaie. + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Monnaies métalliques (I)} + + \begin{block}{Les métaux sont recherchés par nos sociétés humaines} + \begin{itemize} + \item Le Bronze : pour faire des armes + \item L'Argent : est rare et a une belle reflexion métallique + \item L'Or: a de nombreuses propriétés exceptionnels + + Ne peut pas être oxydé, ductile, très bonne conductivité, beau + \end{itemize} + \end{block} + \begin{block}{Ces métaux ont les propriétés recherchées pour les monnaies} + \begin{itemize} + \item Peuvent être accumulées et stockées sur un long terme, + \item beaucoup de valeur pour un très petit volume (surtout l'or) + \item aura toujours une valeur dans le future (confiance) - la + capacité de \emph{``créer''} de la monnaie est très limitée. + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Monnaies métalliques (II)} + \begin{block}{La valeur de la monnaie métallique varie fortement + avec le temps} + \begin{itemize} + \item Découverte des mines d'argent dans l'Amérique espagnole du + 16ème siècle, + \item Découverte de l'or californien change la valeur de l'or dans + la seconde moitié du 19ème siècle. + \end{itemize} + \end{block} + \begin{block}{La valeur intrinsèque du métal reste la même} + \end{block} + +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Un peu plus d'histoire (I)} + + \begin{block}{Les monnaies modernes étaient liées à l'or et/ou l'argent} + \begin{itemize} + \item Au 19ème Siècle, le Sterling était convertible en or (Gold + Standard) + \item Les pièces de 20 francs (Suisse, France, Italie, Belgique, + \dots : l'Union latine) étaient en or. + + Les pièces de 1 et 5 francs étaient en argent. + \item Le dollar US est resté convertible à l'or jusqu'en 1971. + \end{itemize} + \end{block} + \begin{block}{Actuellement: Monnaie = Confiance} + \begin{itemize} + \item Le Dollar n'est plus convertible en or à taux fixe. + \item Aucune valeur tangible n'est liée à une monnaie + \item Valeur d'une monnaie = Pure Confiance dans la banque centrale + \end{itemize} + \end{block} + +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Un peu plus d'histoire (II)} + + \begin{block}{Valeur de la monnaie?} + \begin{itemize} + \item Capacité de la banque centrale à payer des intérêts (quoi + que) + \item Confiance dans la banque centrale à limiter l'inflation + \item \emph{Inflation =} la valeur du papier que l'on garde diminue + + On peut acheter moins avec le même papier + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Problèmes avec les monnaies existantes (I)} + + \begin{block}{Controlées par les états} + \begin{itemize} + \item Les libertariens n'ont pas confiance dans l'état + \item Les traficants de drogue non plus. + \end{itemize} + \end{block} + \begin{block}{Les état dictent les règles pour les banques centrales} + \begin{itemize} + \item La Réserve fédérale (``Fed'') aux USA + \item La Banque centrale européenne BCE in Europe + \item La Banque nationale suisse en Suisse + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Problèmes avec les monnaies existantes (II)} + + \begin{block}{Les états et les banques peuvent suivre toutes les + transactions électroniques} + \begin{itemize} + \item Les transactions ont lieu de banque à banque + \item Clients peuvent être espionnés + \item Les banques collectent des frais + \end{itemize} + \end{block} + \begin{block}{Si une banque fait faillite, l'argent est perdu} + \begin{itemize} + \item Le client n'a pas de vrai contrôle sur son argent. + \end{itemize} + \end{block} + +\end{frame} + + + + +\begin{frame}[containsverbatim] +\frametitle{Une monnaie électronique} + + \begin{block}{Internet est un nouveau territoire} + \begin{itemize} + \item Pas relié à un pays (ou état) + \item Certaines transactions ne sont qu'électroniques (ebooks, + films, licences de softwares, jeux, journaux \dots) + \end{itemize} + \end{block} + \begin{block}{Cahier des charges pour une nouvelle monnaie} + \begin{itemize} + \item Ne doit pas être contrôlée par un état + \item Doit avoir une valeur stable + \item Transactions gratuites (si possible pas de frais) + \item La monnaie ne doit pas être dépensée deux fois (trivial avec + l'or, plus difficile avec des données). + \end{itemize} + \end{block} +\end{frame} + + +\section{Vocabulaire} + +\begin{frame} +\frametitle{Vocabulaire (I)} + + \begin{block}{Fonction de hashage = fonction à sens unique} + \begin{itemize} + \item $z=h(x)$ est facile à calculer + \item $x=h^{-1}(z)$ est en pratique impossible à calculer + \item Exemples : SHA256, SHA512 + \end{itemize} + + \end{block} +\end{frame} + +\begin{frame} +\frametitle{Vocabulaire (II)} + \begin{block}{Cryptographie asymétrique} Basée sur une paire de clés + \begin{itemize} + \item \emph{Clé privée} connue uniquement du propriétaire + \item \emph{Clé publique} peut être connue de tous + \end{itemize} + Avec la clé publique on peut encrypter, mais le décryptage se fait + avec la clé privée + + Avec la clé privée on peut signer, on vérifie avec la clé publique + + Exemples: RSA, ElGamal, Courbes éliptiques. + \end{block} + +\end{frame} +\section{Le Bitcoin} + + +\begin{frame}[containsverbatim] +\frametitle{Le Bitcoin} + + \begin{block}{Inventé en 2008 par ``Satoshi Nakamoto''} + \begin{itemize} + \item Monnaie virtuelle (Cryptocurrency) basée sur un logiciel open source + \end{itemize} + \end{block} + \begin{block}{Bitcoin est entièrement transparent} + \begin{itemize} + \item Le logiciel client est open source + \item Toutes les transactions sont publiées dans une + \emph{``Blockchain''} que tous les clients devraient downloader + \item Les validatations des transactions sont faites on-line par + des volontaires qui calculent la \emph{Blockchain} + \item Les volontaires reçoivent des nouveaux bitcoins (comme des + pépites d'or). On les appelle les \emph{``mineurs''}. + + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Une transaction (I)} + + \begin{block}{L'argent est stocké dans une \emph{``Adresse''}} + \begin{itemize} + \item Une \emph{adresse} est un nombre (pas vraiment) aléatoire + \item De l'argent lui est affecté + \end{itemize} + \end{block} + \begin{block}{Transaction} + \begin{itemize} + \item Une \emph{transaction} est lorsque de l'argent est transféré + d'une adresse à une autre. + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Une transaction (II)} + \begin{block}{Toutes les transactions sont stockées dans une + gigantesque \emph{``Blockchain''}} + \begin{itemize} + \item Contient toutes les transactions depuis la naissance des + Bitcoins + \item On peut voir l'argent circuler d'une adresse à une autre + \item On peut savoir exactement combien d'argent contient chaque + adresse. + \item Lorsqu'une transaction est ajoutée à la blockchain, + l'argent est transféré d'une adresse à une autre. + \item Tout le monde voit toutes les transactions et les adresses. + \end{itemize} + \end{block} +\end{frame} + + + + +\begin{frame}[containsverbatim] +\frametitle{Une Adresse (I)} + + \begin{block}{Une adresse n'est pas un nombre aléatoire: c'est le + hash d'une clé publique.} + \begin{itemize} + \item L'utilisateur génère une paire de clés asymétriques (clés + publique et privée) + \item La clé publique est gardée secrète. + + Comme l'argent peut rester longtemps sur une adresse donnée, il + pourrait être possible de casser la clé publique si elle était + connue. + \item Le hash de la clé publique est publié, c'est ce que nous + appelons une \emph{adresse} + \end{itemize} + \end{block} + +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Une Adresse (II)} + + \begin{block}{Comment dépenser de l'argent} + \begin{itemize} + \item L'utilisateur doit publier sa clé publique. + + Tout le monde peut vérifier que la clé publique correspond au + hash connu (i.e. l'adresse). + \item L'utilisateur peut ensuite signer la transaction avec sa clé + privée + \item Tout le monde peut (et doit) vérifier que la clé privée + utilisée correspond bien à la clé publique publiée qui + correspond aussi à l'adresse connue dans la blockchain. + \item La nouvelle transaction est ajoutée à la blockchain. + + \end{itemize} + \end{block} + +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Une Adresse (III)} + + \begin{block}{Usage} + \begin{itemize} + \item L'utilisateur devrait dépenser tout l'argent d'une adresse + en une seule fois (de manière que l'adresse ne soit plus + utilisée) + \item Si l'utilisateur veut transférer moins d'argent que le + total, il envoie le reste de l'argent vers une nouvelle adresse. + \item Si l'utilisateur a besoin de plus d'argent, il va regrouper + plusieurs adresses + \item Pour grouper plusieurs adresses, l'utilisateur a besoin de + TOUTES les clés privées. + \end{itemize} + \end{block} +\end{frame} + + \begin{frame} + \frametitle{Alice achète quelquechose à Bob} + + +% \only<1>{Alice veut acheter quelque chose à Bob} +% \only<2>{Bob lui génère une adresse Bitcoin pour recevoir de l'argent} +% \only<3>{Bob envoie un message à Alice \emph{"Envoie BTC 0.3 à 35UuDbjJ"}} +% \only<4>{Alice génère une nouvelle transaction depuis une de ses adresses} +% \only<5>{Bob met à jour sa copie de la Blockchain} +% \only<6>{Bob vérifie qu'une transaction arrive à +% 35UuDbjJ} +% \only<7>{Bob envoie l'objet à Alice} +%35UuDbjJWfVGLL4xfYu2zQBCUBCrcBZrLJ +\begin{center} +\begin{tikzpicture}[node distance=0.2cm, auto,] + %nodes +\node[punkt](alice){Alice}; +\node<1-4>[walet,left= of alice](waletA1){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\50&anvjuerjHH\\8.7&NNjuURZZ\\300&UUIODG7\end{tabular}}; +\node<5->[walet,left= of alice,node distance=-0.5cm](waletA2){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\50&anvjuerjHH\\8.7&NNjuURZZ\end{tabular}}; + \node[right=of alice] (dummy) {}; +\node[punkt,right= of dummy](bob){Bob}; +\node<1-1>[walet,right= of bob](waletB1){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\~&~\end{tabular}}; +\node<2-5>[walet,right= of bob](waletB2){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\&35UuDbjJ\end{tabular}}; +\node<6->[walet,right= of bob](waletB3){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\300&35UuDbjJ\end{tabular}}; + +%\node[cloud,right= of dummy](bob){Bob}; +%\node<1,6>[above= of bob](grass){\includegraphics[width=0.25\textwidth]{imagesPresentation/cannabis.jpg}}; + % \path<1-> [line] (bob) -- (alice); + +%\node<7-7>[above= of alice](grass2){\includegraphics[width=0.25\textwidth]{imagesPresentation/cannabis.jpg}}; + \node<3-3>[blank,below=of dummy](code) {\includegraphics[width=0.25\textwidth]{imagesPresentation/qrcode-bitcoin.png}} + (bob.south) edge[pil] (code) + (code) edge[pil] (alice.south); +%\node<3-3>[below= of code]{Envoie BTC 0.03 à cette adresse}; + +\node<4-5>[ below= of alice](transaction)[text width=5cm]{{\small + (0.03, UUIODG7 $\rightarrow$ 35UuDbjJ)}}; +\node[below= of dummy](dummy2){}; +\node<4->[below= of dummy2](cloud){\includegraphics[width=0.15\textwidth]{imagesPresentation/network-cloud-hi.png}}; +%(transaction.south) edge[->, bend right=45] (cloud.west) +\path<4>(transaction.south) edge[->, bend right=45] (cloud.west); +\node<4->[below= of cloud,punkt](blockchain){Blockchain}; + +\node<4->[walet,below= of blockchain](waletBC){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\50&anvjuerjHH\\8.7&NNjuURZZ\\0&UUIODG7 \\300&35UuDbjJ\end{tabular}}; + +\node<5->[below= of waletB1,punkt](blockchain2){Blockchain}; + \path<5> [line] (blockchain) -- (blockchain2); +\node<5->[walet,below= of blockchain2](waletBC2){\tiny\begin{tabular}{r|l}\textbf{mBTC}&\textbf{Adresse}\\50&anvjuerjHH\\8.7&NNjuURZZ\\0&UUIODG7 \\300&35UuDbjJ\end{tabular}}; + \path<7> [line] (bob) -- (alice); + + + + + +% \node<4>[below=of dummy] (d) {Données} +% (alice.east) edge[pil, bend right=45] (d) +% (d) edge[pil, bend right=45] (bob.west); +\end{tikzpicture} +\end{center} +\end{frame} + + +\section{La Blockchain} + +\begin{frame}[containsverbatim] +\frametitle{Partage des Transactions (I)} + + \begin{block}{Toutes les transactions doivent être publiques} + \begin{itemize} + \item Il n'y a pas de banque pour valider une transaction + \item C'est la tâche de la communauté + \end{itemize} + \end{block} + \begin{block}{Chaque transaction doit être envoyée au réseau peer2peer.} + \begin{itemize} + \item Le protocole transfert la transaction à tout le + réseau + \item Chaque noeud doit connaitre toutes les transactions + \end{itemize} + \end{block} +\end{frame} +\begin{frame}[containsverbatim] +\frametitle{Partage des Transactions (II)} + \begin{block}{Problèmes} + \begin{itemize} + \item Un noeud n'est pas on-line 100\% du temps + \item Un noeud peut ratter des transactions + \end{itemize} + \end{block} + \begin{block}{Besoin d'une liste des transactions} + \begin{itemize} + \item Ne peut pas être simplement une immense liste monolithique + \item Doit contenir des blocs, c'est une chaine de blocs la + \emph{blockchain} + \item Doit être validée et unique + \end{itemize} + \end{block} + +\end{frame} + + + +\begin{frame}[containsverbatim] +\frametitle{Blockchain} + + \begin{block}{La blockchain contient toutes les transactions depuis + la création du bitcoin} + \begin{itemize} + \item Sa taille actuelle est de 570GB + \end{itemize} + \end{block} + \begin{block}{Chacun peut en avoir une copie (et devrait)} + \begin{itemize} + \item Le client Satoshi (logiciel standard: Bitcoin Core) + télécharge la chaine entière. + \item Il peut vérifier chaque adresse et donc pour chaque + transaction indiquer si elle est valide. + \item Il peut voir si une transaction est incluse dans la blockchain + \end{itemize} + \end{block} +\end{frame} + + +\section{Le Minage de Bitcoins} +\begin{frame}[containsverbatim] +\frametitle{Validation des transactions (I)} + + \begin{block}{Les blocs doivent être validés par quelqu'un} + \begin{itemize} + \item Quelles transactions sont acceptées et lesquelles sont + rejetées? + \item Impossible d'avoir une unique autorité centrale (banque + centrale ou clearing agency). + \end{itemize} + \end{block} + \begin{block}{Un partenaire du réseau va valider UN bloc} + \begin{itemize} + \item Il choisit l'ensemble des transactions valides + \item Très grande responsabilité + \item Ce rôle doit être donné à un des membres du réseau au hasard: Comment + produire un hasard distribué? + + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Validation des transactions (II)} + + \begin{block}{La preuve de travail \emph{``proof of work''}} + \begin{itemize} + \item Le validateur doit générer un ``nonce'' (un nombre + quelconque) et l'ajouter à l'ensemble des transactions, ensuite + il calcule un hash du tout. + + $hash(Transaction1+Transaction2+Transaction3+...+ nonce)$ + \item Le nonce est valide si le hash démarre avec X zéros en + notation binaire (X doit + varier pour empêcher de générer plus d'un bloc toutes les 10 minutes). + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Le mining de Bitcoins (I)} + + \begin{block}{Un Mineur Alice choisit certaines transactions} + \begin{itemize} + \item Initialement: toutes les transactions + \item Actuellement: Uniquement les transactions donnant un bonus + au mineur sont sélectionnées + \end{itemize} + \end{block} + \begin{block}{Alice ajoute une transaction vers elle-même} + \begin{itemize} + \item Alice crée une nouvelle adresse vers laquelle de nouveaux + bitcoins sont transférés + \item C'est la pépite du mineur + \item La taille de la pépite est réduite (divisée par 2) environ + tous les 4 ans : Le Halving (la semaine dernière). + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Le mining de Bitcoins (II)} + + \begin{block}{Le mineur doit ensuite générer une preuve de travail ``proof of work''} + \begin{itemize} + \item L'idée est d'avoir ainsi une méthode aléatoire de choix des + responsables de la validation des blocs. + \item Sur le long terme, les pépites devaient compenser les coûts + du minage. + \item En réalité, les transactions sont payantes (des frais + proportionnels à la taille de la transaction sont exigés par les mineurs). + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Preuve de travail I} + + \begin{block}{Idée comment choisir aléatoirement un partenaire? } + \begin{itemize} + \item Chacun fait des calculs aléatoires et le premier à trouver + un résultat satisfaisant a gagné. + \end{itemize} + \end{block} + \begin{block}{Problème: obtenir un résultat débutant avec un nombre + donné de zéros} + \begin{itemize} + \item Une fonction de hashage est vue comme un générateur + aléatoire + \item Pour générer des valeurs différentes, il suffit de changer + la valeur à hasher: Ajouter un nonce + + Hasher une valeur avec un nonce = acheter un billet de + loterie + \item Chaque hash calculé = nouvelle chance de gagner + \end{itemize} + \end{block} +\end{frame} + + +\begin{frame}[containsverbatim] +\frametitle{Preuve de travail II} + + + \begin{block}{Exemple} + + +\footnotesize +hash(Transaction1+Transaction2+Transaction3+"AAAAAAAAA")=AE4529EB90 + +hash(Transaction1+Transaction2+Transaction3+"AAAAAAAAB")=90A63BB89C + +\dots + +hash(Transaction1+Transaction2+Transaction3+"AAAAABERFP")=00301230FF + +A 10 zéros au début (en forme binaire): valeur OK!!! + \end{block} +\end{frame} + + + + + +\begin{frame}[containsverbatim] +\frametitle{Deux blocs sont trouvés en parallèle (I)} + \begin{block}{2 mineurs trouvent un bloc simultanément} + \begin{itemize} + \item Les deux blocs entrent en compétition + \item A long terme, la blockchain la plus longue est conservée + \item Seul le premier à avoir un successeur sera conservé + \end{itemize} + \end{block} +\end{frame} + + + + + +\begin{frame}[containsverbatim] +\frametitle{Deux blocs sont trouvés en parallèle (II)} + \begin{block}{Exemple de compétition entre blocs} + \begin{itemize} + \item On a la blockchain $Chain$ + \item Team A et Team B trouvent le blocs : $Block_A$ and $Block_B$ + \item On a 2 blockchains: + + $Chain+Block_A$ and $Chain+Block_B$ + \item Certain noeuds reçoivent l'une, d'autre l'autre. + \item Un mineur trouve un nouveau block: $Block_C$ basé sur + $Chain+Block_B$ + \item On a 2 blockchains: + + $Chain+Block_A$ and $Chain+Block_B+Block_C$ + + La chaine la plus longue gagne. + \end{itemize} + \end{block} +\end{frame} + + + + +\frame[containsverbatim]{ +\frametitle{Protection de la sphère privée} + + \begin{block}{Les transactions sont toutes publiques} + \begin{itemize} + \item La blockchain peut être downloadée par tout le monde + \item On peut utiliser des sites pour voir les transactions + (\url{https://blockchain.info/}) + \item On voit pour une adresse les transactions entantes et sortantes + \end{itemize} + \end{block} + \begin{block}{Besoin d'anonymat} + \begin{itemize} + \item Des services sont spécialisés dans le \emph{tumblering} + \item On envoie de l'argent à une adresse, l'argent est renvoyé à + une nouvelle adresse (depuis une adresse différente). + \item Les deux adresses ne sont plus liées. + \end{itemize} + \end{block} + +} + + +\begin{frame} +\frametitle{Algorithmes utilisés} + +\begin{block}{Hashage} + \begin{itemize} + \item SHA256 + \item Fonction à sens unique transformant la clé publique en adresse + \end{itemize} +\end{block} +\begin{block}{Clés publiques et privées} + \begin{itemize} + \item Clé privée $priv$, un nombre aléatoire de 256 bits + \item Courbe Eliptique avec un point générateur $G$ + \item Clé publique $Pub = priv \times G$ un point de la courbe + \item Multiplication d'un point générateur par un scalaire, produit + un autre point de la courbe. +\item Impossible d'inverser cette multiplication. + \end{itemize} +\end{block} + +\end{frame} + + +% \section{Monero} + +% \begin{frame} +% \frametitle{Monero} + +% \begin{block}{Une cryptomonnaie faite pour protéger la sphère privée} +% \begin{itemize} +% \item Les utilisateurs veulent garder l'anonymat sur leurs +% transactions, +% \item Pour des actions illégales (Ransomware, Darkmarkets), +% \item Pour protéger leur vie privée. +% \end{itemize} +% \end{block} +% \begin{block}{La blockchain reste publique} +% \begin{itemize} +% \item Chacun peut la lire, la copier, vérifier les transactions +% \end{itemize} +% \end{block} +% \begin{block}{Les tranactions sont anonymes} +% \begin{itemize} +% \item Impossible de savoir d'où vient une transaction +% \item Impossible de savoir le montant d'une transaction +% \end{itemize} +% \end{block} +% \begin{block}{Solution} +% \begin{itemize} +% \item Signature d'anneau (\emph{``Ring signature''}) +% \end{itemize} +% \end{block} + +% \end{frame} + + + +% \begin{frame} +% \frametitle{Transactions pour Monero} + + +% \only<1>{Alice veut acheter de l'herbe à Bob} +% \only<2>{Bob envoie sa clé publique $B_{pub}$ à Alice} +% \only<3>{Alice génère une transaction à destination de $B_{ pub}$. } +% \only<4>{Alice choisit dans ses transactions, celle dont elle prend l'argent} +% \only<5>{La transaction choisie est cachée dans un ensemble de 11 +% transactions (aléatoires).} +% \only<6>{Alice signe l'anneau des 11 transactions} +% \only<7>{Alice envoie la nouvelle transaction sur la blockchain} +% \only<8>{Bob met à jour sa copie de la Blockchain} +% \only<9>{Bob vérifie qu'une transaction arrive bien à destination +% de $B_{priv}$, et son montant. (Il est le seul à pouvoir le faire)} +% \only<10>{Bob envoie l'herbe} +% %35UuDbjJWfVGLL4xfYu2zQBCUBCrcBZrLJ +% \begin{center} +% \begin{tikzpicture}[node distance=0.5cm, auto,] +% %nodes +% \node[punkt](alice){Alice}; +% \node<1-4>[walet,left= of alice](waletA1){\tiny\begin{tabular}{r|l}\textbf{mXMR}&\textbf{Adresse}\\300&UUIODG7\end{tabular}}; +% \node<5->[walet,left= of alice,node distance=-0.5cm](waletA2){\tiny\begin{tabular}{r|l}\textbf{mXMR}&\textbf{Adresse}\\~&~\end{tabular}}; +% \node[right=of alice] (dummy) {}; +% \node[punkt,right= of dummy](bob){Bob}; +% \node<1-9>[walet,above= of bob](keyb){\tiny ($B_{pub}$,$B_{priv}$) }; +% \node<2-9>[walet,above= of alice](keya){\tiny $B_{pub}$ }; +% \path<2> [line] (bob) -- node [near start] {$B_{pub}$} (alice); +% \node<1-8>[walet,right= of bob](waletB1){\tiny\begin{tabular}{r|l}\textbf{mXMR}&\textbf{Adresse}\\~&~\end{tabular}}; +% %\node<2-5>[walet,right= of bob](waletB2){\tiny\begin{tabular}{r|l}\textbf{mXMR}&\textbf{Adresse}\\&35UuDbjJ\end{tabular}}; +% \node<9->[walet,right= of bob](waletB3){\tiny\begin{tabular}{r|l}\textbf{mXMR}&\textbf{Adresse}\\300&35UuDbjJ\end{tabular}}; + +% \node[reseau,above= of waletB1](grass){\includegraphics[width=0.25\textwidth]{imagesPresentation/cannabis.jpg}}; + +% \node<10->[reseau,above= of waletA2](grass2){\includegraphics[width=0.25\textwidth]{imagesPresentation/cannabis.jpg}}; +% \path<10> [line] (grass) -- (grass2); + + +% \node<3-4>[ below= of waletA1](transaction)[text width=5cm]{{\small +% (XMR 0.3, 35UuDbjJ)}}; +% \node<5-7>[ below= of waletA1](transaction2)[text width=5cm]{{\tiny +% \begin{tabular}{lll}\textbf{Origines}&\textbf{Montant}&\textbf{Destination}\\UUIODG7 &XMR 0.3& 35UuDbjJ\\anvjuerjHH&&\\NNjuURZZ&&\\\end{tabular}}}; + +% \node[below= of dummy](dummy2){}; +% \node[below= of dummy](cloud){\includegraphics[width=0.15\textwidth]{imagesPresentation/network-cloud-hi.png}}; + +% %\path<4>(transaction.south) edge[->, bend right=45] (cloud.west); +% \node[below= of cloud,punkt](blockchain){Blockchain}; + +% \node<1-4>[walet,below= of blockchain](waletBC){\tiny\begin{tabular}{l}\textbf{Transactions}\\anvjuerjHH\\NNjuURZZ\\UUIODG7\end{tabular}}; +% \node<5-5>[walet,below= of blockchain](waletBC){\tiny\begin{tabular}{l}\textbf{Transactions}\\\textbf{anvjuerjHH}\\\textbf{NNjuURZZ}\\UUIODG7 \end{tabular}}; +% \node<6->[walet,below= of blockchain](waletBC){\tiny\begin{tabular}{l}\textbf{Transactions}\\anvjuerjHH\\NNjuURZZ\\UUIODG7 \\\textbf{35UuDbjJ}\end{tabular}}; + +% \node<8->[below= of waletB1,punkt](blockchain2){Blockchain}; +% \path<8> [line] (blockchain) -- (blockchain2); +% \node<8->[walet,below= of blockchain2](waletBC2){\tiny\begin{tabular}{r}\textbf{Transactions}\\anvjuerjHH\\NNjuURZZ\\UUIODG7 \\\textbf{35UuDbjJ}\end{tabular}}; +% \path<7> [line] (bob) -- (alice); + + + + + + +% % \node<4>[below=of dummy] (d) {Données} +% % (alice.east) edge[pil, bend right=45] (d) +% % (d) edge[pil, bend right=45] (bob.west); +% \end{tikzpicture} +% \end{center} +% \end{frame} + +% \begin{frame} +% \frametitle{Algorithmes utilisés par Monero} + +% \begin{block}{Hashage} +% \begin{itemize} +% \item Pour la proof of work : CryptoNight (utilisant CryptoNote) +% \item Difficile pour les ``application-specific integrated +% circuits'' (ASIC) +% \end{itemize} +% \end{block} +% \begin{block}{Signature de cercle} +% \begin{itemize} +% \item Schema de signature MLSAG (Liu, Wei et Wong) +% \end{itemize} +% \end{block} +% \begin{block}{Cryptographie asymétrique (clés publiques et privées)} +% \begin{itemize} +% \item Courbes éliptiques (multiplication par un scalaire est +% triviale, division difficile). +% \end{itemize} +% \end{block} + +% \end{frame} + +\section{Ethereum} + +\begin{frame} + \frametitle{Ethereum} + \begin{block}{Monnaie décentralisée basée sur une block chain} + \begin{itemize} + \item Comme Bitcoin + \item La block chain est répartie entre de multiples ordinateurs + \end{itemize} + \end{block} + + \begin{block}{Autorise des smart contracts (contrats intelligents)} + \begin{itemize} + \item Ethereum autorise l'execution de programmes (contrats + intelligents) + \item Ces programmes peuvent juste transférer de l'argent d'une + adresse à une autre, + \item Ils peuvent aussi être beaucoup plus complexes. + \item Le language est Turing complet. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \frametitle{Transactions} + + \begin{block}{Coûts des transactions} + \begin{itemize} + \item Les utilisateurs doivent payer pour que leur contrat soit + executé + \item Plus le contrat nécessite de calculs, plus il faut payer. + \end{itemize} + \end{block} + + \begin{block}{Choix des transactions} + \begin{itemize} + \item Ethereum utilise la ``proof of stake'' (preuve d'enjeu) pour + déterminer le valideur du prochain bloc. + \end{itemize} + \end{block} + + \begin{block}{Preuve de travail (=Bitcoin)} + \begin{itemize} + \item Tous les mineurs doivent calculer en boucle des hash. + \item Très inefficace ! Très gros impact énergétique et écologique! + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \frametitle{Preuve d'enjeu} + \begin{block}{Preuve d'enjeu} + \begin{itemize} + \item Les utilisateurs peuvent mettre des Ethereum en ``otage'' + (enjeu). + \item Parmis ces utilisateurs, un est choisi pour créer le bloc + (et donc toucher la récompense). + \item S'il choisit normalement le bloc, tout va bien, + \item S'il triche, il perd tout son argent mis en gage. + \end{itemize} + \end{block} + \begin{block}{Avantage} + \begin{itemize} + \item Beaucoup moins de consommation d'énergie, + \item Tricher reste très difficile (risque de tout perdre). + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \frametitle{Ethereum} + \begin{block}{Une monnaie numérique plus écologique} + \begin{itemize} + \item Passage de ``proof of work'' à ``proof of stake'' + \item Baisse de la consommation d'énergie de 99.95\% + \end{itemize} + \end{block} + \begin{block}{Mais toujours très consommatrice} + \begin{itemize} + \item Chaque calcul est répliqué (et vérifié) sur toutes les + machines + \item Chaque calcul est fait 6000 fois. + \end{itemize} + \end{block} +\end{frame} + +\section{Taler} + +\begin{frame}{GNU-Taler } + + \begin{block}{Cash-électronique} + \begin{itemize} + \item Le consommateurs retirent de l'argent électronique + (anonymisé) depuis leur banque, + \item Ils peuvent s'échanger librement cet argent, + \item Ils peuvent payer à un commerçant, + \item Le commerçant dépose l'argent électronique à sa banque et + son compte est crédité. + \end{itemize} + \end{block} + \begin{block}{Pas une cryptomonnaie} + \begin{itemize} + \item Pas de block chain, + \item La banque est responsable des billets émis. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}{Taler : Vue d'ensemble} +\begin{center} +\begin{tikzpicture} + \tikzstyle{def} = [node distance= 4.5em and 6em, inner sep=1em, outer sep=.3em]; + \node (origin) at (0,0) {}; + \node (exchange) [def,above=of origin,draw]{Banque}; + \node (customer) [def, draw, below left=of origin] {Consommateur}; + \node (merchant) [def, draw, below right=of origin] {Marchand}; + \node (auditor) [def, draw, above right=of origin]{Auditeur}; + + \tikzstyle{C} = [color=black, line width=1pt] + + \draw [<-, C] (customer) -- (exchange) node [midway, above, sloped] + (TextNode) {retire des jetons}; + \draw [<-, C] (exchange) -- (merchant) node [midway, above, sloped] + (TextNode) {depose les jetons}; + \draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] + (TextNode) {dépense les jetons}; + \draw [<-, C] (exchange) -- (auditor) node [midway, above, sloped] (TextNode) {vérifie}; + +\end{tikzpicture} +\end{center} +\end{frame} + +\begin{frame}{Comment ça marche? (I)} +\begin{block}{Signature à l'aveugle (lors du retrait des jetons)} + \begin{itemize} + \item Le consommateur génère un jeton, + \item Il anonymize le jeton, + \item Il envoie le jeton anonymizé à la banque pour signature, + \item La banque signe le jeton anonymizé, + \item Le consommateur récupère son jeton dé-anonymizé et signé + \end{itemize} +\end{block} + +\begin{block}{2 versions} + \begin{itemize} + \item Pour RSA : David Chaum + \item Pour les courbes éliptiques : Clause Schnorr + \end{itemize} +\end{block} +\end{frame} + +\begin{frame}{Comment ça marche? (II)} +\begin{block}{Protection de la sphère privée} + \begin{itemize} + \item La banque sait exactement quel marchand a reçu combien : + taxable, pas de trafic, pas de blanchiement d'argent. + \item Personne ne sait comment le client dépense son argent qui est + intraçable (grâce à la signature à l'aveugle). + \end{itemize} +\end{block} +\end{frame} + + + +\begin{frame}{Taler : plan de déploiement} + + \begin{block}{En Suisse} + \begin{itemize} + \item \textit{Netzbon} : Monnaie locale à Bâle, en cours de + déploiement + \item \textit{Interne à la BFH} : Automate à snacks (bientôt + aussi automate à café). + \item \textit{CHF dans toute le Suisse} : en cours de déploiement + \end{itemize} + \end{block} + \begin{block}{Reste du monde} + \begin{itemize} + \item \textit{Projet NGI-Taler} avec une banque allemande (pour un + déploiement en 2025 dans la zone euro), et une banque hongroise. + \item \textit{Depolymerizer} Paiements en Bitcoins à travers + Taler. Déjà opérationel. + \end{itemize} + \end{block} +\end{frame} + +% \section{Vue d'ensemble} +% \begin{frame} +% \frametitle{Cryptomonnaies \footnote{\url{https://coinmarketcap.com/all/views/all/}}} + +% \begin{block}{Bitcoin BTC (71 milliards de USD)} +% \begin{itemize} +% \item Première et plus grosse monnaie, très utilisée sur le Darknet, +% \item Fonction de Hashage: SHA256 +% \end{itemize} +% \end{block} +% \begin{block}{Ethereum ETH (14 milliards de USD)} +% \begin{itemize} +% \item Permet les ``smart contracts'' avec un langage Turing +% complet, qui s'executent dans des machines virtuelles. +% \end{itemize} +% \end{block} +% \begin{block}{XRP (12 milliards de USD)} +% \begin{itemize} +% \item Fonction de hashage: scrypt (requière beaucoup plus de mémoire). +% \end{itemize} +% \end{block} +% \begin{block}{Bitcoin Cash BCH (3 milliards de USD)} +% \begin{itemize} +% \item Hard Fork de Bitcoin, juillet 2017 +% \item Taille des blocs passe de 1MB à 8MB +% \end{itemize} +% \end{block} +% \begin{block}{...} +% \end{block} +% \begin{block}{Monero (900 millions de USD)} +% \begin{itemize} +% \item Très orienté protection de la sphère privée +% \item Ni les montants, ni les destinataires ne sont connus. +% \end{itemize} +% \end{block} +% \end{frame} + + +\section{Conclusion} +\begin{frame} +\frametitle{Conclusion (I)} +\begin{block}{Nombreuses Cryptomonnaies} + \begin{itemize} + \item Des centaines de cryptomonnaies + \item Les principales : BTC et ETH + \end{itemize} +\end{block} + +\begin{block}{Principes} + \begin{itemize} + \item Une blockchain copiée sur des milliers d'ordinateurs + \item Pas facile de faire un consensus entre des acteurs + indépendants (proof of work vs proof of stake). + \end{itemize} +\end{block} +\end{frame} + +\begin{frame}{Conclusion (II)} +\begin{block}{Problèmes principaux} + \begin{itemize} + \item Consommation d'énergie (proof of work surtout) + \item Consommation d'énergie (proof of stake aussi) + \item Consommation de place (réplication des informations sur tous + les ordinateurs). + \item Délai dans la validation d'une transaction (pour éviter la + double dépense), peut atteindre 24h pour les gros montants + \item Coût des transactions : impossible de faire des micro-paiements. + \end{itemize} +\end{block} +\end{frame} + +\begin{frame}{Conclusion (III)} +\begin{block}{Alternative : Jetons} + \begin{itemize} + \item Des jetons émis par une banque centrale ou une banque + commerciale. + \item Echanges immédiats (validation par la banque) + \item Coûts de transaction minimes (dépend de la politique de la banque / banque + centrale). + \item Possibilité de micro-paiements. + \item Possible avec toutes les monnaies : CHF, EUR, Bitcoin, etc. + \end{itemize} +\end{block} + + + +\end{frame} + + +\begin{frame} +\frametitle{Questions?} +\begin{block}{Contact: emmanuel.benoist@bfh.ch} +\end{block} +\begin{block}{Web : https://www.benoist.ch} +\end{block} +\end{frame} + +% \begin{frame} +% \frametitle{Test Tikz Picture} +% \begin{center} +% \begin{tikzpicture}[node distance=1cm, auto,] +% %nodes +% \node[punkt] (implant) {Implant}; +% \node[below=of implant] (dummy) {}; + +% \node[below=of dummy] +% (physician) {\includegraphics[width=0.25\textwidth]{qrcode-bitcoin.png}}; +% \node[below=of physician] (dummy2) {}; +% \node[punkt, inner sep=5pt,below=of dummy2] +% (constructor) {Fabricant}; +% % We make a dummy figure to make everything look nice. +% \node[right=of dummy] (t) {Mise à jour Firmware} + +% (t) edge[pil,bend right=45] (implant.east) % edges are used to connect two nodes +% (physician.east) edge[pil, bend right=45] (t); % .east since we want +% % consistent style +% \node[left=of dummy] (d) {Données} +% (implant.west) edge[pil, bend right=45] (d) +% (d) edge[pil, bend right=45] (physician.west); +% %edge[pil,<->, bend left=45] +% %node[auto] {Direct (a)} (t) +% \node[right=of dummy2] (t2) {Mise à jour Firmware} + +% (t2) edge[pil,bend right=45] (physician.east) % edges are used to connect two nodes +% (constructor.east) edge[pil, bend right=45] (t2); % .east since we want +% % consistent style +% \node<2>[left=of dummy2] (d2) {Données} +% (physician.west) edge[pil, bend right=45] (d2) +% (d2) edge[pil, bend right=45] (constructor.west); +% \end{tikzpicture} +% \end{center} +% \end{frame} + + +% \begin{frame} +% \frametitle{test TIKZ 2} +% \begin{tikzpicture}[node distance = 3cm, auto] +% % Place nodes +% \node [cloud] (init) {n}; +% \node [blank, below of=init] (sup) {}; +% \node [decision, below of=sup] (square) {$n^2 \le 1$}; +% \node [cloud, right of=square] (end) {End}; +% \node [block, left of=square] (newN) {$n = \frac{2}{n}$}; + +% % Draw edges +% \path<1-> [lineeee] (init) -- (square); +% \path<2> [line] (square) -- node [near start] {yes} (end); +% \path<3-> [line] (square) -- node [near start] {no} (newN); +% \path<4> [line] (newN) |- (sup); +% \end{tikzpicture} + +% \end{frame} +% This should be last... +\begin{frame}{Acknowledgements} + + \begin{minipage}{0.45\textwidth} \ \\ + {\tiny Funded by the European Union (Project 101135475).} + + \begin{center} + \includegraphics[width=0.5\textwidth]{texinputs/images/bandera.jpg} + \end{center} + \end{minipage} + \hfill + \begin{minipage}{0.45\textwidth} + {\tiny Funded by SERI (HEU-Projekt 101135475-TALER).} + + \begin{center} + \includegraphics[width=0.65\textwidth]{texinputs/images/sbfi.jpg} + \end{center} + \end{minipage} + + \vfill + + {\tiny Views and opinions expressed are however those of the author(s) only + and do not necessarily reflect those of the European Union. Neither the + European Union nor the granting authority can be held responsible for + them.} +\end{frame} + + +\end{document} diff --git a/presentations/2024-porrentruy/texinputs/images/bandera.jpg b/presentations/2024-porrentruy/texinputs/images/bandera.jpg Binary files differ. diff --git a/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER.ai b/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER.ai @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg2137" + width="553.96533" + height="170.64532" + viewBox="0 0 553.96533 170.64532" + sodipodi:docname="logo_NGI_TALER.ai" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2141"> + <linearGradient + inkscape:collect="always" + id="linearGradient4636"> + <stop + style="stop-color:#0042b3;stop-opacity:1;" + offset="0" + id="stop4632" /> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="1" + id="stop4634" /> + </linearGradient> + <linearGradient + x1="0" + y1="0" + x2="1" + y2="0" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-139.45511,-135.52185,-135.52185,139.45511,177.4727,131.75308)" + spreadMethod="pad" + id="linearGradient2163"> + <stop + style="stop-opacity:1;stop-color:#00afbc" + offset="0" + id="stop2159" /> + <stop + style="stop-opacity:1;stop-color:#205374" + offset="1" + id="stop2161" /> + </linearGradient> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath2173"> + <path + d="M 0,127.984 H 415.474 V 0 H 0 Z" + id="path2171" /> + </clipPath> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4636" + id="linearGradient4654" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="namedview2139" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="2.6373491" + inkscape:cx="250.63045" + inkscape:cy="85.312938" + inkscape:window-width="1920" + inkscape:window-height="1015" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="g2145"> + <inkscape:page + x="0" + y="0" + id="page2143" + width="553.96533" + height="170.64532" + inkscape:export-filename="logo-NGI_TALER_Bold_.svg" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" /> + </sodipodi:namedview> + <g + id="g2145" + inkscape:groupmode="layer" + inkscape:label="Page 1" + transform="matrix(1.3333333,0,0,-1.3333333,0,170.64533)"> + <g + id="g2147" + style="mix-blend-mode:difference;fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2149" + style="fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2155" + style="fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2157" + style="fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <path + d="m 25.228,113.805 c -6.079,0 -11.051,-4.973 -11.051,-11.051 v 0 -77.523 c 0,-6.079 4.972,-11.051 11.051,-11.051 v 0 h 165.035 c 6.078,0 11.051,4.973 11.051,11.051 v 0 18.26 c 0,2.022 0.803,3.962 2.234,5.393 v 0 l 9.096,9.096 c 2.54,2.539 2.533,6.657 -0.013,9.188 v 0 l -9.067,9.017 c -1.44,1.431 -2.25,3.379 -2.25,5.409 v 0 21.16 c 0,6.078 -4.973,11.051 -11.051,11.051 v 0 z" + style="fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none" + id="path2165" /> + </g> + </g> + </g> + </g> + <g + id="g2167"> + <g + id="g2169" + clip-path="url(#clipPath2173)"> + <g + id="g2175" + transform="translate(175.9982,95.8645)"> + <path + d="m 0,0 v 0 c 4.074,0 7.376,-3.302 7.376,-7.376 v -48.993 c 0,-4.074 -3.302,-7.376 -7.376,-7.376 -4.074,0 -7.376,3.302 -7.376,7.376 V -7.376 C -7.376,-3.302 -4.074,0 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2177" /> + </g> + <g + id="g2179" + transform="translate(152.1193,64.9934)"> + <path + d="M 0,0 H -0.506 C -0.57,0 -0.633,-0.008 -0.698,-0.01 -0.762,-0.008 -0.825,0 -0.89,0 h -7.283 c -3.929,0 -7.359,-2.965 -7.613,-6.885 -0.278,-4.296 3.124,-7.867 7.361,-7.867 0.776,0 1.343,-0.754 1.111,-1.494 -0.658,-2.088 -2.341,-3.751 -4.547,-4.333 -2.074,-0.547 -4.276,-0.821 -6.605,-0.821 -4.007,0 -7.574,0.865 -10.7,2.595 -3.127,1.73 -5.57,4.144 -7.331,7.24 -1.761,3.096 -2.641,6.617 -2.641,10.564 0,4.006 0.88,7.558 2.641,10.654 1.761,3.097 4.219,5.493 7.377,7.195 3.156,1.698 6.768,2.549 10.836,2.549 4.681,0 8.865,-1.269 12.55,-3.807 2.341,-1.612 5.524,-1.588 7.757,0.171 3.48,2.741 3.289,8.045 -0.315,10.452 -1.7,1.136 -3.538,2.112 -5.512,2.928 -4.553,1.881 -9.623,2.823 -15.208,2.823 -6.679,0 -12.69,-1.412 -18.03,-4.235 -5.344,-2.822 -9.517,-6.738 -12.522,-11.747 -3.005,-5.008 -4.508,-10.67 -4.508,-16.983 0,-6.315 1.503,-11.975 4.508,-16.984 3.005,-5.009 7.148,-8.924 12.43,-11.747 5.282,-2.824 11.231,-4.235 17.849,-4.235 4.613,0 9.197,0.699 13.751,2.095 0.045,0.014 0.091,0.028 0.136,0.042 7.104,2.202 11.884,8.86 11.884,16.297 v 9.047 C 6.486,-2.904 3.583,0 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2181" /> + </g> + <g + id="g2183" + transform="translate(90.5807,88.5798)"> + <path + d="m 0,0 v -49.176 c 0,-4.023 -3.262,-7.285 -7.286,-7.285 h -1.381 c -2.181,0 -4.247,0.977 -5.631,2.662 l -24.229,29.505 c -1.804,2.197 -5.368,0.921 -5.368,-1.922 v -22.96 c 0,-4.023 -3.261,-7.285 -7.285,-7.285 -4.023,0 -7.285,3.262 -7.285,7.285 V 0 c 0,4.024 3.262,7.285 7.285,7.285 h 1.468 c 2.184,0 4.253,-0.979 5.636,-2.669 l 24.135,-29.475 c 1.802,-2.202 5.37,-0.927 5.37,1.918 V 0 c 0,4.024 3.261,7.285 7.285,7.285 C -3.262,7.285 0,4.024 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2185" /> + </g> + </g> + </g> + <text + xml:space="preserve" + transform="scale(1,-1)" + style="font-variant:normal;font-weight:600;font-stretch:normal;font-size:31.76px;font-family:'Montserrat SemiBold';-inkscape-font-specification:Montserrat-SemiBold;writing-mode:lr-tb;fill:#6f9aa8;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="text2191" + x="237.90379" + y="-51.030296"><tspan + x="237.90379" + sodipodi:role="line" + id="tspan2187" + y="-51.030296" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.76px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">T A L E R</tspan><tspan + x="237.90379" + y="-11.330296" + sodipodi:role="line" + id="tspan2189" /></text> + </g> +</svg> diff --git a/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER_Bold.png b/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER_Bold.png Binary files differ. diff --git a/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER_Bold.svg b/presentations/2024-porrentruy/texinputs/images/logo-NGI_TALER_Bold.svg @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg2137" + width="553.96533" + height="170.64532" + viewBox="0 0 553.96533 170.64532" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2141"> + <linearGradient + id="linearGradient4636"> + <stop + style="stop-color:#0042b3;stop-opacity:1;" + offset="0" + id="stop4632" /> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="1" + id="stop4634" /> + </linearGradient> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath2173"> + <path + d="M 0,127.984 H 415.474 V 0 H 0 Z" + id="path2171" /> + </clipPath> + <linearGradient + xlink:href="#linearGradient4636" + id="linearGradient4654" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" + gradientUnits="userSpaceOnUse" /> + <linearGradient + xlink:href="#linearGradient4636" + id="linearGradient491" + gradientUnits="userSpaceOnUse" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" /> + <linearGradient + xlink:href="#linearGradient4636" + id="linearGradient493" + gradientUnits="userSpaceOnUse" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" /> + <linearGradient + xlink:href="#linearGradient4636" + id="linearGradient495" + gradientUnits="userSpaceOnUse" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" /> + <linearGradient + xlink:href="#linearGradient4636" + id="linearGradient497" + gradientUnits="userSpaceOnUse" + x1="14.72319" + y1="14.33813" + x2="213.9493" + y2="113.96497" /> + </defs> + <g + id="g2145" + transform="matrix(1.3333333,0,0,-1.3333333,0,170.64533)"> + <g + id="g2147" + style="mix-blend-mode:difference;fill:url(#linearGradient4654);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2149" + style="fill:url(#linearGradient497);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2155" + style="fill:url(#linearGradient495);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <g + id="g2157" + style="fill:url(#linearGradient493);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none"> + <path + d="m 25.228,113.805 c -6.079,0 -11.051,-4.973 -11.051,-11.051 v 0 -77.523 c 0,-6.079 4.972,-11.051 11.051,-11.051 v 0 h 165.035 c 6.078,0 11.051,4.973 11.051,11.051 v 0 18.26 c 0,2.022 0.803,3.962 2.234,5.393 v 0 l 9.096,9.096 c 2.54,2.539 2.533,6.657 -0.013,9.188 v 0 l -9.067,9.017 c -1.44,1.431 -2.25,3.379 -2.25,5.409 v 0 21.16 c 0,6.078 -4.973,11.051 -11.051,11.051 v 0 z" + style="fill:url(#linearGradient491);fill-opacity:1;stroke:none;stroke-width:0;stroke-dasharray:none" + id="path2165" /> + </g> + </g> + </g> + </g> + <g + id="g2167"> + <g + id="g2169" + clip-path="url(#clipPath2173)"> + <g + id="g2175" + transform="translate(175.9982,95.8645)"> + <path + d="m 0,0 v 0 c 4.074,0 7.376,-3.302 7.376,-7.376 v -48.993 c 0,-4.074 -3.302,-7.376 -7.376,-7.376 -4.074,0 -7.376,3.302 -7.376,7.376 V -7.376 C -7.376,-3.302 -4.074,0 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2177" /> + </g> + <g + id="g2179" + transform="translate(152.1193,64.9934)"> + <path + d="M 0,0 H -0.506 C -0.57,0 -0.633,-0.008 -0.698,-0.01 -0.762,-0.008 -0.825,0 -0.89,0 h -7.283 c -3.929,0 -7.359,-2.965 -7.613,-6.885 -0.278,-4.296 3.124,-7.867 7.361,-7.867 0.776,0 1.343,-0.754 1.111,-1.494 -0.658,-2.088 -2.341,-3.751 -4.547,-4.333 -2.074,-0.547 -4.276,-0.821 -6.605,-0.821 -4.007,0 -7.574,0.865 -10.7,2.595 -3.127,1.73 -5.57,4.144 -7.331,7.24 -1.761,3.096 -2.641,6.617 -2.641,10.564 0,4.006 0.88,7.558 2.641,10.654 1.761,3.097 4.219,5.493 7.377,7.195 3.156,1.698 6.768,2.549 10.836,2.549 4.681,0 8.865,-1.269 12.55,-3.807 2.341,-1.612 5.524,-1.588 7.757,0.171 3.48,2.741 3.289,8.045 -0.315,10.452 -1.7,1.136 -3.538,2.112 -5.512,2.928 -4.553,1.881 -9.623,2.823 -15.208,2.823 -6.679,0 -12.69,-1.412 -18.03,-4.235 -5.344,-2.822 -9.517,-6.738 -12.522,-11.747 -3.005,-5.008 -4.508,-10.67 -4.508,-16.983 0,-6.315 1.503,-11.975 4.508,-16.984 3.005,-5.009 7.148,-8.924 12.43,-11.747 5.282,-2.824 11.231,-4.235 17.849,-4.235 4.613,0 9.197,0.699 13.751,2.095 0.045,0.014 0.091,0.028 0.136,0.042 7.104,2.202 11.884,8.86 11.884,16.297 v 9.047 C 6.486,-2.904 3.583,0 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2181" /> + </g> + <g + id="g2183" + transform="translate(90.5807,88.5798)"> + <path + d="m 0,0 v -49.176 c 0,-4.023 -3.262,-7.285 -7.286,-7.285 h -1.381 c -2.181,0 -4.247,0.977 -5.631,2.662 l -24.229,29.505 c -1.804,2.197 -5.368,0.921 -5.368,-1.922 v -22.96 c 0,-4.023 -3.261,-7.285 -7.285,-7.285 -4.023,0 -7.285,3.262 -7.285,7.285 V 0 c 0,4.024 3.262,7.285 7.285,7.285 h 1.468 c 2.184,0 4.253,-0.979 5.636,-2.669 l 24.135,-29.475 c 1.802,-2.202 5.37,-0.927 5.37,1.918 V 0 c 0,4.024 3.261,7.285 7.285,7.285 C -3.262,7.285 0,4.024 0,0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2185" /> + </g> + </g> + </g> + <path + style="font-weight:bold;font-size:31.76px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Bold';fill:#6f9aa8" + d="m 245.14507,-51.030296 v -18.03968 h -7.11424 v -4.19232 h 19.3736 v 4.19232 h -7.11424 v 18.03968 z m 21.08867,0 9.90912,-22.232 h 5.0816 l 9.94088,22.232 h -5.3992 l -8.13056,-19.62768 h 2.03264 l -8.16232,19.62768 z m 4.95456,-4.764 1.36568,-3.90648 h 11.4336 l 1.39744,3.90648 z m 31.28366,4.764 v -22.232 h 5.14512 v 18.03968 h 11.14776 v 4.19232 z m 32.90339,-13.27568 h 10.70312 v 4.00176 h -10.70312 z m 0.38112,9.14688 h 12.10056 v 4.1288 h -17.21392 v -22.232 h 16.80104 v 4.1288 h -11.68768 z m 25.1857,4.1288 v -22.232 h 9.62328 q 2.98544,0 5.14512,0.98456 2.15968,0.9528 3.3348,2.76312 1.17512,1.81032 1.17512,4.31936 0,2.47728 -1.17512,4.2876 -1.17512,1.77856 -3.3348,2.73136 -2.15968,0.9528 -5.14512,0.9528 h -6.76488 l 2.28672,-2.25496 v 8.44816 z m 14.1332,0 -5.558,-8.06704 h 5.49448 l 5.62152,8.06704 z m -8.98808,-7.87648 -2.28672,-2.41376 h 6.47904 q 2.382,0 3.55712,-1.01632 1.17512,-1.04808 1.17512,-2.8584 0,-1.84208 -1.17512,-2.8584 -1.17512,-1.01632 -3.55712,-1.01632 h -6.47904 l 2.28672,-2.44552 z" + id="text2191" + transform="scale(1,-1)" + aria-label="T A L E R " /> + </g> +</svg> diff --git a/presentations/2024-porrentruy/texinputs/images/sbfi.jpg b/presentations/2024-porrentruy/texinputs/images/sbfi.jpg Binary files differ. diff --git a/presentations/2024-porrentruy/texinputs/taler-macros.tex b/presentations/2024-porrentruy/texinputs/taler-macros.tex @@ -0,0 +1,103 @@ +\usepackage[utf8]{inputenc} + +% fonts and colors +\usepackage[defaultfam,tabular,lining]{montserrat} + +\setbeamercolor{normal text}{fg=black,bg=white} +\setbeamercolor{alerted text}{fg=red!50!black} +\setbeamercolor{example text}{fg=green!50!black} + +\setbeamercolor{title}{fg=white} +\setbeamerfont{title}{size=\Huge} +\setbeamerfont{title}{series=\bfseries} + +\setbeamercolor{subtitle}{fg=white} +\setbeamerfont{subtitle}{size=\Large} + +\setbeamercolor{author}{fg=white} +\setbeamerfont{author}{size=\Large} + +\setbeamercolor{institute}{fg=white} +\setbeamerfont{institute}{size=\large} + +\setbeamercolor{date}{fg=black} +\setbeamerfont{date}{size=\large} + +\setbeamercolor{frametitle}{fg=white} +\setbeamerfont{frametitle}{size=\LARGE} +\setbeamerfont{framesubtitle}{size=\large} + +\makeatletter +\setbeamertemplate{frametitle}{% + \vbox{}\vskip-0.5em% + \begin{beamercolorbox}[wd=.7\paperwidth]{frametitle} + \usebeamerfont{frametitle}% + \strut\insertframetitle\strut\par% + \end{beamercolorbox} + \ifx\insertframesubtitle\@empty% + \vskip.9em + \else% + \vskip-0.3em + \begin{beamercolorbox}[wd=.68\paperwidth]{frametitle} + \usebeamerfont{framesubtitle}% + \strut\insertframesubtitle\strut\par% + \end{beamercolorbox} + \fi +} +\makeatother + +\usepackage{tikz} +\usetikzlibrary{calc,intersections,positioning,fadings,through} + +% footline +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}{% + \leavevmode% + \includegraphics[height=0.7cm]{texinputs/images/logo-NGI_TALER_Bold.png} + \hfill + \SPEAKER + \hfill + \TITLE + \hfill + \insertframenumber + \vskip0pt% +} + +% background + +\usepackage{xcolor} +\definecolor{left}{RGB}{0,66,179} + +\setbeamertemplate{title page} +{%\leavemode% + \begin{beamercolorbox}[wd=\the\paperwidth, ht=\the\paperheight,ignorebg,center]{} + \begin{tikzpicture}[overlay, remember picture] + \fill [left color=left, right color=left!50!black] (current page.north west) -- (current page.north east) -- ($(current page.north east)+(0,-6.5)$) -- ($(current page.north west)+(5,-6.5)$) -- ($(current page.north west)+(4.5,-6.8)$) -- ($(current page.north west)+(4,-6.5)$) -- ($(current page.north west)+(0,-6.5)$); + \end{tikzpicture} + \end{beamercolorbox}% + \vspace*{-8cm} + + \begin{beamercolorbox}[sep=8pt,left]{title} + {\usebeamerfont{title}\inserttitle\par}% + {\usebeamerfont{subtitle}\insertsubtitle\par}% + \end{beamercolorbox}% + \vskip1em\par + \begin{beamercolorbox}[sep=8pt,left]{author} + \usebeamerfont{author}\insertauthor + \end{beamercolorbox} + \begin{beamercolorbox}[sep=8pt,left]{institute} + \usebeamerfont{inst}\insertinstitute\\ + \end{beamercolorbox}% + + \begin{beamercolorbox}[sep=5pt,left]{date} + \usebeamerfont{date}\insertdate + \end{beamercolorbox} + \vspace*{2.5cm} +} + +\setbeamertemplate{background canvas} +{%\leavemode% + \begin{tikzpicture}[overlay, remember picture] + \fill [left color=left, right color=left!50!black] (current page.north west) -- (current page.north east) -- ($(current page.north east)+(0,-2)$) -- ($(current page.north west)+(5,-2)$) -- ($(current page.north west)+(4.5,-2.3)$) -- ($(current page.north west)+(4,-2)$) -- ($(current page.north west)+(0,-2)$); + \end{tikzpicture} +}