Release Notes

3.0, May 2017

  • New keystore implementation. Basically a very small flash filesystem, including basic wear leveling. Maximum number of keys varies depending on key size and how many options are attached, but for any reasonable use it should hold on the order of 2,000 keys at least.
  • In-memory keystore moved to HSM (previously was in memory of the client library), uses same API as flash keystore.
  • RPC mechanism extended to support the new keystores (hal_rpc_pkey_match(), hal_rpc_pkey_set_attributes(), etc).
  • PKCS #11 code rewritten to use libhal attribute mechanism, sqlite3 database gone.
  • Verilog implementations of ECDSA base point multipliers for P-256 and P-384 curves, key generation and signing significantly faster than with software ECDSA implementation.
  • Key backup mechanism: two more RPC functions, and a Python script cryptech_backup to drive the process.
  • Private key representation changed to PKCS #8 format (a self-identifying uniform format with optional encryption, supported by many other tools). Key backup uses encrypted form of PKCS #8.
  • Default build of client software now uses a multiplexer daemon cryptech_muxd which allows multiple clients to talk to the HSM at once (packages such as OpenDNSSEC which uses multiple daemons talking to the same HSM need this). Software can still be built for direct connection to HSM but it is no longer the default.
  • New trivial script cryptech_console to talk to the HSM's management port via the multiplexer daemon; cryptech_upload now supports both direct connection and connection via the multiplexer daemon.
  • Python client implementations of libhal RPC mechanism and PKCS #11 now installed as cryptech.libhal and cryptech.py11, respectively.
  • Python PKCS #11 client hacked to play nicely with pkcs11-spy debugging tool.
  • RTOS replaced by simple non-preemptive (voluntary yield) tasking system, eliminating a huge morass of potential race conditions, debugging nightmares, priority inversions, and similar horrors. Lack of preemption means that console acess may have to wait for something else to yield the ARM CPU, but it's more than worth it to get rid of all the stability problems the RTOS was causing.
  • Sample code for using the HSM as an OpenSSL engine is available. This only works with RSA for the moment, due to apparent limitations of the engine implementation.

Getting started with 3.0:

  • Install the software.
  • Upgrade the firmware. Please note the warnings about bricking your HSM, how to avoid that, and what to do if you failed to avoid it.
  • Set the usual environment variables, perhaps using cryptech_probe.
  • Start the multiplexer daemon cryptech_muxd.

At this point, you should be able to use the PKCS #11 library, the cryptech_backup script, and so forth.