Score:1

Minimal, secure and reasonably efficient P384 implementations

nl flag

For a project I'm working on, I need to implement ECDSA over the NIST P-384 curve (AKA secp384r1). For what it's worth, the choice of curve is beyond my control in this particular case.

While I already have a working implementation, and this is (so far) just a low-stakes pet project, I was wondering how I could take care of this in the most effective way, especially for the signing part. Rough wish list:

  1. I want to make a serious attempt at defending against side channel & timing leaks.
  2. Since I only care about the P-384 curve and ECDSA, I'd like a codebase with a relatively small footprint (also because I'll need to supply bindings for non-C code). P384-specific optimisations are certainly welcome, though.
  3. I would like the option to use RFC 6979-style deterministic $k$ values (or some other deterministic nonce derivation scheme).
  4. The scheme I'm implementing also requires support for point compression.

I can handle 3 and 4 myself if the codebase lends itself to modification.

After some looking around, here's what I found:

  • OpenSSL (and its forks like LibreSSL/BoringSSL/...): the obvious choice, but bulky, and I'm also not a fan of OpenSSL's baroque calling conventions
  • Android includes a cute minimalist P-256 implementation. I'm not sure how secure that specific one is, but it's a good example of the kind of thing I'm looking for (replacing P-256 with P-384).
  • Thomas Pornin's BearSSL has a portable-yet-constant-time (to the extent that that's possible) P-384 implementation, and looks simple enough to strip out the functionality that I don't need. It doesn't appear to use any curve-specific optimisations, but does already use deterministic $k$ values out of the box.

Obviously I'd prefer to avoid having to roll my own implementation. Right now, I'm tempted to go down the "stripping down BearSSL" route, but I wanted to ask if there was anything more plug-and-play, or if there were any concerns I missed. Thanks!

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.