BN254 est la courbe y² = x³ + 3 sur un corps premier de 254 bits, issue de la famille de courbes adaptées aux couplages de Barreto et Naehrig (2005), de degré de plongement 12. Son couplage envoie G1 (les points de cette courbe) et G2 (les points d’une tordue définie sur GF(p²)) dans GF(p¹²), ce dont ont besoin les vérificateurs zk-SNARK et les signatures agrégées.
Ethereum a ajouté, lors de la mise à niveau Byzantium (EIP-196, EIP-197), des contrats précompilés pour l’addition, la multiplication scalaire et la vérification de couplages sur cette courbe, et les vérificateurs Groth16 et PLONK sur Ethereum reposent sur ces précompilés. Les circuits Sprout d’origine de Zcash l’utilisaient aussi.
Sa sécurité était estimée à 128 bits lorsqu’elle a été choisie, mais le crible algébrique par tours étendu (exTNFS, Kim et Barbulescu, 2016) a abaissé l’estimation à environ 100 bits (Barbulescu et Duquesne, 2019). Les nouveaux projets utilisent plutôt BLS12-381.