From f1d6ebe0ce106726b613102e3770ff3702afdf2e Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Thu, 26 Jun 2014 23:34:59 +0200 Subject: Fin --- memoria.pdf | Bin 533865 -> 1113991 bytes memoria.tex | 155 ++++++++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 114 insertions(+), 41 deletions(-) mode change 100755 => 100644 memoria.pdf diff --git a/memoria.pdf b/memoria.pdf old mode 100755 new mode 100644 index dc61dcb..4c4206c Binary files a/memoria.pdf and b/memoria.pdf differ diff --git a/memoria.tex b/memoria.tex index 1cfdf99..74f85db 100755 --- a/memoria.tex +++ b/memoria.tex @@ -63,14 +63,14 @@ increasing. Cryptography is one of the cornerstones of security, so there has been a considerable amount of effort devoted recently to the development of tools oriented to the evaluation and improvement of cryptographic algorithms. One of these tools is EasyCrypt, developed recently at IMDEA -Software Institute in response to the increasing need of reliable cryptographic +Software Institute in response to the increasing need of reliable cryptography verification tools. Throughout this document we will design and implement two -additional EasyCrypt features. +different EasyCrypt features. In the first part of the document we will consider the importance of having a way to specify the cost of algorithms in order to develop proofs that depend on -it, and then we will modify the EasyCrypt's language so the user can tackle a -wider range of problems. +it, and then we will modify the EasyCrypt's language so that the user can tackle +a wider range of problems. In the second part we will assess EasyCrypt's poor usability and try to improve it by developing a web interface which enables the user to use it easily and @@ -168,6 +168,7 @@ En esta sección se introducirán algunos conceptos fundamentales de criptograf asimétrica, ya que serán de utilidad a la hora de explicar la siguiente sección (\ref{sec:secuencias-de-juegos}) y algunos ejemplos posteriores. +\newpage La criptografía \textbf{asimétrica} o \textbf{de clave pública} engloba todos aquellos algoritmos criptográficos que usan dos funciones, $\Enc$ y $\Dec$, para cifrar y descifrar la información respectivamente. Intuitivamente, cifrar una @@ -310,6 +311,7 @@ axiom find_head : hd l = x => find (lambda e, e = x) l = Some x. \end{easycrypt} +\newpage Las primeras dos líneas defininen los tipos \rawec{predicate} y \rawec{option}. El primero representa funciones que devuelven \rawec{bool}, y el segundo, datos que pueden tomar los valores \rawec{None} o \rawec{Some x} (se @@ -355,6 +357,7 @@ necesidad de representar algoritmos secuenciales, entidades con estado, etc. Para ello, EasyCrypt implementa un lenguaje distinto llamado pWhile (probabilistic While) \cite{BartheGB09}. +\newpage \begin{bnf}[caption=Lenguaje pWhile, label={lst:pwhile}]{}{} $\mathcal{I ::= V \leftarrow E}$ | $\mathcal{V \overset{\$}{\leftarrow} DE}$ @@ -741,15 +744,19 @@ siguientes: bien formado sintácticamente, tiene sentido semánticamente. \end{itemize} -EasyCrypt implementa cada una de estas etapas en tres módulos (EcLexer, EcParser -y EcTyping) y define las estructuras de datos intermedias en otros dos -(EcParseTree para el árbol sintáctico abstracto y EcFol para el árbol sintáctico -anotado con información de tipos). Los módulos EcLexer y EcParser hacen uso de -la biblioteca Menhir mencionada anteriormente para generar los analizadores. -Estos módulos contienen las definiciones de tokens y las reglas de las -gramáticas regular y libre de contexto usadas para indicar, respectivamente, el -comportamiento de los analizadores léxico y sintáctico. Todo este proceso -aparece ilustrado en la figura \ref{fig:ecparser}. +EasyCrypt implementa las dos primeras etapas en los módulos EcLexer y EcParser, +define el árbol sintáctico abstracto en EcParseTree, y la generación del árbol +anotado con tipos es responsabilidad de módulos especializados en su ámbito. En +nuestro caso la transformación semántica la realiza el módulo EcTyping, con las +estructuras de datos anotadas definidas en EcFol, ya que son los módulos +encargado de gestionar fórmulas de primer orden, como veremos con más detalle en +las secciones \ref{sec:modif-al-anal-sin} y \ref{sec:modif-al-anal-sem}. Los +módulos EcLexer y EcParser hacen uso de la biblioteca Menhir mencionada +anteriormente para generar los analizadores. Estos módulos contienen las +definiciones de tokens y las reglas de las gramáticas regular y libre de +contexto usadas para indicar, respectivamente, el comportamiento de los +analizadores léxico y sintáctico. Todo este proceso aparece ilustrado en la +figura \ref{fig:ecparser}. \tikzstyle{line} = [draw] @@ -900,9 +907,9 @@ type pcaxiom = { El axioma de coste es un ``record'' (estructura de datos con varios campos) que almacena su nombre, argumentos (opcionales) y especificación. La especificación -es una fórmula: expresiones que pueden estar cuantificadas existencialmente o -universalmente. Por tanto, también necesitaremos modificar el tipo de datos -fórmula para que pueda contener expresiones de coste: +es una fórmula de primer orden: expresiones que pueden estar cuantificadas +existencial o universalmente. Por tanto, también necesitaremos modificar el +tipo de datos fórmula para que pueda contener expresiones de coste: \begin{code} \begin{minted}{ocaml} @@ -950,13 +957,84 @@ más compleja: modificar el analizador semántico. \section{Modificaciones al analizador semántico} \label{sec:modif-al-anal-sem} -TODO: Modificaciones en EcTyping, EcFol, EcEnv, EcScope, EcTheory, EcPV, -EcCommands... :) +El análisis semántico en EasyCrypt fundamentalmente consiste en la comprobación +de tipos (incluyendo de ámbito y entorno). A continuación se expondrá a muy alto +nivel cómo se ha abordado la implementación, ya que en EasyCrypt el análisis +contextual es muy exhaustivo y complejo. Para más detalles se aconseja al lector +interesado que obtenga el código fuente desde la página web del proyecto. + +El módulo principal encargado de implementar la funcionalidad del analizador +semántico (comprobar los tipos y anotar el árbol sintáctico abstracto) es +<>. Este módulo exporta funciones que transforman fórmulas definidas +en EcParseTree, sin información semántica, en fórmulas definidas en el módulo +EcFol, obtenidas tras realizar las comprobaciones necesarias y portando +información semántica. + +La función que más nos interesa es trans_form: + +\begin{code} + \begin{minted}{ocaml} +val trans_form : env -> unienv -> pformula -> ty -> EcFol.form + \end{minted} + \caption{Tipo de la función trans_form (ecTyping.mli)} +\end{code} + +Sin entrar en detalles, esta función convierte una fórmula (<>) en una +fórmula anotada (<>) en función del entorno léxico (<>), el +entorno de unificación (<>) y el tipo de datos esperado +(<>). Necesitamos una variante de esta función que soporte también +fórmulas que contengan expresiones de coste, pero que solo se pueda invocar +cuando la fórmula aparezca dentro de un axioma de coste. + +Para ello, modificaremos la función original para que reciba un argumento +booleano adicional ``cost'' que si esa fórmula puede contener expresiones de +coste o no, y para no romper la compatibilidad, la convertiremos en una función +auxiliar <<_trans_form>> y crearemos dos funciones <> y +<> que la invoquen con el valor correcto de ``cost'': + +\tikzstyle{block} = [rectangle, draw, fill=blue!20, + text width=8em, text centered, rounded corners, minimum height=4em] +\begin{figure}[H] + \centering + \begin{tikzpicture}[node distance = 3cm, auto] + \node [block] (form) {trans_form(args)}; + \node [invisbl, right of=form] (dummy) {}; + \node [block, right of=dummy] (cform) {trans_cform(args)}; + \node [block, below of=dummy, text width=12em] (aux) {_trans_form(cost, args)}; + \path [line, -latex'] + (form) edge node[left] {\textbf{cost = false}} (aux) + (cform) edge node {\textbf{cost = true}} (aux); + \end{tikzpicture} +\end{figure} + +\newpage +Además, habrá que añadir el caso en que <<_trans_form>> sea invocado con una +expresión de coste: + +\begin{code}[H] + \begin{minted}{ocaml} + | PFcost pcexpr -> + if cost + then f_cost (transcexp env ue pcexpr) + else tyerror f.pl_loc env NotInCostEnv + \end{minted} + \caption{Transformación de cformula para expresiones de coste (ecTyping.ml)} +\end{code} -% \section{Modificaciones al pretty-printer} -% \label{sec:modif-al-pretty} +Como podemos ver, lanza un error en caso de incluirse una expresión de coste +fuera de un entorno válido (axioma de coste). El valor de retorno lo delega a la +función transcexp, que busca el operador objetivo en el entorno, aplica +recursivamente la transformación semántica sobre sus argumentos y unifica sus +tipos (para que sea ilegal, por ejemplo, escribir \rawec{cost[sum, true, + 2]}). Aquí concluye la transformación semántica de la expresión de coste. -% TODO: Modificaciones en EcPrinting +La otra parte, el axioma de coste, es más sencilla de implementar. La función +que lleva a cabo su transformación semántica ha de definirse en el módulo +EcCommands, ya que el axioma de coste es una sentencia básica del lenguaje (es +uno de los pasos que puede ejecutar el evaluador). Su trabajo es crear un nuevo +entorno para las variables cuantificadas universalmente, transformar +recursivamente su especificación bajo ese entorno ampliado y añadirlo al ámbito +global para su posterior referencia. \emptypage @@ -1083,7 +1161,6 @@ minimum height=2em] \path [line,dashed] (django) -- (wserver); \path [line,dashed] (django) -- (crispy); - \path [line,dashed] (easycrypt) -- (ecserver); \path [line,dashed] (tornado) -- (ecserver); \path [line] @@ -1199,6 +1276,7 @@ con una captura de pantalla de su resultado una vez servidas: etc. No se usa directamente, sino que se importa desde otras plantillas usando la directiva \textbf{extends} de Django. +\newpage \item \textbf{login.html}, servida cuando se accede a la página de inicio de sesión. Un ejemplo de su resultado final: @@ -1219,6 +1297,7 @@ con una captura de pantalla de su resultado una vez servidas: \label{fig:register} \end{figure} +\newpage \item \textbf{index.html}, la plantilla que sirve la pantalla principal. Cuando no hay ninguna sesión iniciada, se muestra un mensaje de bienvenida: @@ -1296,6 +1375,7 @@ views.file_mrg(request, file_id=13) (``/files'', ``/projects'', etc) y devuelven información en formato JSON. \end{itemize} +\newpage \section{Implementación: cliente} \label{sec:impl-cliente} @@ -1346,14 +1426,8 @@ ws = new Workspace(); Cabe destacar la presencia del atributo <>, que contiene referencias a los nodos DOM con los que se modifica la parte visible del editor. -A continuación veremos los pasos que se han realizado para abordar la -implementación del cliente, partiendo del diseño de la figura -\ref{fig:prototype}. - -\subsection{Colocación de elementos} %TODO quitar (índice) -\label{sec:coloc-de-elem} - -A la hora de distribuir los elementos de la página principal se ha usado una +A la hora de distribuir los elementos de la página principal (de acuerdo al +diseño de la figura \ref{fig:prototype}) se ha usado una característica concreta de Twitter Bootstrap: su sistema de rejillas\footnote{\url{http://getbootstrap.com/css/\#grid}}. Bootstrap define dos elementos para trabajar con rejillas: \textbf{filas} y \textbf{columnas}. Se @@ -1438,9 +1512,7 @@ pestañas y editor de código se muestra en la figura \ref{fig:editor}. \end{figure} El coloreado sintáctico se ha tenido que definir a mano, ya que evidentemente -Ace no incluye por defecto soporte para el coloreado de EasyCrypt. % TODO anexo? - -% TODO Ace soporta ... (guardar, ejecutar, colorear) +Ace no incluye por defecto soporte para el coloreado de EasyCrypt. \subsection{Presentación de resultados} \label{sec:pres-de-result} @@ -1485,7 +1557,12 @@ extremo (WebSocket o entrada de EasyCrypt, respectivamente). \chapter{CONTRIBUCIONES} \label{cha:contribuciones} -TODO coste +En la primera parte del documento se ha implementado la definición del coste en +el lenguaje de expresiones de EasyCrypt modificando su analizador del +lenguaje. Como se indica en la sección de objetivos (\ref{sec:objetivos}), el +siguiente paso natural es implementar tácticas y juicios que permitan usar estas +definiciones para extraer conclusiones reales, ampliando considerablemente el +abanico de teoremas que se puedan extraer del uso de EasyCrypt. En cuanto a la interfaz web, se ha conseguido implementar exitosamente un sistema multiusuario capaz de gestionar, editar y ejecutar proyectos de @@ -1498,11 +1575,9 @@ métodos formales que tanto podrían aportar al mundo de la seguridad. \begin{figure}[h] \centering - \includegraphics[width=1\textwidth]{img/web-finished.png} + \includegraphics[width=0.9\textwidth]{img/web-finished.png} \end{figure} -% TODO se adjunta el código aparte por si acaso - \chapter{CONCLUSIONES} \label{cha:result-y-concl} @@ -1510,8 +1585,6 @@ A lo largo de este documento hemos abordado la mejora de dos aspectos relativamente independientes de EasyCrypt: una principalmente técnica (coste) y otra de usabilidad (interfaz web). -% TODO qué he aprendido - EasyCrypt es un marco orientado a un usuario muy concreto: profesionales de la criptografía. Si bien es cierto que en el propio Instituto IMDEA Software se usa y desarrolla activamente, el objetivo último sería crear comunidad. La @@ -1533,10 +1606,10 @@ conclusión más general, sería que incluso los sistemas más complejos y de á puramente académico necesitan usuarios, y a todo usuario le gusta que se lo pongan un poco más fácil. El tiempo dirá si ha valido la pena el esfuerzo. -\chapter{ANEXOS} % TODO quitar? +\chapter{ANEXOS} \label{cha:anexos} -Todo el código desarrollado en el presente trabajo, una vez superados los +Todo el código desarrollado en el presente trabajo, una vez pasados los protocolos de integración, se incorporará a la versión estable de EasyCrypt y podrá obtenerse desde el sitio web (\url{https://www.easycrypt.info}). -- cgit v1.2.3