[Cryptech Tech] I sign

Linus Nordberg linus at nordberg.se
Fri Apr 13 15:23:21 UTC 2018


Hi,

It's Friday and I'd like to share a small success story using OpenSSL to
sign a document using the CrypTech Alpha board rev3 and a Debian Stretch
system.

One takeaway is that it takes close to five minutes to generate a
RSA3072 key and 6.5s to hash (SHA256) and sign a 2.1 MiB document with
that key.

I'm using environment.sh from Rob's excellent [0] to set a few things up.

--8<---------------cut here---------------start------------->8---
$ curl -s  -A "" -x socks4a://127.0.0.1:9050/ -O http://171.25.193.9:443/tor/status-vote/current/consensus
$ wc consensus
  39387  224654 2173744 consensus
$ . environment.sh
$ time pkcs11-tool --module ${PKCS11_MODULE} --login --pin ${PKCS11_PIN} --keypairgen --id 1 --label my3072 --key-type rsa:3072
Using slot 0 with a present token (0x0)

Key pair generated:
Private Key Object; RSA
  label:      my3072
  ID:         01
  Usage:      decrypt, sign, unwrap
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_SENSITIVE (0x11)

Public Key Object; RSA 3072 bits
  label:      my3072
  ID:         01
  Usage:      encrypt, verify, wrap

real    4m49.997s
user    0m0.032s
sys     0m0.028s
$ time openssl dgst -sha256 -keyform ENGINE -engine pkcs11 -sign label_my3072 -out consensus.sig consensus
engine "pkcs11" set.
No private keys found.
Missing CKA_ALWAYS_AUTHENTICATE attribute

real    0m6.517s
user    0m0.076s
sys     0m0.028s
$ time openssl dgst -sha256 -keyform ENGINE -engine pkcs11 -verify label_my3072 -signature consensus.sig consensus
engine "pkcs11" set.
No public keys found.
Verified OK

real    0m2.422s
user    0m0.040s
sys     0m0.056s
--8<---------------cut here---------------end--------------->8---


The only change I had to make was to the name of the Debian package
looked at in environment.sh to determine where openssl should find
pkcs11.so. Debian Stretch seems to support both openssl-1.0.2 and
openssl-1.1 so there were some head scratching before openssl was happy.

--8<---------------cut here---------------start------------->8---
diff --git a/environment.sh b/environment.sh
index 078b5a6..bc08498 100644
--- a/environment.sh
+++ b/environment.sh
@@ -17,7 +17,7 @@ export OPENSSL_CONF=`pwd`/openssl.conf
 # Where to find the engine module this week (its name changes with
 # architecture, OpenSSL version, and phase of the moon).
 
-export ENGINE_MODULE=`dpkg -L libengine-pkcs11-openssl | egrep '/(engine_)?pkcs11[.]so$'`
+export ENGINE_MODULE=`dpkg -L libengine-pkcs11-openssl1.1 | egrep '/(engine_)?pkcs11[.]so$'`
 
 # If USE_PKCS11SPY is set, it should be an absolute path to the OpenSC
 # pkcs11-spy.so debugging tool, which we will splice between OpenSSL
--8<---------------cut here---------------end--------------->8---


[0] https://wiki.cryptech.is/wiki/GitRepositories/user/sra/openssl-engine


More information about the Tech mailing list