How can we sign a small message with a discrete-log scheme so as to minimize the size of the whole signed message?
Detailed objectives, notation:
- It is of paramount importance to minimize the total bit size $c$ of the cryptogram $C$ carrying the whole signed message $M$, e.g. because $C$ will be keyed-in (appropriately transformed to characters). $M$ is an arbitrary bitstring of $m$ bits, for some parameter $m$ with $32\le m\le256$.
- We restrict to asymmetric signature algorithms loosely based on the discrete logarithm problem in some group (we note $q$ its order), e.g. because some directive only allows that or integer factorization which is inappropriate given 1; schemes using pairing-based cryptography are out. We have unrestricted choice of symmetric primitives likes hashes.
- It must be arguable that a competent adversary using public knowledge and classical computers is unlikely to exhibit a forged signature (in a chosen-messages setup) with $2^w$ work for some parameter $w\approx80$, in a sense such that $w=67$ represents the work reported for the factorization of RSA-768:
Our computation required more than 1020 operations. With the equivalent of almost 2000 years of computing on a single core 2.2GHz AMD Opteron, on the order of 267 instructions were carried out.
- Each signature generation and verification must be feasible with $2^{32}$ work, but performance is otherwise non-critical, as well as key size (public and private).
Questions:
- Are there better schemes than DSA and ECDSA variants with message recovery (see bibliography in this question), and which one(s) can we choose? What is the corresponding maximum capacity (that is, the largest $m$ such that we have full message recovery, and larger messages start to require increasing $c$)?
- Are we better using group $\mathbb Z_p^*$ with $q$ a prime factor of $p-1$ as in plain DSA, or an Elliptic-Curve group, or..?
- What parameters is it reasonable to use (for DSA variants: size of $p$ and $q$; for ECDSA variants: curve..), and what's the $c$ achieved?
Update: I now realize that the Schnorr signature scheme of 1989 yields $c=m+3w$-bit (for at most $2^{w/2}$ signatures). That's a candidate (related question).
Extras:
- In (EC)DSA, we can trim a few bits from $C$ (reducing $c$ by $z_s+z_v$), by having the signer iterate signing until $z_s$ prescribed bits are (say) all set; and the verifier iterates verification with incremental values of $z_v$ other prescribed bits, until finding a signature that verifies. We can increase $z_s$ and $z_v$ within the limits set by requirement 4, with almost no reduction of security. Can we better leverage that leeway? E.g. by increasing $p$ in DSA, or somewhat using an entropy-stretching KDF (PBKDF2, Argon2..)? [for the DSA aspect of that, see this question]
- Does things appreciably change, allowing lower $c$, if we relax security requirement 3 to distinguish between total breaks that allow the adversary to recover the private key or otherwise sign any $M$ at low cost, and those that would be unprofitable to an adversary if each forgery requires $2^{w'}$ work with $w'\approx w-16$?