-
Notifications
You must be signed in to change notification settings - Fork 8
Home
EACirc is a framework for automatic problem solving. It uses supervised learning techniques based on evolutionary algorithms to construct and optimize software circuits in order to solve the given problem.
Problems are solved by the means of hardware-like circuits - small, software-emulated circuits consisting of gates and interconnecting wires transforming input data into desired output data. The layout of these circuits is designed randomly at first. They are subsequently optimized in the process of supervised learning (inputs are provided alongside with correct outputs) until the the desired success rate is achieved.
The learning stage incorporates heuristic (such as iterated local search) principles:
- an initial circuit (individual) is altered to so call 'neighbour individual';
- both individual circuits are evaluated on the data and their 'fitness' is determined by comparison of its outputs with the expected outputs;
- the individual with lower 'fitness' is deleted;
- the individuals with higher 'fitness' proceed to next iteration;
The EACirc framework consists of main application and several supporting tools and scripts. The modular design allows for easy addition of new problem modules ('projects') and output interpretation modules ('evaluators'). Currently, the project has following main parts:
- EACirc - the main application, constructs circuits using evolutionary principles.
- generator - tool for generation of round reduced cryptographical functions.
-
Building instructions
Step-by-step instructions for building EACirc in MS Visual Studio, Qt Creator or GNU Make. -
Running instructions
Basic run requirements, command line arguments. -
Recommencing computation
It is possible to continue the computation wron the save state without the loss of determinism and reproducibility.
-
Framework components
Components of EACirc, globally accessible resources. -
Circuit back-end
Basic principles of circuits and their representation. -
Evaluators
Evaluator interface and description of standard evaluators. -
CUDA support
Details of CUDA support for evaluating circuits. -
Testing EACirc
Build-in self-tests using Catch testing framework. -
Known bugs
Bugs we know about but will not fix in foreseeable future. -
Third party libraries
Description, licence and credits of used third-party libraries. -
Input/Output files structure
EACirc produces number of output files containing circuits, statistics and saved state. -
Streams
Interface and requirements for project modules.
-
Block ciphers
Security of well-known (AES, DES) block functions. -
eStream
Security of eStream ciphers. -
SHA-3
Security of SHA-3 hash candidates. -
CAESAR
Security of authenticated encryption candidates. Currently not supported. -
Other streams
Creating test vectors from external files and other sources.
-
Automation tools
Supporting script: downloading and processing results. -
Published work
Published papers and presentations about EACirc.
The framework is developed at the Centre for Research on Cryptography and Security (formerly Laboratory of Security and Applied Cryptography), Masaryk University, Brno, Czech Republic.
- Petr Švenda 2008-now (project lead, initial implementation)
- Michal Hajas 2015-now (Java bytecode emulator, Generator tool)
- Dušan Klinec 2012-now (polynomial distinguisher)
- Karel Kubíček 2014-now (TEA, metaheuristics, supporting tools)
- Jiří Novotný 2014-now (build system, CUDA, main developer)
- Ľubomír Obrátil 2014-now (Oneclick, RTT)
- Marek Sýs 2013-now (statistics evaluation, polynomials)
- Martin Ukrop 2012-now (framework model, refactoring, SHA-3 & CAESAR candidates testing, supporting tools)
Former participation:
- Milan Čermák 2012-2013 (CUDA)
- Ondrej Dubovec 2011-2012 (SHA-3 candidates testing)
- Matěj Prišťák 2011-2012 (object model and refactoring, XML support, eStream candidates testing)
- Zdenek Říha 2013-2016 (Java bytecode emulator)
- Tobiáš Smolka 2011-2012 (BOINC related support)