Internet-Draft | Threshold Signatures Ed25519 & Ed448 | January 2020 |
Hallam-Baker | Expires 8 July 2020 | [Page] |
A Threshold signature scheme is described. The signatures created are computationally indistinguishable from those produced using the Ed25519 and Ed448 curves as specified in RFC8032 except in that they are non-deterministic. Threshold signatures are a form of digital signature whose creation requires two or more parties to interact but does not disclose the number or identities of the parties involved.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 8 July 2020.¶
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
Threshold encryption and key generation provide compelling advantages over single private key approaches because splitting the private key permits the use of that key to be divided between two or more roles.¶
All existing digital signatures allow the signer role to be divided between multiple parties by attaching multiple signatures to the signed document. This approach, known as multi-signatures is distinguished from a threshold signature scheme in that the identity and roles of the individual signers is exposed. In a threshold signature scheme, the creation of a single signature requires the participation of multiple signers and the signature itself does not reveal the means by which it was constructed.¶
Rather than considering multi-signatures or threshold signatures to be inherently superior, it is more useful to regard both as two points on a continuum of choices:¶
Multiple digital signatures on the same document. Multi-signatures are simple to create and provide the verifier with more information but require the acceptance criteria to be specified independently of the signature itself. This requires that the application logic or PKI provide some means of describing the criteria to be applied.¶
A single signature created using a single private key stored in an encrypted form whose use requires participation of multiple key decryption shares.¶
A single signature created using multiple signature key shares. Signature creation may be subject to complex criteria such as requiring an (n,t) quorum of signers but these criteria are fixed at the time the signature is created¶
A single signature created using multiple signature key shares such that validation of the aggregate signature serves to validate the participation of each of the individual signers.¶
This document describes a scheme that creates threshold signatures that are computationally indistinguishable from those produced according to the algorithm specified in [RFC8032]. The scheme does not support the creation of aggregate signatures.¶
Two versions of the algorithm are presented. Both versions allow a creation of a signature to be divided between a set of n signers such that a minimum of t signers are required to create a signature. The first version of the algorithm (unanimous signature) requires that every member of the set of signers participate in the signing process (i.e. n=t). The second version (quorate signature) allows a signature to be created by a subset of the authorized signers.¶
The unanimous signature scheme allows key shares to be generated by either dividing a master key or using threshold key generation to construct the master key from two or more key contributions as described in [draft-hallambaker-threshold].¶
The quorate signature scheme requires that the signature key shares be derived from a master signature key using Shamir secret sharing. The process of key share generation is thus fundamentally one of dividing a master key.¶
If required, division of the signing key administration roles may be achieved by using threshold key generation to construct the master key and performing the key splitting process separately for each contribution.¶
This section presents the related specifications and standard, the terms that are used as terms of art within the documents and the terms used as requirements language.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].¶
The implementation status of the reference code base is described in the companion document [draft-hallambaker-mesh-developer].¶
The threshold signatures created according to the algorithms described in this document are compatible with but not identical to the signatures created according to the scheme described in [RFC8032]. In particular:¶
Recall that a digital signature as specified by [RFC8032] consists of a pair of values S, R calculated as follows:¶
R = r.B¶
S = r + k.s mod L¶
B is the base point of the elliptic curve.¶
r is an unique, unpredictable integer value such that 0 r L¶
k is the result of applying a message digest function determined by the curve (Ed25519, Ed448) to a set of parameters known to the verifier which include the values R, A and PH(M).¶
A is the public key of the signer, A = s.B¶
PH(M) is the prehash function of the message value.¶
s is the secret scalar value¶
L is the order of the elliptic curve group.¶
To verify the signature, the verifier calculates:¶
S.B = R + k.A¶
Therefore:¶
S.B = (r + k.s).B = r.B +k.(s.B) = R + k.A¶
The value r plays a critical role in the signature scheme as it serves to prevent disclosure of the secret scalar. If the value r is known, s can be calculated as s = (S-r).k^{-1} mod L. It is therefore essential that the value r be unguessable.¶
Furthermore, if the same value of r is used to sign two different documents, this results two signatures with the same value R and different values of k and S. Thus¶
S_{1} = r + k_{1}.s mod L¶
S_{2} = r + k2.s mod L¶
s = (S_{1} - S_{2})(k_{1} - k_{2})^{-1} mod L¶
The method of constructing r specified in [RFC8032] ensures that the value r is unique and unguessable provided that the private key from which the secret scalar value is derived is kept secret.¶
The use of a deterministic means of generating the value r permits auditing of hardware and software implementations to determine if the correct means of constructing r is used by importing a known private key and verifying that the expected values of R are produced when a set of documents is signed.¶
The threshold schemes described in this document have been designed to preserve the ability to audit the means of constructing the values of r for each individual key share even though the sum of these values and hence the value R will vary according to the number of signature shares used.¶
A threshold signature R, S is constructed by summing a set of signature contributions from two or more signers. Each signer i provides a contribution as follows:¶
A_{i} = s_{i}.B¶
R_{i} = r_{i}.B¶
S_{i} = r_{i} + k.s_{i} mod L¶
Where s_{i} and r_{i} are the secret scalar and unguessable value for the individual signer.¶
The contributions of signers {1, 2, ... n} are then combined as follows:¶
R = R_{1} + R_{2} + ... + R_{n}¶
S = S_{1} + S_{2} + ... + S_{n}¶
A = s.B¶
Where s = (s_{1} + s_{2} + ... + s_{n}) mod L¶
The threshold signature is verified in the same manner as before:¶
S.B = R + k.A¶
Substituting for S.B we get:¶
= (S_{1} + S_{2} + ... + S_{n}).B¶
= S_{1}.B + S_{2}.B + ... + S_{n}.B¶
= (r_{1} + k.s_{1}).B + (r_{2} + k.s_{2}).B + ... + (r_{n} + k.s_{n}).B¶
= (r_{1}.B + k.s_{1}.B) + (r_{2}.B + k.s_{2}.B) + ... + (r_{n}.B + k.s_{n}.B)¶
= (R1 + k.A1) + (R1 + k.A1) + ... + (Rn + k.An)¶
Substituting for R + k.A we get:¶
= R_{1} + R_{2} + ... + R_{n} + k.(A_{1} + A_{2} + ... + A_{n})¶
= R_{1} + R_{2} + ... + R_{n} + k.A_{1} + k.A_{2} + ... + k.A_{n}¶
= (R_{1} + k.A_{1}) + (R_{1} + k.A_{1}) + ... + (R_{n} + k.A_{n})¶
As expected, the operation of threshold signature makes use of the same approach as threshold key generation and threshold decryption as described in [draft-hallambaker-threshold]. As with threshold decryption it is not necessary for each key share holder to have a public key corresponding to their key share. All that is required is that the sum of the secret scalar values used in calculation of the signature modulo the group order be the value of the aggregate secret scalar corresponding to the aggregate secret key.¶
While verification of [RFC8032] signatures is unchanged, the use of threshold signatures requires a different approach to signing. In particular, the fact that the value k is bound to the value R means that the participants in the threshold signature scheme must agree on the value R before the value k can be calculated. Since k is required to calculate the signature contributions S_{i} can be calculated, it is thus necessary to calculate the values R_{i} and S_{i} in separate phases. The process of using a threshold signature to sign a document thus has the following stages orchestrated by a coordinator as follows:¶
For clarity, the coordinator role is presented here as being implemented by a single party.¶
The process for creating an Ed25519 signature contribution is as follows¶
The process for creating an Ed448 signature contribution is as follows¶
Transmit the value R_{i} to the coordinator¶
At some later point, the coordinator MAY complete the signature by returning the values F, C, A and R as specified in [RFC8032]. The signer MAY then complete the signature contribution as follows:¶
Note that the process of generating the signature contribution is deterministic for a given secret scalar value but the signature computed MAY be deterministic or non-deterministic according to the desired signature properties.¶
We consider a successful breach of the threshold signature scheme to be any attack that allows the attacker to create a valid signature for any message without the participation of the required threshold of signers.¶
Potential breaches include:¶
We regard attacks on the access control channel to be out of scope for the threshold signature algorithm, though they are certainly a concern for any system in which a threshold signature algorithm is employed.¶
We do not consider the ability of a signer to cause creation of an invalid signature to represent a breach.¶
The most serious concern in the implementation of any Schnorr type signature scheme is the need to ensure that the value r_{i} is never revealed to any other party and is never used to create signatures for two different values of k.s_{i}.¶
Ensuring this does not occur imposes significant design constraints as creating a correct signature contribution requires that the signer use the same value of r_{i} to construct its value or R_{i} and S_{i}.¶
For example, a HSM device may be required to perform multiple signature operations simultaneously. Since the storage capabilities of an HSM device are typically constrained, it is tempting to attempt to avoid the need to track the value of r_{i} within the device itself using an appropriately authenticated and encrypted opaque state token. Such mechanisms provide the HSM with the value of r_{i} but do not and cannot provide protection against a replay attack in which the same state token is presented with a request to sign different values of k.¶
In a malicious contribution attack, one or more parties present a signature contribution that does not meet the criteria R_{i} = r_{i}.B and S_{i} = r_{i} + ks_{i}.¶
Such an attack is not considered to be a breach as it merely causes the signature process to fail.¶
A threshold signature scheme that allows the participants to 'bring their own key' may be vulnerable to a rogue key attack in which a signer is able to select the value of the aggregate public signature key by selecting a malicious public signature key value.¶
The scheme described in this document is a threshold signature scheme and does not support this feature. Consequently, this attack is not relevant. It is described here for illustrative purposes only.¶
This particular attack only applies when the individual signers create their own signature shares. It is not a concern when the signature shares are created by splitting a master signature private key.¶
Consider the case where the aggregate public key signature is calculated from the sum of public signature key share values presented by the signers:¶
A = A_{1} + A_{2} + ... + A_{n}¶
If the public key values are presented in turn, the last signer presenting their key share can force the selection of any value of A that they choose by selecting A_{n} = A_{m} - (A_{1} + A_{2} + ... + A_{n-1})¶
The attacker can thus gain control of the aggregate signature key by choosing A_{m} = s_{m}.B where s_{m} is a secret scalar known only to the attacker. But does so at the cost of not knowing the value s_{n} and so the signer cannot participate in the signature protocol.¶
This attack allows the attacker and the attacker alone to create signatures which are validated under the aggregate signature key.¶
The attack is a consequence of the mistaken assumption that a signature created under the signature key A_{1} + A_{2} + ... + A_{n} provides evidence of the individual participation of the corresponding key holders without separate validation of the aggregate key.¶
Enabling the use of threshold signature techniques by ad-hoc groups of signers using their existing signature keys as signature key shares presents serious technical challenges that are outside the scope of this specification.¶
A unanimous threshold signature is a signature created by a set of two or more signers that requires the participation of every member of the set. The key shares used by the signers MAY be generated by either:¶
Both approaches are described in [draft-hallambaker-threshold].¶
To create a threshold signature key share using threshold key generation, each signer generates a pair {A_{i}, s_{i}} and transmits the public component to the coordinator.¶
The coordinator calculates the aggregate public key A = A_{1} + A_{2} + ... + A_{n}¶
= s_{1}.B + s_{2}.B + ... + s_{n}.B¶
= ((s_{1} + s_{2} + ... + s_{n}) mod L).B¶
= s.B¶
Where s = s_{1} + s_{2} + ... + s_{n}) mod L¶
The coordinator MUST require and verify proof of possession of the private key component s_{i} to defeat rogue key attacks of the type described in Section 3.4.3.¶
For example, the coordinator MAY require each signer to create a test signature for their individual signature key share or to participate in creating a test signature under the aggregate signature key. Such a test signature MAY be a Certificate Signing Request as specified in [RFC2314].¶
Relying parties MUST NOT accept signatures purporting to be aggregate signatures under ad-hoc collections of public keys as proof of the involvement of the signers.¶
To divide a keypair {A, p} into n parts, we begin by generating n-1 key pairs according to the method described in [RFC8032].¶
To calculate the final secret scalar share s_{n} we begin by calculating the secret scalar value s corresponding to the master private key p and the key shares s_{1}, s_{2}, ..., s_{n-1}. The final secret scalar is given by:¶
s_{n} = s - s_{1}, s_{2}, ..., s_{n-1}¶
Since the final secret scalar is not derived from a private key by means of a digest, it is not possible to use [RFC8032] format to store keys. The format described in [draft-hallambaker-threshold] is used instead.¶
Constructing the set of secret scalar key shares using the Shamir secret sharing scheme allows a signature scheme in which the threshold of signers t required to create a signature is smaller than the number of key shares n.¶
The key generation process begins with the generation of a master signature key {A, p}. The private key p is used to calculate the secret scalar value s according to the procedure specified in Section 4.1 above.¶
The secret scalar is then divided as follows.¶
First, we construct a polynomial of degree t in the modular field L, where L is the order of the curve sub-group:¶
f(x) = a_{0} + a_{1}.x + a_{2}.x^{2} + ... a_{t}.x^{t} mod L¶
The values of the key shares are the values f(x_{1}), f(x_{2}), ... , f(x_{n}). That is¶
p_{i} = f(x_{i})¶
p_{1} ... p_{n} are the private key shares¶
x_{1} ... x_{n} are distinct integers in the range 1 x_{i} L¶
The means of constructing distinct values x_{1} ... x_{n} is left to the implementation. It is not necessary for these values to be secret.¶
As with the final secret scalar value above, it is not possible to use [RFC8032] format to store keys. The format described in [draft-hallambaker-threshold] is used instead.¶
The value of the secret scalar value used to create a signature depends on the specific choice of signature shares used to construct it. Since the numbering of the key shares is arbitrary, we choose the set of signers {1, 2, ... , t}.¶
Lagrange polynomials are used to compute a set of coeficients l_{1}, l_{2}, ... l_{t} such that¶
s = a_{0} = l_{1}p_{1} + l_{2}p_{2} + ... + l_{t}p_{t}¶
The value of the secret scalars s_{1} + s_{2} + ... + s_{n} are thus given by¶
s_{i} = l_{i}p_{i}¶
The coordinator identifies the signers to participate in the signature event and uses the set of x coordinates corresponding to their key shares to calculate the corresponding Lagrange coefficient li for each as described in [draft-hallambaker-mesh-udf].¶
[Note: The discussion of Shamir Secret Sharing should probably be moved from its current location in [draft-hallambaker-mesh-udf] to either this document or the base document [draft-hallambaker-threshold]. Which document is better suited will depend on whether it is decided to implement (n,k) threshold signatures and/or key escrow of elliptic curve scalar secrets.]¶
The signers are Alice and Bob. Each creates a key pair:¶
ED25519Alice's Key (ED25519) UDF: ZAAA-GTSI-GXED-255X-XALI-CEXS-XKEY Scalar: 56271244081186130980636545017945156580516101894352492 459594967614223399428880 Encoded Private 33 40 0E 22 D8 67 17 F4 8A 9F 6A 46 61 B4 0E AD 8C D0 DD C3 79 CD 85 BD 95 5C 90 B9 6C CB 8C 23 X: 11116793672970427161790264469280294507189044728140547954071022 7976454124042406369344932655633664630560242213431409139866940 284702002648469365756492647970 Y: 61655404171611396573021808119108664749574235125343680206454285 6299141386615046548323087409388548650272224487089895079970526 0143544115364878870129761259200 Encoded Public E2 AB 8F 37 62 C8 7B F9 E9 BC 59 0C 2E 99 A5 58 0C C3 19 D5 CD DA 53 DF 3E C1 F0 C0 FE D3 55 5E ED25519Bob's Key (ED25519) UDF: ZAAA-GTSI-G2ED-255X-XBOB-XSXK-EY Scalar: 54940772670153459146152925564198105262971485730889818 986727608573229799020168 Encoded Private 68 9A 68 92 8A 06 17 84 35 3C B7 08 F8 56 00 3F BA 31 8C 42 B0 42 FE 2D 18 F2 7F AB CD 10 49 F1 X: 14271495069349838216379540196263140964032393512903842206168182 5518850827098876289800868735522232908519794251130907125878675 6343411484065706313568410880015 Y: 28094328948004112428189466223757440886388684291254605355859923 6240968229706795825282419594219442074647093851302547452470435 9438513477629978601366725015573 Encoded Public 32 E5 8D 5E 66 B2 F9 E9 14 79 08 71 96 3B 9A 75 A2 31 59 4B 8E ED 18 EF BD FF 11 D4 47 2A 8C F4¶
The Aggregate Signature Key A = A_{a} + A_{b}¶
Aggregate Key = Alice + Bob () UDF: TBS Scalar: 26569330913556569171916721364983482306308422345436973 56293312113171384684213 Encoded Private B5 CE 0E B3 9C CF 18 99 CF 8D 4C BB AE 81 79 1F CE 13 AA 3E 63 59 5B AC 8D 2C EB A4 55 C5 DF 05 X: 67872685043898469012456949773240814121645904736114813455820339 8688906486811443744733724675994181258029547346985079901494367 752381127781166234556148580090 Y: 36481740058369645484420180976004932062085375941522344052907594 0118552792158551197107484892204562290802810655253510302448455 4128548992118101415797909250954 Encoded Public 29 65 63 86 4F FB 10 8D BA 7A 0A 68 04 6D 00 DA 9B 1D C3 A4 AF BA 95 B4 5D 27 B4 35 00 2F DF 32¶
To sign the text "This is a test", Alice and Bob first generate their values r which they multiply by the base point to obtain the value R_{i}:¶
Alice: r_a = 63604859197442869293148706887422539627692219221403898700132668 2121229168067 R_a = System.Byte[] Bob: r_a = 90588289213224300609691011367428583037027596393781713986313426 4309321564224 R_a = System.Byte[]¶
The aggregate value R = R_{a} + R_{b}¶
R = FB 4A B1 B4 53 C4 90 54 C4 F3 FD 00 87 AE EF 3D 33 CE 2B 5B F2 88 DB 13 FD F7 28 67 26 EE 07 1F¶
The value k is calculated¶
k = 4033579620745134235581641900982768938545463892767267607223155591 591374371726¶
Alice and Bob both calculate their signature scalar contribution:¶
Alice: S_a = 66555407144639732988508254705363964829787697756754631094914457 8662199168944 Bob: S_b = 14755481297036888929325321941188765612781723011853930571004511 25046339648114¶
The coordinator calculates the aggregate value S = S_{a} + S_{b}¶
S = 2141102201150086222817614741172516209576049278752939368049595703 708538817058¶
The coordinator checks to see that the signature verifies:¶
S.B = R + kA = X: 20168784599297644264752251999842912626695351875278949808545814 238064903547119 Y: 17798208503807446200181400098695224792791795831502230059016274 558554804974562¶
The signers are Alice and Bob. Each creates a key pair:¶
ED448Alice's Key (ED448) UDF: ZAAA-ITSI-GXED-44XA-LICE-XSXK-EY Scalar: 63495803583658817688110446314786076976347236361354035 5597788771064742993095132758589292255654895141583596922516472 738879360490167934280 Encoded Private A0 53 4C 93 3C 34 00 76 AE 5D B5 4A C2 71 5F 43 E1 D6 63 2C 5C 56 53 C8 98 A0 8F 03 FF F5 22 96 91 45 8C 2B CF E3 FD 7E 2A 9E 0B D6 F4 CC 66 61 43 62 72 7B 34 B4 79 92 X: 24743197509267833262111449556527285120868167712209919570838426 3466168536901525943558973091346360088759980994772668117646359 614426660579 Y: 21342899120576770537664462049685258390853729788303428349051130 8752175233505795318243164692156369495328007220135137156078814 081547431302 Encoded Public 0A 3B F3 27 E7 E1 67 63 2C 59 E2 1C D1 84 C7 83 E8 1E D1 68 9F 32 A1 16 99 00 5C DA 29 B9 6C 08 E4 15 57 7E E5 63 C2 32 08 23 41 68 5F 49 1F FF BC 4D CD 3A 4E A6 85 49 00 ED448Bob's Key (ED448) UDF: ZAAA-ITSI-G2ED-44XB-OBXS-XKEY Scalar: 72649803773199751564998543891898904839718409312910780 0262041941160989643727331987658132182181970054245587322070535 846720571414845714224 Encoded Private BC 53 B4 74 3E A7 A7 FA 9F 05 9A BC 8C 22 26 15 A1 4E BB 10 0E B5 59 6B DE 9C 1B E9 F2 3C 65 42 E7 B4 47 18 60 AC 18 A6 D2 78 B8 BC CE F5 F4 28 B2 3A FF 08 61 EF 6B 7C X: 58235851934808640621920816872959059172692411187640950432203039 8116748997750134460231406698091317008063030408798536634284207 667468558264 Y: 34390767697909283892495761259186538632120422458392131201372282 6056455656591826216381185634080685718154852726725624178995827 091591132128 Encoded Public 93 63 5A 45 2D 4C 94 32 45 23 CD E2 A8 46 E4 78 A0 80 59 DA 36 CB 6B 0C 06 64 6F BE 51 AB C0 BF 1E DB A8 3F 2B 3B 80 0F BF 00 E6 78 DD E0 83 E9 AC 20 02 55 87 07 39 38 00¶
The Aggregate Signature Key A = A_{a} + A_{b}¶
Aggregate Key = Alice + Bob () UDF: TBS Scalar: 89488306051273634069773238262841883041784075539841550 3672228636597106090916876462340541507950185640860121886233669 49466515613996100051 Encoded Private D3 29 DD AB F6 0D 99 8B 75 65 B8 06 36 C9 3A 2C D4 08 C3 9B 7C F9 77 8C 68 29 0E 3D 5D C7 3E 00 92 8B DC AE 26 FB 16 39 CD 25 1B 23 4A 5A 05 61 1D 5C C4 70 0A C9 84 1F X: 17985659098670117617173315763082238685735647626871251468000984 2080317111091696183607307614171726960576308774975742249260532 199160570999 Y: 31506323224859159594386181995639405170623657273945727288760063 1624406694682617334725040181287905351066763414658543828623841 509161975864 Encoded Public 9B 3E DF 49 55 40 9F 7B EA 0B AA 40 B7 3D 15 82 60 9F 7C 40 CF 67 DE 56 56 0D 03 87 63 3B 15 F2 45 33 FE 48 BD 2D A0 A2 8B CC 74 DA 94 0F 39 00 AC 39 CB 0A 9F A4 EB B0 00¶
To sign the text "This is a test", Alice and Bob first generate their values r which they multiply by the base point to obtain the value R_{i}:¶
Alice: r_a = 73759418290054794861373572858566288781619358129342401750774507 86228048858000588481919454774928817062768941685761418007593280530 2999804 R_a = System.Byte[] Bob: r_a = 46237963278513215322396148050034865586946889704122042348536832 25811783723521941968309643248450810747601167927994249458319388189 6018677 R_a = System.Byte[]¶
The aggregate value R = R_{a} + R_{b}¶
R = A0 FF BC 4A 92 40 39 FE A3 E2 98 19 8A CB 60 54 65 E1 EF C5 3E E2 AA 54 8D 27 78 CB F8 34 DC E2 9C DF A0 D7 F1 D2 7F EA 33 A2 A7 07 76 29 A1 7C EB D4 97 F1 A3 CE 0B 61 80¶
The value k is calculated¶
k = 4253302316461679481082434282193340085469714728082631996749509171 36528863341161130189337827407821840447093029569242109238035123293 90659¶
Alice and Bob both calculate their signature scalar contribution:¶
Alice: S_a = 98531765382438321188310203252700171214078910507928709174117939 03719918811956876581076180944672089155783210289818359855928311296 3570131 Bob: S_b = 10826185029558642533243398893637670455024435365016467182849367 92853602994592020853268312315426021226313042112304897550405147626 03231952¶
The coordinator calculates the aggregate value S = S_{a} + S_{b}¶
S = 2508393460412302388341324021707574217591292398626386593223906852 74134836172312654213972856976306382258260204195816912950241197071 52304¶
The coordinator checks to see that the signature verifies:¶
S.B = R + kA = X: 87229317542997013818252634997777965098763712747235444768375375 25263195569863 Y: 48426719549368988040047207185774675871089544448034802040243984 177418779288237¶
The administrator creates the aggregate key pair¶
ED25519Aggregate Key (ED25519) UDF: ZAAA-GTSI-GQED-255X-XAGG-REGA-TEXK-EY Scalar: 39348647608109113656999806950437958090469802387424444 589375066079861075223816 Encoded Private 37 39 5E 7A 8B A5 A0 19 46 4B 58 22 EA 24 A5 71 45 2C 2A AC 7A 3E FB CA CE 3F D4 12 9A BA EB 70 X: 14198837758377867455716504277518729070915183249890461230792115 9904969716778427995951234766002164511738587575257530388758374 7824906047250057721855068523970 Y: 20211025649802071998810413948266748565975140520947927724517956 2067625505077751598018629551746824533726709810990193455662385 6152736116303441031851305458040 Encoded Public 6E 13 79 B4 39 DA 97 9C 5A 34 CE 79 CD 1B 50 DF A0 76 AD 49 81 6D 52 59 A4 2C DB CE 44 FF 3E F5¶
Three key shares are required for Alice, Bob and Carol with a threshold of two. The parameters of the Shamir Secret Sharing polynomial are:¶
a0 = 3934864760810911365699980695043795809046980238742444458937506607 9861075223816 a1 = 6478235074936669232922546709062853526800747723284435893560379998 498854036401¶
The key share values for the participants are¶
xa = 1 ya = 2404849219052209606083234281242846172127851954429434846923740448 647203754283 xb = 2 yb = 1646078716656616625032594427262705458071483318333963134482169508 860603539695 xc = 3 yc = 8873082142610236439819545732825647440151146822384914220405985690 74003325107¶
Alice and Carol are selected to sign the message "This is another test"¶
The Lagrange coefficients are:¶
la = 3618502788666131106986593281521497120428558179689953803000975469 142727125496 lc = 3618502788666131106986593281521497120428558179689953803000975469 142727125494¶
Alice and Carol select their values ra, rc¶
ra = 5467990291185231529722642292282910677180928186673090898286725351 703148584114 Ra = System.Byte[] rc = 3842295179874978910349644562407562715869337917437976620141371939 137906271828 Rc = System.Byte[]¶
The aggregate value R = R_{a} + R_{c}¶
R = B1 23 76 E0 38 C5 15 2A B4 0F AB E2 FA 0C AC 81 D0 34 28 B7 13 14 75 A2 29 08 3C C0 62 3B 97 2D¶
The value k is¶
k = 24387631527158770388984723649123275410144206977564237560989138844 76357243053¶
The values R and k (or the document to be signed) and the Lagrange coefficients are passed to Alice and Carol who use them to calculate their secret scalar values:¶
sa = 7225776617244445516111444703385766378620336111334106073386586142 113532756919; sc = 3174848681535619284995615994880214748421000838570708091980676184 605725462941¶
The signature contributions can now be calulated:¶
Sa = 5258509372798138258048339062398668871787395474915394506826958407 016143211994 Sc = 2369087102951219635858054121785113036716245524183189984191118268 317926650670¶
The coordinator calculates the aggregate value S = S_{a} + S_{b}¶
S = 3905908984170956799332066211407876676465246397186768850161257370 48615611675¶
The coordinator checks to see that the signature verifies:¶
S.B = R + kA = X: 44137199296357774791154193859950611817340233105447413062332736 902705770844448 Y: 29688538012678578878269116100526571773188243259702429043049505 096610475369173¶
The administrator creates the aggregate key pair¶
ED448Aggregate Key (ED448) UDF: ZAAA-ITSI-GQED-44XA-GGRE-GATE-XKEY Scalar: 50890460656419721531273587958284096015810982760541575 4207268050539683337837216003977228732536078674802149039736292 653681850024283019712 Encoded Private 78 22 7E 3B 89 95 80 5D 04 19 DC 27 F1 7F 9B E4 86 2B 0B DD 55 64 EE 04 19 49 4D DE B9 04 3B 9E 8B 7D DC EC EC 8F DD 1D E7 88 86 FD 11 FD 78 EF 1A 8B 84 8F 77 00 73 65 X: 44109173355278142669484438370724914685176368933547176239809629 7503768465595321590690311221269514682222687386378631457535068 446135118173 Y: 53219402718535721212460981200104434180077825188675868294070079 5084662920552823356888138706016038637934794839496624474125511 419755284720 Encoded Public 43 61 20 A0 B1 DF AA BD 6B 55 00 97 A3 BE CB B8 09 57 20 88 16 69 E4 B9 E1 7E 9C 13 C0 41 5B CB 4D 3E E4 99 2E 2D 48 89 1C C0 FB 26 58 C2 DD 5C C1 DC 17 82 D7 A0 43 EE 80¶
Three key shares are required for Alice, Bob and Carol with a threshold of two. The parameters of the Shamir Secret Sharing polynomial are:¶
a0 = 0 a1 = 3230310441090132544881502506497842088200690521964525360879407271 94765745753141655224661941966620396823169163035586912417623145586 91569¶
The key share values for the participants are¶
xa = 1 ya = 3230310441090132544881502506497842088200690521964525360879407271 94765745753141655224661941966620396823169163035586912417623145586 91569 xb = 2 yb = 6460620882180265089763005012995684176401381043929050721758814543 89531491506283310449323883933240793646338326071173824835246291173 83138 xc = 3 yc = 9690931323270397634644507519493526264602071565893576082638221815 84297237259424965673985825899861190469507489106760737252869436760 74707¶
Alice and Carol are selected to sign the message "This is another test"¶
The Lagrange coefficients are:¶
la = 9085484053695086131866547598600056679420517008591475753518627489 75730019807697928580978776458461879816551468545458311523868779298 24891 lc = 9085484053695086131866547598600056679420517008591475753518627489 75730019807697928580978776458461879816551468545458311523868779298 24889¶
Alice and Carol select their values ra, rc¶
ra = 9916409373832855445680225409665819204694890272466243758088723611 70412660541692764122871086733859409013013307204388508168153245726 71888 Ra = System.Byte[] rc = 1073609511703983208477950323599584281909008734279687416788909134 22950735978683478421395579947183492087041733558644230420650276766 461770 Rc = System.Byte[]¶
The aggregate value R = R_{a} + R_{c}¶
R = 30 A1 B3 17 69 AB 99 0E 57 5E 0B A5 2E 51 72 C0 BA 31 35 39 51 7C 83 B8 22 01 9F 85 45 93 9B 54 19 A2 FA FD 34 7A CA 88 7D 05 52 A6 21 5C E0 B7 69 62 F4 94 6C 15 C3 11 80¶
The value k is¶
k = 10235373755332719753132453070965244233375545860969817073088585850 34984308611997081872546544930901042673608404328479261067005777756 07973¶
The values R and k (or the document to be signed) and the Lagrange coefficients are passed to Alice and Carol who use them to calculate their secret scalar values:¶
sa = 1393094971533028494918880135834681981172155279153826379483773839 76787863843741041141797168940839247505130521309883868015030349767 862243; sc = 4240018392059887314544293838853293547119481225644687712199516581 83581401177985445743985863508531284581797723992077942897434060917 87536¶
The signature contributions can now be calulated:¶
Sa = 1176422144911387757819650694682546452875900733977789124175969611 96064995455877990887534924392638074098909532952322658866770310075 667839 Sc = 1261695317878032144403764439936251221873899581791569343175257655 85463382113907822175563223482227224266776195506309879565242141085 378620¶
The coordinator calculates the aggregate value S = S_{a} + S_{b}¶
S = 6210206520504026758501056148987863388656969140510633166475017698 63823736082462273469023925831729224023754347495408761272386953013 96680¶
The coordinator checks to see that the signature verifies:¶
S.B = R + kA = X: 41458922531347602467333936260245029252955857925674064823925020 498684283758735 Y: 46892836594134893138380416498249507660693894634845371281694628 683354340901899¶
This document requires no IANA actions.¶