Improved Parameters and an Implementation of Graded Encoding Schemes from Ideal Lattices

Our paper (with Catalin Cocis, Fabien Laguillaumie and Adeline Langlois) on picking parameters and implementing GGHLite just hit eprint. Here’s the abstract:

We discuss how to set parameters for GGH-like graded encoding schemes approximating cryptographic multilinear maps from ideal lattices and propose a strategy which reduces parameter sizes for concrete instances. Secondly, we discuss a first software implementation of a graded encoding scheme based on GGHLite, an improved variant of Garg, Gentry and Halevi’s construction (GGH) due to Langlois, Stehlé and Steinfeld. Thirdly, we provide an implementation of non-interactive N-partite Diffie-Hellman key exchange. We discuss our implementation strategies and show that our implementation outperforms previous work.

Continue reading

C Development with Emacs

Recently I spent some time customising my Emacs config again. Playing around with different ways of improving your productivity by adjusting Emacs is a great way of loosing any and all productivity you might have had. It is such a fun way of wasting your time, there’s even a little scene around just that activity. This can take quite elaborate forms with people posting their Emacs init.el configuration files in literal programming style based on org-mode‘s org-babel. This is more useful than it might sound, e.g. I stole a lot from Sacha’s config.

I also recently spent a bit more time again writing C99 code making many calls to FLINT – Fast Library for Number Theory. The FLINT coding style requires that pretty much each function should have its own file which I am sure is great for something. However, for me it means that have I have to open a lot of files all over the FLINT library when I care about implementation details and not just definitions. Also, your vanilla Emacs setup won’t display those signatures when you try to write a call to those functions from your code or give you auto-completion for all functions starting with, say, fmpz_poly_set_.

Alas, here is my current setup which rectifies most of my grievances.

Continue reading

meataxe64

Meataxe64 is a large software development project to produce programs for working at high performance with large matrices over finite fields.

At the lowest level, the aim is to work modulo primes (only), using grease (much like “four Russians”) to reduce the amount of work, to use vectorized code in x86 assembler (SSE/AVX) to do the basic operations and to have short rows and few columns so that matrices fit suitably into the various levels of cache.  The objective is to run as fast as possible with as little use of real-memory bandwidth as possible.

At a middle level, the aim is to use linear functions to work with extension fields, and to chop the matrices up so that the lowest level can operate.

At a higher level, the aim is to make effective use of a multi-core environment, building on the advantage that the cache-friendly lower level provides to ensure that many cores can be used effectively.  The thread-farm looks after the messy signals, locks and thread handling.

It is hoped soon that a layer will be added to take a matrix that fits on disk but not in memory to extend the possible scale of operations further.

Finally I dream that a fault-tolerant distributed system can be build on top of this to handle matrices of gargantuan proportions, but this lies some considerable way into the future.

Go read the development blog, I certainly learned a lot from Richard Parker whenever we talked.

PyME 0.9.0

PyMe is a Python interface to GPGME library using SWIG. Being based on SWIG, which does most of the heavy lifiting, it should be fairly complete in terms of coverage of what GPGME has to offer. Here is the history of PyMe as far as I understand it.

  1. PyMe up to v0.5.1 was written and maintained by John Goerzen in 2002.
  2. From 2004-2008 Igor Belyi maintained PyMe and produced up to v0.8.1.
  3. In 2014 I took over maintaining PyMe because there was no one who would accept by tiny bugfix.

Alas, here is PyME 0.9.0.

Changelog

  • python setup.py calls make swig, so
  • pip install git+https://bitbucket.org/malb/pyme should work
  • op_export_keys() works now
  • revision constrol was switched from SVN on Sourceforge to Git on Bitbucket.

Mailing List

If you have bug reports, suggestions etc. please send them to pyme-help@lists.sourceforge.net which is still the official PyME support mailing list. Speaking of which:

Bugs

Support for Windows is currently untested, so it is probably broken. It would be much appreciated if those who use PyME on Windows could step up and offer their help in maintaining that part.

IACR Statement

The IACR membership meeting at Eurocrypt produced a statement on mass surveillance:

Statement of Principle from the IACR Membership on Mass Surveillance and the Subversion of Cryptography

The membership of the IACR repudiates mass surveillance and the undermining of cryptographic solutions and standards. Population-wide surveillance threatens democracy and human dignity. We call for expediting research and deployment of effective techniques to protect personal privacy against governmental and corporate overreach.

I could think of stronger words, but then, I’m not trying to speak for all cryptographers.