Author: Sander Dijkhuis (Cleverbase)
License: Creative Commons Attribution-NonCommercial 4.0 International
This document introduces the SCAL3 with Thresholds scheme, a scheme to meet the SCAL3 requirements based on threshold signing between the subscriber and the provider. With this solution, users verify evidence using open standard ECDSA and ECSDSA signature verification.
Note
Patent NL2037022 pending. For inquiries, contact Cleverbase.
For a prototype with more in-depth documentation, see the scal3 crate docs.
Upon enrolment, the central system provider issues a certificate with two authentication factors:
- 🔑 Something you have: an ECDSA key bound to a device.
- 💭 Something you know or are: a PIN code or biometry-protected data.
The second factor is protected using Shamir’s secret sharing technique. The certificate enables verification by protecting:
- 🫱 A secret share encrypted using the second authentication factor.
- 🫲 A secret share encrypted with a user-specific key only known to the provider.
- 🤝 A verification key enabling ECSDSA signature verification using both secret shares.
Subscribers generate instructions and providers prove them using an innovative method combining:
- Multi-party computation of signatures proving the second factor
- Digital signatures proving possession of the enrolled device
- Digital signatures binding the two authentication factors
Using the certificate, anyone can verify a proof of multi-factor authentication using open standards from the SOG-IS Agreed Cryptographic Mechanisms v1.3.
Each tamper-evident log record is based on an ephemeral ECDSA key pair (binding_sk, binding_vk)
generated on the user’s device. It contains an ECSDSA signature proving the second authentication factor using FROST two-round threshold signing.
<message> || <user_sig> || <checksum> || <device_sig> || <binding_sig>
message
:<binding_vk> || <log metadata> || <instruction>
user_sig
:ecsdsa(<message>)
represented asc || z
checksum
:sha256(<user signature share>)
device_sig
:ecdsa(<c> || <checksum>)
created withdevice_sk
binding_sig
:ecdsa(<device_sig>)
created withbinding_sk
- Provider commits in FROST.
- Provider shares its commitments with Subscriber in a challenge.
- Subscriber commits in FROST, completing the first FROST round.
- Subscriber generates
(binding_sk, binding_vk)
. - Subscriber forms the
message
to sign. - Subscriber signs in FROST to create
c
anduser signature share
. - Subscriber computes the hash digest
checksum
. - Subscriber creates the device signature
device_sig
. - Subscriber creates the binding signature
binding_sig
. - Subscriber destroys
binding_sk
. - Subscriber responds to Provider with the results.
- Provider validates the input and verifies the signatures.
- Provider signs in FROST, completing the second FROST round.
- Provider aggregates the
user_sig
in FROST. - Provider writes the record to the tamper-evident log.