Internet-Draft Pairing-Friendly Curves September 2026
Sakemi, et al. Expires 11 March 2027 [Page]
Workgroup:
CFRG
Internet-Draft:
draft-irtf-cfrg-pairing-friendly-curves-14
Published:
Intended Status:
Informational
Expires:
Authors:
Y. Sakemi, Ed.
GMO CONNECT Inc.
S. Kanno
GMO CONNECT Inc.
R. Wahby
Carnegie Mellon University

Pairing-Friendly Curves

Abstract

Pairing-based cryptography, a subfield of elliptic curve cryptography, has received attention due to its flexible and practical functionality. Pairings are special maps defined using elliptic curves and they can be applied to construct several cryptographic protocols such as identity-based encryption, attribute-based encryption, and so on. At CRYPTO 2016, Kim and Barbulescu proposed an efficient number field sieve algorithm named exTNFS for the discrete logarithm problem in a finite field. Several types of pairing-friendly curves such as Barreto-Naehrig curves are affected by the attack. In particular, a Barreto-Naehrig curve with a 254-bit characteristic was adopted by a lot of cryptographic libraries as a parameter of 128-bit security; however, it ensures no more than the 100-bit security level due to the effect of the attack. In this memo, we list the security levels of certain pairing-friendly curves, and motivate our choices of curves. First, we summarize the adoption status of pairing-friendly curves in standards, libraries and applications, and consider them at the 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely used", we select the recommended pairing-friendly curves considering exTNFS. This memo also specifies the serialization and deserialization of the points and scalars that protocols exchange, restating a format that is already in widespread use, and states which of the remaining decisions belong to the calling protocol.

Status of This Memo

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 11 March 2027.

Table of Contents

1. Introduction

1.1. Pairing-based Cryptography

Elliptic curve cryptography is an important area in currently deployed cryptography. The cryptographic algorithms based on elliptic curve cryptography, such as the Elliptic Curve Digital Signature Algorithm (ECDSA), are widely used in many applications.

Pairing-based cryptography, a subfield of elliptic curve cryptography, has attracted much attention due to its flexible and practical functionality. Pairings are special maps defined using elliptic curves. Pairings are fundamental in the construction of several cryptographic algorithms and protocols such as identity-based encryption (IBE), attribute-based encryption (ABE), authenticated key exchange (AKE), short signatures, and so on. Several applications of pairing-based cryptography are currently in practical use.

As the importance of pairings grows, elliptic curves where pairings are efficiently computable are studied and the special curves called pairing-friendly curves are proposed.

1.2. Applications of Pairing-based Cryptography

Several applications using pairing-based cryptography have already been standardized and deployed. We list here some examples of applications available in the real world.

IETF published RFCs for pairing-based cryptography such as Identity-Based Cryptography [RFC5091], Sakai-Kasahara Key Encryption (SAKKE) [RFC6508], and Identity-Based Authenticated Key Exchange (IBAKE) [RFC6539]. SAKKE is applied to Multimedia Internet KEYing (MIKEY) [RFC6509] and used in 3GPP [SAKKE].

Pairing-based key agreement protocols are standardized in ISO/IEC [ISOIEC11770-3]. In [ISOIEC11770-3], a key agreement scheme by Joux [Joux00], identity-based key agreement schemes by Smart-Chen-Cheng [CCS07] and Fujioka-Suzuki-Ustaoglu [FSU10] are specified.

MIRACL implements M-Pin, a multi-factor authentication protocol [M-Pin]. The M-Pin protocol includes a type of zero-knowledge proof, where pairings are used for its construction.

The Trusted Computing Group (TCG) specified the Elliptic Curve Direct Anonymous Attestation (ECDAA) in the specification of a Trusted Platform Module (TPM) [TPM]. ECDAA is a protocol for proving the attestation held by a TPM to a verifier without revealing the attestation held by that TPM. Pairings are used in the construction of ECDAA. FIDO Alliance [FIDO] and W3C [W3C] also published an ECDAA algorithm similar to TCG.

Intel introduced Intel Enhanced Privacy ID (EPID) that enables remote attestation of a hardware device while preserving the privacy of the device as part of the functionality of Intel Software Guard Extensions (SGX) [EPID]. They extended TPM ECDAA to realize such functionality. A pairing-based EPID was proposed [BL10] and distributed along with Intel SGX applications.

Zcash implemented their own zero-knowledge proof algorithm named Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (zk-SNARKs) [Zcash]. zk-SNARKs are used for protecting the privacy of transactions of Zcash. They use pairings to construct zk-SNARKs.

Cloudflare introduced Geo Key Manager [Cloudflare] to restrict distribution of customers' private keys to a subset of their data centers. To achieve this functionality, ABE is used, and pairings take a role as a building block. In addition, Cloudflare published a new cryptographic library, the Cloudflare Interoperable, Reusable Cryptographic Library (CIRCL) [CIRCL] in 2019. They plan to include securely implemented subroutines for pairing computations on certain secure pairing-friendly curves in CIRCL.

Currently, Boneh-Lynn-Shacham (BLS) signature schemes are being standardized [I-D.irtf-cfrg-bls-signature] and utilized in several blockchain projects such as Ethereum [Ethereum], Algorand [Algorand], Chia Network [Chia], and DFINITY [DFINITY]. The aggregation functionality of BLS signatures is effective for their applications of decentralization and scalability.

1.3. Motivation and Contribution

At CRYPTO 2016, Kim and Barbulescu proposed an efficient number field sieve (NFS) algorithm for the discrete logarithm problem in a finite field GF(p^k) [KB16]. The attack improves the polynomial selection that is the first step in the number field sieve algorithm for discrete logarithms in GF(p^k). The idea is applicable when the embedding degree k is a composite that satisfies k = i * j with gcd(i, j) = 1 and i, j > 1. The basic idea is based on the equality GF(p^k) = GF((p^i)^j) and one of the improvements for reducing the amount of cost for solving the discrete logarithm problem is using subfield calculation. Several types of pairing-friendly curves such as Barreto-Naehrig curves (BN curves) [BN05] and Barreto-Lynn-Scott curves (BLS curves) [BLS02] are affected by the attack, since a pairing-friendly curve suitable for cryptographic applications requires that the discrete logarithm problem is sufficiently difficult. Please refer to [KB16] for detailed ideas and calculation algorithms of the attack. In particular, BN254, which is a BN curve with a 254-bit characteristic effective for pairing calculations, was adopted by a lot of cryptographic libraries as a parameter of the 128-bit security level; however, BN254 ensures no more than the 100-bit security level due to the effect of the attack, where the security levels described in this memo correspond to the security strength of NIST recommendation [NIST].

To resolve this effect immediately, several research groups and implementers re-evaluated the security of pairing-friendly curves and they respectively proposed various curves that are secure against the attack [BD18] [BLS12-381].

In this memo, we list the security levels of certain pairing-friendly curves, and motivate our choices of curves. First, we summarize the adoption status of pairing-friendly curves in international standards, libraries and applications, and consider them at the 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely used", pairing-friendly curves corresponding to each security level are selected in accordance with the security evaluation by Barbulescu and Duquesne [BD18].

As a result, we recommend the BLS curve with 381-bit characteristic of embedding degree 12 and the BN curve with the 462-bit characteristic for the 128-bit security level, and the BLS curves of embedding degree 48 with the 581-bit characteristic for the 256-bit security level. This memo shows their specific test vectors.

This memo also specifies how the points and scalars that protocols exchange are serialized and deserialized. That format does not originate here: it comes from [ZcashRep] and is already relied upon by other specifications, which cite this document for it. It is restated normatively in Section 5, together with what makes a deserialized value valid and which decisions are left to the calling protocol. Point serialization is given for BLS12-381 and BLS48-581; scalar serialization applies to all three curves.

1.4. Requirements Terminology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

2. Preliminaries

2.1. Elliptic Curves

Let p be a prime number at least 5, and let q be a power of p. Let GF(q) be a finite field. The curve defined by the following equation E is called an elliptic curve:

E : y^2 = x^3 + a * x + b,

and a and b in GF(q) satisfy the discriminant inequality 4 * a^3 + 27 * b^2 != 0 mod q. This is called the Weierstrass normal form of an elliptic curve.

A solution (x,y) to the equation E can be thought of as a point on the corresponding curve. For a natural number n, we define the set of (GF(q^n))-rational points of E, denoted by E(GF(q^n)), to be the set of all solutions (x,y) in GF(q^n), together with a 'point at infinity' O_E, which is defined to lie on every vertical line passing through the curve E.

The set E(GF(q^n)) forms a group under a group law that can be defined geometrically as follows. For P and Q in E(GF(q^n)) define P + Q to be the reflection around the x-axis of the unique third point R of intersection of the straight line passing through P and Q with the curve E. If the straight line is tangent to E, we say that it passes through that point twice. The identity of this group is the point at infinity O_E. We also define scalar multiplication [K]P for a positive integer K as the point P added to itself (K-1) times. Here, [0]P becomes the point at infinity O_E and the relation [-K]P = -([K]P) is satisfied.

2.2. Pairings

A pairing is a bilinear map defined on two subgroups of rational points of an elliptic curve. Examples include the Weil pairing, the Tate pairing, the optimal ate pairing [Ver09], and so on. The optimal ate pairing is considered to be the most efficient to compute and is the one that is most commonly used for practical implementation.

Let E be an elliptic curve defined over a prime field GF(p), and let r be a large prime dividing the order of E(GF(p)). Let k be the minimum integer for which r is a divisor of p^k - 1; this is called the embedding degree of E over GF(p). Let pi be the p-power Frobenius endomorphism, which maps a point (x, y) of E to (x^p, y^p), and let E(GF(p^k))[r] be the r-torsion subgroup of E(GF(p^k)). The pairing is defined on the two subgroups

G_1 = E(GF(p^k))[r] intersect ker(pi - [1]) = E(GF(p))[r],
G_2 = E(GF(p^k))[r] intersect ker(pi - [p]),

where ker(pi - [a]) denotes the set of points T with pi(T) = [a]T. For the curves considered in this document, both G_1 and G_2 have order r. G_2 is identified by the eigenvalue p, and not merely as an order r subgroup of E(GF(p^k)): that weaker description is satisfied by G_1 as well, and the pairing computed in Appendix A is degenerate when both of its arguments are taken from G_1.

Let d be a divisor of k and E' be an elliptic curve defined over GF(p^(k/d)). If there is an isomorphism psi from E'(GF(p^k)) to E(GF(p^k)), then E' is called the twist of E. It is more efficient to hold elements of G_2 as points of E'(GF(p^(k/d))), whose coordinates lie in a smaller field. Write G'_2 for the preimage of G_2 under psi, that is, the set of points Q of E'(GF(p^(k/d))) with psi(Q) in G_2. For the curves in this document, G_2 lies in the image of E'(GF(p^(k/d))) under psi, which is what makes that representation possible; since psi is injective, G'_2 is a subgroup of order r, and psi restricted to G'_2 is an isomorphism onto G_2. The formula for psi is given for each curve in Section 4. What is given there is the restriction of psi to E'(GF(p^(k/d))), which is an injective homomorphism into E(GF(p^k)) and not an isomorphism, since E'(GF(p^(k/d))) and E(GF(p^k)) differ in size. The formula is the same in either case. Where a point of G_2 is written with coordinates in this document, as in Section 4 and in Section 5, it is the corresponding point of G'_2 that is written; psi carries it back to G_2 when the pairing is evaluated. Let G_T be an order r subgroup of the multiplicative group (GF(p^k))^*; this exists by definition of k.

A pairing is defined as a bilinear map e: (G_1, G_2) -> G_T satisfying the following properties:

  1. Bilinearity: for any S in G_1, T in G_2, and integers K and L, e([K]S, [L]T) = e(S, T)^{K * L}.

  2. Non-degeneracy: for every T in G_2 other than O_E, e(S, T) = 1 if and only if S = O_E; and for every S in G_1 other than O_E, e(S, T) = 1 if and only if T = O_E. The identity element has to be excluded on both sides: by bilinearity, e(S, O_E) = 1 holds for every S in G_1, and e(O_E, T) = 1 for every T in G_2.

In applications, it is also necessary that for any S in G_1 and T in G_2, this bilinear map is efficiently computable.

We define some of the terminology used in this memo as follows:

GF(p):

a finite field with characteristic p.

GF(p^k):

an extension field of degree k.

(GF(p))^*:

the multiplicative group of GF(p).

(GF(p^k))^*:

the multiplicative group of GF(p^k).

b:

the coefficient of the curve equation E: y^2 = x^3 + b.

O_E:

the point at infinity over an elliptic curve E.

E(GF(p^k)):

the group of GF(p^k)-rational points of E.

#E(GF(p^k)):

the number of GF(p^k)-rational points of E.

r:

the order of G_1 and G_2.

E(GF(p^k))[r]:

the r-torsion subgroup of E(GF(p^k)), that is, the set of points T of E(GF(p^k)) with [r]T = O_E.

pi:

the p-power Frobenius endomorphism, which maps a point (x, y) of E to (x^p, y^p).

BP:

a point in G_1. (The 'base point' of a cyclic subgroup of G_1)

h:

the cofactor h = #E(GF(p)) / r, where gcd(h, r) = 1.

h':

the cofactor h' = #E'(GF(p^(k/d))) / r, where gcd(h', r) = 1.

BP':

a point in G'_2. (The 'base point' of a cyclic subgroup of G'_2)

2.3. Barreto-Naehrig Curves

A BN curve [BN05] is a family of pairing-friendly curves proposed in 2005. A pairing over BN curves constructs optimal ate pairings.

A BN curve is defined by elliptic curves E and E' parameterized by a well-chosen integer t. E is defined over GF(p), where p is a prime number and at least 5, and E(GF(p)) has a subgroup of prime order r. The characteristic p and the order r are parameterized by

p = 36 * t^4 + 36 * t^3 + 24 * t^2 + 6 * t + 1
r = 36 * t^4 + 36 * t^3 + 18 * t^2 + 6 * t + 1

for an integer t.

The elliptic curve E has an equation of the form E: y^2 = x^3 + b, where b is a primitive element of the multiplicative group (GF(p))^* of order (p - 1).

In the case of BN curves, we can use twists of the degree 6. If nu is an element that is neither a square nor a cube in an extension field GF(p^2), the twist E' of E is defined over an extension field GF(p^2) by the equation E': y^2 = x^3 + b' with b' = b / nu or b' = b * nu. BN curves are called D-type if b' = b / nu, and M-type if b' = b * nu. The embedding degree k is 12.

A pairing e is defined by taking G_1 as a subgroup of E(GF(p)) of order r, G_2 as defined in Section 2.2 and represented by the subgroup G'_2 of E'(GF(p^2)), and G_T as an order r subgroup of the multiplicative group (GF(p^12))^*.

2.4. Barreto-Lynn-Scott Curves

A BLS curve [BLS02] is another family of pairing-friendly curves proposed in 2002. Similar to BN curves, a pairing over BLS curves constructs optimal ate pairings.

A BLS curve is defined by elliptic curves E and E' parameterized by a well-chosen integer t. E is defined over a finite field GF(p) by an equation of the form E: y^2 = x^3 + b, and its twist E': y^2 = x^3 + b', is defined in the same way as BN curves. In contrast to BN curves, E(GF(p)) does not have a prime order. Instead, its order is divisible by a large parameterized prime r and denoted by h * r with cofactor h. The pairing is defined on the r-torsion points. In the same way as BN curves, BLS curves can be categorized as D-type and M-type.

BLS curves vary in accordance with different embedding degrees. In this memo, we deal with the BLS12 and BLS48 families with embedding degrees 12 and 48 with respect to r, respectively.

In BLS curves, parameters p and r are given by the following equations:

BLS12:
    p = (t - 1)^2 * (t^4 - t^2 + 1) / 3 + t
    r = t^4 - t^2 + 1
BLS48:
    p = (t - 1)^2 * (t^16 - t^8 + 1) / 3 + t
    r = t^16 - t^8 + 1

for a well chosen integer t where t must be 1 (mod 3).

A pairing e is defined by taking G_1 as a subgroup of E(GF(p)) of order r, G_2 as defined in Section 2.2 and represented by the subgroup G'_2 of E'(GF(p^2)) for BLS12 and of E'(GF(p^8)) for BLS48, and G_T as an order r subgroup of the multiplicative group (GF(p^12))^* for BLS12 and of the multiplicative group (GF(p^48))^* for BLS48.

3. Security of Pairing-Friendly Curves

3.1. Evaluating the Security of Pairing-Friendly Curves

The security of pairing-friendly curves is evaluated by the hardness of the following discrete logarithm problems:

  • The elliptic curve discrete logarithm problem (ECDLP) in G_1 and G_2

  • The finite field discrete logarithm problem (FFDLP) in G_T

There are other hard problems over pairing-friendly curves used for proving the security of pairing-based cryptography. Such problems include the computational bilinear Diffie-Hellman (CBDH) problem, the bilinear Diffie-Hellman (BDH) problem, the decision bilinear Diffie-Hellman (DBDH) problem, the gap DBDH problem, etc. [ECRYPT]. Almost all of these variants are reduced to the hardness of discrete logarithm problems described above and are believed to be easier than the discrete logarithm problems.

Although it would be sufficient to attack any of these problems to attack pairing-based cryptography, the only known attacks thus far attack the discrete logarithm problem directly, so we focus on the discrete logarithm in this memo.

The security levels of pairing-friendly curves are estimated by the computational cost of the most efficient algorithm for solving the above discrete logarithm problems. The best-known algorithms for solving the discrete logarithm problems are based on Pollard's rho algorithm [Pollard78] and Index Calculus [HR83]. To make index calculus algorithms more efficient, number field sieve (NFS) algorithms are utilized.

3.2. Impact of Recent Attacks

In 2016, Kim and Barbulescu proposed a new variant of the NFS algorithms, the extended tower number field sieve (exTNFS), which drastically reduces the complexity of solving FFDLP [KB16]. The exTNFS improves the polynomial selection that is the first step in the number field sieve algorithm for discrete logarithms in GF(p^k). The idea is applicable when the embedding degree k is a composite that can be written as k = i * j with gcd(i, j) = 1 and i, j > 1. Any k divisible by 6 meets this condition, taking i to be the largest power of 2 dividing k and j to be k / i; [KB16] accordingly gives k = 6 as the first case it treats. BN curves and BLS curves, whose embedding degree is divisible by 6, are therefore affected by the exTNFS. The basic idea of the exTNFS is based on the equality GF(p^k) = GF((p^i)^j) and one of the improvements for reducing the amount of cost for solving FFDLP is using subfield calculation. Please refer to [KB16] for detailed ideas and calculation algorithms of exTNFS. Due to exTNFS, the security levels of certain pairing-friendly curves asymptotically dropped down. For instance, Barbulescu and Duquesne estimated that the security of the BN curves, which had been believed to provide 128-bit security (BN256, for example) was reduced to approximately 100 bits [BD18]. Here, the security levels described in this memo correspond to the security strength of NIST recommendation [NIST].

There has since been research into the minimum bit length of the parameters of pairing-friendly curves for each security level when applying exTNFS as an attacking method for FFDLP. For 128-bit security, Barbulescu and Duquesne estimated the minimum bit length of p of BN curves and BLS12 curves after exTNFS as 461 bits [BD18]. For 256-bit security, Kiyomura et al. estimated the minimum bit length of p^k of BLS48 curves as 27,410 bits, which indicated 572 bits of p [KIK17].

4. Selection of Pairing-Friendly Curves

In this section, we introduce some of the known secure pairing-friendly curves that consider the impact of exTNFS.

First, we show the adoption status of pairing-friendly curves in standards, libraries and applications, and consider them at the 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely used", pairing-friendly curves corresponding to each security level are selected and their parameters are indicated.

In our selection policy, it is important that selected curves are shown in peer-reviewed papers for security and that they are widely used in cryptographic libraries. In addition, "efficiency" is one of the important aspects but greatly dependent on implementations, so we choose to prioritize "security" and "widely used" over "efficiency" in consideration of future interconnections and interoperability over the internet.

Within this policy, when "widely used" does not by itself distinguish between candidate curves at a given security level, we prefer the curve that provides security margin above the nominal security level: a margin advantage is a security consideration, and by the priority above it outranks an efficiency advantage of a lower-margin alternative. BLS12-381 is the one exception to this preference for margin: although its security level is estimated at approximately 126 bits [GMT19], slightly below the nominal 128-bit target, it is retained because its adoption in production deployments (see Section 4.1) decisively satisfies the "widely used" criterion. Where no candidate at a given security level satisfies "widely used", as is currently the case at the 256-bit level, this exception does not apply, and the preference for margin governs without qualification.

As a result, we recommend the BLS curve with 381-bit characteristic of embedding degree 12 and the BN curve with the 462-bit characteristic for the 128-bit security level, and the BLS curves of embedding degree 48 with the 581-bit characteristic for the 256-bit security level. On the other hand, we do not show the parameters for 192-bit security here because there are no curves that match our selection policy.

4.1. Adoption Status of Pairing-friendly Curves

We show the pairing-friendly curves that have been selected by existing standards, cryptographic libraries, and applications. A comprehensive curve-by-curve comparison, including proposed alternatives that were not selected, is maintained at https://cfrg.github.io/draft-irtf-cfrg-pairing-friendly-curves/adoption-status.html.

The adoption status of pairing-friendly curves is surveyed in standards, libraries and applications. The details are described as the following subsections. A BN curve with a XXX-bit characteristic p is denoted as BNXXX and a BLS curve of embedding degree k with a XXX-bit p is denoted as BLSk-XXX.

Parameters whose security level is more than 5 bits below the 128-bit level are not candidates for selection here, because this document recommends against using parameters that fall that far below the 128-bit level. They are still named in the subsections below wherever a standard or a library supports them, and Appendix F tabulates that adoption, which is useful information for implementers.

The security level for each curve is evaluated in accordance with [BD18], [GMT19], [MAF19] and [FK18]. For the 128-bit level, [G20] revisits the Special variant of the tower number field sieve, which applies to pairing-friendly curves because their characteristic is a polynomial of moderate degree with tiny coefficients evaluated at a seed. It revises the estimates of earlier work downward for the families it examines, with BLS12 and BN as the exceptions that it leaves unchanged. Note that the Freeman curves [Freeman06] and MNT curves [MNT01] are not included in this survey because [BD18] does not show the security levels of these curves.

4.1.1. International Standards

ISO/IEC 15946 series specifies public-key cryptographic techniques based on elliptic curves. The third edition of ISO/IEC 15946-5 [ISOIEC15946-5] (published 2022) reorganized the numerical examples and extended coverage to include BLS12, BLS24, and BLS48 curves. The BN462 parameter in this document matches the numerical example in Annex D.2.3 of [ISOIEC15946-5] exactly (t = 2^114 + 2^101 - 2^14 - 1, written u there), and the BLS48-581 parameter matches Annex D.3.5 exactly (t = -2^32 - 2^30 - 2^10 + 2^7 - 1). The same edition introduces a post-exTNFS security guideline that the characteristic p of BN and BLS12 curves should be at least 461 bits for the 128-bit security level. As described below, BN curves with 256-bit p and 512-bit p from earlier editions of ISO/IEC 15946-5 are referenced by other standards and libraries; these curves are denoted as BN256I and BN512I, where the suffix 'I' is given from the initials of the standard name ISO.

TCG adopts the BN256I and a BN curve with 638-bit p specified by their own [TPM]. FIDO Alliance [FIDO] and W3C [W3C] adopt BN256I, BN512I, the BN638 by TCG, and the BN curve with 256-bit p proposed by Devegili et al. [DSD07] (named BN256D). The suffix 'D' of BN256D is given from the initials of the first author's name of the paper which proposed the parameter.

4.1.2. Cryptographic Libraries

There are a lot of cryptographic libraries that support pairing calculations.

[blst] is a high-performance pairing library maintained by Supranational. It supports BLS12-381 and is used in production by Ethereum consensus clients, Filecoin, and other applications.

Several additional actively maintained libraries support BLS12-381. [gnark-crypto], developed by Consensys, supports BLS12-381, BN_SNARK1, BLS12-377, BLS24-315, and BW6-761. [noble-curves] is a JavaScript/TypeScript library by Paul Miller supporting BLS12-381 and BN_SNARK1. The arkworks ecosystem [arkworks] provides Rust crates for pairing-friendly curves used in zero-knowledge proof systems, including BLS12-381 and BN_SNARK1. [constantine] is a cryptographic library written in Nim that supports BLS12-381, BN254N, BN_SNARK1, BLS12-377, and BW6-761. [CIRCL] is the Cloudflare Interoperable, Reusable Cryptographic Library and includes support for BLS12-381. [zkcrypto] is a collection of Rust crates for zero-knowledge cryptography supporting BLS12-381. These libraries name BN_SNARK1 after the size of its field, as bn254; [EIP197] calls the same curve alt_bn128.

PBC is a library for pairing-based cryptography published by Stanford University that supports BN curves, MNT curves, Freeman curves, and supersingular curves [PBC]. Users can generate pairing parameters by using PBC and use pairing operations with the generated parameters.

[mcl] is a library for pairing-based cryptography that supports four BN curves and BLS12-381 [GMT19]. These BN curves include BN254 proposed by Nogami et al. [NASKM08] (named BN254N), BN_SNARK1 suitable for SNARK applications [libsnark], BN382M, and BN462. The suffix 'N' of BN254N and the suffix 'M' of BN382M are respectively given from the initials of the first author's name of the proposed paper and the library's name mcl. Kyushu University published a library that supports BLS48-581 [BLS48]. The University of Tsukuba Elliptic Curve and Pairing Library (TEPLA) [TEPLA] supports two BN curves, BN254N and BN254 proposed by Beuchat et al. [BGMORT10] (named BN254B). The suffix 'B' of BN254B is given from the initials of the first author's name of the proposed paper. Intel published a cryptographic library named Intel Integrated Performance Primitives (Intel-IPP) [Intel-IPP] and the library supports BN256I.

[RELIC] uses various types of pairing-friendly curves including six BN curves (BN158, BN254N, BN256R, BN382R, BN446, and BN638), where BN256R and BN382R are RELIC specific parameters that are different from BN256I, BN256D, and BN382M. The suffix 'R' of BN256R and BN382R is given from the initials of the library's name RELIC. In addition, RELIC supports six BLS curves (BLS12-381, BLS12-446, BLS12-455, BLS12-638, BLS24-477, and BLS48-575 [MAF19]), a Cocks-Pinch curve of embedding degree 8 with 544-bit p (named CP8-544) [GMT19], pairing-friendly curves constructed by Scott et al. [SG18] based on Kachisa-Scott-Schaefer curves with embedding degree 54 with 569-bit p (named K54-569) [MAF19], a KSS curve [KSS08] of embedding degree 18 with 508-bit p (named KSS18-508) [AFKMR12], Optimal TNFS-secure curve [FM19] of embedding degree 8 with 511-bit p (OT8-511), and a supersingular curve [S86] with 1536-bit p (SS-1536).

MIRACL Core [MIRACL] (the successor to the Apache Milagro Crypto Library (AMCL) [AMCL]) supports five BLS curves (BLS12-381, BLS12-461, BLS24-479, BLS48-556, and BLS48-581) and five BN curves (BN254N, BN254CX proposed by CertiVox, BN256I, BN512I, and BN462).

Adjoint published a library that supports the BLS12-381 and six BN curves (BN_SNARK1, BN254B, BN254N, BN254S1, BN254S2, and BN462) [AdjointLib], where BN254S1 and BN254S2 are BN curves adopted by an old version of AMCL [AMCLv2]. The suffix 'S' of BN254S1 and BN254S2 is given from the initials of the name of the developer who proposed these parameters.

The Celo foundation published the bls12377js library [bls12377js]. The supported curve is the BLS12-377 curve which is shown in [BCGMMW20].

4.1.3. Applications

Zcash uses BN_SNARK1 in their library [libsnark]. In response to the exTNFS attacks, they proposed new parameters using the BLS12-381 curve [BLS12-381] [GMT19] and published its implementation [zkcrypto].

Ethereum adopted BLS12-381 for its consensus layer. The BLS12-381 precompile is also specified as an Ethereum precompile contract in EIP-2537 [EIP2537], enabling on-chain pairing operations. [Filecoin] uses BLS12-381 via the blst library [blst]. Chia Network published their implementation [Chia], which uses the blst library [blst]. DFINITY uses mcl, and Algorand published an implementation [go-algorand] whose virtual machine provides curve operations and a pairing check for BLS12-381 and for BN_SNARK1. The pairing check on BN_SNARK1 is also available on Ethereum, as the precompiled contract of [EIP197].

4.2. For 128-bit Security

The survey in Section 4.1 shows a lot of cases of adopting BN and BLS curves. Among them, BLS12-381 and BN462 match our selection policy. In particular, the one that best matches the policy is BLS12-381 from the viewpoint of "widely used": as Section 4 states, its adoption in production deployments is what makes it the one exception to the preference for margin. We therefore introduce the parameters of BLS12-381 in this memo.

On the other hand, from the viewpoint of the future use, the parameter of BN462 is also introduced. As shown in recent security evaluations for BLS12-381 [BD18] [GMT19], its security level is close to 128 bits but less than 128 bits. If the attack is improved even a little, BLS12-381 will not be suitable for the curve of the 128-bit security level. As curves of 128-bit security level are currently the most widely used, we recommend both BLS12-381 and BN462 in this memo in order to have a more efficient and a more prudent option respectively.

4.2.1. BLS Curves for the 128-bit Security Level (BLS12-381)

In this part, we introduce the parameters of the Barreto-Lynn-Scott curve of embedding degree 12 with 381-bit p that is adopted by a lot of applications such as Zcash [Zcash], Ethereum [Ethereum], and so on.

The BLS12-381 curve is shown in [BLS12-381] and it is defined by the parameter

t = -2^63 - 2^62 - 2^60 - 2^57 - 2^48 - 2^16

where the size of p becomes 381 bits.

For the finite field GF(p), the towers of extension field GF(p^2), GF(p^6) and GF(p^12) are defined by indeterminates u, v, and w as follows:

GF(p^2) = GF(p)[u] / (u^2 + 1)
GF(p^6) = GF(p^2)[v] / (v^3 - u - 1)
GF(p^12) = GF(p^6)[w] / (w^2 - v).

Defined by t, the elliptic curve E and its twist E' are represented by E: y^2 = x^3 + 4 and E': y^2 = x^3 + 4 * (u + 1). BLS12-381 is categorized as M-type.

The untwist isomorphism psi of Section 2.2, restricted to E'(GF(p^2)), maps into E(GF(p^12)) and is given by

psi(x', y') = (x' / w^2, y' / w^3)

where w^2 = v in GF(p^6) and v^3 = u + 1, per the tower given above.

We have to note that the security level of this pairing is expected to be 126 rather than 128 bits [GMT19].

Parameters of BLS12-381 are given as follows.

  • G_1 is the largest prime-order subgroup of E(GF(p))

    • BP = (x,y) : a 'base point', i.e., a generator of G_1

  • G'_2 is the r-order subgroup of E'(GF(p^2)) corresponding to G_2 under psi

    • BP' = (x',y') : a 'base point', i.e., a generator of G'_2

      • x' = x'_0 + x'_1 * u (x'_0, x'_1 in GF(p))

      • y' = y'_0 + y'_1 * u (y'_0, y'_1 in GF(p))

    • h' : the cofactor #E'(GF(p^2))/r

p:
0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f624
  1eabfffeb153ffffb9feffffffffaaab
r:
0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
x:
0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac58
  6c55e83ff97a1aeffb3af00adb22c6bb
y:
0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3ed
  d03cc744a2888ae40caa232946c5e7e1
h:

0x396c8c005555e1568c00aaab0000aaab

b:

4

x'_0:
0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d177
  0bac0326a805bbefd48056c8c121bdb8
x'_1:
0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049
  334cf11213945d57e5ac7d055d042b7e
y'_0:
0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c
  923ac9cc3baca289e193548608b82801
y'_1:
0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab
  3f370d275cec1da1aaa9075ff05f79be
h':
0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa
  628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5
b':

4 * (u + 1)

As mentioned above, BLS12-381 is adopted in a lot of applications. Since it is expected that BLS12-381 will continue to be widely used, Section 5 defines a normative point serialization format for it (with test vectors in Appendix D). This serialization format is also adopted in [I-D.irtf-cfrg-bls-signature] [zkcrypto].

In addition, many pairing-based cryptographic applications use a hash-to-curve procedure that outputs a rational point on an elliptic curve from an arbitrary input. [RFC9380] specifies ciphersuites for hashing to an elliptic curve, including BLS12-381, and is valuable information for implementers.

4.2.2. BN Curves for the 128-bit Security Level (BN462)

A BN curve with the 128-bit security level is shown in [BD18], which we call BN462. BN462 is defined by the parameter

t = 2^114 + 2^101 - 2^14 - 1

for the definition in Section 2.3.

For the finite field GF(p), the towers of extension field GF(p^2), GF(p^6) and GF(p^12) are defined by indeterminates u, v, and w as follows:

GF(p^2) = GF(p)[u] / (u^2 + 1)
GF(p^6) = GF(p^2)[v] / (v^3 - u - 2)
GF(p^12) = GF(p^6)[w] / (w^2 - v).

Defined by t, the elliptic curve E and its twist E' are represented by E: y^2 = x^3 + 5 and E': y^2 = x^3 - u + 2, respectively. The size of p becomes 462 bits. BN462 is categorized as D-type.

The untwist isomorphism psi of Section 2.2, restricted to E'(GF(p^2)), maps into E(GF(p^12)) and is given by

psi(x', y') = (x' * w^2, y' * w^3)

where w^2 = v in GF(p^6) and v^3 = u + 2, per the tower given above.

We have to note that BN462 is significantly slower than BLS12-381, but has a 134-bit security level [GMT19], so may be more resistant to future small improvements to the exTNFS attack.

We note also that CP8-544 is about 20% faster than BN462 [GMT19], has a 131-bit security level, and that, due to its construction, it will not be affected by future small improvements to the exTNFS attack. However, as this curve is not widely used (it is only implemented in one library), we instead chose BN462 for our 'safe' option.

We give the following parameters for BN462.

  • G_1 is the largest prime-order subgroup of E(GF(p))

    • BP = (x,y) : a 'base point', i.e., a generator of G_1

  • G'_2 is the r-order subgroup of E'(GF(p^2)) corresponding to G_2 under psi

    • BP' = (x',y') : a 'base point', i.e., a generator of G'_2

      • x' = x'_0 + x'_1 * u (x'_0, x'_1 in GF(p))

      • y' = y'_0 + y'_1 * u (y'_0, y'_1 in GF(p))

    • h' : the cofactor #E'(GF(p^2))/r

p:
0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908f41c802
  0ffffffffff6ff66fc6ff687f640000000002401b00840138013
r:
0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908ee1c201
  f7fffffffff6ff66fc7bf717f7c0000000002401b007e010800d
x:
0x21a6d67ef250191fadba34a0a30160b9ac9264b6f95f63b3edbec3cf4b2e689d
  b1bbb4e69a416a0b1e79239c0372e5cd70113c98d91f36b6980d
y:
0x0118ea0460f7f7abb82b33676a7432a490eeda842cccfa7d788c659650426e6a
  f77df11b8ae40eb80f475432c66600622ecaa8a5734d36fb03de
h:

1

b:

5

x'_0:
0x0257ccc85b58dda0dfb38e3a8cbdc5482e0337e7c1cd96ed61c913820408208f
  9ad2699bad92e0032ae1f0aa6a8b48807695468e3d934ae1e4df
x'_1:
0x1d2e4343e8599102af8edca849566ba3c98e2a354730cbed9176884058b18134
  dd86bae555b783718f50af8b59bf7e850e9b73108ba6aa8cd283
y'_0:
0x0a0650439da22c1979517427a20809eca035634706e23c3fa7a6bb42fe810f13
  99a1f41c9ddae32e03695a140e7b11d7c3376e5b68df0db7154e
y'_1:
0x073ef0cbd438cbe0172c8ae37306324d44d5e6b0c69ac57b393f1ab370fd725c
  c647692444a04ef87387aa68d53743493b9eba14cc552ca2a93a
h':
0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908fa1ce02
  27fffffffff6ff66fc63f5f7f4c0000000002401b008a0168019
b':

-u + 2

4.3. For 256-bit Security

As shown in the survey in Section 4.1, there are three candidate pairing-friendly curves for 256-bit security: BLS48-556, BLS48-575 and BLS48-581. None of them is widely used in the sense of the policy given in Section 4, so the preference for margin governs. As noted in Section 3.2, [KIK17] puts the minimum size of p^k for BLS48 curves at 27,410 bits, which is 572 bits of p. BLS48-556 does not reach that size; BLS48-575 and BLS48-581 both exceed it, and BLS48-581 leaves the larger margin. We therefore select BLS48-581.

The selected BLS48 curve is shown in [KIK17] and it is defined by the parameter

t = -1 + 2^7 - 2^10 - 2^30 - 2^32.

In this case, the size of p becomes 581 bits.

For the finite field GF(p), the towers of extension field GF(p^2), GF(p^4), GF(p^8), GF(p^24) and GF(p^48) are defined by indeterminates u, v, w, z, and s as follows:

GF(p^2) = GF(p)[u] / (u^2 + 1)
GF(p^4) = GF(p^2)[v] / (v^2 + u + 1)
GF(p^8) = GF(p^4)[w] / (w^2 + v)
GF(p^24) = GF(p^8)[z] / (z^3 + w)
GF(p^48) = GF(p^24)[s] / (s^2 + z).

The elliptic curve E and its twist E' are represented by E: y^2 = x^3 + 1 and E': y^2 = x^3 - 1 / w. BLS48-581 is categorized as D-type. Concretely, in the tower above: w^2 = -v gives -1 / w = w / v, and v^2 = -(u + 1) gives w / v = w * v / v^2 = -w * v / (u + 1); since u^2 = -1, 1 / (u + 1) = (1 - u) / 2, so -1 / w = ((u - 1) / 2) * v * w.

The untwist isomorphism psi of Section 2.2, restricted to E'(GF(p^8)), maps into E(GF(p^48)) and is given by

psi(x', y') = (x' * xi^2, y' * xi^3)

where xi = u * s in GF(p^48) satisfies xi^6 = -w, the reciprocal of the twist coefficient b' = -1 / w, per the tower given above. Concretely: u in GF(p^2) satisfies u^2 = -1, so u^6 = -1; s in GF(p^48) satisfies s^2 = -z and z^3 = -w, so s^6 = w; hence xi^6 = u^6 * s^6 = (-1) * w = -w.

We then give the parameters for BLS48-581 as follows.

  • G_1 is the largest prime-order subgroup of E(GF(p))

    • BP = (x,y) : a 'base point', i.e., a generator of G_1

  • G'_2 is the r-order subgroup of E'(GF(p^8)) corresponding to G_2 under psi

    • BP' = (x',y') : a 'base point', i.e., a generator of G'_2

      • x' = x'_0 + x'_1 * u + x'_2 * v + x'_3 * u * v + x'_4 * w + x'_5 * u * w + x'_6 * v * w + x'_7 * u * v * w (x'_0, ..., x'_7 in GF(p))

      • y' = y'_0 + y'_1 * u + y'_2 * v + y'_3 * u * v + y'_4 * w + y'_5 * u * w + y'_6 * v * w + y'_7 * u * v * w (y'_0, ..., y'_7 in GF(p))

    • h' : the cofactor #E'(GF(p^8))/r

p:
0x1280f73ff3476f313824e31d47012a0056e84f8d122131bb3be6c0f1f3975444
  a48ae43af6e082acd9cd30394f4736daf68367a5513170ee0a578fdf721a4a48
  ac3edc154e6565912b
r:
0x2386f8a925e2885e233a9ccc1615c0d6c635387a3f0b3cbe003fad6bc972c2e6
  e741969d34c4c92016a85c7cd0562303c4ccbe599467c24da118a5fe6fcd671c
  01
x:
0x02af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7
  544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d
  8c3bce8732315af640
y:
0x0cefda44f6531f91f86b3a2d1fb398a488a553c9efeb8a52e991279dd41b720e
  f7bb7beffb98aee53e80f678584c3ef22f487f77c2876d1b2e35f37aef7b926b
  576dbb5de3e2587a70
x'_0:
0x05d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156
  c46ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154
  dec34fd0b4ace8bfab
x'_1:
0x07c4973ece2258512069b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e
  1c3943a00abfedf16214a76affa62504f0c3c7630d979630ffd75556a01afa14
  3f1669b36676b47c57
x'_2:
0x01fccc70198f1334e1b2ea1853ad83bc73a8a6ca9ae237ca7a6d6957ccbab5ab
  6860161c1dbd19242ffae766f0d2a6d55f028cbdfbb879d5fea8ef4cded6b3f0
  b46488156ca55a3e6a
x'_3:
0x0be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a393f8be0
  cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8cb4e80bc
  3f09a7033cbb7feafe
x'_4:
0x038b91c600b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386
  699981f9e48199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4c
  bb739c3a1c53f8cce5
x'_5:
0x0c96c7797eb0738603f1311e4ecda088f7b8f35dcef0977a3d1a58677bb03741
  8181df63835d28997eb57b40b9c0b15dd7595a9f177612f097fc7960910fce33
  70f2004d914a3c093a
x'_6:
0x0b9b7951c6061ee3f0197a498908aee660dea41b39d13852b6db908ba2c0b7a4
  49cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c22d63334b5b0e205c33
  54e41607e60750e057
x'_7:
0x0827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7
  f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3
  f84e19da00fbc6ae34
y'_0:
0x00eb53356c375b5dfa497216452f3024b918b4238059a577e6f3b39ebfc435fa
  ab0906235afa27748d90f7336d8ae5163c1599abf77eea6d659045012ab12c0f
  f323edd3fe4d2d7971
y'_1:
0x0284dc75979e0ff144da6531815fcadc2b75a422ba325e6fba01d72964732fcb
  f3afb096b243b1f192c5c3d1892ab24e1dd212fa097d760e2e588b423525ffc7
  b111471db936cd5665
y'_2:
0x0b36a201dd008523e421efb70367669ef2c2fc5030216d5b119d3a480d370514
  475f7d5c99d0e90411515536ca3295e5e2f0c1d35d51a652269cbc7c46fc3b8f
  de68332a526a2a8474
y'_3:
0x0aec25a4621edc0688223fbbd478762b1c2cded3360dcee23dd8b0e710e122d2
  742c89b224333fa40dced2817742770ba10d67bda503ee5e578fb3d8b8a1e533
  7316213da92841589d
y'_4:
0x0d209d5a223a9c46916503fa5a88325a2554dc541b43dd93b5a959805f112985
  7ed85c77fa238cdce8a1e2ca4e512b64f59f430135945d137b08857fdddfcf7a
  43f47831f982e50137
y'_5:
0x07d0d03745736b7a513d339d5ad537b90421ad66eb16722b589d82e2055ab750
  4fa83420e8c270841f6824f47c180d139e3aafc198caa72b679da59ed8226cf3
  a594eedc58cf90bee4
y'_6:
0x0896767811be65ea25c2d05dfdd17af8a006f364fc0841b064155f14e4c819a6
  df98f425ae3a2864f22c1fab8c74b2618b5bb40fa639f53dccc9e884017d9aa6
  2b3d41faeafeb23986
y'_7:
0x035e2524ff89029d393a5c07e84f981b5e068f1406be8e50c87549b6ef8eca9a
  9533a3f8e69c31e97e1ad0333ec719205417300d8c4ab33f748e5ac66e84069c
  55d667ffcb732718b6
h:

0x85555841aaaec4ac

b:

1

h':
0x170e915cb0a6b7406b8d94042317f811d6bc3fc6e211ada42e58ccfcb3ac076a
  7e4499d700a0c23dc4b0c078f92def8c87b7fe63e1eea270db353a4ef4d38b59
  98ad8f0d042ea24c8f02be1c0c83992fe5d7725227bb27123a949e0876c0a8ce
  0a67326db0e955dcb791b867f31d6bfa62fbdd5f44a00504df04e186fae033f1
  eb43c1b1a08b6e086eff03c8fee9ebdd1e191a8a4b0466c90b389987de5637d5
  dd13dab33196bd2e5afa6cd19cf0fc3fc7db7ece1f3fac742626b1b02fcee040
  43b2ea96492f6afa51739597c54bb78aa6b0b99319fef9d09f768831018ee656
  4c68d054c62f2e0b4549426fec24ab26957a669dba2a2b6945ce40c9aec6afde
  da16c79e15546cd7771fa544d5364236690ea06832679562a68731420ae52d0d
  35a90b8d10b688e31b6aee45f45b7a5083c71732105852decc888f64839a4de3
  3b99521f0984a418d20fc7b0609530e454f0696fa2a8075ac01cc8ae3869e8d0
  fe1f3788ffac4c01aa2720e431da333c83d9663bfb1fb7a1a7b90528482c6be7
  892299030bb51a51dc7e91e9156874416bf4c26f1ea7ec578058563960ef92bb
  bb8632d3a1b695f954af10e9a78e40acffc13b06540aae9da5287fc4429485d4
  4e6289d8c0d6a3eb2ece35012452751839fb48bc14b515478e2ff412d930ac20
  307561f3a5c998e6bcbfebd97effc6433033a2361bfcdc4fc74ad379a16c6dea
  49c209b1
b':

-1 / w

Section 5 defines a normative point serialization format for BLS48-581 (with test vectors in Appendix D), extending the format defined by [ZcashRep] for BLS12-381 as specified in [I-D.ietf-cose-bls-key-representations].

5. Serialization and Validation

This section defines normative serialization and deserialization procedures for BLS12-381, and also extends them to BLS48-581. It also states what makes a deserialized value valid, and which of the remaining decisions belong to the calling protocol. What is encoded here are the objects that protocols transmit: points on E and on E', and scalars. Elements of GF(p) and of GF(p^m) appear as coordinates of those points rather than as objects with encodings of their own. Elements of G_T, which lie in GF(p^k), are not encoded here either: this document defines no byte encoding for them. Should a protocol come to require one, a separate specification can define it. The point format is based on the one originally defined by [ZcashRep] for BLS12-381 and is, in turn, based on the representation shown in [SEC1] with a small tweak to apply to GF(p^m). It is already relied upon, directly or indirectly, by [I-D.irtf-cfrg-bbs-signatures] and [I-D.ietf-cose-bls-key-representations]; the latter extends it to BLS48-581, and the extension is adopted here. Applicability to BN462 is discussed in Section 5.5.

Not all of what follows originates with this document. Where an existing format is restated, it is restated normatively, because other specifications already cite this document for it.

Table 1
What Where it comes from How this document treats it
Scalar encoding Existing practice: I2OSP and OS2IP [RFC8017], together with a comparison against the group order Specified here, for all three curves
BLS12-381 point encoding [ZcashRep], which adapts the representation of [SEC1] to GF(p^m) Restated here as the format in use
BLS48-581 point encoding The same format, extended to GF(p^8) in [I-D.ietf-cose-bls-key-representations] That extension is adopted here
BN462 point encoding Not applicable Not specified here; see Section 5.5
G_T element encoding Not applicable Not specified here
Group membership and identity handling This document Specified here

At a high level, the point serialization format is defined as follows:

5.1. Parameters and Notation

Table 2
Curve n (bytes) E' field m Compressed (E / E') Uncompressed (E / E')
BLS12-381 48 GF(p^2) 2 48 / 96 bytes 96 / 192 bytes
BLS48-581 73 GF(p^8) 8 73 / 584 bytes 146 / 1168 bytes

Below, we give detailed serialization and deserialization procedures, applicable to both curves using the parameters above. The following notation is used in the rest of this section:

  • Elements of GF(p^m) are represented as a vector of m coefficients in GF(p), (y_0, ..., y_{m-1}), using the basis and coefficient ordering already defined for each curve in Section 4.

  • The identity element of G_1 is the point at infinity O_E of Section 2.1, and the identity element of G'_2 is the point at infinity on E'. Below, 'the point at infinity' refers to whichever of the two curves is in question.

  • For a byte string str, str[0] is defined as the first byte of str.

  • The function sign_GF_p(y) returns one bit representing the sign of an element of GF(p). This function is defined as follows:

sign_GF_p(y) := { 1 if y > (p - 1) / 2, else
                { 0 otherwise.
  • The function sign_GF_p^m(y), for an element y = (y_0, ..., y_{m-1}) of GF(p^m), returns one bit computed as follows: let i be the largest index in {0, ..., m-1} such that y_i is nonzero, or i = 0 if all coefficients are zero; return sign_GF_p(y_i). For BLS12-381 (m=2), this specializes to: sign_GF_p^2(y') = sign_GF_p(y'_0) if y'_1 equals 0, else sign_GF_p(y'_1). For BLS48-581 (m=8), this is the same function specified as sign_GF_p^8 in [I-D.ietf-cose-bls-key-representations], evaluated over the coefficient ordering (y'_0, ..., y'_7) given in Section 4.

  • The function OS2FE(str, n), for a byte string str of m*n bytes, returns an element of GF(p^m) or INVALID. It inverts the coordinate serialization of step 3 of Section 5.3: divide str into m consecutive blocks of n bytes each, and for each i in {0, ..., m-1} let y_i = OS2IP(str_i), where str_i is the block starting at offset (m - 1 - i) * n, so that the blocks give the coefficients in decreasing index order. If any y_i is greater than or equal to p, OS2FE returns INVALID; otherwise it returns y = (y_0, ..., y_{m-1}).

Section 5.4 requires deciding whether a field element y2 is a square and, where it is, computing a square root. This document does not specify how. The following pointers are provided for implementers and are not requirements.

For y2 in GF(p), all curves in this document have p = 3 (mod 4). Appendix I.1 of [RFC9380] therefore applies directly: y2 is a square exactly when y2^((p-1)/2) is 0 or 1, and a square root is given by y2^((p+1)/4).

For y2 in GF(p^m), that shortcut does not apply, since p^2 and p^8 are both 1 (mod 4). Appendix I.4 of [RFC9380] gives a constant-time Tonelli-Shanks procedure for a general field, and Appendix I.5 gives an is_square test for GF(p^2).

5.2. Scalar Serialization

This section defines a serialization format for elements of the scalar field GF(r), where r is the order of G_1 and G_2 as given for each curve in Section 4. Unlike point serialization, this format applies to all three curves in this document (BLS12-381, BN462, and BLS48-581), since no metadata bits are required.

For a curve with scalar field order r represented in n_s = ceil(L_r / 8) bytes, where L_r is the bit length of r:

Table 3
Curve n_s (bytes)
BLS12-381 32
BN462 58
BLS48-581 65

Serialization: a scalar kappa in the range [0, r - 1] is serialized as I2OSP(kappa, n_s).

Deserialization: given a byte string s_string of length n_s, let kappa = OS2IP(s_string). If kappa >= r, return INVALID. Otherwise, return kappa.

Rejecting values greater than or equal to r gives every scalar exactly one encoding, which matters wherever an encoded scalar is hashed or compared as bytes. The byte order is the big-endian order of I2OSP and OS2IP [RFC8017], which is the order used by [I-D.irtf-cfrg-bbs-signatures] and [I-D.ietf-cose-bls-key-representations]. Other specifications for prime-order groups encode scalars in little-endian order, [RFC8032] among them, so an implementation working with both needs to convert.

This document does not define a distinct encoding for the zero scalar. Whether a protocol accepts it is a protocol-level decision, discussed in Section 5.6.3.

5.3. Point Serialization

This section defines point_to_octets_G1 and point_to_octets_G2. point_to_octets_G1 takes an element of G_1, which is a point on E, and point_to_octets_G2 takes an element of G'_2, which is a point on E'; each returns a byte string. Both are given by the single procedure below, stated for a point P = (x, y) and the parameters n and m of Section 5.1. This procedure uses the I2OSP function defined in [RFC8017].

  1. Compute the metadata bits C_bit, I_bit, and S_bit, as follows:

    • C_bit is 1 if point compression should be used, otherwise it is 0.

    • I_bit is 1 if P is the point at infinity, otherwise it is 0.

    • S_bit is 0 if P is the point at infinity or if point compression is not used. Otherwise (i.e., when point compression is used and P is not the point at infinity), if P is a point on E, S_bit = sign_GF_p(y), else if P is a point on E', S_bit = sign_GF_p^m(y).

  2. Let m_byte = (C_bit * 2^7) + (I_bit * 2^6) + (S_bit * 2^5).

  3. Let x_string be the serialization of x, which is defined as follows:

    • If P is the point at infinity on E, let x_string = I2OSP(0, n).

    • If P is a point on E other than the point at infinity, then x is an element of GF(p), i.e., an integer in the inclusive range [0, p - 1]. In this case, let x_string = I2OSP(x, n).

    • If P is the point at infinity on E', let x_string = I2OSP(0, m*n).

    • If P is a point on E' other than the point at infinity, then x can be represented as (x_0, ..., x_{m-1}) where each x_i is an element of GF(p). In this case, let x_string = I2OSP(x_{m-1}, n) concatenated with I2OSP(x_{m-2}, n), ..., concatenated with I2OSP(x_0, n) (i.e., coefficients in decreasing index order). Notice that in all of the above cases, the 3 most significant bits of x_string[0] are guaranteed to be 0.

  4. If point compression is used, let y_string be the empty string. Otherwise (i.e., when point compression is not used), let y_string be the serialization of y, which is defined in step 3.

  5. Let s_string be the concatenation of x_string and y_string.

  6. Set s_string[0] = x_string[0] OR m_byte, where OR is computed bitwise. After this operation, the most significant bit of s_string[0] equals C_bit, the next bit equals I_bit, and the next equals S_bit. (This is true because the three most significant bits of x_string[0] are guaranteed to be zero, as discussed above.)

  7. Return s_string.

5.4. Point Deserialization

This section defines octets_to_point_G1 and octets_to_point_G2. Each takes a byte string and returns an element of G_1 or of G'_2 respectively, or INVALID. A string that deserializes to a point of E or E' that is not in the group is INVALID, so a value returned by these procedures is a group element and a caller does not have to obtain one by a further step.

This document does not define a deserialization procedure that stops at E or E'. G_1 and G_2 are the groups on which the pairing of Section 2.2 is defined, and elements of G_1 and of G'_2 are what the specifications citing this document exchange; psi carries an element of G'_2 to the corresponding element of G_2, on which the pairing operates, as described in Section 2.2. Section 5.3 of [I-D.irtf-cfrg-bls-signature] requires conforming implementations to perform the subgroup check for the same reason, and Section 6.2 of [I-D.irtf-cfrg-bbs-signatures] notes that a library may combine the two operations.

The procedure below is stated once, for a string s_string and the parameters n and m of Section 5.1. It uses the OS2IP function defined in [RFC8017] and the OS2FE function defined in Section 5.1.

Each of the two functions fixes the group it returns, and the curve that step 2 determines is what selects between them. octets_to_point_G1 MUST return INVALID if step 2 determines E', and octets_to_point_G2 MUST return INVALID if step 2 determines E. This check is not redundant: the encodings of the two groups can have the same length. For BLS12-381, for instance, a 96-byte string is a compressed point on E' when C_bit is 1 and an uncompressed point on E when C_bit is 0, so without this rule a compressed element of G'_2 passed to octets_to_point_G1 would be decoded and returned rather than rejected.

Every GF(p) coefficient recovered by this procedure MUST be an integer in the inclusive range [0, p - 1]. A byte string that encodes a coordinate, or a coefficient of a coordinate, as a value greater than or equal to p is not a canonical encoding of a field element; implementations MUST return INVALID in that case. This applies to coordinates on E, recovered with OS2IP, as well as to the coefficients of coordinates on E', recovered with OS2FE.

  1. If s_string is empty, return INVALID. Otherwise, let m_byte = s_string[0] AND 0xE0, where AND is computed bitwise. In other words, the three most significant bits of m_byte equal the three most significant bits of s_string[0], and the remaining bits are 0. If m_byte equals any of 0x20, 0x60, or 0xE0, return INVALID. Otherwise:

    • Let C_bit equal the most significant bit of m_byte,

    • Let I_bit equal the second most significant bit of m_byte, and

    • Let S_bit equal the third most significant bit of m_byte.

  2. If C_bit is 1:

    • If s_string has length n bytes, the output point is on the curve E.

    • If s_string has length m*n bytes, the output point is on the curve E'.

    • If s_string has any other length, return INVALID.

    If C_bit is 0:

    • If s_string has length 2n bytes, the output point is on E.

    • If s_string has length 2*m*n bytes, the output point is on E'.

    • If s_string has any other length, return INVALID.

  3. Let s_string[0] = s_string[0] AND 0x1F, where AND is computed bitwise. In other words, set the three most significant bits of s_string[0] to 0.

  4. If I_bit is 1:

    • If s_string is not the all zeros string, return INVALID.

    • Otherwise (i.e., if s_string is the all zeros string), return the identity element of the group determined in step 2.

    Otherwise, I_bit is 0. Continue.

  5. If C_bit is 0:

    • Let x_string be the first half of s_string.

    • Let y_string be the last half of s_string.

    • If the curve that was determined in step 2 is E:

      • Let x = OS2IP(x_string). If x is greater than or equal to p, return INVALID.

      • Let y = OS2IP(y_string). If y is greater than or equal to p, return INVALID.

      • If the point P = (x, y) is not a valid point on E, return INVALID.

    • Otherwise (i.e., when the curve that was determined in step 2 is E'):

      • Let x = OS2FE(x_string, n). If x is INVALID, return INVALID.

      • Let y = OS2FE(y_string, n). If y is INVALID, return INVALID.

      • If the point P = (x, y) is not a valid point on E', return INVALID.

    Let P = (x, y) and continue at step 8.

    Otherwise, C_bit is 1. Continue.

  6. Let x_string be s_string.

    • If the curve that was determined in step 2 is E:

      • Let x = OS2IP(x_string). If x is greater than or equal to p, return INVALID.

      • Let y2 = the right-hand side of the curve equation for E (given in Section 4 for the curve in question), evaluated at x, in GF(p).

      • If y2 is not square in GF(p), return INVALID.

      • Otherwise, let y = sqrt(y2) in GF(p) and let Y_bit = sign_GF_p(y).

    • Otherwise (i.e., when the curve that was determined in step 2 is E'):

      • Let x = OS2FE(x_string, n). If x is INVALID, return INVALID.

      • Let y2 = the right-hand side of the curve equation for E' (given in Section 4 for the curve in question), evaluated at x, in GF(p^m).

      • If y2 is not square in GF(p^m), return INVALID.

      • Otherwise, let y = sqrt(y2) in GF(p^m) and let Y_bit = sign_GF_p^m(y).

  7. If S_bit equals Y_bit, let P = (x, y). Otherwise, let P = (x, -y).

  8. If the curve determined in step 2 is E and subgroup_check_G1(P) returns FALSE, return INVALID. If the curve determined in step 2 is E' and subgroup_check_G2(P) returns FALSE, return INVALID. Otherwise, return P.

Note that OS2FE outputs field elements in the towered representation of the curve in question:

  • For BLS12-381, OS2FE(x_string, n) = (x'_0, x'_1) = x'_0 + x'_1 * u

  • For BLS48-581, OS2FE(x_string, n) = (x'_0, ..., x'_7) = x'_0 + x'_1 * u + x'_2 * v + x'_3 * u * v + x'_4 * w + x'_5 * u * w + x'_6 * v * w + x'_7 * u * v * w

5.4.1. Subgroup Membership

subgroup_check_G1(P) takes a point P on E and returns TRUE if P is an element of G_1 and FALSE otherwise. subgroup_check_G2(Q) does the same for a point Q on E' and the group G'_2. Both are used by Section 5.4, and both are specified here as operations in their own right, because a point can also arise from point addition or scalar multiplication rather than from a byte string, and a caller may need to check such a point.

For every curve in this document, r^2 divides neither the order of E(GF(p)) nor the order of E'(GF(p^m)): those orders are h * r and h' * r, and gcd(h, r) = gcd(h', r) = 1 by the definitions of h and h' in Section 2.2. Consequently a point of order dividing r is an element of G_1, or of G'_2, respectively, and both checks can be carried out as follows:

  • subgroup_check_G1(P) returns TRUE if [r]P is the point at infinity on E, and FALSE otherwise.

  • subgroup_check_G2(Q) returns TRUE if [r]Q is the point at infinity on E', and FALSE otherwise.

Faster tests are known for particular curves. Any method that decides the same predicate may be used.

These checks apply to all three curves in this document. Note that for BN462 the cofactor h of E(GF(p)) is 1, so every point of E(GF(p)) is an element of G_1 and subgroup_check_G1 always returns TRUE; the cofactor h' of E'(GF(p^2)) is not 1, so subgroup_check_G2 remains meaningful.

5.5. Applicability to BN462

This document does not specify a point encoding for BN462. Scalar serialization, defined in Section 5.2, and the subgroup checks of Section 5.4.1 are unaffected and apply to BN462 as well.

The coordinate encoding of Section 5.3 (coordinates as fixed-length big-endian integers, with the coefficients of an element of GF(p^m) in decreasing index order) carries over to BN462 unchanged. What does not fit is the placement of the metadata bits. BN462 has a 462-bit characteristic p, so its canonical GF(p) representation occupies n = ceil(462 / 8) = 58 bytes, that is 464 bits. This leaves 2 unused bits in the leading byte of a serialized coordinate, one short of the three (C_bit, I_bit, S_bit) that the scheme above places there. Appendix E describes two ways of accommodating that: carrying the metadata in a byte of its own, following the general pattern of [SEC1], which leaves the rest of the format unchanged; or restricting the format to uncompressed points, which need only C_bit and I_bit and therefore fit in the two bits available.

This document specifies neither. The format above is specified here because it is already widely used in applications, and because specifications depend on it: it originates with [ZcashRep] and is relied upon by [I-D.irtf-cfrg-bbs-signatures] and [I-D.ietf-cose-bls-key-representations]. For BN462 neither consideration holds: no specification examined requires a BN462 point encoding, and the implementations that do emit BN462 points have not converged on one of the variants above. Choosing among them would therefore be encoding design rather than the recording of established practice, and this document restates an encoding only where practice has already settled on one.

Implementations that nevertheless need to exchange BN462 points may find Appendix E useful. It records, informatively, the encodings that existing implementations use and the alternatives that have been considered. It defines no format.

5.6. Requirements on Calling Protocols

The procedures above leave three decisions to the protocol that uses them. This document does not decide them, because the right answer depends on what the protocol does rather than on the curve or the wire format. A specification that adopts this format SHOULD state its answer to each.

5.6.1. Accepted Point Form

Both a compressed and an uncompressed form are defined. The compressed form is RECOMMENDED for values that are transmitted: it is the form [ZcashRep] places on the wire, and the form used by [I-D.irtf-cfrg-bbs-signatures], [I-D.ietf-cose-bls-key-representations] and [I-D.irtf-cfrg-bls-signature]. The uncompressed form is retained because it remains in use for stored values, such as verification keys that are validated once, where recovering y from x on every use is not worth the saved space.

A protocol SHOULD state which forms it accepts. Accepting both means that one point has two encodings, which matters wherever an encoded point is hashed or compared as a byte string.

5.6.2. Identity Element

Section 5.3 and Section 5.4 define a byte representation for the identity element of G_1 and of G'_2, via the I_bit, and deserialization returns it as it does any other group element. Whether a calling protocol should accept it depends on that protocol's own semantics and threat model, not on the wire format: some protocols (e.g., certain zero-knowledge proof constructions) legitimately reference the identity element as part of a public statement, while for others it cannot arise in normal operation.

Because both kinds of protocol exist, this document does not name one of them as what happens when a protocol says nothing. It defines the two behaviors, and a protocol using this document's serialization format SHOULD state which one it requires:

  • Reject identity: after running Section 5.4, if the resulting point is the identity element, treat the overall result as INVALID. This is the appropriate choice for protocols where the identity element is not an expected input in normal operation.

  • Allow identity: use the result of Section 5.4 as-is, including when it is the identity element. This is appropriate for protocols with a specific, documented need to represent the identity element.

Neither behavior is part of Section 5.4 itself, which returns the identity element as it returns any other group element. Rejecting it is a step the calling protocol takes on the result.

Section 5.2 of [I-D.irtf-cfrg-bls-signature] is an example of the first choice, and gives a protocol-level reason for it: the secret key corresponding to an identity public key is zero, and under such a key the identity element is a valid signature on every message.

5.6.3. Zero Scalar

Section 5.2 accepts the zero scalar, and a protocol using it SHOULD state whether it does the same.

This is a separate decision from the one above. Section 3.1 of [RFC9591] rejects the identity element when deserializing a group element while accepting zero scalars, so the two choices are made independently in at least one existing specification.

6. Security Considerations

The recommended pairing-friendly curves are selected by considering the exTNFS proposed by Kim and Barbulescu in 2016 [KB16] and they are categorized in each security level in accordance with [BD18]. Implementers who will newly develop pairing-based cryptography applications SHOULD use the recommended parameters. The estimates cited here ([BD18], [GMT19], [G20], [KIK17]) were reviewed against the work published in the major peer-reviewed cryptography venues, and in the IACR Cryptology ePrint Archive, between January 2020 and August 2026; Appendix G records what that review covered. The work that review covered stays within the number field sieve and its tower variants rather than introducing a different kind of attack: it consists of record discrete-logarithm computations, refinements of the asymptotic analysis, and improvements to individual steps of the tower variant for fields of the extension degrees these curves use. [APT26] is an example of the last kind, accelerating the linear algebra step over GF(p^12), the field that BLS12-381 and BN462 use, by a factor of approximately 144. None of that work gives a revised bit-level security estimate for the curves recommended here, and this document has not derived one either. Work published after this document is not covered, and has to be assessed separately.

BLS curves of embedding degree 12 typically require a characteristic p of 461 bits or larger to achieve the 128-bit security level [BD18]. Note that the security level of BLS12-381, which is adopted by a lot of libraries and applications, is slightly below 128 bits because a 381-bit characteristic is used [BD18] [GMT19].

BN254 is used in most of the existing implementations as shown in Section 4.1 and Appendix F; however, BN curves that were estimated as the 128-bit security level before exTNFS including BN254 ensure no more than the 100-bit security level by the effect of exTNFS.

The following points also apply to implementations of pairing-based cryptographic applications that use the recommended curves. Regarding the use cases of pairing-based cryptography, please refer to Section 1.2.

In applications such as key agreement protocols, users exchange elements of G_1 and of G'_2 as public keys. What such an exchange has to establish is that a received point belongs to the intended prime-order subgroup. A point obtained from a byte string through Section 5.4 already satisfies this, since those procedures return an element of G_1 or of G'_2 or nothing at all. Group operations preserve the property: a sum or a scalar multiple of elements of G_1 is again an element of G_1, and likewise for G'_2, so a point computed from checked inputs does not need checking again. What does need checking is a point whose provenance does not establish membership, such as one built from coordinates supplied by another party or one whose group is no longer tracked by the implementation. Before such a point is used as an argument to the pairing, the implementation MUST establish that it belongs to the corresponding subgroup. This is a condition on the domain of the map rather than a defensive measure: the pairing of Section 2.2 is defined on the r-torsion points, and a point outside the subgroup is not an admissible argument. Applying the checks of Section 5.4.1, or any other method deciding the same predicate, satisfies this requirement.

Membership in the subgroup does not on its own exclude the identity element, which Section 5.4.1 accepts; whether a protocol accepts it is the separate decision described in Section 5.6.2. Note also that subgroup security in the sense of [BCM15] is a property of a curve rather than of a point: it constrains the prime factors of the cofactors of the pairing groups. It is therefore a criterion applied when curves are selected, and not a check an implementation performs on a received value.

The pairing-based protocols, such as the BLS signatures, use a scalar multiplication in G_1, G'_2 and an exponentiation in G_T with the secret key. In order to prevent the leakage of the secret key due to side channel attacks, implementers SHOULD apply countermeasure techniques such as the Montgomery ladder [Montgomery] [CF06] when they implement modules of a scalar multiplication and an exponentiation. Please refer to [Montgomery] and [CF06] for the detailed algorithms of the Montgomery ladder.

A coordinate that is read from a byte string has to be checked against the order of the field it is claimed to lie in; a coefficient outside that range gives one value several encodings, which can lead to vulnerabilities such as signature forgery [IEEE1363]. Section 5.4 makes this requirement normative for the procedures defined in this document.

The choice between the two identity-element behaviors described in Section 5.6.2 belongs to the calling protocol, because whether the identity element can legitimately appear is a property of the protocol rather than of the curve or the wire format. Treating the identity element as an unremarkable, always-valid deserialization result, when the calling protocol does not actually expect it, can introduce timing side channels from identity-checking branches. Protocol specifications SHOULD state explicitly whether they require the identity-rejecting or identity-allowing behavior, consistent with their own security assumptions, and SHOULD do the same for the zero scalar (Section 5.6.3).

Recommended parameters are affected by Cheon's attack which is a solving algorithm for the strong DH problem [Cheon06]. The mathematical problem that provides the security of the strong DH problem is called ECDLP with Auxiliary Inputs (ECDLPwAI). In ECDLPwAI, the rational points P and [K^i]P for i = 1, ..., delta are given, and the task is to find the secret K. For a divisor delta of r - 1, Cheon's algorithm recovers K in O(log r * (sqrt(r / delta) + sqrt(delta))) group operations [Cheon06], whereas solving ECDLP by a generic method takes O(sqrt(r)) group operations, so for a well chosen delta the work of ECDLPwAI becomes dramatically smaller than that of ECDLP. A second variant applies when delta divides r + 1 rather than r - 1, and has a different complexity. Please refer to [Cheon06] for the details of both. The design of a cryptographic protocol based on the strong DH problem therefore has to take this attack into account. For example, in the case of Short Signatures, the attack can be prevented by carefully setting the maximum number of queries, which corresponds to the parameter delta.

7. IANA Considerations

This document has no IANA actions.

8. Acknowledgements

Tsunekazu Saito was a co-author of this document from its first version through revision 11, and much of what it contains comes from that work. The authors would like to thank a lot of authors including Akihiro Kato for their significant contribution to early versions of this memo. The authors would also like to acknowledge Taechan Kim, Hoeteck Wee, Sergey Gorbunov, Michael Scott, Chloe Martindale as an Expert Reviewer, Watson Ladd, Armando Faz, Rene Struik, and Diego F. Aranha for their valuable comments. The authors would further like to thank Thomas Bellebaum, Frank Denis, Emil Lundberg, Michele Orrù, and Mamy Ratsimbazafy for their detailed reviews of recent revisions, which shaped Section 5 in particular.

9. References

9.1. Normative References

[BD18]
Barbulescu, R. and S. Duquesne, "Updating Key Size Estimations for Pairings", DOI 10.1007/s00145-018-9280-5, Journal of Cryptology, , <https://doi.org/10.1007/s00145-018-9280-5>.
[BLS02]
Barreto, P., Lynn, B., and M. Scott, "Constructing Elliptic Curves with Prescribed Embedding Degrees", DOI 10.1007/3-540-36413-7_19, Security in Communication Networks pp. 257-267, , <https://doi.org/10.1007/3-540-36413-7_19>.
[BN05]
Barreto, P. and M. Naehrig, "Pairing-Friendly Elliptic Curves of Prime Order", DOI 10.1007/11693383_22, Selected Areas in Cryptography pp. 319-331, , <https://doi.org/10.1007/11693383_22>.
[G20]
Guillevic, A., "A Short-List of Pairing-Friendly Curves Resistant to Special TNFS at the 128-Bit Security Level", DOI 10.1007/978-3-030-45388-6_19, Public-Key Cryptography - PKC 2020 pp. 535-564, , <https://doi.org/10.1007/978-3-030-45388-6_19>.
[GMT19]
Guillevic, A., Masson, S., and E. Thomé, "Cocks–Pinch curves of embedding degrees five to eight and optimal ate pairing computation", DOI 10.1007/s10623-020-00727-w, International Journal of Designs, Codes and Cryptography vol. 88, pp. 1047-1081, , <https://doi.org/10.1007/s10623-020-00727-w>.
[KB16]
Kim, T. and R. Barbulescu, "Extended Tower Number Field Sieve: A New Complexity for the Medium Prime Case", DOI 10.1007/978-3-662-53018-4_20, Advances in Cryptology - CRYPTO 2016 pp. 543-571, , <https://doi.org/10.1007/978-3-662-53018-4_20>.
[KIK17]
Kiyomura, Y., Inoue, A., Kawahara, Y., Yasuda, M., Takagi, T., and T. Kobayashi, "Secure and Efficient Pairing at 256-Bit Security Level", DOI 10.1007/978-3-319-61204-1_4, Applied Cryptography and Network Security pp. 59-79, , <https://doi.org/10.1007/978-3-319-61204-1_4>.
[NIST]
Barker, E., "NIST special publication 800-57 part 1 (revised) : Recommendation for key management, part 1: General (revised)", National Institute of Standards and Technology (NIST), .
[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC8017]
Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, "PKCS #1: RSA Cryptography Specifications Version 2.2", RFC 8017, DOI 10.17487/RFC8017, , <https://www.rfc-editor.org/info/rfc8017>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[Ver09]
Vercauteren, F., "Optimal Pairings", DOI 10.1109/tit.2009.2034881, IEEE Transactions on Information Theory Vol. 56, pp. 455-461, , <https://doi.org/10.1109/tit.2009.2034881>.

9.2. Informative References

[AdjointLib]
Adjoint Inc., "Optimised bilinear pairings over elliptic curves", , <https://github.com/sdiehl/pairing>.
[AFKMR12]
Aranha, D.F., Fuentes-Castaneda, L., Knapp, E., Menezes, A., and F. Rodríguez-Henríquez, "Implementing Pairings at the 192-Bit Security Level", DOI 10.1007/978-3-642-36334-4_11, Pairing 2012 pp. 177-195, , <https://doi.org/10.1007/978-3-642-36334-4_11>.
[AKLGL11]
Aranha, D.F., Karabina, K., Longa, P., Gebotys, C.H., and J. López, "Faster Explicit Formulas for Computing Pairings over Ordinary Curves", EUROCRYPT 2011, , <https://eprint.iacr.org/2010/526>.
[Algorand]
Gorbunov, S., "Pixel-signatures: Efficient and Secure Digital Signatures for Proof-of-Stake Blockchains", , <https://medium.com/algorand/digital-signatures-for-blockchains-5820e15fbe95>.
[AMCL]
The Apache Software Foundation, "The Apache Milagro Cryptographic Library (AMCL)", , <https://github.com/apache/incubator-milagro-crypto>.
[AMCLv2]
The Apache Software Foundation, "Old version of the Apache Milagro Cryptographic Library", , <https://github.com/miracl/amcl/tree/master/version22>.
[APT26]
Al Aswad, H., Pierrot, C., and E. Thomé, "High-Order Galois Automorphisms for TNFS Linear Algebra", Advances in Cryptology - CRYPTO 2026 , Cryptology ePrint Archive Report 2026/560, , <https://eprint.iacr.org/2026/560>.
[arkworks]
arkworks contributors, "arkworks: A Rust ecosystem for zkSNARK programming", , <https://github.com/arkworks-rs>.
[BCGMMW20]
Bowe, S., Chiesa, A., Green, M., Miers, I., Mishra, P., and H. Wu, "ZEXE: Enabling Decentralized Private Computation", DOI 10.1109/SP40000.2020.00050, IEEE Symposium on Security and Privacy 2020, , <https://doi.org/10.1109/SP40000.2020.00050>.
[BCM15]
Barreto, P. S. L. M., Costello, C., Misoczki, R., Naehrig, M., Pereira, G. C. C. F., and G. Zanon, "Subgroup security in pairing-based cryptography", Cryptology ePrint Archive Report 2015/247, , <https://eprint.iacr.org/2015/247.pdf>.
[BGMORT10]
Beuchat, J., González-Díaz, J., Mitsunari, S., Okamoto, E., Rodríguez-Henríquez, F., and T. Teruya, "High-Speed Software Implementation of the Optimal Ate Pairing over Barreto–Naehrig Curves", DOI 10.1007/978-3-642-17455-1_2, Pairing 2010 pp. 21-39, , <https://doi.org/10.1007/978-3-642-17455-1_2>.
[BL10]
Brickell, E. and J. Li, "Enhanced Privacy ID from Bilinear Pairing for Hardware Authentication and Attestation", DOI 10.1109/socialcom.2010.118, 2010 IEEE Second International Conference on Social Computing, , <https://doi.org/10.1109/socialcom.2010.118>.
[BLS12-381]
Bowe, S., "BLS12-381: New zk-SNARK Elliptic Curve Construction", <https://web.archive.org/web/20260823101842/https://electriccoin.co/blog/new-snark-curve/>.
[BLS48]
Kyushu University, "bls48 - C++ library for Optimal Ate Pairing on BLS48", , <https://github.com/mk-math-kyushu/bls48>.
[bls12377js]
The Celo Foundation, "bls12377js: TypeScript implementation of BLS12-377-based Proofs of Possession", , <https://github.com/celo-org/bls12377js>.
[blst]
Supranational LLC, "blst: BLS12-381 signature library", , <https://github.com/supranational/blst>.
[CCS07]
Chen, L., Cheng, Z., and N. Smart, "Identity-based key agreement protocols from pairings", DOI 10.1007/s10207-006-0011-9, International Journal of Information Security Vol. 6, pp. 213-241, , <https://doi.org/10.1007/s10207-006-0011-9>.
[CF06]
Cohen, H. and G. Frey, "Handbook of Elliptic and Hyperelliptic Curve Cryptography", DOI 10.1201/9781420034981, Chapman and Hall CRC, , <https://doi.org/10.1201/9781420034981>.
[Cheon06]
Cheon, J. H., "Security Analysis of the Strong Diffie-Hellman Problem", DOI 10.1007/11761679_1, EUROCRYPT 2006 pp. 1-11, , <https://doi.org/10.1007/11761679_1>.
[Chia]
Chia Network, "BLS signatures in C++, using the blst library for BLS12-381", <https://github.com/Chia-Network/bls-signatures>.
[CIRCL]
Cloudflare, "CIRCL: Cloudflare Interoperable, Reusable Cryptographic Library", , <https://github.com/cloudflare/circl>.
[CLN09]
Costello, C., Lange, T., and M. Naehrig, "Faster Pairing Computations on Curves with High-Degree Twists", Cryptology ePrint Archive Report 2009/615, , <https://eprint.iacr.org/2009/615.pdf>.
[Cloudflare]
Sullivan, N., "Geo Key Manager: How It Works", <https://blog.cloudflare.com/geo-key-manager-how-it-works/>.
[constantine]
Ratsimbazafy, M., "Constantine: Constant-time cryptographic library", , <https://github.com/mratsim/constantine>.
[DFINITY]
Williams, D., "DFINITY Technology Overview Series Consensus System Rev. 1", n.d., <https://web.archive.org/web/20250307232101/https://dfinity.org/pdf-viewer/library/dfinity-consensus.pdf>.
[DSD07]
Devegili, A. J., Scott, M., and R. Dahab, "Implementing Cryptographic Pairings over Barreto-Naehrig Curves", DOI 10.1007/978-3-540-73489-5_10, Pairing 2007 pp. 197-207, , <https://doi.org/10.1007/978-3-540-73489-5_10>.
[ECRYPT]
ECRYPT, "Final Report on Main Computational Assumptions in Cryptography".
[EIP197]
Buterin, V. and C. Reitwiessner, "EIP-197: Precompiled contracts for optimal ate pairing check on the elliptic curve alt_bn128", , <https://eips.ethereum.org/EIPS/eip-197>.
[EIP2537]
Vlasov, A., "EIP-2537: Precompile for BLS12-381 curve operations", , <https://eips.ethereum.org/EIPS/eip-2537>.
[EPID]
Intel Corporation, "Intel (R) SGX: Intel (R) EPID Provisioning and Attestation Services", <https://web.archive.org/web/20200506110729/https://software.intel.com/en-us/download/intel-sgx-intel-epid-provisioning-and-attestation-services>.
[Ethereum]
Jordan, R., "Ethereum 2.0 Development Update #17 - Prysmatic Labs", <https://medium.com/prysmatic-labs/ethereum-2-0-development-update-17-prysmatic-labs-ed5bcf82ec00>.
[FCKR11]
Fuentes-Castañeda, L., Knapp, E., and F. Rodríguez-Henríquez, "Faster Hashing to G2", SAC 2011, LNCS vol. 7118, pp. 412-430, , <https://doi.org/10.1007/978-3-642-28496-0_25>.
[FIDO]
Lindemann, R., "FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02", <https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html>.
[Filecoin]
Protocol Labs, "Filecoin: A Decentralized Storage Network", , <https://research.protocol.ai/publications/filecoin-a-decentralized-storage-network/>.
[FK18]
Fotiadis, G. and E. Konstantinou, "TNFS Resistant Families of Pairing-Friendly Elliptic Curves", Cryptology ePrint Archive Report 2018/1017, , <https://eprint.iacr.org/2018/1017.pdf>.
[FM19]
Fotiadis, G. and C. Martindale, "Optimal TNFS-secure pairings on elliptic curves with composite embedding degree", Cryptology ePrint Archive Report 2019/555, , <https://eprint.iacr.org/2019/555.pdf>.
[Freeman06]
Freeman, D., "Constructing pairing-friendly elliptic curves with embedding degree 10", DOI 10.1007/11792086_32, ANTS 2006 pp. 452-465, , <https://doi.org/10.1007/11792086_32>.
[FSU10]
Fujioka, A., Suzuki, K., and B. Ustaoglu, "Ephemeral Key Leakage Resilient and Efficient ID-AKEs That Can Share Identities, Private and Master Keys", DOI 10.1007/978-3-642-17455-1_12, Lecture Notes in Computer Science pp. 187-205, , <https://doi.org/10.1007/978-3-642-17455-1_12>.
[gnark-crypto]
Consensys Software Inc., "gnark-crypto: Elliptic curve cryptography and pairing library", , <https://github.com/consensys/gnark-crypto>.
[go-algorand]
Algorand, "go-algorand: Algorand's official implementation in Go", , <https://github.com/algorand/go-algorand>.
[HHT20]
Hayashida, D., Hayasaka, K., and T. Teruya, "Efficient Final Exponentiation via Cyclotomic Structure for Pairings over Families of Elliptic Curves", Cryptology ePrint Archive Paper 2020/875, , <https://eprint.iacr.org/2020/875>.
[HR83]
Hellman, M. and J. Reyneri, "Fast Computation of Discrete Logarithms in GF (q)", DOI 10.1007/978-1-4757-0602-4_1, Advances in Cryptology pp. 3-13, , <https://doi.org/10.1007/978-1-4757-0602-4_1>.
[I-D.ietf-cose-bls-key-representations]
Looker, T. and M. B. Jones, "Barreto-Lynn-Scott Elliptic Curve Key Representations for JOSE and COSE", Work in Progress, Internet-Draft, draft-ietf-cose-bls-key-representations-08, , <https://datatracker.ietf.org/doc/html/draft-ietf-cose-bls-key-representations-08>.
[I-D.irtf-cfrg-bbs-signatures]
Looker, T., Kalos, V., Whitehead, A., and M. Lodder, "The BBS Signature Scheme", Work in Progress, Internet-Draft, draft-irtf-cfrg-bbs-signatures-10, , <https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-10>.
[I-D.irtf-cfrg-bls-signature]
Boneh, D., Bradley, J., Gorbunov, S., Wahby, R. S., Wee, H., Wood, C. A., and Z. Zhang, "BLS Signatures", Work in Progress, Internet-Draft, draft-irtf-cfrg-bls-signature-07, , <https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-07>.
[IEEE1363]
"IEEE Standard Specifications for Public-Key Cryptography", IEEE standard, DOI 10.1109/IEEESTD.2000.92292, , <https://doi.org/10.1109/IEEESTD.2000.92292>.
[Intel-IPP]
Intel Corporation, "Developer Reference for Intel Integrated Performance Primitives Cryptography 2019", , <https://web.archive.org/web/20200506110820/https://software.intel.com/en-us/ipp-crypto-reference-arithmetic-of-the-group-of-elliptic-curve-points>.
[ISOIEC11770-3]
ISO/IEC, "ISO/IEC 11770-3:2015", ISO/IEC Information technology -- Security techniques -- Key management -- Part 3: Mechanisms using asymmetric techniques, .
[ISOIEC15946-5]
ISO/IEC, "ISO/IEC 15946-5:2022", ISO/IEC Information technology -- Security techniques -- Cryptographic techniques based on elliptic curves -- Part 5: Elliptic curve generation, .
[Joux00]
Joux, A., "A One Round Protocol for Tripartite Diffie-Hellman", DOI 10.1007/10722028_23, Lecture Notes in Computer Science pp. 385-393, , <https://doi.org/10.1007/10722028_23>.
[KSS08]
Kachisa, E., Schaefer, E., and M. Scott, "Constructing Brezing-Weng Pairing-Friendly Elliptic Curves Using Elements in the Cyclotomic Field", DOI 10.1007/978-3-540-85538-5_9, Pairing 2008 pp. 126-135, , <https://doi.org/10.1007/978-3-540-85538-5_9>.
[libsnark]
SCIPR Lab, "libsnark: a C++ library for zkSNARK proofs", , <https://github.com/zcash/libsnark>.
[M-Pin]
Scott, M., "M-Pin: A Multi-Factor Zero Knowledge Authentication Protocol", , <https://miracl.com/blog/m-pin-a-multi-factor-zero-knowledge-authentication-protocol/>.
[MAF19]
Mbang, N.B., Aranha, D.F., and E. Fouotsa, "Computing the Optimal Ate Pairing over Elliptic Curves with Embedding Degrees 54 and 48 at the 256-bit security level", International Journal of Applied Cryptography vol. 4, no. 1, pp. 45-59, , <https://doi.org/10.1504/IJACT.2020.107167>.
[mcl]
Mitsunari, S., "mcl - A portable and fast pairing-based cryptography library", , <https://github.com/herumi/mcl>.
[MIRACL]
MIRACL Ltd., "The MIRACL Core Cryptographic Library", , <https://github.com/miracl/core>.
[MNT01]
Miyaji, A., Nakabayashi, M., and S. Takano, "New explicit conditions of Elliptic Curve Traces under FR reduction", IEICE Trans. Fundamentals. E84-A(5) pp. 1234-1243, .
[Montgomery]
Montgomery, P., "Speeding the Pollard and Elliptic Curve Methods of Factorization", MATHEMATICS OF COMPUTATION , January, , <https://www.ams.org/journals/mcom/1987-48-177/S0025-5718-1987-0866113-7/S0025-5718-1987-0866113-7.pdf>.
[NASKM08]
Nogami, Y., Akane, M., Sakemi, Y., Kato, H., and Y. Morikawa, "Integer Variable X-Based Ate Pairing", DOI 10.1007/978-3-540-85538-5_13, Pairing 2008 pp. 178-191, , <https://doi.org/10.1007/978-3-540-85538-5_13>.
[noble-curves]
Miller, P., "noble-curves: Audited & minimal JS implementation of elliptic curve cryptography", , <https://github.com/paulmillr/noble-curves>.
[PBC]
Lynn, B., "PBC Library - The Pairing-Based Cryptography Library", , <https://crypto.stanford.edu/pbc/>.
[pfcurve-js]
JC-Lab, "pfcurve.js: A pairing-friendly curve library for Node.js and the browser", , <https://github.com/jc-lab/pfcurve.js>.
[Pollard78]
Pollard, J., "Monte Carlo methods for index computation $({\rm mod}\ p)$", DOI 10.1090/s0025-5718-1978-0491431-9, Mathematics of Computation Vol. 32, pp. 918-918, , <https://doi.org/10.1090/s0025-5718-1978-0491431-9>.
[RELIC]
Gouvea, C.P.L., "RELIC is an Efficient LIbrary for Cryptography", , <https://github.com/relic-toolkit/relic>.
[RFC5091]
Boyen, X. and L. Martin, "Identity-Based Cryptography Standard (IBCS) #1: Supersingular Curve Implementations of the BF and BB1 Cryptosystems", RFC 5091, DOI 10.17487/RFC5091, , <https://www.rfc-editor.org/info/rfc5091>.
[RFC6508]
Groves, M., "Sakai-Kasahara Key Encryption (SAKKE)", RFC 6508, DOI 10.17487/RFC6508, , <https://www.rfc-editor.org/info/rfc6508>.
[RFC6509]
Groves, M., "MIKEY-SAKKE: Sakai-Kasahara Key Encryption in Multimedia Internet KEYing (MIKEY)", RFC 6509, DOI 10.17487/RFC6509, , <https://www.rfc-editor.org/info/rfc6509>.
[RFC6539]
Cakulev, V., Sundaram, G., and I. Broustis, "IBAKE: Identity-Based Authenticated Key Exchange", RFC 6539, DOI 10.17487/RFC6539, , <https://www.rfc-editor.org/info/rfc6539>.
[RFC8032]
Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC 8032, DOI 10.17487/RFC8032, , <https://www.rfc-editor.org/info/rfc8032>.
[RFC9380]
Faz-Hernandez, A., Scott, S., Sullivan, N., Wahby, R. S., and C. A. Wood, "Hashing to Elliptic Curves", RFC 9380, DOI 10.17487/RFC9380, , <https://www.rfc-editor.org/info/rfc9380>.
[RFC9591]
Connolly, D., Komlo, C., Goldberg, I., and C. A. Wood, "The Flexible Round-Optimized Schnorr Threshold (FROST) Protocol for Two-Round Schnorr Signatures", RFC 9591, DOI 10.17487/RFC9591, , <https://www.rfc-editor.org/info/rfc9591>.
[S86]
Silverman, J. H., "The arithmetic of elliptic curves", Springer GTM 106, .
[SAKKE]
3GPP, "Security of the mission critical service (Release 15)", 3GPP TS 33.180 15.3.0, .
[SBCK09]
Scott, M., Benger, N., Charlemagne, M., Dominguez Perez, L.J., and E.J. Kachisa, "On the Final Exponentiation for Calculating Pairings on Ordinary Elliptic Curves", Pairing 2009, LNCS vol. 5671, pp. 78-88, , <https://doi.org/10.1007/978-3-642-03298-1_6>.
[SEC1]
Standards for Efficient Cryptography Group (SECG), "SEC 1: Elliptic Curve Cryptography", , <https://www.secg.org/sec1-v2.pdf>.
[SG18]
Scott, M. and A. Guillevic, "A New Family of Pairing-Friendly elliptic curves", Cryptology ePrint Archive Report 2018/193, , <https://eprint.iacr.org/2018/193.pdf>.
[TEPLA]
University of Tsukuba, "TEPLA: University of Tsukuba Elliptic Curve and Pairing Library", , <http://www.cipher.risk.tsukuba.ac.jp/tepla/index_e.html>.
[TPM]
Trusted Computing Group (TCG), "Trusted Platform Module Library Specification, Family \"2.0\", Level 00, Revision 01.38", <https://trustedcomputinggroup.org/resource/tpm-library-specification/>.
[W3C]
Balfanz, D., Czeskis, A., Hodges, J., Jones, J.C., Jones, M.B., Kumar, A., Liao, A., Lindemann, R., and E. Lundberg, "Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Recommendation", , <https://www.w3.org/TR/2019/REC-webauthn-1-20190304/>.
[Zcash]
Zcash, "What are zk-SNARKs?", <https://z.cash/learn/what-are-zk-snarks/>.
[ZcashRep]
Hopwood, D-E., Bowe, S., Hornby, T., and N. Wilcox, "Zcash Protocol Specification", Section 5.4.9.2, , <https://zips.z.cash/protocol/protocol.pdf#blspairing>.
[zig-pairings]
Denis, F., "zig-pairings: Pairing-friendly curves in pure Zig (BLS12-381, BN462)", , <https://github.com/jedisct1/zig-pairings>.
[zkcrypto]
zkcrypto, "zkcrypto - Pairing-friendly elliptic curve library", , <https://github.com/zkcrypto/pairing>.
[zkcrypto-bls12-381]
zkcrypto, "bls12_381 - Implementation of the BLS12-381 pairing-friendly elliptic curve group", , <https://github.com/zkcrypto/bls12_381>.

Appendix A. Computing the Optimal Ate Pairing

Before presenting the computation of the optimal ate pairing e(P, Q) satisfying the properties shown in Section 2.2, we give the subfunctions used for the pairing computation.

The following algorithm, Line_function, shows the computation of the line function. It takes Q_1 = (x_1, y_1), Q_2 = (x_2, y_2) in G_2, and P = (x, y) in G_1 as input, and outputs an element of GF(p^k).

if (Q_1 = Q_2) then
    l := (3 * x_1^2) / (2 * y_1);
else if (Q_1 = -Q_2) then
    return (x - x_1);
else
    l := (y_2 - y_1) / (x_2 - x_1);
end if
return (l * (x - x_1) + y_1 - y);

When implementing the line function, the isomorphism of E and its twist curve E' can be used to reduce the computational cost of operations in G_2 [CLN09] [KIK17]. We note that Line_function does not consider such an isomorphism; i.e., the above pseudocode operates on coordinates in untwisted form.

The computation of the optimal ate pairing uses the p-power Frobenius endomorphism pi of Section 2.2, applied to Q = (x, y) in G_2, that is, to a point on E(GF(p^k)) in untwisted form. The pseudocode below writes it with the characteristic as an explicit argument, pi(p, Q) = (x^p, y^p).

A.1. Optimal Ate Pairings over Barreto-Naehrig Curves

Let c = 6 * t + 2 for a parameter t and c_0, c_1, ... , c_N in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., N) equals c.

The following algorithm shows the computation of the optimal ate pairing on BN curves. It takes P in G_1, Q in G_2, an integer c, c_0, ...,c_N in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., N) equals c, and the order r of G_1 as input, and outputs e(P, Q).

f := 1; T := Q;
if (c_N = -1) then
    T := -T;
end if
for i = N-1 downto 0
    f := f^2 * Line_function(T, T, P); T := T + T;
    if (c_i = 1) then
        f := f * Line_function(T, Q, P); T := T + Q;
    else if (c_i = -1) then
        f := f * Line_function(T, -Q, P); T := T - Q;
    end if
end for
Q_1 := pi(p, Q); Q_2 := pi(p, Q_1);
f := f * Line_function(T, Q_1, P); T := T + Q_1;
f := f * Line_function(T, -Q_2, P);
f := f^{(p^k - 1) / r}
return f;

A.2. Optimal Ate Pairings over Barreto-Lynn-Scott Curves

Let c = t for a parameter t and c_0, c_1, ... , c_N in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., N) equals c.

The following algorithm shows the computation of the optimal ate pairing on Barreto-Lynn-Scott curves. It takes P in G_1, Q in G_2, an integer c, c_0, ...,c_N in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., N) equals c, and the order r of G_1 as input, and outputs e(P, Q).

f := 1; T := Q;
if (c_N = -1) then
    T := -T;
end if
for i = N-1 downto 0
    f := f^2 * Line_function(T, T, P); T := T + T;
    if (c_i = 1) then
        f := f * Line_function(T, Q, P); T := T + Q;
    else if (c_i = -1) then
        f := f * Line_function(T, -Q, P); T := T - Q;
    end if
end for
f := f^{(p^k - 1) / r}
return f;

Appendix B. Implementation Notes

This appendix is informative. It documents implementation considerations discovered through verification of this memo's pseudocode against widely used pairing libraries (mcl, noble-curves, blst), and does not standardize any algorithm.

B.1. Cofactors in Existing Libraries

Some implementations evaluate a fixed multiple of the final exponent. Their output differs from the literal output of the pseudocode in Appendix A by a curve-specific exponent in G_T:

e_lib(P, Q) = e_pseudocode(P, Q)^alpha

where alpha is:

  • BLS12-381: alpha = 3 [HHT20]

  • BN462: alpha = 2t(6t^2 + 3t + 1) mod r [FCKR11]

  • BLS48-581: alpha = 3 [HHT20]

Because gcd(alpha, r) = 1 for all three curves, the following properties hold:

  • Bilinearity is preserved: e_lib([K]P, [L]Q) = e_lib(P, Q)^{K * L}.

  • Verification equations of the form e(A, B) = e(C, D) hold using e_lib if and only if they hold using e_pseudocode.

  • Direct byte-comparison between e_lib output and the test vectors in Appendix C will not match. Implementations seeking byte-level reproducibility of those test vectors should evaluate the pseudocode in Appendix A literally, without applying the cofactor optimization.

B.2. Final Exponentiation Decomposition

The pseudocode in Appendix A writes the final exponentiation as a single step, f := f^((p^k - 1) / r). In practice, implementations compute this via an easy/hard split: an easy part computed cheaply via the Frobenius endomorphism, and a hard part computed via an addition chain over the curve parameter t.

Standard references for the hard-part addition chain include [SBCK09] (the original approach for BLS curves) and [AKLGL11] (for BN curves). [FCKR11] and [HHT20] are cited in Appendix B.1 for a different reason: each evaluates a fixed multiple of the hard part rather than the hard part itself, which is where the exponent alpha given there comes from.

Appendix C. Test Vectors of Optimal Ate Pairing

We provide test vectors for Optimal Ate Pairing e(P, Q) given in Appendix A for the curves BLS12-381, BN462 and BLS48-581 given in Section 4. Here, the inputs P = (x, y) and Q = (x', y') are the corresponding base points BP and BP' given in Section 4.

Note: The G_2 base points Q = (x', y') in this appendix are given in twisted form, that is, as the corresponding points of G'_2, with coordinates in GF(p^(k/d)), which gives a compact representation. The pseudocode in Appendix A operates on points of the untwisted curve E(GF(p^k)). An implementation invoking that pseudocode directly has to apply the untwist isomorphism psi defined in Section 4 first, to lift Q from E' to E(GF(p^k)). Most existing libraries perform this lifting implicitly by using twisted-form variants of Line_function, which are mathematically equivalent and more efficient.

For BLS12-381 and BN462, Q = (x', y') is given by

x' = x'_0 + x'_1 * u and
y' = y'_0 + y'_1 * u,

where u is an indeterminate and x'_0, x'_1, y'_0, y'_1 are elements of GF(p).

For BLS48-581, Q = (x', y') is given by

x' = x'_0 + x'_1 * u + x'_2 * v + x'_3 * u * v
    + x'_4 * w + x'_5 * u * w + x'_6 * v * w + x'_7 * u * v * w and
y' = y'_0 + y'_1 * u + y'_2 * v + y'_3 * u * v
    + y'_4 * w + y'_5 * u * w + y'_6 * v * w + y'_7 * u * v * w,

where u, v and w are indeterminates and x'_0, ..., x'_7 and y'_0, ..., y'_7 are elements of GF(p).

In addition, we use the notation e_i (i = 0, ..., k-1) for the coefficients of e(P, Q) over GF(p), with respect to the tower of extension fields defined for each curve in Section 4. The basis is the set of products of powers of the indeterminates of that tower, indexed so that each indeterminate contributes a stride equal to the degree over GF(p) of the field it extends.

For BLS12-381 and BN462 (k = 12), with the towers of Section 4.2.1, Paragraph 5 and Section 4.2.2, Paragraph 4, this gives

e(P, Q) = e_0 + e_1 * u + e_2 * v + e_3 * u * v + e_4 * v^2
        + e_5 * u * v^2 + e_6 * w + e_7 * u * w + e_8 * v * w
        + e_9 * u * v * w + e_10 * v^2 * w + e_11 * u * v^2 * w.

For BLS48-581 (k = 48), with the tower of Section 4.3, Paragraph 5, the same rule gives the 48 basis elements u^i1 * v^i2 * w^i3 * z^i4 * s^i5, where i1, i2, i3 and i5 are in {0, 1} and i4 is in {0, 1, 2}. The coefficient of that basis element is e_i with

i = i1 + 2 * i2 + 4 * i3 + 8 * i4 + 24 * i5.

BLS12-381:

Input x value:
0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac58
  6c55e83ff97a1aeffb3af00adb22c6bb
Input y value:
0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3ed
  d03cc744a2888ae40caa232946c5e7e1
Input x'_0 value:
0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d177
  0bac0326a805bbefd48056c8c121bdb8
Input x'_1 value:
0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049
  334cf11213945d57e5ac7d055d042b7e
Input y'_0 value:
0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c
  923ac9cc3baca289e193548608b82801
Input y'_1 value:
0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab
  3f370d275cec1da1aaa9075ff05f79be
e_0:
0x11619b45f61edfe3b47a15fac19442526ff489dcda25e59121d9931438907dfd
  448299a87dde3a649bdba96e84d54558
e_1:
0x153ce14a76a53e205ba8f275ef1137c56a566f638b52d34ba3bf3bf22f277d70
  f76316218c0dfd583a394b8448d2be7f
e_2:
0x095668fb4a02fe930ed44767834c915b283b1c6ca98c047bd4c272e9ac3f3ba6
  ff0b05a93e59c71fba77bce995f04692
e_3:
0x16deedaa683124fe7260085184d88f7d036b86f53bb5b7f1fc5e248814782065
  413e7d958d17960109ea006b2afdeb5f
e_4:
0x09c92cf02f3cd3d2f9d34bc44eee0dd50314ed44ca5d30ce6a9ec0539be7a86b
  121edc61839ccc908c4bdde256cd6048
e_5:
0x111061f398efc2a97ff825b04d21089e24fd8b93a47e41e60eae7e9b2a38d54f
  a4dedced0811c34ce528781ab9e929c7
e_6:
0x01ecfcf31c86257ab00b4709c33f1c9c4e007659dd5ffc4a735192167ce19705
  8cfb4c94225e7f1b6c26ad9ba68f63bc
e_7:
0x08890726743a1f94a8193a166800b7787744a8ad8e2f9365db76863e894b7a11
  d83f90d873567e9d645ccf725b32d26f
e_8:
0x0e61c752414ca5dfd258e9606bac08daec29b3e2c57062669556954fb227d3f1
  260eedf25446a086b0844bcd43646c10
e_9:
0x0fe63f185f56dd29150fc498bbeea78969e7e783043620db33f75a05a0a2ce5c
  442beaff9da195ff15164c00ab66bdde
e_10:
0x10900338a92ed0b47af211636f7cfdec717b7ee43900eee9b5fc24f0000c5874
  d4801372db478987691c566a8c474978
e_11:
0x1454814f3085f0e6602247671bc408bbce2007201536818c901dbd4d2095dd86
  c1ec8b888e59611f60a301af7776be3d

BN462:

Input x value:
0x21a6d67ef250191fadba34a0a30160b9ac9264b6f95f63b3edbec3cf4b2e689d
  b1bbb4e69a416a0b1e79239c0372e5cd70113c98d91f36b6980d
Input y value:
0x0118ea0460f7f7abb82b33676a7432a490eeda842cccfa7d788c659650426e6a
  f77df11b8ae40eb80f475432c66600622ecaa8a5734d36fb03de
Input x'_0 value:
0x0257ccc85b58dda0dfb38e3a8cbdc5482e0337e7c1cd96ed61c913820408208f
  9ad2699bad92e0032ae1f0aa6a8b48807695468e3d934ae1e4df
Input x'_1 value:
0x1d2e4343e8599102af8edca849566ba3c98e2a354730cbed9176884058b18134
  dd86bae555b783718f50af8b59bf7e850e9b73108ba6aa8cd283
Input y'_0 value:
0x0a0650439da22c1979517427a20809eca035634706e23c3fa7a6bb42fe810f13
  99a1f41c9ddae32e03695a140e7b11d7c3376e5b68df0db7154e
Input y'_1 value:
0x073ef0cbd438cbe0172c8ae37306324d44d5e6b0c69ac57b393f1ab370fd725c
  c647692444a04ef87387aa68d53743493b9eba14cc552ca2a93a
e_0:
0x0cf7f0f2e01610804272f4a7a24014ac085543d787c8f8bf07059f93f87ba7e2
  a4ac77835d4ff10e78669be39cd23cc3a659c093dbe3b9647e8c
e_1:
0x00ef2c737515694ee5b85051e39970f24e27ca278847c7cfa709b0df408b830b
  3763b1b001f1194445b62d6c093fb6f77e43e369edefb1200389
e_2:
0x04d685b29fd2b8faedacd36873f24a06158742bb2328740f93827934592d6f17
  23e0772bb9ccd3025f88dc457fc4f77dfef76104ff43cd430bf7
e_3:
0x090067ef2892de0c48ee49cbe4ff1f835286c700c8d191574cb424019de11142
  b3c722cc5083a71912411c4a1f61c00d1e8f14f545348eb7462c
e_4:
0x1437603b60dce235a090c43f5147d9c03bd63081c8bb1ffa7d8a2c31d6732308
  60bb3dfe4ca85581f7459204ef755f63cba1fbd6a4436f10ba0e
e_5:
0x13191b1110d13650bf8e76b356fe776eb9d7a03fe33f82e3fe5732071f305d20
  1843238cc96fd0e892bc61701e1844faa8e33446f87c6e29e75f
e_6:
0x07b1ce375c0191c786bb184cc9c08a6ae5a569dd7586f75d6d2de2b2f075787e
  e5082d44ca4b8009b3285ecae5fa521e23be76e6a08f17fa5cc8
e_7:
0x05b64add5e49574b124a02d85f508c8d2d37993ae4c370a9cda89a100cdb5e1d
  441b57768dbc68429ffae243c0c57fe5ab0a3ee4c6f2d9d34714
e_8:
0x0fd9a3271854a2b4542b42c55916e1faf7a8b87a7d10907179ac7073f6a1de04
  4906ffaf4760d11c8f92df3e50251e39ce92c700a12e77d0adf3
e_9:
0x17fa0c7fa60c9a6d4d8bb9897991efd087899edc776f33743db921a689720c82
  257ee3c788e8160c112f18e841a3dd9a79a6f8782f771d542ee5
e_10:
0x0c901397a62bb185a8f9cf336e28cfb0f354e2313f99c538cdceedf8b8aa22c2
  3b896201170fc915690f79f6ba75581f1b76055cd89b7182041c
e_11:
0x20f27fde93cee94ca4bf9ded1b1378c1b0d80439eeb1d0c8daef30db0037104a
  5e32a2ccc94fa1860a95e39a93ba51187b45f4c2c50c16482322

BLS48-581:

Input x value:
0x02af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7
  544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d
  8c3bce8732315af640
Input y value:
0x0cefda44f6531f91f86b3a2d1fb398a488a553c9efeb8a52e991279dd41b720e
  f7bb7beffb98aee53e80f678584c3ef22f487f77c2876d1b2e35f37aef7b926b
  576dbb5de3e2587a70
Input x'_0 value:
0x05d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156
  c46ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154
  dec34fd0b4ace8bfab
Input x'_1 value:
0x07c4973ece2258512069b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e
  1c3943a00abfedf16214a76affa62504f0c3c7630d979630ffd75556a01afa14
  3f1669b36676b47c57
Input x'_2 value:
0x01fccc70198f1334e1b2ea1853ad83bc73a8a6ca9ae237ca7a6d6957ccbab5ab
  6860161c1dbd19242ffae766f0d2a6d55f028cbdfbb879d5fea8ef4cded6b3f0
  b46488156ca55a3e6a
Input x'_3 value:
0x0be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a393f8be0
  cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8cb4e80bc
  3f09a7033cbb7feafe
Input x'_4 value:
0x038b91c600b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386
  699981f9e48199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4c
  bb739c3a1c53f8cce5
Input x'_5 value:
0x0c96c7797eb0738603f1311e4ecda088f7b8f35dcef0977a3d1a58677bb03741
  8181df63835d28997eb57b40b9c0b15dd7595a9f177612f097fc7960910fce33
  70f2004d914a3c093a
Input x'_6 value:
0x0b9b7951c6061ee3f0197a498908aee660dea41b39d13852b6db908ba2c0b7a4
  49cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c22d63334b5b0e205c33
  54e41607e60750e057
Input x'_7 value:
0x0827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7
  f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3
  f84e19da00fbc6ae34
Input y'_0 value:
0x00eb53356c375b5dfa497216452f3024b918b4238059a577e6f3b39ebfc435fa
  ab0906235afa27748d90f7336d8ae5163c1599abf77eea6d659045012ab12c0f
  f323edd3fe4d2d7971
Input y'_1 value:
0x0284dc75979e0ff144da6531815fcadc2b75a422ba325e6fba01d72964732fcb
  f3afb096b243b1f192c5c3d1892ab24e1dd212fa097d760e2e588b423525ffc7
  b111471db936cd5665
Input y'_2 value:
0x0b36a201dd008523e421efb70367669ef2c2fc5030216d5b119d3a480d370514
  475f7d5c99d0e90411515536ca3295e5e2f0c1d35d51a652269cbc7c46fc3b8f
  de68332a526a2a8474
Input y'_3 value:
0x0aec25a4621edc0688223fbbd478762b1c2cded3360dcee23dd8b0e710e122d2
  742c89b224333fa40dced2817742770ba10d67bda503ee5e578fb3d8b8a1e533
  7316213da92841589d
Input y'_4 value:
0x0d209d5a223a9c46916503fa5a88325a2554dc541b43dd93b5a959805f112985
  7ed85c77fa238cdce8a1e2ca4e512b64f59f430135945d137b08857fdddfcf7a
  43f47831f982e50137
Input y'_5 value:
0x07d0d03745736b7a513d339d5ad537b90421ad66eb16722b589d82e2055ab750
  4fa83420e8c270841f6824f47c180d139e3aafc198caa72b679da59ed8226cf3
  a594eedc58cf90bee4
Input y'_6 value:
0x0896767811be65ea25c2d05dfdd17af8a006f364fc0841b064155f14e4c819a6
  df98f425ae3a2864f22c1fab8c74b2618b5bb40fa639f53dccc9e884017d9aa6
  2b3d41faeafeb23986
Input y'_7 value:
0x035e2524ff89029d393a5c07e84f981b5e068f1406be8e50c87549b6ef8eca9a
  9533a3f8e69c31e97e1ad0333ec719205417300d8c4ab33f748e5ac66e84069c
  55d667ffcb732718b6
e_0:
0x0e26c3fcb8ef67417814098de5111ffcccc1d003d15b367bad07cef2291a93d3
  1db03e3f03376f3beae2bd877bcfc22a25dc51016eda1ab56ee3033bc4b4fec5
  962f02dffb3af5e38e
e_1:
0x069061b8047279aa5c2d25cdf676ddf34eddbc8ec2ec0f03614886fa828e1fc0
  66b26d35744c0c38271843aa4fb617b57fa9eb4bd256d17367914159fc18b10a
  1085cb626e5bedb145
e_2:
0x02b9bece645fbf9d8f97025a1545359f6fe3ffab3cd57094f862f7fb9ca01c88
  705c26675bcc723878e943da6b56ce25d063381fcd2a292e0e7501fe57274418
  4fb4ab4ca071a04281
e_3:
0x0080d267bf036c1e61d7fc73905e8c630b97aa05ef3266c82e7a111072c0d205
  6baa8137fba111c9650dfb18cb1f43363041e202e3192fced29d2b0501c88254
  3fb370a56bfdc2435b
e_4:
0x03c6b4c12f338f9401e6a493a405b33e64389338db8c5e592a8dd79eac7720dd
  83dd6b0c189eeda20809160cd57cdf3e2edc82db15f553c1f6c953ea27114cb6
  bd8a38e273f407dae0
e_5:
0x016e46224f28bfd8833f76ac29ee6e406a9da1bde55f5e82b3bd977897a9104f
  18b9ee41ea9af7d4183d895102950a12ce9975669db07924e1b432d9680f5ce7
  e5c67ed68f381eba45
e_6:
0x008ddce7a4a1b94be5df3ceea56bef0077dcdde86d579938a50933a47296d337
  b7629934128e2457e24142b0eeaa978fd8e70986d7dd51fccbbeb8a1933434fe
  c4f5bc538de2646e90
e_7:
0x060ef6eae55728e40bd4628265218b24b38cdd434968c14bfefb87f0dcbfc76c
  c473ae2dc0cac6e69dfdf90951175178dc75b9cc08320fcde187aa58ea047a2e
  e00b1968650eec2791
e_8:
0x0c3943636876fd4f9393414099a746f84b2633dfb7c36ba6512a0b48e66dcb2e
  409f1b9e150e36b0b4311165810a3c721525f0d43a021f090e6a27577b42c7a5
  7bed3327edb98ba8f8
e_9:
0x02d31eb8be0d923cac2a8eb6a07556c8951d849ec53c2848ee78c5eed40262eb
  21822527a8555b071f1cd080e049e5e7ebfe2541d5b42c1e414341694d6f16d2
  87e4a8d28359c2d2f9
e_10:
0x07f19673c5580d6a10d09a032397c5d425c3a99ff1dd0abe5bec40a0d47a6b8d
  aabb22edb6b06dd8691950b8f23faefcdd80c45aa3817a840018965941f4247f
  9f97233a84f58b262e
e_11:
0x0d3fe01f0c114915c3bdf8089377780076c1685302279fd9ab12d07477aac03b
  69291652e9f179baa0a99c38aa8851c1d25ffdb4ded2c8fe8b30338c14428607
  d6d822610d41f51372
e_12:
0x0662eefd5fab9509aed968866b68cff3bc5d48ecc8ac6867c212a2d82cee5a68
  9a3c9c67f1d611adac7268dc8b06471c0598f7016ca3d1c01649dda4b43531cf
  fc4eb41e691e27f2eb
e_13:
0x0aad8f4a8cfdca8de0985070304fe4f4d32f99b01d4ea50d9f7cd2abdc0aeea9
  9311a36ec6ed18208642cef9e09b96795b27c42a5a744a7b01a617a91d9fb762
  3d636640d61a6596ec
e_14:
0x0ffcf21d641fd9c6a641a749d80cab1bcad4b34ee97567d905ed9d5cfb74e9ae
  f19674e2eb6ce3dfb706aa814d4a228db4fcd707e571259435393a27cac68b59
  a1b690ae8cde7a94c3
e_15:
0x0cbe92a53151790cece4a86f91e9b31644a86fc4c954e5fa04e707beb69fc60a
  858fed8ebd53e4cfd51546d5c0732331071c358d721ee601bfd3847e0e904101
  c62822dd2e4c7f8e5c
e_16:
0x0202db83b1ff33016679b6cfc8931deea6df1485c894dcd113bacf564411519a
  42026b5fda4e16262674dcb3f089cd7d552f8089a1fec93e3db6bca43788cdb0
  6fc41baaa5c5098667
e_17:
0x070a617ed131b857f5b74b625c4ef70cc567f619defb5f2ab67534a1a8aa7297
  5fc4248ac8551ce02b68801703971a2cf1cb934c9c354cadd5cfc4575cde8dbd
  e6122bd54826a9b3e9
e_18:
0x070e1ebce457c141417f88423127b7a7321424f64119d5089d883cb953283ee4
  e1f2e01ffa7b903fe7a94af4bb1acb02ca6a36678e41506879069cee11c9dcf6
  a080b6a4a7c7f21dc9
e_19:
0x058a06be5a36c6148d8a1287ee7f0e725453fa1bb05cf77239f235b417127e37
  0cfa4f88e61a23ea16df3c45d29c203d04d09782b39e9b4037c0c4ac8e8653e7
  c533ad752a640b233e
e_20:
0x0dfdfaaeb9349cf18d21b92ad68f8a7ecc509c35fcd4b8abeb93be7a204ac871
  f2195180206a2c340fccb69dbc30b9410ed0b122308a8fc75141f673ae5ec82b
  6a45fc2d664409c6b6
e_21:
0x0d06c8adfdd81275da2a0ce375b8df9199f3d359e8cf50064a3dc10a59241712
  4a3b705b05a7ffe78e20f935a08868ecf3fc5aba0ace7ce4497bb59085ca277c
  16b3d53dd7dae5c857
e_22:
0x0708effd28c4ae21b6969cb9bdd0c27f8a3e341798b6f6d4baf27be259b4a476
  88b50cb68a69a917a4a1faf56cec93f69ac416512c32e9d5e69bd8836b6c2ba9
  c6889d507ad571dbc4
e_23:
0x09da7c7aa48ce571f8ece74b98431b14ae6fb4a53ae979cd6b2e82320e8d25a0
  ece1ca1563aa5aa6926e7d608358af8399534f6b00788e95e37ef1b549f43a58
  ad250a71f0b2fdb2bf
e_24:
0x080fa69eaed5d5e9044c43db6c168066772604f3a94c4e7db2f92252ebed3011
  df4c9bcf4ffccbc7e514566fc6462ca39d4da73705a404bce6b7e2751037e5cd
  279df81de00e653134
e_25:
0x0a3a604cd354f6a763481558b087c55b1e6df4aca073f89ee4c2f7eea48091ef
  2b75369a7819f39472a1d518474fb11998a3d10e4cc3aaba54b5531e8dd777b9
  b5503283f15f2cbc53
e_26:
0x0ee80fd1b6256c379e78d3a966f78a1b75ea21a33ffd4a2b758a6a0fe9c95fb5
  97700b44eda1f05ff3dc6705178624c83eff49c2e1a109e7af3ef6eaf2138d81
  b9934c6c6dac264587
e_27:
0x0baa734a9d454bc8507eaf40d71e100339988eac975139f667cf426e4a856d11
  90a9f6a2ea07693108526be00ca0d94a0fb7d59b63497d81f97786159ee25bb0
  e8384e61403094adca
e_28:
0x050ab6cabefbfeafa89331de62bb2c7441607dccabe12fa3302bf74e5cea09b6
  e2a44e8a32ba04b8393cae776984e015b6aecd3151695907b83feb8fb1683b52
  bdac298802a1820bb5
e_29:
0x07da541017034b7f7150a4cc42eb8e32c8e4a91641cb5d71cc6ba5297d85efa2
  1400a44a121bb0b8a3ad1a780722a46ae4a0d7101f78986f29aab9688af8302c
  0a7cc1e16b95ddb4da
e_30:
0x013985a6999ae046842851e80d88dae0c26a5b1cab6a70f97d36d41693efcf80
  e5ecfe8fceb61b22afc07140de05f5342dd8c04050afd6649f10e0bf2180f6ff
  4e14562558e21cdd9e
e_31:
0x00dd7f830773ae0a3569af18f7fa31794a413c91b576c48a775bf25b6a078876
  c8bbb247c5169d8871812d70418f43cf56bef6ce6adfc90558610ba732e34471
  07c4c0c56a018f6d63
e_32:
0x06f5b22dfef5b5047297208ef02b482fadf2f7a05fde3ce1a740991176a359ff
  bdb2a781ef01d5b9d5fa38d7ce3bd946bb3ca36d131d3b01e658ce48cb0c16b4
  4acb14896a9e0794a8
e_33:
0x09779469c05944d969e2db181a1caf60dffe3fb23afc7a95d03641b8aeadf0aa
  0c6db009ee6e40c9cee370db20a40be7d2b4e8d3bb5ded36c08c6a236823d175
  269a4209446e8ba161
e_34:
0x094f2f80f6c6c25fb2dbc6b49778ba5768ae8d6e3e355a7782d0360e40fe74fc
  488d1cdf61efd091ecf453900d677009a016a0978ae88a214319432047ff820c
  29aa07cd87f6f118de
e_35:
0x1076373833daf844b5a78fb8d6a87d5bce51be2aa85a8fb9d05aba01e08e527c
  0d336a498fb22a8eabcf73444a5dc80b8e8196d1b6843b1e905ba7e158ddddc0
  80291f2fbb432684af
e_36:
0x06760a326a3b3425d0e8ee8533684d4149d27c221becb781e24786cf9b55cfc2
  1511eb1f3b237a9a8f35c90feb5b059b0540a34e6517412a79b7bb9cd243b070
  846a549d7ab484aa92
e_37:
0x03897dadb1a5b4c58d7c6f0ff099885371d896a6d7546dff0b0ab940d61e77f0
  4922532ef46bf90c018a5e7f148330c17e02318b387772ba8a65626c6275ff4d
  f09f5bf5d8d4dec847
e_38:
0x111a9376b2770c3d32b28b5452058eca6ec30e1b97ecd98d641165b007e96037
  5c1c0cf586dc47829d7f4da0f5494bf13fcf10da1d7630cf3b1e96771bd3e125
  abed5d7a4b07ff2b2f
e_39:
0x00fc4faae2597cd2fc5206a40cb0a70646fb4237727fe75e51e6f6a591a5e2ad
  c28b28b6c47e0fcc0953f9aab4d3daf926249f9930550f55554d6d380c3b4c87
  5a6aa4e1ef525be43e
e_40:
0x0072af98ab6e2c8ba452e0acca6dbc50afe97b037ba3586cf2f3a8f4b70f3934
  62a72d7efcf87f8f94e9941e9998f4f66e989df87822ea5ce094055105827af2
  d5d86ef324cc139811
e_41:
0x10158908b23e827e39978dacbf0d1f489c1f89de0bdc8b6614cf5b1c78c03d01
  fa57d1141e6f21a24d80ff6c596e891c0a5f99a6305820c3ba5192fd18dd9b42
  2976adccdaacc823ba
e_42:
0x0e651105c3a12b4b91b5346cad5de5ff5126c1c2b94c1246882798d44eb0ca93
  655491c753f3492e5eb1097b7a6c88f3e5c064551fa6660460a6275caf7a672c
  0886574c254e8ec0b1
e_43:
0x0040de9ec4386438b63e6cbea88022e58a9163bf374460b3c6dae8887f56882d
  b2fa40e1a0acc723d8e6ada12bc0ca838c932d74e199d6b006b92dd204eaf2e1
  186b6e91434ed6a24e
e_44:
0x053ec95b4b13256c02702930617ab4b3c2d3069bb4d08414c7de5b33578c4ddd
  1bd4dcb3cf18a3ca40206edc917ab98928bdb62df970f3537910dfc2423dcebc
  561ed93b3ed4e0d346
e_45:
0x0167007aacbba10275709297b940b601b1ed49d629e35faee61cf188a6da8ec4
  e39ae91dc326cd54617a5fa3330637c9ab0ed46f32e472eef36f30228bb2c3ad
  3cc03d5d49a8794a50
e_46:
0x0c624cb15846e9faedc2f8cddd3dd894eaee57ed85a76167559fd68e818184df
  146aa913a44ffb7e9c520ab84c6a2ad0ac525cb1bbb00afc02c79603375060b2
  ddeac8eec0e4ce49a7
e_47:
0x07a369e7095b629da43956d18650a88bb0342dabc1e04265ae4133cdd537c3d9
  cdc0b99518aa6e8b6942c4a958d3c7df4a18211c91bc4e9455f28a49c7e0ee07
  dc2f97fd5ce4edf7a6

Appendix D. Test Vectors for Serialization

This appendix gives test vectors for the serialization procedures defined in Section 5. The point vectors are computed for the base points BP and BP' given in Section 4, in the compressed form (C_bit = 1) and in the uncompressed form (C_bit = 0). The scalar vectors are given for all three curves, since Section 5.2 applies to BN462 as well.

In each uncompressed string, the first half is the corresponding compressed string with the three metadata bits cleared, and the second half is the y-coordinate laid out by the rule of step 3 of Section 5.3. Hex strings are broken at a whole number of bytes.

D.1. BLS12-381 Points

G_1 (BP), compressed (48 bytes):

97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac58
6c55e83ff97a1aeffb3af00adb22c6bb

G_1 (BP), uncompressed (96 bytes):

17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac58
6c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4
fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1

G'_2 (BP'), compressed (96 bytes):

93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049
334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051
c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8

G'_2 (BP'), uncompressed (192 bytes):

13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049
334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051
c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8
0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab
3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351a
adfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801

Identity on E: 48 zero bytes with the leading byte set to 0xc0 (C_bit = 1, I_bit = 1) when compressed, and 96 zero bytes with the leading byte set to 0x40 (I_bit = 1) when uncompressed.

Identity on E': 96 zero bytes with the leading byte set to 0xc0 when compressed, and 192 zero bytes with the leading byte set to 0x40 when uncompressed.

  • Note: the point values above are the second entry of each of the valid test vector files distributed with [zkcrypto-bls12-381], whose first entry is the identity; they have been compared byte for byte. The uncompressed values are derived from the same coordinates by the procedure of Section 5.3, and have been checked to deserialize back to those coordinates. The same strings have also been checked against [blst] and [gnark-crypto]: each deserializes to the coordinates given in Section 4.2.1 and serializes back to the same bytes. The BLS12-381 scalars of Appendix D.3 were checked against the same two implementations.

D.2. BLS48-581 Points

G_1 (BP), compressed (73 bytes):

a2af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7
544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d
8c3bce8732315af640

G_1 (BP), uncompressed (146 bytes):

02af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7
544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d
8c3bce8732315af6400cefda44f6531f91f86b3a2d1fb398a488a553c9efeb8a
52e991279dd41b720ef7bb7beffb98aee53e80f678584c3ef22f487f77c2876d
1b2e35f37aef7b926b576dbb5de3e2587a70

G'_2 (BP'), compressed (584 bytes):

8827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7
f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3
f84e19da00fbc6ae340b9b7951c6061ee3f0197a498908aee660dea41b39d138
52b6db908ba2c0b7a449cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c2
2d63334b5b0e205c3354e41607e60750e0570c96c7797eb0738603f1311e4ecd
a088f7b8f35dcef0977a3d1a58677bb037418181df63835d28997eb57b40b9c0
b15dd7595a9f177612f097fc7960910fce3370f2004d914a3c093a038b91c600
b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386699981f9e4
8199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4cbb739c3a1c
53f8cce50be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a
393f8be0cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8
cb4e80bc3f09a7033cbb7feafe01fccc70198f1334e1b2ea1853ad83bc73a8a6
ca9ae237ca7a6d6957ccbab5ab6860161c1dbd19242ffae766f0d2a6d55f028c
bdfbb879d5fea8ef4cded6b3f0b46488156ca55a3e6a07c4973ece2258512069
b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e1c3943a00abfedf16214
a76affa62504f0c3c7630d979630ffd75556a01afa143f1669b36676b47c5705
d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156c4
6ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154de
c34fd0b4ace8bfab

G'_2 (BP'), uncompressed (1168 bytes):

0827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7
f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3
f84e19da00fbc6ae340b9b7951c6061ee3f0197a498908aee660dea41b39d138
52b6db908ba2c0b7a449cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c2
2d63334b5b0e205c3354e41607e60750e0570c96c7797eb0738603f1311e4ecd
a088f7b8f35dcef0977a3d1a58677bb037418181df63835d28997eb57b40b9c0
b15dd7595a9f177612f097fc7960910fce3370f2004d914a3c093a038b91c600
b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386699981f9e4
8199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4cbb739c3a1c
53f8cce50be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a
393f8be0cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8
cb4e80bc3f09a7033cbb7feafe01fccc70198f1334e1b2ea1853ad83bc73a8a6
ca9ae237ca7a6d6957ccbab5ab6860161c1dbd19242ffae766f0d2a6d55f028c
bdfbb879d5fea8ef4cded6b3f0b46488156ca55a3e6a07c4973ece2258512069
b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e1c3943a00abfedf16214
a76affa62504f0c3c7630d979630ffd75556a01afa143f1669b36676b47c5705
d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156c4
6ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154de
c34fd0b4ace8bfab035e2524ff89029d393a5c07e84f981b5e068f1406be8e50
c87549b6ef8eca9a9533a3f8e69c31e97e1ad0333ec719205417300d8c4ab33f
748e5ac66e84069c55d667ffcb732718b60896767811be65ea25c2d05dfdd17a
f8a006f364fc0841b064155f14e4c819a6df98f425ae3a2864f22c1fab8c74b2
618b5bb40fa639f53dccc9e884017d9aa62b3d41faeafeb2398607d0d0374573
6b7a513d339d5ad537b90421ad66eb16722b589d82e2055ab7504fa83420e8c2
70841f6824f47c180d139e3aafc198caa72b679da59ed8226cf3a594eedc58cf
90bee40d209d5a223a9c46916503fa5a88325a2554dc541b43dd93b5a959805f
1129857ed85c77fa238cdce8a1e2ca4e512b64f59f430135945d137b08857fdd
dfcf7a43f47831f982e501370aec25a4621edc0688223fbbd478762b1c2cded3
360dcee23dd8b0e710e122d2742c89b224333fa40dced2817742770ba10d67bd
a503ee5e578fb3d8b8a1e5337316213da92841589d0b36a201dd008523e421ef
b70367669ef2c2fc5030216d5b119d3a480d370514475f7d5c99d0e904115155
36ca3295e5e2f0c1d35d51a652269cbc7c46fc3b8fde68332a526a2a84740284
dc75979e0ff144da6531815fcadc2b75a422ba325e6fba01d72964732fcbf3af
b096b243b1f192c5c3d1892ab24e1dd212fa097d760e2e588b423525ffc7b111
471db936cd566500eb53356c375b5dfa497216452f3024b918b4238059a577e6
f3b39ebfc435faab0906235afa27748d90f7336d8ae5163c1599abf77eea6d65
9045012ab12c0ff323edd3fe4d2d7971

Identity on E: 73 zero bytes with the leading byte set to 0xc0 (C_bit = 1, I_bit = 1) when compressed, and 146 zero bytes with the leading byte set to 0x40 (I_bit = 1) when uncompressed.

Identity on E': 584 zero bytes with the leading byte set to 0xc0 when compressed, and 1168 zero bytes with the leading byte set to 0x40 when uncompressed.

D.3. Scalars

The values below are the boundary cases of Section 5.2: the zero scalar, the smallest nonzero scalar, the largest scalar the procedure accepts, and the smallest value it rejects. The value kappa = 1 distinguishes the byte order, and kappa = r exercises the rejection of values that are not less than r.

BLS12-381 (n_s = 32):

kappa = 0
0000000000000000000000000000000000000000000000000000000000000000
kappa = 1
0000000000000000000000000000000000000000000000000000000000000001
kappa = r - 1
73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000
kappa = r  (deserialization returns INVALID)
73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001

BN462 (n_s = 58):

kappa = 0
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
kappa = 1
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000001
kappa = r - 1
240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908e
e1c201f7fffffffff6ff66fc7bf717f7c0000000002401b007e010800c
kappa = r  (deserialization returns INVALID)
240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908e
e1c201f7fffffffff6ff66fc7bf717f7c0000000002401b007e010800d

BLS48-581 (n_s = 65):

kappa = 0
000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
kappa = 1
000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000001
kappa = r - 1
2386f8a925e2885e233a9ccc1615c0d6c635387a3f0b3cbe003fad6bc972c2e6e7
41969d34c4c92016a85c7cd0562303c4ccbe599467c24da118a5fe6fcd671c00
kappa = r  (deserialization returns INVALID)
2386f8a925e2885e233a9ccc1615c0d6c635387a3f0b3cbe003fad6bc972c2e6e7
41969d34c4c92016a85c7cd0562303c4ccbe599467c24da118a5fe6fcd671c01

Appendix E. Point Serialization for BN462

This appendix is informative. It records why the metadata placement of Section 5 does not fit BN462, which encodings existing BN462 implementations use, and which variants were considered and set aside. It defines no format, standardizes no algorithm, and places no requirement on implementations. Its purpose is to spare implementers of BN462 the effort of rediscovering the constraint described below, and to record the state of practice at the time of writing.

The observations below were obtained by reading the source code of the cited libraries in August 2026. They describe what those libraries emit and accept; no survey of deployed protocols or products was carried out.

E.1. The Constraint

The format of Section 5 carries three metadata bits (C_bit, I_bit, S_bit) in the three most significant bits of the first byte of a serialized coordinate. This requires the canonical representation of an element of GF(p) to leave at least three unused bits in its leading byte.

BN462 has a 462-bit characteristic p, so n = ceil(462 / 8) = 58 bytes, i.e. 464 bits, and only 464 - 462 = 2 bits are unused: one bit short, as stated in Section 5.5.

The same criterion appears in implementations. [MIRACL] selects between two point encodings at compile time using the condition (MBITS - 1) mod 8 <= 4, where MBITS is the bit length of p; this condition holds exactly when the leading byte of a coordinate has three or more unused bits. When it holds, the library packs a compression flag (0x80) and a sign flag (0x20) into that byte, reserving 0x40; when it does not, it falls back to the [SEC1] encoding described in Appendix E.4. For BN462, (462 - 1) mod 8 = 5, so the fallback is used. The diagnosis above is therefore not particular to this document: an implementation supporting BN462 reaches the same conclusion by the same test. (The bit-packing path is additionally gated on a build-time option that the shipped configuration does not enable, so the default build uses the fallback encoding for every curve it supports.)

E.2. Encodings Used by Existing Implementations

Few libraries implement BN462 at all. Among those surveyed for this document, it is absent from [RELIC], [blst], [gnark-crypto], [noble-curves] and [arkworks], each of which does implement BLS12-381. The following do provide it:

Table 4
Implementation G_1 size Metadata placement Byte order
[MIRACL] 117 / 59 bytes [SEC1] type byte big-endian
[pfcurve-js] 117 / 59 bytes [SEC1] type byte big-endian
[zig-pairings] 117 / 59 bytes dedicated flag byte big-endian
[mcl] 116 / 58 bytes none / packed into the coordinate little-endian

Sizes are given as uncompressed / compressed, for G_1. For [MIRACL] and [zig-pairings], the corresponding G'_2 sizes are 233 bytes uncompressed and 117 bytes compressed. The [SEC1] type byte is 0x04 for an uncompressed point and 0x02 or 0x03 for a compressed one; the dedicated flag byte is described in Appendix E.4. The byte order given for [mcl] is its default.

Both leading-byte forms leave the coordinate encoding of Section 5.3 untouched: [MIRACL] writes the coefficients of a GF(p^2) coordinate in decreasing index order, as that section does, and so does [zig-pairings]. The two differ only in what the leading byte means. Note that [SEC1] itself defines point encoding over GF(p) and GF(2^m) only, so its type byte applied to E'(GF(p^2)) is an extension of it by the coefficient rule of Section 5.3 rather than [SEC1] as written.

In [mcl], BN462 is marked deprecated. Its affine serialization writes x followed by y with no metadata at all, its compressed form stores the parity of y in the most significant bit of the most significant byte of the coordinate, and the identity element is represented by an all-zero string. [MIRACL] likewise has no distinct representation for the identity element: its coordinates are zero and the ordinary type byte is emitted, so the identity element is recognized by inspecting the coordinate values rather than by a metadata bit. This differs from the approach of Section 5, which represents the identity element explicitly through I_bit and leaves the decision of whether to accept it to the calling protocol (Section 5.6.2).

Two observations follow. First, the implementations that support BN462 and do not mark it deprecated have converged on a dedicated leading byte rather than on packing metadata into the coordinate; [mcl], which does mark it deprecated, is the exception and packs the sign of y into the coordinate. Second, none of the implementations examined carries the pair C_bit and I_bit in the two spare bits of the coordinate, which is the arrangement Appendix E.3 considers.

E.3. Alternative Considered: Two Metadata Bits

S_bit is meaningful only for compressed points (see step 1 of Section 5.3). An encoding restricted to uncompressed points therefore needs only C_bit and I_bit, which fit in the two spare bits that BN462 does have. The appeal of such an encoding is that BN462 would remain within the same bit-packing family as the other two curves: a decoder written for BLS12-381 could be extended to BN462 by masking two metadata bits instead of three, rather than by acquiring a second, leading-byte parser used only for BN462.

It carries a pitfall. Step 2 of Section 5.4 determines the curve jointly from C_bit and the length of the string. For BN462 (n = 58, and E' represented over GF(p^2)), an uncompressed point on E and a compressed point on E' both occupy 116 bytes. Under a two-bit variant, compressed forms cannot be represented and C_bit is always 0, so the two cases never both arise; but a decoder that reuses step 2 unmodified would accept a 116-byte string with C_bit set and interpret it as a compressed point on E'. An implementation of such a variant would have to reject a nonzero C_bit before the length-based determination in step 2. An encoding with a dedicated leading byte (Appendix E.4) does not have this hazard, because the type byte separates the two cases structurally.

The variant would also forgo point compression, which is the form most protocols transmit. No implementation of it was found.

E.4. Alternative Considered: A Dedicated Leading Byte

Moving the metadata out of the coordinate and into a byte of its own removes the constraint of Appendix E.1 entirely and keeps point compression available, at a cost of one byte. Two mutually incompatible variants are in use:

  • The [SEC1] type byte: 0x04 for an uncompressed point, 0x02 or 0x03 for a compressed point with the value itself carrying the sign of y, followed by the coordinates in big-endian order. This is what [MIRACL] and [pfcurve-js] emit.

  • A flag byte carrying the same three metadata bits as Section 5.3 in the same positions (C_bit at 0x80, I_bit at 0x40, S_bit at 0x20, with the remaining five bits zero and checked on input), followed by the coordinates in big-endian order. This is what [zig-pairings] emits. These are the same bit positions that [MIRACL] uses in its bit-packing path, so this variant amounts to relocating the bit assignment of Section 5 into a leading byte, leaving the rest of the format unchanged.

Both variants yield the same encoded lengths (117 and 59 bytes for G_1, 233 and 117 bytes for G'_2), so length alone does not distinguish them. The leading byte does: an uncompressed point other than the identity element begins with 0x04 in the first variant and 0x00 in the second. A decoder that validates the leading byte rather than skipping over it will therefore reject a string in the other format instead of misparsing it.

E.5. Why This Document Does Not Define a Format

Section 5.5 gives the reasons this document does not specify a BN462 point format. Two of them bear on what is recorded above. No specification examined defines or requires a BN462 point encoding, so the encodings listed here are library conventions rather than a format that a consumer of this document needs; and choosing among them would be encoding design rather than the recording of established practice.

Should BN462 point encodings converge, or should a protocol specification come to require one, a separate specification can define one. Of the encodings recorded above, the [SEC1] type byte is the most widely implemented among the libraries examined, and is the form an implementer is most likely to encounter when interoperating with existing BN462 code.

Appendix F. Adoption Status of Pairing-Friendly Curves with the 100-bit Security Level

BN curves including BN254 that were estimated as the 128-bit security level before exTNFS ensure no more than the 100-bit security level by the effect of exTNFS. The following table summarizes the adoption status of the parameters that Section 4 does not select, namely those whose security level is more than 5 bits below the 128-bit level. Please refer to Section 4.1 for the naming conventions for each curve.

Table 5
Category Name Supported 100-bit Curves
Standard ISO/IEC BN256I
Standard TCG BN256I
Standard FIDO/W3C BN256I
Standard FIDO/W3C BN256D
Library mcl BN254N
Library mcl BN_SNARK1
Library TEPLA BN254B
Library TEPLA BN254N
Library RELIC BN254N
Library RELIC BN256R
Library AMCL BN254N
Library AMCL BN254CX
Library AMCL BN256I
Library Intel IPP BN256I
Library MIRACL BN254N
Library MIRACL BN254CX
Library MIRACL BN256I
Library Adjoint BN_SNARK1
Library Adjoint BN254B
Library Adjoint BN254N
Library Adjoint BN254S1
Library Adjoint BN254S2
Library libsnark BN_SNARK1
Library gnark-crypto BN_SNARK1
Library arkworks BN_SNARK1
Library noble-curves BN_SNARK1
Library constantine BN254N
Library constantine BN_SNARK1
Application Zcash BN_SNARK1
Application Ethereum BN_SNARK1
Application Algorand BN_SNARK1
Application DFINITY BN254N
Application DFINITY BN_SNARK1

Appendix G. Scope of the Security Estimate Review

Section 6 states that the security estimates this document cites were reviewed against subsequent work. This appendix records what that review covered and what it did not.

The review covered work published between January 2020 and August 2026. Peer-reviewed publications were searched through Crossref, the IACR Cryptology ePrint Archive was searched for preprints, and arXiv was used as a cross-check for work appearing in neither. A result was assessed if it bears on the cost of computing discrete logarithms in the fields GF(p^12) or GF(p^48), or in the elliptic curve groups of the curves recommended here, or on the special and tower variants of the number field sieve that apply to them.

The estimates given in Section 3 and Section 4 rest on peer-reviewed results. Preprints were used to find work that had not yet appeared in a peer-reviewed venue; [APT26], the one result of that kind bearing directly on one of the fields these curves use, has since been accepted to CRYPTO 2026.

The review is bounded by its end date: it describes what had been published by August 2026, and says nothing about what has been published since.

Authors' Addresses

Yumi Sakemi (editor)
GMO CONNECT Inc.
Satoru Kanno
GMO CONNECT Inc.
Riad S. Wahby
Carnegie Mellon University