Back
to academic signature homepage
Troubleshooting compiling Academic
Signature in (x/l/k) ubuntu17.10
A workaround is
already in place in the current source code packages since nov
8, 2017.
This page is about a flaw that apparently occurred in close
coincidence with the rollout of ubuntu Artful Aardvark.
It only occurs in the 64 bit version of the compiler g++, the
32bit version is not affected.
As of November 2017 g++ (Ubuntu
7.2.0-8ubuntu3) 7.2.0 (64 bit version only)
can produce faulty object files, if optimization -O2
or -O3 are turned on.
And it does so in Academic Signature's module helpersxx.cpp,
affects three instances of slightly differently flavoured
pseudorandom functions and alters the outcome of pseudo random
functions used in ciphers "flightx", "chimera" and in a key
derivation function.
(No, this is not about ambiguous, poorly
defined code, I narrowed it down to three affected lines of
code in c++. )
The modifications to the output due to invocation of optimization
level -O2 and above are reproducible, but doing something other
than coded in C++ is not acceptable.
Practically the flaw would break consistency with the output of
debug versions (disabled Optimizations), versions of ubuntu 17.04
and older, versions compiled with optimization level below -O2, or
the windows versions. For cross platform encrypted communication
this is clearly a no go.
So if you recently experienced not being able to decode ciphers
sent to you by communication partners, the person with a more
recent self compiled installation - compiled with the above
mentioned version of g++ with source code downloads from before
Nov 8 2017 - should compile again with optimizations restricted to
-O1.
I already changed the tarball and the alternative makefile to
limit optimization to -O1.
All posted binaries were not affected and produce sound
ciphers.
All current
source code packages have the workaround in place.
I will look for more elegant workaround than globally limiting
optimization, but for the time being, the quickest fix seems to be
globally limiting optimization to -O1.
Actually there is no noticeable degradation of efficiency
introduced with abandoning -O2 and above.
The improvements in execution speed due to compiler optimization
had been marginally at best anyways.