$$ \newcommand \SubKeyPK {\mathrm{SubKeyPK}} \newcommand \OTSSOffsetID {\mathrm{OneTimeSignatureSubkeyOffsetID}} \newcommand \OTSSBatchID {\mathrm{OneTimeSignatureSubkeyBatchID}} \newcommand \OneTimeSignature {\mathrm{OneTimeSignature}} \newcommand \Sig {\mathrm{Sig}} \newcommand \PK {\mathrm{PK}} \newcommand \PKSigOld {\mathrm{PKSigOld}} \newcommand \PKTwo {\mathrm{PK2}} \newcommand \PKOneSig {\mathrm{PK1Sig}} \newcommand \PKTwoSig {\mathrm{PK2Sig}} \newcommand \Offset {\mathrm{Offset}} \newcommand \Batch {\mathrm{Batch}} $$
One-Time Signature
\( \OTSSBatchID \) identifies an intermediate level ephemeral sub-key of a batch and is signed by the voting key’s root key. It has the following fields:
-
Sub-Key Public key (\( \SubKeyPK \)), the public key of this sub-key.
-
Batch (\( \Batch \)), batch number of this sub-key.
The \( \OTSSOffsetID \) identifies a leaf-level ephemeral sub-key and is signed with a batch sub-key. It has the following fields:
-
Sub-Key Public key (\( \SubKeyPK \)), the public key of this sub-key.
-
Batch (\( \Batch \)), batch number of this sub-key.
-
Offset (\( \Offset \)), offset of this sub-key in current batch.
Finally, \( \OneTimeSignature \) is a cryptographic signature used in voting messages between Algorand players. It contains the following fields:
-
Signature (\( \Sig \)), a signature of message under \( \PK \)
-
Public Key (\( \PK \)), the public key of the message signer, is part of a leaf-level ephemeral sub-key.
-
Public Key 2 (\( \PKTwo \)), the public key of the current batch.
-
Public Key 1 Signature (\( \PKOneSig \)), a signature of \( \OTSSOffsetID \) under \( \PKTwo \).
-
Public Key 2 Signature (\( \PKTwoSig \)), a signature of \( \OTSSBatchID \) under the voting keys.
The Old Style Signature (\( \PKSigOld \)) is deprecated, still included in the message only for compatibility reasons.
⚙️ IMPLEMENTATION
One-Time Signature reference implementation.