[openssl-users] Size of OpenSSL ECDSA/DSA Implementation

Michaela Schoenbauer Michaela_Schoenbauer at gmx.at
Fri Jul 31 09:00:50 UTC 2015

Am 22.07.2015 um 12:08 schrieb Jakob Bohm:
> On 21/07/2015 22:07, Michaela Schoenbauer wrote:
>> Hi,
>> I'm currently working on my Master thesis, and the topic is about 
>> ECDSA implementations and DSA implementations in the context of small 
>> embedded systems.
>> I'd like to try out OpenSSL but I'm not sure if I can configure it to 
>> be small enough for the embedded devices I use.
>> For my purpose a custom built of the library should exclude all 
>> SSL/TLS functionality and only include (a) ECDSA support and (b) DSA 
>> support in another built.
>> Does anyone know how small I can make the OpenSSL library? May the 
>> results be smaller than 10KB or which results can I expect?
>> If anyone already tried something similar or has some answers/hints I 
>> would be thankful.
> Unfortunately, since the introduction (many years ago)
> of the EVP interface abstraction, it has gotten a lot
> harder to link libcrypto (the non-SSL part of OpenSSL)
> with just a few algorithms and little else.
> Best chance is to:
> 1. Use OpenSSL 1.0.2, not the future 1.1.0 which has
>   removed some of what you need for this.
> 2. Build OpenSSL as "static" libraries, not as "shared
>   libraries"/DLLs.
> 3. Use the "raw" ecdsa/dsa functions from ecdsa.h/dsa.h
> 4. Write your test program to only do the signing OR
>   verification, not the key generation or other
>   functions.
> 5. Write your test program to operate directly on the
>   internal structures so you don't need the code space
>   for the i2d/d2i conversion functions.
> 6. Use linker diagnostics and/or object dumper programs
>   to see which functions and source files get linked
>   into your embedded binary.
> 7. Look at the actual implementation code in the OpenSSL
>   source code to see if there is even more that can be
>   trimmed out, e.g. by splitting some source files that
>   contain multiple functions so one file contains the
>   functions you use, and another file ther other.
> 8. Look at the actual ecdsa/dsa implementation code to
>   see if it invokes the RNG for each signature or uses
>   a cryptographic formula to deterministically generate
>   a message/key dependent adversary unknowable
>   per-signature key.
>    This makes a big size difference because the RNG
>   itself needs so much non-dsa code.
> 9. For ecdsa, look at the implementation code to see
>   if it branches into different implementations
>   depending on the curve used for the public/private
>   key pair.  If so, create a special version
>   supporting only the curve you use for your test.
> With all this, you might be able to get a code size a
> lot smaller than what you would get by just following
> the official guides on how to do the same operation
> with supported high level functions.  But I am not
> at all sure if you can still get as low as you need.
> A completely different approach is to just cut and
> paste snippets from the OpenSSL ecdsa/dsa code and
> hand optimize it for minimum size.
> As another datapoint for your investigation, the
> ECDSA-like signature scheme recently promoted by
> D.J.Bernstein apparently hand optimized assembler
> code, yet I seem to recall it being larger than
> 10Kio code.
> Enjoy
> Jakob
> -- 
> Jakob Bohm, CIO, Partner, WiseMo A/S.http://www.wisemo.com
> Transformervej 29, 2860 Søborg, Denmark.  Direct +45 31 13 16 10
> This public discussion message is non-binding and may contain errors.
> WiseMo - Remote Service Management for PCs, Phones and Embedded
> _______________________________________________
> openssl-users mailing list
> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

Thank you so much for your detailed answer and your help!
I will try your tips.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20150731/d36d210e/attachment.html>

More information about the openssl-users mailing list