Mercurial > pysmcl
changeset 314:d87f62abc6e2
Formatting and speling
author | Sigurd Meldgaard <stm@daimi.au.dk> |
---|---|
date | Fri, 16 Apr 2010 09:54:38 +0200 |
parents | 578001fa9dd6 |
children | b0dcca45efbc |
files | provsec/paper.tex |
diffstat | 1 files changed, 31 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/provsec/paper.tex Fri Apr 16 09:42:19 2010 +0200 +++ b/provsec/paper.tex Fri Apr 16 09:54:38 2010 +0200 @@ -138,10 +138,10 @@ In order to keep the prototype implementation simple, we leave out quite a lot of syntactic constructs from Python, including generators, -with-constructs, elif, augmented assignments (assignments of the form +with-constructs, \KWD{elif}, augmented assignments (assignments of the form \verb|x+=1|), delete statements, global statements, try/except and import statements. And focus on a small While-like language. Some of -these are easily rewritten into PySMCL (for example \verb|elif| can be +these are easily rewritten into PySMCL (for example \KWD|elif| can be written into a nested if) while others complicate the data flow, and are left out for that reason. @@ -217,7 +217,7 @@ commas should be present or not. It is presented in figure~\ref{fig:corepysmcl}. A Core PySMCL program consists of a sequence of function declarations. A certain function called -\verb|main| is used as the entry point of the computation. +\KWD|main| is used as the entry point of the computation. The set of statements and expressions is similar to a standard while-language augmented with domain-specific operations operating on @@ -229,7 +229,7 @@ \subsection{Semantics} The execution of the program is initiated by evaluating the -\verb|main| function. The main function should not return anything, +\KWD|main| function. The main function should not return anything, but rather print or otherwise communicate the result of the computation. The semantics are like those of Python. Local variables are introduced by assigning to them first time. @@ -253,7 +253,7 @@ A secret value can be revealed by the \KWD{output} function, that returns the hidden value of its argument. If the variant opening a value to a specific player is used, only for that player the function -returns a value, for other players it will return \verb|None|. +returns a value, for other players it will return \KWD{None}. \section{Implementation strategy} We embed PySMCL in Python by using ``decorators''. These are higher @@ -266,13 +266,13 @@ return 1 - a \end{verbatim} -Here the decorator called is \verb|ideal_functionality|, a higher -order function receiving the function \verb|negate| and returning -another function that is then also named \verb|negate|. While deciding +Here the decorator called is \KWD{ideal_functionality}, a higher +order function receiving the function \KWD{negate} and returning +another function that is then also named \KWD{negate}. While deciding what output function to return, it may of course the values of its own -arguments (here the values of \verb|secret| and \verb|range|). +arguments (here the values of \KWD{secret} and \KWD{range}). -We use the \verb|inspect| module from Python, so the decorator can get +We use the \KWD{inspect} module from Python, so the decorator can get access to the source code and thereby the parse tree of the decorated function, and make analyses and changes before rewriting it. @@ -322,11 +322,11 @@ return result(output(max)) \end{verbatim} -The function \verb|f| above is marked as an ideal functionality, and +The function \KWD{f} above is marked as an ideal functionality, and therefore subject to preprocessing and verification. -The variables \verb|a| and \verb|b| are marked as secret by the -\verb|secrets| argument to \verb|ideal_functionality|. +The variables \KWD{a} and \KWD{b} are marked as secret by the +\KWD{secrets} argument to \KWD{ideal_functionality}. % The variable \verb|c| is marked secret because it is the result of a % call to \verb|Secret|. Of course the value 42 is public, since it @@ -338,7 +338,7 @@ allowed, moreover calls to other verified functions with secret values in the right places are also allowed. -\verb|bigger| is a secret value since it is derived from secret +\KWD{bigger} is a secret value since it is derived from secret values. It can be inferred to contain a Boolean value because it is the result of a comparison. @@ -356,10 +356,12 @@ The second conditional is not rewritten because \verb|c| is not secret. -\verb|open_a| is a possible security breach, leaking the value of -\verb|a|, and therefore generating an error message from the analysis. +\KWD{open(a)} is a possible security breach, leaking the value of +\KWD{a}, and therefore causes the generation of a proof burden from +the analysis that a can be derived from the public values and the +result. (In this case the burden cannot be proven). -Opening \verb|max| using the \verb|result| function is interpreted as +Opening \KWD{max} using the \KWD{result} function is interpreted as if this is an intended result of the computation, it is therefore allowed to open it. @@ -386,7 +388,7 @@ % variable $b$ in the above example). \item Range analysis, keeping track of the intervals which we can guarantee variables to be in. This is especially convenient for - Boolean values (such as the variable $bigger$ in the above example). + Boolean values (such as the variable \KWD{bigger} in the above example). \end{itemize} The feedback from the verifier to the programmer is used to alert the @@ -412,7 +414,7 @@ % of random values is not implemented yet, as it is still unclear % how the general rules should look. \item - The opening is done using the \verb|output| function. + The opening is done using the \KWD{output} function. % but the analysis cannot determine whether %the opening is harmless. The analysis interprets this to mean that the programmer claims the @@ -516,9 +518,9 @@ branch. This is done recursively, with the innermost statements first, to -allow for nested \verb|if|-statements. +allow nested \KWD{if}-state\-ments. -As this rewrite often will make more variables depend on secret values +As this rewrite often will make even more variables depend on secret values we afterwards repeat the analysis and possibly this operation until a fixpoint is reached. @@ -560,7 +562,7 @@ \end{verbatim} Notice that we need to take special care that the temporary variables -\verb|a_then0|, \verb|cond0| etc.\ are \emph{not}\/ combined in the second step, +\KWD{a_then0}, \KWD{cond0} etc.\ are \emph{not}\/ combined in the second step, as they will never by used outside the transformed if. Here follows a description of the algorithm used for the rewrite: @@ -573,8 +575,8 @@ invocation of the procedure we do not need it outside this branch, and nothing needs to be changes, so we leave it in place. \item Otherwise, if we have not assigned to this variable before; we - suffix the assigned variable name with a fresh \verb|_thenx| (or - \verb|_elsex|) and remember this renaming. + suffix the assigned variable name with a fresh \KWD{_thenx} (or + \KWD{_elsex}) and remember this renaming. \item If we have assigned to this variable before in the same branch we reuse the same name as last time. \item All variables on the right-hand side that have been renamed in @@ -593,7 +595,7 @@ Now we have computed in variables suffixed with \verb|_then| the value of variables as they would be if \verb|cond|=1, and in those suffixed -\verb|_else| what they would be if \verb|cond|=0. +\KWD{_else} what they would be if \verb|cond|=0. Finally we emit statements for obliviously combining the values of the variables of the two branches. These are one assignment for each @@ -603,7 +605,7 @@ \verb|a = a_else + (a_then - a_else) * cond| -Because the range-analysis guarantees us that \verb|cond| is in $\{0,1\}$ this will give the right value of a. +Because the range-analysis guarantees us that \KWD{cond} is in $\{0,1\}$ this will give the right value of a. One subtlety is that function calls are made no matter what the condition was, this might give counter-intuitive results, because @@ -622,7 +624,7 @@ When revealing a secret value in VIFF, we get back a deferred, but often we want to output the value, and write an if statement -immediately after using the opened value to brach on. This cannot be +immediately after using the opened value to branch on. This cannot be done in plain VIFF, because we do not know if the value to be opened is ready when we do the branching. Therefore a common idiom when writing VIFF code is to put the code doing the branch in a callback-function, @@ -667,7 +669,7 @@ Now we define a functionality $F_P$, working just as $F$, but it has a new command $P$ that, when called, makes the functionality run the program $P$ --- taking inputs when $P$ would, outputting \emph{only} -what is marked as \verb|result| in $P$. At all times $F_P$ will tell +what is marked as \KWD{result} in $P$. At all times $F_P$ will tell the adversary where in the program execution it is. We now want to show that $pi_P$ with access to $F$ is implementing @@ -895,6 +897,6 @@ % Local Words (en_US): preprocessing multi preprocessor deferreds -% Local Words (en_US): runtimes +% Local Words (en_US): analyses runtimes % Local Words: MPC CACE PySMCL SMCL VIFF