Crates.io | scal3 |
lib.rs | scal3 |
version | 0.1.0 |
source | src |
created_at | 2024-02-27 15:04:48.058288 |
updated_at | 2024-02-27 15:04:48.058288 |
description | Verify that systems operate under your sole control (prototype, patent pending) |
homepage | |
repository | https://github.com/cleverbase/scal3 |
max_upload_size | |
id | 1155161 |
size | 74,273 |
Verify that systems operate under your sole control. SCAL3 provides verifiable sole control assurance levels with tamper-evident logs for multi-factor authentication transparency. This prototype contains example functions and data.
Patent NL2037022 pending.
Copyright Cleverbase ID B.V. 2024. The code and documentation are licensed under Creative Commons Attribution-NonCommercial 4.0 International.
To discuss other licensing options, contact Cleverbase.
A provider manages a central hardware security module (HSM) that performs instructions under sole control of its subscribers. Subscribers use a mobile wallet app to authorize operations using a PIN code.
To achieve SCAL3, the provider manages three assets:
To enroll for a certificate, the subscriber typically uses a protocol such as ACME (RFC 8555). The certificate binds to the subscriber’s subject identifier an (attested) P-256 ECDSA signing key from Secure Enclave, StrongBox, or Android’s hardware-backed Keystore. This is the possession factor for authentication.
During enrollment, the provider also performs generation of a SCAL3 user identifier and pre-authorization of this identifier for certificate issuance. This part of enrollment applies FROST distributed key generation and requires the subscriber to set their PIN.
During authentication, the certified identifier contains all information needed for the original provider and subscriber to determine their secret signing shares. The process applies FROST two-round threshold signing, combined with ECDSA to prove possession of the enrolled device. Successful authentication leads to recorded evidence that can be publicly verified.
By design, the certificate and the evidence provide no information about the PIN. This means that even attackers with access to the device, the certificate and the log cannot bruteforce the PIN, since they would need to verify each attempt using the rate-limited provider service.
This prototype uses the P-256 elliptic curve with order p and common base point G for all keys.
To the provider and subscriber, signing shares are assigned of the form si = a10 + a11i + a20 + a21i (mod p) where the provider has participant identifier i = 1 and the subscriber has i = 2. During enrollment, the provider has randomly generated a10 and a11 and the subscriber has randomly generated a20 and a21. The other information is shared using the FROST distributed key generation protocol. The resulting joint verifying key equals Vk = [a10 + a20]G.
The SCAL3 user identifier consists of Vk and:
hash_to_field
from
RFC 9380;hash_to_field
.During authentication, the subscriber generates an ephemeral ECDSA binding key pair (sb, Vb) and forms a message M that includes Vb, the instruction to authorize, and log metadata. Applying FROST threshold signing, both parties generate secret nonces (di, ei) and together they form a joint signature (c, z) over M. To do so, they compute with domain-separated hash functions #1 and #2:
All subscriber’s contributions are part of a single “pass the authentication challenge” message that includes:
This construction makes sure that without simultaneous control over both authentication factors, evidence cannot be forged.