{"id":11841,"date":"2025-05-08T01:14:54","date_gmt":"2025-05-07T23:14:54","guid":{"rendered":"https:\/\/wsj-crypto.com\/?p=11841"},"modified":"2025-05-08T01:14:54","modified_gmt":"2025-05-07T23:14:54","slug":"the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147","status":"publish","type":"post","link":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/","title":{"rendered":"&#8220;The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147&#8221;"},"content":{"rendered":"<p> &#8220;`html<br \/>\n<\/p>\n<div id=\"\">\n<p class=\"chakra-text css-gi02ar\"><em class=\"chakra-text css-0\">Appreciation goes to Marius Van Der Wijden for developing the test case and statetest, and for assisting the Besu team in validating the issue. Furthermore, commendations to the Besu team, the EF security team, and Kevaundray Wedderburn. Additionally, gratitude to Justin Traglia, Marius Van Der Wijden, Benedikt Wagner, and Kevaundray Wedderburn for reviewing the content. Should you have further inquiries or comments, reach out to me on Twitter at <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/twitter.com\/asanso\">@asanso<!-- --><\/a><\/em><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><strong>tl;dr<!-- --><\/strong>: <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/besu.hyperledger.org\/\">Besu Ethereum execution client<!-- --><\/a> version 25.2.2 encountered a <!-- --><strong>consensus flaw<!-- --><\/strong> associated with the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-196\">EIP-196<!-- --><\/a>\/<!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-197\">EIP-197<!-- --><\/a> precompiled contract management for the elliptic curve <!-- --><span class=\"chakra-text css-ons8vw\">alt_bn128<\/span> (also known as bn254). The matter was rectified in release <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/hyperledger\/besu\/releases\/tag\/25.3.0\">25.3.0<!-- --><\/a>.<br \/>\n<!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-30147\">Access<!-- --><\/a> the complete CVE report.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><strong>N.B.<!-- --><\/strong>: A portion of this article necessitates some understanding of elliptic curves (cryptography).<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"introduction\">Introduction<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The <!-- --><span class=\"chakra-text css-ons8vw\">bn254<\/span> curve (also referred to as <!-- --><span class=\"chakra-text css-ons8vw\">alt_bn128<\/span>) serves as an elliptic curve utilized in Ethereum for cryptographic procedures. It facilitates processes such as elliptic curve cryptography, rendering it essential for numerous Ethereum functionalities. Prior to <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-2537\">EIP-2537<!-- --><\/a> and the latest Pectra update, <!-- --><span class=\"chakra-text css-ons8vw\">bn254<\/span> was the exclusive pairing curve endorsed by the Ethereum Virtual Machine (EVM). Both <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-196\">EIP-196<!-- --><\/a> and <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-197\">EIP-197<!-- --><\/a> outline precompiled contracts for effective computations on this curve. For additional information regarding <!-- --><span class=\"chakra-text css-ons8vw\">bn254<\/span>, you may refer to <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/hackmd.io\/@jpw\/bn254\">this link<!-- --><\/a>.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">A notable security weakness in elliptic curve cryptography is the <!-- --><strong>invalid curve attack<!-- --><\/strong>, initially proposed in the document <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/www.iacr.org\/archive\/crypto2000\/18800131\/18800131.pdf\">\u201cDifferential fault attacks on elliptic curve cryptosystems\u201d<!-- --><\/a>. This assault targets the use of points not residing on the accurate elliptic curve, potentially resulting in vulnerabilities within cryptographic protocols. For non-prime order curves (like those used in pairing-based cryptography and in <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi>G<!-- --><\/mi><mn>2<!-- --><\/mn><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">G_2<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8333em;vertical-align:-0.15em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">G<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> for <!-- --><span class=\"chakra-text css-ons8vw\">bn254<\/span>), it becomes particularly vital that the point <!-- --><strong>is within the appropriate subgroup<!-- --><\/strong>. If the point fails to belong to the designated subgroup, the cryptographic procedure may be influenced, potentially undermining the security of systems that depend on elliptic curve cryptography.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">To ascertain if a point <!-- --><span class=\"chakra-text css-ons8vw\">P<\/span> is legitimate in elliptic curve cryptography, it must be confirmed that the point is situated on the curve and is part of the correct subgroup. This verification is especially crucial when the point <!-- --><span class=\"chakra-text css-ons8vw\">P<\/span> originates from an untrusted or possibly hostile source, as invalid or purposefully designed points can lead to security flaws. Below is pseudocode illustrating this procedure:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-python\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># Pseudocode for verifying if point P is valid<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">def<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">is_valid_point<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">if<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">not<!-- --><\/span><span> is_on_curve<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>    \n<!-- --><\/span><span>        <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">False<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">if<!-- --><\/span><span> <!--\n``````html\n--><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">not<!-- --><\/span><span> is_in_subgroup<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>        <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">False<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">True<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"subgroup-membership-checks\">Subgroup membership verifications<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">As noted previously, when handling any point of uncertain origin, it is essential to ascertain that it belongs to the appropriate subgroup, in addition to confirming that the point is situated on the correct curve. For <!-- --><span class=\"chakra-text css-ons8vw\">bn254<\/span>, this validation is only required for <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi>G<!-- --><\/mi><mn>2<!-- --><\/mn><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">G_2<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8333em;vertical-align:-0.15em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">G<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>, since <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi>G<!-- --><\/mi><mn>1<!-- --><\/mn><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">G_1<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8333em;vertical-align:-0.15em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">G<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> is of prime order. A simple technique to verify membership in <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>G<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">G<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.6833em\"\/><span class=\"mord mathnormal\">G<!-- --><\/span><\/span><\/span><\/span><\/span> is to multiply a point by <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>r<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">r<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.4306em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.02778em\">r<!-- --><\/span><\/span><\/span><\/span><\/span>, where <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>r<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">r<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.4306em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.02778em\">r<!-- --><\/span><\/span><\/span><\/span><\/span> represents the <!-- --><em class=\"chakra-text css-0\">cofactor<!-- --><\/em> of the curve, which is the ratio of the curve&#8217;s order to the base point&#8217;s order.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Nevertheless, this method can be prohibitive in practice due to the substantial size of the prime <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>r<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">r<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.4306em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.02778em\">r<!-- --><\/span><\/span><\/span><\/span><\/span>, particularly for <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi>G<!-- --><\/mi><mn>2<!-- --><\/mn><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">G_2<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8333em;vertical-align:-0.15em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">G<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.3011em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.15em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>. In 2021, <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eprint.iacr.org\/2021\/1130.pdf\">Scott introduced<!-- --><\/a> a quicker method for subgroup membership verification on BLS12 curves employing an easily computable <!-- --><em class=\"chakra-text css-0\">endomorphism<!-- --><\/em>, expediting the process by 2\u00d7, 4\u00d7, and 4\u00d7 for various groups (<!-- --><strong>this approach is detailed in <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-2537\">EIP-2537<!-- --><\/a> for efficient subgroup verifications, as outlined in <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/assets\/eip-2537\/fast_subgroup_checks\">this document<!-- --><\/a><\/strong>).<br \/>\nSubsequently, Dai et al. <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eprint.iacr.org\/2022\/348.pdf\">extended Scott&#8217;s method<!-- --><\/a> to accommodate a wider variety of curves, including BN curves, diminishing the number of operations necessary for subgroup membership checks. In some instances, the method can be almost cost-free. Koshelev also presented a technique for non-pairing-friendly curves <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eprint.iacr.org\/2022\/037.pdf\">utilizing the Tate pairing<!-- --><\/a>, which was ultimately<br \/>\n&#8220;&#8220;&#8220;html<br \/>\nfurther <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eprint.iacr.org\/2024\/1790.pdf\">expanded to pairing-friendly curves.<!-- --><\/a><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"the-real-slim-shady\">The Genuine Slim Shady<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">As illustrated in the timeline at the conclusion of this article, we received a notification regarding a flaw impacting <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-2537\">Pectra EIP-2537<!-- --><\/a> on Besu, submitted through the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/cantina.xyz\/competitions\/pectra\">Pectra Audit Competition<!-- --><\/a>. We are only briefly addressing that concern here, in case the initial reporter wishes to delve into it further. <!-- --><strong>This article specifically addresses the BN254 <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-196\">EIP-196<!-- --><\/a>\/<!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-197\">EIP-197<!-- --><\/a> vulnerability<!-- --><\/strong>.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The initial reporter noted that, in Besu, the <!-- --><span class=\"chakra-text css-ons8vw\">is_in_subgroup<\/span> validation was carried out prior to the <!-- --><span class=\"chakra-text css-ons8vw\">is_on_curve<\/span> verification. Here&#8217;s an example of how that could appear:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-python\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># Pseudocode for validating point P<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">def<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">is_valid_point<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">if<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">not<!-- --><\/span><span> is_in_subgroup<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>    \n<!-- --><\/span><span>        <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">if<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">not<!-- --><\/span><span> is_on_curve<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>            <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">False<!-- --><\/span><span>  \n<!-- --><\/span><span>        <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">False<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">True<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Fascinated by the previously mentioned matter on the BLS curve, we opted to examine the Besu code for the BN curve. To my utter astonishment, we discovered something <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/hyperledger\/besu-native\/blob\/6a414b4d1299b2e4c89ba7c6c3585e14bea4e230\/gnark\/gnark-jni\/gnark-eip-196.go#L301\"><strong>akin to this<!-- --><\/strong><\/a>:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-python\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># Pseudocode for validating point P<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">def<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">is_valid_point<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">if<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">not<!-- --><\/span><span> is_in_subgroup<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>P<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>    \n<!-- --><\/span><span>        <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">False<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">return<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">True<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Hold on, what? Where is the <!-- --><span class=\"chakra-text css-ons8vw\">is_on_curve<\/span> validation? Precisely\u2014<!-- --><strong>there&#8217;s none!!!<!-- --><\/strong><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Now, to potentially circumvent the <!-- --><span class=\"chakra-text css-ons8vw\">is_valid_point<\/span> function, all one would need is to present a point <!-- --><strong>that exists within the appropriate subgroup but isn&#8217;t genuinely on the curve<!-- --><\/strong>.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><strong>But hold on\u2014is that even feasible?<!--\n``````html\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Indeed, but solely for specific, meticulously selected curves. In particular, when two curves are <!-- --><em class=\"chakra-text css-0\">isomorphic<!-- --><\/em>, they possess the identical group structure, signifying that you could fabricate a point from the isomorphic curve that meets subgroup requirements but does not reside on the desired curve.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Clever, right?<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"did-you-say-isomorpshism\">Did you mention isomorphism?<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><em class=\"chakra-text css-0\">You can bypass this section if you&#8217;re uninterested in the specifics\u2014we&#8217;re about to delve a little deeper into the mathematics.<!-- --><\/em><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Let <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi mathvariant=\"double-struck\">F<!-- --><\/mi><mi>q<!-- --><\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">mathbb{F}_q<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.975em;vertical-align:-0.2861em\"\/><span class=\"mord\"><span class=\"mord mathbb\">F<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.1514em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right:0.03588em\">q<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.2861em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> be a finite field with a characteristic that differs from 2 and 3, meaning <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>q<!-- --><\/mi><mo>=<!-- --><\/mo><msup><mi>p<!-- --><\/mi><mi>f<!-- --><\/mi><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">q = p^f<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.03588em\">q<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">=<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:1.0435em;vertical-align:-0.1944em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">p<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8491em\"><span style=\"top:-3.063em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right:0.10764em\">f<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> for some prime <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>p<!-- --><\/mi><mo>\u2265<!-- --><\/mo><mn>5<!-- --><\/mn><\/mrow><annotation encoding=\"application\/x-tex\">p geq 5<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8304em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\">p<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">\u2265<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.6444em\"\/><span class=\"mord\">5<!-- --><\/span><\/span><\/span><\/span><\/span> and integer <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>f<!-- --><\/mi><mo>\u2265<!-- --><\/mo><mn>1<!-- --><\/mn><\/mrow><annotation encoding=\"application\/x-tex\">f geq 1<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8889em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.10764em\">f<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">\u2265<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.6444em\"\/><span class=\"mord\">1<!-- --><\/span><\/span><\/span><\/span><\/span>. We examine elliptic curves <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>E<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">E<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.6833em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05764em\">E<!-- --><\/span><\/span><\/span><\/span><\/span> over <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi mathvariant=\"double-struck\">F<!-- --><\/mi><mi>q<!-- --><\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">mathbb{F}_q<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.975em;vertical-align:-0.2861em\"\/><span class=\"mord\"><span class=\"mord mathbb\">F<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.1514em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right:0.03588em\">q<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.2861em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> defined by the concise Weierstra\u00df equation:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\"><semantics><mrow><msup><mi>y<!-- --><\/mi><mn>2<!-- --><\/mn><\/msup><mo>=<!-- --><\/mo><msup><mi>x<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><mo>+<!-- --><\/mo><mi>A<!-- --><\/mi><mi>x<!-- --><\/mi><mo>+<!-- --><\/mo><mi>B<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">y^2 = x^3 + A x + B   <!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:1.0585em;vertical-align:-0.1944em\"\/><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.03588em\">y<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">=<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.9474em;vertical-align:-0.0833em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><br \/>\n&#8220;&#8220;&#8220;html<br \/>\n<span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.7667em;vertical-align:-0.0833em\"\/><span class=\"mord mathnormal\">A<!-- --><\/span><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.6833em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05017em\">B<!-- --><\/span><\/span><\/span><\/span><\/span><\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">where <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>A<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">A<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.6833em\"\/><span class=\"mord mathnormal\">A<!-- --><\/span><\/span><\/span><\/span><\/span> and <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>B<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">B<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.6833em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05017em\">B<!-- --><\/span><\/span><\/span><\/span><\/span> are constants that fulfill <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>4<!-- --><\/mn><msup><mi>A<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><mo>+<!-- --><\/mo><mn>27<!-- --><\/mn><msup><mi>B<!-- --><\/mi><mn>2<!-- --><\/mn><\/msup><mo mathvariant=\"normal\">\u2260<!-- --><\/mo><mn>0<!-- --><\/mn><\/mrow><annotation encoding=\"application\/x-tex\">4A^3 + 27B^2 neq 0<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.8974em;vertical-align:-0.0833em\"\/><span class=\"mord\">4<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\">A<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em\"><span style=\"top:-3.063em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:1.0085em;vertical-align:-0.1944em\"\/><span class=\"mord\">27<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.05017em\">B<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em\"><span style=\"top:-3.063em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\"><span class=\"mrel\"><span class=\"mord vbox\"><span class=\"thinbox\"><span class=\"rlap\"><span class=\"strut\" style=\"height:0.8889em;vertical-align:-0.1944em\"\/><span class=\"inner\"><span class=\"mord\"><span class=\"mrel\">\ue020<!-- --><\/span><\/span><\/span><span class=\"fix\"\/><\/span><\/span><\/span><\/span><span class=\"mrel\">=<!-- --><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.6444em\"\/><span class=\"mord\">0<!-- --><\/span><\/span><\/span><\/span><\/span>.^[This restriction guarantees the curve is <!-- --><strong>non-singular<!-- --><\/strong>; should it be disregarded, the equation would depict a singular point devoid of a well-defined tangent, hindering meaningful self-addition. In such scenarios, the entity is not technically an elliptic curve.]<!-- --><\/p>\n<p><!-- --><\/p>\n<h4 class=\"chakra-heading css-1u9mv6z\" id=\"curve-isomorphisms\">Curve Isomorphisms<!-- --><\/h4>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Two elliptic curves are deemed <!-- --><strong>isomorphic<!-- --><\/strong>^[To leverage the vulnerabilities mentioned here, we genuinely desire <!-- --><strong>isomorphic<!-- --><\/strong> curves, not solely <!-- --><strong>isogenous<!-- --><\/strong> curves.] if they can be connected via an affine alteration of variables. Such modifications maintain the group structure and assure that point addition stays coherent. It can be demonstrated that the sole feasible transformations between two curves in short Weierstra\u00df form take the following shape:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\"><semantics><mrow><mo stretchy=\"false\">(<!-- --><\/mo><mi>x<!-- --><\/mi><mo separator=\"true\">,<!-- --><\/mo><mi>y<!-- --><\/mi><mo stretchy=\"false\">)<!-- --><\/mo><mo>\u21a6<!-- --><\/mo><mo stretchy=\"false\">(<!-- --><\/mo><msup><mi>e<!-- --><\/mi><mn>2<!-- --><\/mn><\/msup><mi>x<!-- --><\/mi><mo separator=\"true\">,<!-- --><\/mo><msup><mi>e<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><mi>y<!-- --><\/mi><mo stretchy=\"false\">)<!-- --><\/mo><\/mrow><annotation encoding=\"application\/x-tex\">(x, y) mapsto (e^2 x, e^3 y)<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:1em;vertical-align:-0.25em\"\/><span class=\"mopen\">(<!-- --><\/span><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"mpunct\">,<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.1667em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.03588em\">y<!-- --><\/span><span class=\"mclose\">)<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">\u21a6<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:1.1141em;vertical-align:-0.25em\"\/><span class=\"mopen\">(<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\">e<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"mpunct\">,<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.1667em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">e<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right:0.03588em\">y<!-- --><\/span><span class=\"mclose\">)<!-- --><\/span><\/span><\/span><\/span><\/span><\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">for some nonzero <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>e<!-- --><\/mi><mo>\u2208<!-- --><\/mo> \n&#8220;&#8220;&#8220;html\n<msub><mi mathvariant=\"double-struck\">F<!-- --><\/mi><mi>q<!-- --><\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">e in mathbb{F}_q<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.5782em;vertical-align:-0.0391em\"\/><span class=\"mord mathnormal\">e<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">\u2208<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.975em;vertical-align:-0.2861em\"\/><span class=\"mord\"><span class=\"mord mathbb\">F<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.1514em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right:0.03588em\">q<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.2861em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>. Utilizing this alteration on the curve equation yields:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\"><semantics><mrow><msup><mi>y<!-- --><\/mi><mn>2<!-- --><\/mn><\/msup><mo>=<!-- --><\/mo><msup><mi>x<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><mo>+<!-- --><\/mo><mi>A<!-- --><\/mi><msup><mi>e<!-- --><\/mi><mn>4<!-- --><\/mn><\/msup><mi>x<!-- --><\/mi><mo>+<!-- --><\/mo><mi>B<!-- --><\/mi><msup><mi>e<!-- --><\/mi><mn>6<!-- --><\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">y^2 = x^3 + A e^{4} x + B e^{6}<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:1.0585em;vertical-align:-0.1944em\"\/><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.03588em\">y<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">=<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.9474em;vertical-align:-0.0833em\"\/><span class=\"mord\"><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.9474em;vertical-align:-0.0833em\"\/><span class=\"mord mathnormal\">A<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\">e<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">4<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord mathnormal\">x<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:0.8641em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05017em\">B<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\">e<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8641em\"><span style=\"top:-3.113em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">6<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The <!-- --><strong><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>j<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">j<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.854em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05724em\">j<!-- --><\/span><\/span><\/span><\/span><\/span>-invariant<!-- --><\/strong> of a curve is characterized as:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"math math-display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\"><semantics><mrow><mi>j<!-- --><\/mi><mo>=<!-- --><\/mo><mn>1728<!-- --><\/mn><mfrac><mrow><mn>4<!-- --><\/mn><msup><mi>A<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><\/mrow><mrow><mn>4<!-- --><\/mn><msup><mi>A<!-- --><\/mi><mn>3<!-- --><\/mn><\/msup><mo>+<!-- --><\/mo><mn>27<!-- --><\/mn><msup><mi>B<!-- --><\/mi><mn>2<!-- --><\/mn><\/msup><\/mrow><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">j = 1728 frac{4A^3}{4A^3 + 27B^2}<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.854em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05724em\">j<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><span class=\"mrel\">=<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2778em\"\/><\/span><span class=\"base\"><span class=\"strut\" style=\"height:2.2604em;vertical-align:-0.7693em\"\/><span class=\"mord\">1728<!-- --><\/span><span class=\"mord\"><span class=\"mopen nulldelimiter\"\/><span class=\"mfrac\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:1.4911em\"><span style=\"top:-2.314em\"><span class=\"pstrut\" style=\"height:3em\"\/><span class=\"mord\"><span class=\"mord\">4<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\">A<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.7401em\"><span style=\"top:-2.989em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mbin\">+<!-- --><\/span><span class=\"mspace\" style=\"margin-right:0.2222em\"\/><span class=\"mord\">27<!-- --><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right:0.05017em\">B<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.7401em\"><span style=\"top:-2.989em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span style=\"top:-3.23em\"><span class=\"pstrut\" style=\"height:3em\"\/><span class=\"frac-line\" style=\"border-bottom-width:0.04em\"\/><\/span><span style=\"top:-3.677em\"><span class=\"pstrut\" style=\"height:3em\"\/><span class=\"mord\"><span class=\"mord\">4<!-- --><\/span><span class=\"mord\"><br \/>\n&#8220;&#8220;&#8220;html<br \/>\n<span class=\"mord mathnormal\">A<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.8141em\"><span style=\"top:-3.063em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<!-- --><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.7693em\"><span\/><\/span><\/span><\/span><\/span><span class=\"mclose nulldelimiter\"\/><\/span><\/span><\/span><\/span><\/span><\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Each component of <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msub><mi mathvariant=\"double-struck\">F<!-- --><\/mi><mi>q<!-- --><\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">mathbb{F}_q<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.975em;vertical-align:-0.2861em\"\/><span class=\"mord\"><span class=\"mord mathbb\">F<!-- --><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.1514em\"><span style=\"top:-2.55em;margin-left:0em;margin-right:0.05em\"><span class=\"pstrut\" style=\"height:2.7em\"\/><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right:0.03588em\">q<!-- --><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<!-- --><\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height:0.2861em\"><span\/><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> can be a potential <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>j<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">j<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.854em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05724em\">j<!-- --><\/span><\/span><\/span><\/span><\/span>-invariant.^[Both BLS and BN curves exhibit a j-invariant corresponding to 0, which is <!-- --><strong>truly unique<!-- --><\/strong>.] When two elliptic curves possess the identical <!-- --><span class=\"math math-inline\"><span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>j<!-- --><\/mi><\/mrow><annotation encoding=\"application\/x-tex\">j<!-- --><\/annotation><\/semantics><\/math><\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.854em;vertical-align:-0.1944em\"\/><span class=\"mord mathnormal\" style=\"margin-right:0.05724em\">j<!-- --><\/span><\/span><\/span><\/span><\/span>-invariant, they are either <!-- --><strong>isomorphic<!-- --><\/strong> (in the previously mentioned sense) or they are <!-- --><strong>twists<!-- --><\/strong> of one another.^[We will not delve into twists here, as they are irrelevant to this context.]<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"exploitability\">Exploitability<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">At this juncture, the remaining task is to formulate a suitable point on a meticulously selected curve, and voil\u00e0\u2014<!-- --><em class=\"chakra-text css-0\">le jeu est fait<!-- --><\/em>.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">You may experiment with the test vector via <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/hyperledger\/besu-native\/blob\/main\/gnark\/src\/test\/resources\/org\/hyperledger\/besu\/nativelib\/gnark\/eip196_pairing.csv#L16\">this link<!-- --><\/a> and have fun.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"conclusion\">Conclusion<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">In this article, we examined the vulnerability present in Besu&#8217;s execution of elliptic curve verifications. This defect, if leveraged, could permit an assailant to forge a point that passes subgroup membership tests but does not actually reside on the valid curve. The Besu developers have subsequently rectified this concern in release 25.3.0. While the problem was confined to Besu and did not impact other clients, such discrepancies elevate significant issues for multi-client frameworks like Ethereum. A misalignment in cryptographic verifications among clients can lead to divergent actions\u2014where one client endorses a transaction or block that another dismisses. This type of inconsistency can jeopardize consensus and erode confidence in the network\u2019s uniformity, particularly when subtle errors go unnoticed across various implementations. This incident underscores the necessity for thorough testing and strong security protocols\u2014especially within blockchain environments, where even trivial cryptographic errors can cascade into considerable systemic weaknesses. Initiatives such as the Pectra audit competition play an essential role in proactively uncovering these problems before they transition to production. By promoting diverse scrutiny of the code, such endeavors enhance the overall stability of the ecosystem.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"timeline\">Timeline<!-- --><\/h2>\n<p><!-- --><\/p>\n<ul role=\"list\" class=\"css-1onhfjo\">\n<li class=\"css-cvpopp\">15-03-2025 \u2013 Issue impacting Pectra EIP-2537 on Besu reported through the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/cantina.xyz\/competitions\/pectra\">Pectra Audit Competition<!-- --><\/a>.<!-- --><\/li>\n<li class=\"css-cvpopp\">17-03-2025 \u2013 Identified and communicated the EIP-196\/EIP-197 concern to the Besu team.<!-- --><\/li>\n<li class=\"css-cvpopp\">17-03-2025 \u2013 Marius Van Der Wijden established a test case and statetest to replicate the issue.<!-- --><\/li>\n<li class=\"css-cvpopp\">17-03-2025 \u2013 The Besu team swiftly recognized and <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/hyperledger\/besu-native\/commit\/73a307cd30f009db4ddfd8c79af5548fe51dfdda#diff-9622b17a1165cbfa1780cbc92d116bcbbcb4136daf03dd3d0aa4f9d77373a2dd\">resolved<!-- --><\/a> the issue.<!-- --><\/li>\n<\/ul>\n<\/div>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><br \/>\n<br \/><br \/>\n<br \/><a href=\"https:\/\/blog.ethereum.org\/en\/2025\/05\/07\/the-curious-case\">Source link <\/a><br \/>\n&#8220;`<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;`html Appreciation goes to Marius Van Der Wijden for developing the test case and statetest, and for assisting the Besu team in validating the issue. Furthermore, commendations to the Besu team, the EF security team, and Kevaundray Wedderburn. Additionally, gratitude to Justin Traglia, Marius Van Der Wijden, Benedikt Wagner, and Kevaundray Wedderburn for reviewing the<\/p>\n","protected":false},"author":3,"featured_media":8282,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[2356],"class_list":{"0":"post-11841","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-ethereum","8":"tag-return-a-list-of-comma-separated-tags-from-this-title-cve-2025-30147-the-curious-case-of-subgroup-check-on-besu"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>&quot;The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147&quot; - WSJ-Crypto<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"&quot;The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147&quot; - WSJ-Crypto\" \/>\n<meta property=\"og:description\" content=\"&#8220;`html Appreciation goes to Marius Van Der Wijden for developing the test case and statetest, and for assisting the Besu team in validating the issue. Furthermore, commendations to the Besu team, the EF security team, and Kevaundray Wedderburn. Additionally, gratitude to Justin Traglia, Marius Van Der Wijden, Benedikt Wagner, and Kevaundray Wedderburn for reviewing the\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/\" \/>\n<meta property=\"og:site_name\" content=\"WSJ-Crypto\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-07T23:14:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2100\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"wsjcrypto\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"wsjcrypto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/\",\"url\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/\",\"name\":\"\\\"The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147\\\" - WSJ-Crypto\",\"isPartOf\":{\"@id\":\"https:\/\/wsj-crypto.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"datePublished\":\"2025-05-07T23:14:54+00:00\",\"author\":{\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage\",\"url\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"contentUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg\",\"width\":2100,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wsj-crypto.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"&#8220;The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wsj-crypto.com\/#website\",\"url\":\"https:\/\/wsj-crypto.com\/\",\"name\":\"WSJ-Crypto\",\"description\":\"Just Another Crypto News Website\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wsj-crypto.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\",\"name\":\"wsjcrypto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"caption\":\"wsjcrypto\"},\"url\":\"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\"The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147\" - WSJ-Crypto","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/","og_locale":"it_IT","og_type":"article","og_title":"\"The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147\" - WSJ-Crypto","og_description":"&#8220;`html Appreciation goes to Marius Van Der Wijden for developing the test case and statetest, and for assisting the Besu team in validating the issue. Furthermore, commendations to the Besu team, the EF security team, and Kevaundray Wedderburn. Additionally, gratitude to Justin Traglia, Marius Van Der Wijden, Benedikt Wagner, and Kevaundray Wedderburn for reviewing the","og_url":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/","og_site_name":"WSJ-Crypto","article_published_time":"2025-05-07T23:14:54+00:00","og_image":[{"width":2100,"height":900,"url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","type":"image\/jpeg"}],"author":"wsjcrypto","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"wsjcrypto","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/","url":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/","name":"\"The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147\" - WSJ-Crypto","isPartOf":{"@id":"https:\/\/wsj-crypto.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage"},"image":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage"},"thumbnailUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","datePublished":"2025-05-07T23:14:54+00:00","author":{"@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7"},"breadcrumb":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#primaryimage","url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","contentUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/02\/eth-org.jpeg","width":2100,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/05\/08\/the-intriguing-mystery-of-subgroup-verification-in-besu-explaining-cve-2025-30147\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wsj-crypto.com\/"},{"@type":"ListItem","position":2,"name":"&#8220;The Intriguing Mystery of Subgroup Verification in Besu: Explaining CVE-2025-30147&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/wsj-crypto.com\/#website","url":"https:\/\/wsj-crypto.com\/","name":"WSJ-Crypto","description":"Just Another Crypto News Website","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wsj-crypto.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7","name":"wsjcrypto","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","caption":"wsjcrypto"},"url":"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/11841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/comments?post=11841"}],"version-history":[{"count":3,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/11841\/revisions"}],"predecessor-version":[{"id":11847,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/11841\/revisions\/11847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media\/8282"}],"wp:attachment":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media?parent=11841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/categories?post=11841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/tags?post=11841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}