{"id":97,"date":"2025-02-26T19:55:00","date_gmt":"2025-02-26T11:55:00","guid":{"rendered":"http:\/\/www.triode.cc\/?p=97"},"modified":"2025-09-28T11:15:08","modified_gmt":"2025-09-28T03:15:08","slug":"isogeny1-sidh","status":"publish","type":"post","link":"https:\/\/www.triode.cc\/index.php\/2025\/02\/26\/isogeny1-sidh\/","title":{"rendered":"\u540c\u6e90\uff081\uff09\u2014\u2014SIDH"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u53c2\u8003\u8d44\u6599<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/arxiv.org\/pdf\/1711.04062\">Mathematics of Isogeny Based Cryptography<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/eprint.iacr.org\/2019\/1321.pdf\">Supersingular isogeny key exchange for beginners<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/link.springer.com\/book\/10.1007\/b97292\">Elliptic Curves | SpringerLink<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/tangcuxiaojikuai.xyz\/post\/e06139e7.html\">Isogeny | \u7cd6\u918b\u5c0f\u9e21\u5757\u7684blog<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/languag3.github.io\/2025\/02\/04\/isogeny\/#sidh\">isogeny | languag3<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/huangx607087.online\/2025\/02\/01\/ECCNotes4\/\">ECCNotes4 &#8211; huangx607087&#8217;s Blog<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u524d\u7f6e\u77e5\u8bc6<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u8d85\u5947\u5f02\uff08supersingular\uff09\u692d\u5706\u66f2\u7ebf<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\\(GF(p^r)\\)\u4e0b\u7684\u692d\u5706\u66f2\u7ebf\\(E\\)\uff0c\u82e5\\(|E|\\equiv 1\\pmod{p}\\)\uff0c\u5219\u79f0\u8be5\u66f2\u7ebf\u4e3a\u8d85\u5947\u5f02\u692d\u5706\u66f2\u7ebf<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">j-\u4e0d\u53d8\u91cf\uff08j-invariant\uff09<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u4e00\u6761\u7531\u65b9\u7a0b\\(y^2=x^3+ax+b\\)\u5b9a\u4e49\u7684\u692d\u5706\u66f2\u7ebf\\(E\\)\uff0c\u5176\\(j\\)-\u4e0d\u53d8\u91cf\u7684\u5b9a\u4e49\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>j(E)= 1728\\cdot\\frac{4a^3}{4a^3+27b^2}<br>$$<\/p>\n\n\n\n<p>\u5f53\u4e14\u4ec5\u5f53\u4e24\u6761\u5b9a\u4e49\u5728\u4ee3\u6570\u95ed\u5305\\(\\overline{k}\\)\u4e0a\u7684\u66f2\u7ebf\\(E\\)\u4e0e\\(E&#8217;\\)\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u76f8\u540c\u65f6\u8fd9\u4e24\u6761\u66f2\u7ebf\u540c\u6784\uff0c\u5373\u5b58\u5728\u70b9\u5230\u70b9\u4e4b\u95f4\u7684\u53cc\u5c04\\(\\phi\\)\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>\\phi:E\\mapsto E&#8217;<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7\u53c2\u8003\u8d44\u65992\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\u5bf9\u4e8eSIDH\uff0c\u5176\u4e3b\u8981\u4f5c\u7528\u4e8e\u6709\u9650\u57df\\(GF(p)\\)\u7684\u4e8c\u6b21\u6269\u5c55\uff08\u5373\\(GF(p^2)\\)\uff0c\u5176\u4e2d\\(p\\equiv 3\\pmod{4}\\)\uff09\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u901a\u5e38\u5c06\u8fd9\u4e2a\u4e8c\u6b21\u6269\u5c55\u57df\u4e2d\u7684\u5143\u7d20\u8868\u793a\u4e3a\\(u+vi\\)\uff08\u5176\u4e2d\\(u,v\\in GF(p)\\)\uff0c\\(i^2\\equiv-1\\pmod{p}\\)\uff09\uff0c\u5b9a\u4e49\u5728\u8fd9\u4e2a\u4e8c\u6b21\u6269\u5c55\u57df\u4e0a\u7684\u8d85\u5947\u5f02\\(j\\)-\u4e0d\u53d8\u91cf\u7684\u4e2a\u6570\u4e3a\\(\\lfloor p\/12\\rfloor+z\\)\uff0c\u8fd9\u4e9b\u8d85\u5947\u5f02\\(j\\)-\u4e0d\u53d8\u91cf\u6bcf\u4e00\u4e2a\u90fd\u5bf9\u5e94\u4e00\u6761\u540c\u6784\u610f\u4e49\u4e0b\u7684\u8d85\u5947\u5f02\u66f2\u7ebf\uff0c\u5176\u4e2d\\(z\\in\\{0,1,2\\}\\)\uff0c\\(z\\)\u7684\u53d6\u503c\u53d6\u51b3\u4e8e\\(p\\mod 12\\)\uff0c\u5177\u4f53\u5982\u4e0b\uff08\u53c2\u8003\u8d44\u65993\uff0cP264\uff09\uff1a<\/p>\n\n\n\n<p>$$<br>z=\\begin{cases} 0&amp;,p\\equiv1\\pmod{12}\\\\ 1&amp;,p\\equiv5\\pmod{12}\\\\ 1&amp;,p\\equiv7\\pmod{12}\\\\ 2&amp;,p\\equiv11\\pmod{12}\\\\ \\end{cases}<br>$$<\/p>\n\n\n\n<p>\u4f8b\u5982\u5bf9\u4e8e\u53c2\u8003\u8d44\u65992\u4e2d\u7684\u4f8b\u5b50\uff08\u5373\\(p=431\\)\uff09\uff0c\\(GF(p^2)\\)\u4e2d\u7684\\(\\lfloor p\/12\\rfloor+2=37\\)\u4e2a\\(j\\)-\u4e0d\u53d8\u91cf\u5206\u522b\u5bf9\u5e94\u4e00\u6761\u540c\u6784\u610f\u4e49\u4e0b\u7684\u8d85\u5947\u5f02\u66f2\u7ebf\uff0c\u8fd9\u4e9b\\(j\\)-\u4e0d\u53d8\u91cf\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"533\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-98\"  sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u5173\u4e8e\\(j\\)-\u4e0d\u53d8\u91cf\u4e0e\u66f2\u7ebf\u95f4\u540c\u6784\u7684\u5173\u7cfb\uff0c\u53c2\u8003\u8d44\u65992\u7ed9\u51fa\u4e86\u4e00\u4e2a\u4f8b\u5b50\uff1a\u5bf9\u4e8e\\(GF(431^2)\\)\u4e0b\u7684\u4e24\u6761\u66f2\u7ebf\uff1a<\/p>\n\n\n\n<p>$$<br>\\begin{aligned} E_1:y^2=x^3+(208i+161)x^2+x\\\\ E_2:y^2=x^3+(172i+162)x^2+x\\\\ \\end{aligned}<br>$$<\/p>\n\n\n\n<p>\u53ef\u4ee5\u8ba1\u7b97\u51fa\\(j(E_1)=j(E_2)=364i+304\\)\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u4ee3\u7801\u6765\u6c42\u51fa\\(E_1\\)\u5230\\(E_2\\)\u7684\u540c\u6784\u6620\u5c04\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>p = 431\n\nR.&lt;i> = GF(p^2, modulus=&#91;1, 0, 1&#93;)\nE1 = EllipticCurve(R, &#91;0, 208*i+161, 0, 1, 0&#93;)\nE2 = EllipticCurve(R, &#91;0, 172*i+162, 0, 1, 0&#93;)\n\nprint(E1.j_invariant())\nprint(E2.j_invariant())\n\nphi = E1.isomorphism_to(E2)\nprint(phi.rational_maps())<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">431<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E1 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">208<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">161<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">172<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">162<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E1<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E2<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E1<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isomorphism_to<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">rational_maps<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>\\begin{aligned} \\phi:&amp;E_1\\mapsto E_2\\\\ &amp;(x,y)\\mapsto((66i + 182)x + (-131i + 109), (122i + 159)y) \\end{aligned}<br>$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8499\u54e5\u9a6c\u5229\uff08Montgomery\uff09\u66f2\u7ebf<\/h3>\n\n\n\n<p>\u5728\u692d\u5706\u66f2\u7ebf\u5bc6\u7801\u5b66\u4e2d\u5e38\u7528\u7684\u692d\u5706\u66f2\u7ebf\u4e3a\u5f62\u5982\\(y^2=x^3+ax+b\\)\u65b9\u7a0b\u6240\u786e\u5b9a\u7684\u66f2\u7ebf\uff0c\u8fd9\u7c7b\u65b9\u7a0b\u4e00\u822c\u79f0\u4e3a\u9b4f\u5c14\u65af\u7279\u62c9\u65af\uff08Weierstrass\uff09\u65b9\u7a0b\uff0c\u8fd9\u7c7b\u65b9\u7a0b\u786e\u5b9a\u7684\u66f2\u7ebf\u4e00\u822c\u79f0\u4e3a\u9b4f\u5c14\u65af\u7279\u62c9\u65af\u5f62\u5f0f\u7684\u692d\u5706\u66f2\u7ebf\uff0c\u8fd8\u6709\u53e6\u5916\u4e00\u79cd\u5f62\u5f0f\u7684\u692d\u5706\u66f2\u7ebf\u662f\u7531\u65b9\u7a0b\\(y^2=x^3+Ax^2+x\\)\u6240\u5b9a\u4e49\u7684\uff0c\u8fd9\u7c7b\u692d\u5706\u66f2\u7ebf\u88ab\u79f0\u4e3a\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\uff0c\u5bf9\u4e8e\u4e00\u6761\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\\(E:y^2=x^3+Ax^2+x\\)\uff0c\u5176\\(j\\)-\u4e0d\u53d8\u91cf\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>j(E)=\\frac{256(A^2-3)^3}{A^2-4}<br>$$<\/p>\n\n\n\n<p>\u4efb\u610f\u4e00\u6761\u692d\u5706\u66f2\u7ebf\u90fd\u53ef\u4ee5\u8f6c\u6362\u4e3a\\(j\\)-\u4e0d\u53d8\u91cf\u76f8\u540c\uff08\u4ea6\u5373\u540c\u6784\uff09\u7684\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\uff0c\u5728sage\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7<code>montgomery_model<\/code>\u6765\u5c06\u4e00\u6761\u692d\u5706\u66f2\u7ebf\u8f6c\u6362\u4e3a\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u5c06\u9b4f\u5c14\u65af\u7279\u62c9\u65af\u5f62\u5f0f\u7684\u692d\u5706\u66f2\u7ebf\uff1a<\/p>\n\n\n\n<p>$$<br>E:y^2=x^3+312589632x+654443578\\pmod{1912812599}<br>$$<\/p>\n\n\n\n<p>\u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u4ee3\u7801\u8fdb\u884c\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>p = 1912812599\na = 312589632\nb = 654443578\n\nE = EllipticCurve(GF(p), &#91;a, b&#93;)\nE_M = print(E.montgomery_model()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1912812599<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">312589632<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">b <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">654443578<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">a<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> b<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E_M <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">montgomery_model<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u5f97\u5230\u5176\u5bf9\u5e94\u7684\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>E_M:y^2 = x^3 + 723347356x^2 + x\\pmod{1912812599}<br>$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u540c\u6e90<\/h3>\n\n\n\n<p>\u540c\u6e90\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u6761\u66f2\u7ebf\u5230\u53e6\u4e00\u6761\u66f2\u7ebf\u6216\u8005\u4e00\u6761\u66f2\u7ebf\u5230\u81ea\u8eab\u7684\u6620\u5c04\uff0c\u5176\u672c\u8d28\u4e3a\u540c\u6001\uff0c\u53ef\u4ee5\u7b80\u5355\u5730\u8868\u8fbe\u4e3a\\((x,y)\\mapsto(f(x,y),g(x,y))\\)\uff0c\u5176\u4e2d\\(f,g\\)\u662f\u4e24\u4e2a\u51fd\u6570\u3002\u5728\u4e4b\u540e\u7684\u8ba8\u8bba\u4e2d\u5c06\u4e3b\u8981\u4ee5\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\u4e3a\u4e3b\uff0c\u56e0\u4e3a\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\u4e4b\u95f4\u7684\u6620\u5c04\u53ef\u4ee5\u5355\u7eaf\u901a\u8fc7\u5bf9\\(x\\)\u8fdb\u884c\u6620\u5c04\\(x\\mapsto f(x)\\)\u6765\u8868\u793a\u51fa\u66f2\u7ebf\u95f4\u5b8c\u6574\u7684\u6620\u5c04\uff0c\u5176\u5b8c\u6574\u6620\u5c04\u5f62\u5f0f\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>(x,y)\\mapsto(f(x),cyf'(x))<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(c\\)\u662f\u56fa\u5b9a\u5e38\u6570\uff0c\\(f&#8217;\\)\u4e3a\\(f\\)\u7684\u5bfc\u51fd\u6570. \u5bf9\u4e8e\u4e00\u6761\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\\(E:y^2=x^3+ax^2+x\\)\uff0c\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\\(E\\)\u5230\\(E\\)\u7684\u540c\u6784\u6620\u5c04\uff1a<\/p>\n\n\n\n<p>$$<br>[2]:E\\mapsto E, x\\mapsto\\frac{(x^2-1)^2}{4x(x^2+ax+1)}<br>$$<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u6620\u5c04\u4e00\u822c\u79f0\u4e3a\u4e8c\u500d\u70b9\u6620\u5c04\uff0c\u4e8b\u5b9e\u4e0a\uff0c\u6211\u4eec\u4ee4\u5206\u6bcd\\(4x(x^2+ax+1)=0\\)\uff0c\u53ef\u4ee5\u5f97\u5230\u4e09\u4e2a\u6839\\(0,\\alpha,\\frac{1}{\\alpha}\\)\uff08\u5176\u4e2d\\(\\alpha\\)\u6ee1\u8db3\\(\\alpha^2+a\\alpha+1\\)\uff09\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u66f2\u7ebf\u4e0a\u9636\u4e3a2\u7684\u70b9\uff1a\\((0,0),(\\alpha,0),(\\frac{1}{\\alpha},0)\\)\uff0c\u8fd9\u4e09\u4e2a\u70b9\u7684\u96c6\u5408\u5c31\u662f\u6620\u5c04\\([2]\\)\u7684\u6838\uff0c\u8bb0\u4e3a\\(\\ker([2])\\)\uff0c\u5b83\u662f\u692d\u5706\u66f2\u7ebf\u7fa4\\(E\\)\u7684\u4e00\u4e2a\u5b50\u7fa4\uff0c\u540c\u6784\u4e8e\\(\\mathbb{Z}_2\\times\\mathbb{Z}_2\\)\uff0c\u8fd9\u4e0a\u9762\u7684\u70b9\u79f0\u4e3a\\(2\\)-torsion\uff0c\u4e8b\u5b9e\u4e0a\u5bf9\u4e8e\u4efb\u610f\u4e00\u6761\u692d\u5706\u66f2\u7ebf\u90fd\u6709\u5176\u5bf9\u5e94\u7684\\(\\ker([2])\\) \u4f8b\u5982\u5bf9\u4e8e\\(GF(431^2)\\)\u4e0b\u7684\u692d\u5706\u66f2\u7ebf\\(E:y^2=x^3+x\\)\uff0c\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u4ee3\u7801\u5f97\u5230\u5bf9\u5e94\u7684\u4e0a\u8ff0\u6620\u5c04\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>R.&lt;i> = GF(p^2, modulus=&#91;1, 0, 1&#93;)\na = 1\nE = EllipticCurve(R, &#91;1, 0&#93;)\nprint(E._multiple_x_numerator(2))\nprint(E._multiple_x_denominator(2))<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">_multiple_x_numerator<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">_multiple_x_denominator<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>[2]:E\\mapsto E,x\\mapsto\\frac{x^4 + 429x^2 + 1}{4x^3 + 4x}<br>$$<\/p>\n\n\n\n<p>\u6211\u4eec\u4ee4\u5206\u6bcd\\(4x^3+4x=4(x^3+x)=0\\)\uff0c\u5f97\u5230\u4e09\u4e2a\u89e3\\(0,i,-i\\)\uff0c\u636e\u6b64\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\\(E\\)\u7684\u4e00\u4e2a\u5b50\u7fa4\\(\\ker([2])=\\{(0,0),(i,0),(-i,0),\\mathcal{O}\\}\\)\uff0c\u800c\u4e14\u8fd9\u4e09\u4e2a\u70b9\u90fd\u53ef\u4ee5\u786e\u5b9a\u4e00\u4e2a\u4e8c\u9636\u5faa\u73af\u5b50\u7fa4\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7sage\u7684<code>division_points<\/code>\u65b9\u6cd5\u5bf9\\(E\\)\u7684\u96f6\u5143\u5f00\u4e8c\u6b21\u6839\u6765\u8fbe\u5230\u8fd9\u4e00\u76ee\u7684\uff1a<code>E(0).division_points(2)<\/code>\uff0c\u53c2\u8003\u8d44\u65992\u4e2d\u7ed9\u51fa\u4e86\u8fd9\u6837\u4e00\u4e2a\u56fe\u6765\u63cf\u8ff0\\(\\ker([2])\\)\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-1.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"308\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-99\"  sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u5728\u8fd9\u91cc\u6bcf\u4e2a\u201c\u82b1\u74e3\u201d\u5bf9\u5e94\u4e00\u4e2a\u4e8c\u9636\u5faa\u73af\u5b50\u7fa4\u3002\u76f8\u5e94\u7684\uff0c\u8fd8\u6709\u4e09\u500d\u70b9\u6620\u5c04\\([3]\\)\uff0c\u5bf9\u4e8e\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\\(E:y^2=x^3+ax^2+x\\)\uff0c\u5176\u5bf9\u5e94\u4e09\u500d\u70b9\u6620\u5c04\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>[3]:E\\mapsto E:x\\mapsto\\frac{x(x^4-6x^2-4ax^3-3)^2}{(3x^4+4ax^3+6x^2-1)^2}<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7\u4ee4\u5206\u6bcd\u7b49\u4e8e\\(0\\)\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u56db\u4e2a\u6839\\(\\beta,\\delta,\\zeta,\\theta\\)\uff0c\u901a\u8fc7\u8fd9\u56db\u4e2a\u6839\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u516b\u4e2a\u9636\u4e3a3\u7684\u70b9\uff1a\\((\\beta,\\pm\\gamma),(\\delta,\\pm\\epsilon),(\\zeta,\\pm\\eta),(\\theta,\\pm\\iota)\\)\uff0c\u8fd9\u516b\u4e2a\u70b9\u52a0\u4e0a\u65e0\u7a77\u8fdc\u70b9\u53ef\u4ee5\u6784\u6210\u5b50\u7fa4\\(\\ker([3])\\simeq\\mathbb{Z}_3\\times\\mathbb{Z}_3\\)\uff0c\u4e5f\u53ef\u4ee5\u53eb\u505a\\(3\\)-torsion\uff0c\\(3\\)-torsion\u7684\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-2.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"327\" height=\"309\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-100\"  sizes=\"auto, (max-width: 327px) 100vw, 327px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u8fd9\u91cc\u6bcf\u4e2a\u201c\u82b1\u74e3\u201d\u5bf9\u5e94\u4e00\u4e2a\u4e09\u9636\u5faa\u73af\u5b50\u7fa4\u3002\u63a8\u5e7f\u5230\u4e00\u822c\u60c5\u51b5\uff0c\u6240\u6709\u9636\u4e3a\\(l\\)\u7684\u70b9\uff08\\(p\\not\\mid l\\)\uff09\u4e0e\\(\\mathcal{O}\\)\u6784\u6210\u7684\u5b50\u7fa4\u5c31\u662f\\(\\ker([l])\\simeq \\mathbb{Z}_l\\times\\mathbb{Z}_l\\)\uff08\u6216\u8005\u79f0\u4e3a\\(l\\)-torsion)\uff0c\u800c\u82e5\\(l\\)\u4e3a\u8d28\u6570\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\\(l+1\\)\u4e2a\\(l\\)\u9636\u5faa\u73af\u5b50\u7fa4<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">\u53ef\u5206\u540c\u6e90<\/h4>\n\n\n\n<p>\u53ef\u5206\u540c\u6e90\u7684\u5b9a\u4e49\u4e3a\u5bf9\u4e8e\u4e00\u6761\u66f2\u7ebf\\(E\\)\u4e0a\u7684\u692d\u5706\u66f2\u7ebf\u7fa4\u4ee5\u53ca\u5b83\u7684\u4e00\u4e2a\u5b50\u7fa4\\(G\\)\uff0c\u53ef\u4ee5\u6784\u9020\u51fa\u552f\u4e00\u7684\u540c\u6e90\\(\\phi:E\\mapsto E&#8217;\\)\uff0c\u4f7f\u5f97\\(\\ker(\\phi)=G\\)\uff0c\u8fd9\u6837\u5f97\u5230\u7684\u66f2\u7ebfE&#8217;\u79f0\u4e3a\u8be5\u540c\u6e90\u7684\u966a\u57df\uff08codomain\uff09\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\\(E\/G\\)\u3002\u53ef\u5206\u540c\u6e90\u7684\u53e6\u4e00\u79cd\u5b9a\u4e49\uff08Velu&#8217;s formulas\uff09\u662f\uff1a\u8f93\u5165\u4e00\u6761\u692d\u5706\u66f2\u7ebf\\(E\\)\u4ee5\u53ca\u5176\u5b50\u7fa4\\(G\\)\u7684\u6240\u6709\u70b9\uff0c\u8f93\u51fa\u966a\u57df\\(E\/G\\)\u4ee5\u53ca\u5bf9\u5e94\u7684\u6620\u5c04\\(\\phi\\)\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u7531\u4e8e\\(\\ker(\\phi)=G\\)\uff0c\u6240\u4ee5\u5bf9\u4e8e\u4efb\u610f\u70b9\\(P\\in G\\)\uff0c\u90fd\u6709\\(\\phi(P)=\\mathcal{O}\\)<\/p>\n<\/blockquote>\n\n\n\n<p>\u4ee5\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\\(E:y^2=x^3+ax^2+x\\)\u4e3a\u4f8b\uff0c\u8bbe\u5176\u4e0a\u4e00\u4e2a\u4e8c\u9636\u5b50\u7fa4\u4e3a\\(G=\\{\\mathcal{O},(\\alpha,0)\\}\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u4ee5\\(G,E\\)\u4f5c\u4e3a\u8f93\u5165\uff0c\u5f97\u5230\u6620\u5c04\\(\\phi\\)\uff1a<\/p>\n\n\n\n<p>$$<br>\\phi:x\\mapsto\\frac{x(\\alpha x-1)}{x-\\alpha}<br>$$<\/p>\n\n\n\n<p>\u4ee5\u53ca\u966a\u57df\\(E&#8217;:y^2=x^3+2(1-2\\alpha^2)x^2+x\\)\uff0c\u8fd9\u4e2a\u6620\u5c04\u88ab\u7528\u4e8e\u8ba1\u7b97\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\u7684\\(2\\)-\u540c\u6e90\uff08\\(2\\)-isogeny\uff09\uff0c\u5bf9\\(GF(431^2)\\)\u4e0b\u7684\u8d85\u5947\u5f02\u66f2\u7ebf\\(E:y^2=x^3+(208i+161)x^2+x\\)\uff0c\u6211\u4eec\u77e5\u9053\\(j(E)=364i+304\\)\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u4ee3\u7801\u6c42\u5f97\u5176\u4e00\u4e2a\\(2\\)-\u540c\u6e90\u5e76\u786e\u4fdd\u5176\u8f93\u51fa\u7684\u966a\u57df\u4e3a\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>p = 431\nR.&lt;i> = GF(p^2, modulus=&#91;1, 0, 1&#93;)\nE = EllipticCurve(R, &#91;0, 208*i+161, 0, 1, 0&#93;)\n\nker2 = E(0).division_points(2)\n# &#91;(0 : 1 : 0), (0 : 0 : 1), (350*i + 68 : 0 : 1), (304*i + 202 : 0 : 1)&#93;\n\nalpha = ker2&#91;2&#93;\nphi = E.isogeny(alpha, model = \"montgomery\")\nprint(phi.rational_maps())\nprint()\nE_ = phi.codomain()\nprint(E_)\nprint(E_.j_invariant())<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">431<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">208<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">161<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">ker2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">division_points<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># &#91;(0 : 1 : 0), (0 : 0 : 1), (350*i + 68 : 0 : 1), (304*i + 202 : 0 : 1)&#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">alpha <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ker2<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">alpha<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">rational_maps<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E_<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E_<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u5f97\u5230\u6620\u5c04\\(\\phi\\)\uff1a<\/p>\n\n\n\n<p>$$<br>\\phi:x\\mapsto\\frac{(-81i + 68)x^2 &#8211; x}{x + (81i &#8211; 68)}<br>$$<\/p>\n\n\n\n<p>\u4ee5\u53ca\u966a\u57df\\(E&#8217;:y^2 = x^3 + (102i+423)x^2 + x\\)\uff0c\u5176\\(j\\)-\u4e0d\u53d8\u91cf\\(j(E&#8217;)=344i+190\\)\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff1a\u540c\u6e90\u4f1a\u4f7f\u5176\\(j\\)\u4e0d\u53d8\u91cf\u53d1\u751f\u53d8\u5316\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">d-\u540c\u6e90<\/h4>\n\n\n\n<p>\u5bf9\u4e8e\u540c\u6e90\\(\\phi\\)\uff0c\u6211\u4eec\u79f0\\(|\\ker(\\phi)|\\)\u4e3a\u540c\u6e90\u7684\u5ea6\uff0c\u5ea6\u4e3a\\(d\\)\u7684\u540c\u6e90\u79f0\u4e3a\\(d\\)-\u540c\u6e90\uff0c\u4f8b\u5982\u524d\u9762\u63d0\u5230\u7684\\(2\\)-\u540c\u6e90.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">sage\u4e0a\u7684\u540c\u6e90<\/h4>\n\n\n\n<p>\u6211\u4eec\u4e00\u822c\u7528sage\u7684<code>isogeny<\/code>\u65b9\u6cd5\u6765\u8ba1\u7b97\u540c\u6e90\uff0c\u5176\u51fd\u6570\u539f\u578b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>isogeny(_kernel_, _codomain=None_, _degree=None_, _model=None_, _check=True_, _algorithm=None_, _velu_sqrt_bound=None_)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">_kernel_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_codomain<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">None_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_degree<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">None_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">None_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_check<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">True_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">None_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_velu_sqrt_bound<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">None_<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u91cd\u8981\u7684\u53c2\u6570\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>_kernel_<\/code>\uff1a\u5c31\u662f\u524d\u9762\u63d0\u5230\u8f93\u5165\u7684\\(G\\)\uff0c\u53ef\u4ee5\u662f\u4e00\u4e2a\u70b9\uff0c\u53ef\u4ee5\u662f\u70b9\u5217\uff0c\u4e5f\u53ef\u4ee5\u662f\u672c\u539f\u6838\u591a\u9879\u5f0f<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>codomain<\/code>\uff1a\u966a\u57df\uff0c\u8f93\u5165\u4e3a\u4e00\u6761\u692d\u5706\u66f2\u7ebf\uff0c\u8fd9\u6837\u751f\u6210\u7684\u540c\u6e90\u7684\u966a\u57df\u5c31\u662f\u8fd9\u6761\u692d\u5706\u66f2\u7ebf<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>model<\/code>\uff1a\u8f93\u51fa\u7684\u966a\u57df\u7684\u5f62\u5f0f\uff0c\u6709\u4e09\u79cd\u53ef\u9009\u53c2\u6570\uff1a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>'minimal'<\/code>\uff0c\u8f93\u51fa\u5168\u5c40\u6700\u5c0f\u7684\u692d\u5706\u66f2\u7ebf<\/li>\n\n\n\n<li><code>'short_weierstrass'<\/code>\uff0c\u8f93\u51fashort Weierstrass\u66f2\u7ebf\uff0c\u5373\u7531\\(y^2=x^3+ax+b\\)\u5f62\u5f0f\u7684\u65b9\u7a0b\u6240\u5b9a\u4e49\u7684\u692d\u5706\u66f2\u7ebf<\/li>\n\n\n\n<li><code>'montgomery'<\/code>\u8f93\u51fa\u8499\u54e5\u9a6c\u5229\u66f2\u7ebf<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>algorithm<\/code>\uff1a\u7b97\u6cd5\uff0c\u6709\u4e09\u79cd\u53ef\u9009\u53c2\u6570\uff08\u5747\u4e3a\u81ea\u5df1\u7684\u7406\u89e3\uff0c\u53ef\u80fd\u4e0d\u51c6\u786e\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>'velusqrt'<\/code>\uff0c\u4f7f\u7528\u5e73\u65b9\u6839V\u00e9lu\u7b97\u6cd5<\/li>\n\n\n\n<li><code>'factored'<\/code>\uff0c\u5c06\u5ea6\u5206\u89e3\u5230\u4e3a\u8d28\u56e0\u5b50\u4e4b\u540e\u518d\u6c42\u89e3<\/li>\n\n\n\n<li><code>'traditional'<\/code>\uff0c\u4f20\u7edf\u7b97\u6cd5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u540c\u6e90\u56fe\uff08Isogeny graph\uff09<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u4e00\u4e2a\u56fa\u5b9a\u7684\\(p\\)\uff0c\u6211\u4eec\u7528\\(GF(p^2)\\)\u4e2d\u6240\u6709\u7684\u8d85\u5947\u5f02\\(j\\)-\u4e0d\u53d8\u91cf\u5404\u6784\u9020\u4e00\u6761\u66f2\u7ebf\uff0c\u5728\u6bcf\u6761\u66f2\u7ebf\u7684\\(\\ker([l])\\)\u4e2d\u53d6\u9664\u4e86\u65e0\u7a77\u8fdc\u70b9\u5916\u7684\u6240\u6709\u70b9\u5206\u522b\u8fdb\u884c\u540c\u6e90\uff0c\u5c06\u539f\u6765\u66f2\u7ebf\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u4f5c\u4e3a\u8d77\u70b9\uff0c\u540c\u6e90\u5f97\u5230\u7684\u966a\u57df\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u4f5c\u4e3a\u7ec8\u70b9\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u65e0\u5411\u56fe\uff0c\u79f0\u4e3a\u540c\u6e90\u56fe\uff0c\u4f8b\u5982\u5728\u53c2\u8003\u8d44\u65992\u4e2d\u7ed9\u51fa\u7684\\(GF(431^2)\\)\u4e0b\u7684\\(\\ker([2])\\)\u7684\u540c\u6e90\u56fe\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-3.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-3.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"989\" height=\"604\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-3.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-101\"  sizes=\"auto, (max-width: 989px) 100vw, 989px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u901a\u8fc7\u540c\u6e90\u56fe\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\u8d85\u5947\u5f02\u66f2\u7ebf\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u5728\u540c\u6e90\u65f6\u7684\u53d8\u5316\u8def\u7ebf. \u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u7b97\u6cd5\u6c42\\(GF(p^2)\\)\u4e0b\u7684\\(\\ker([l])\\)\u7684\u540c\u6e90\u56fe\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def IsogenyGraph(p, l=2, vertex_size=3750, size=&#91;20, 20&#93;):\n    R.&lt;i> = GF(p^2, modulus=&#91;1,0,1&#93;)\n\n    jlist = {}\n    Elist = []\n\n    E = EllipticCurve(R, &#91;1, 0&#93;)\n    assert E.is_supersingular()\n    jlist&#91;E.j_invariant()&#93; = set()\n    Elist.append(E)\n\n    while Elist:\n        tmp = Elist.pop()\n        kerl = tmp(0).division_points(l)\n        for P in kerl:\n            if P != tmp(0):\n                phi = tmp.isogeny(P, model = \"montgomery\")\n                E2 = phi.codomain()\n                j = E2.j_invariant()\n                # print(tmp.j_invariant(), j)\n                if j not in jlist:\n                    jlist&#91;j&#93; = set()\n                if j not in jlist&#91;tmp.j_invariant()&#93;:\n                    jlist&#91;tmp.j_invariant()&#93;.add(j)\n                    Elist.append(E2)\n\n    Tab = {}\n    for x in jlist:\n        Tab&#91;x&#93; = list(jlist&#91;x&#93;)\n    G = Graph(Tab)\n\n    G.set_pos(G.layout_circular())\n    G.plot(vertex_labels=True,vertex_size=vertex_size).show(figsize=size)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">IsogenyGraph<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">p<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">l<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">vertex_size<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">3750<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">size<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #ECEFF4\">&#93;):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    jlist <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Elist <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">assert<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">is_supersingular<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    jlist<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">set<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Elist<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">while<\/span><span style=\"color: #D8DEE9FF\"> Elist<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        tmp <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> Elist<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">pop<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        kerl <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">tmp<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">division_points<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">l<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> P <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> kerl<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> P <\/span><span style=\"color: #81A1C1\">!=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">tmp<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> tmp<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">P<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                E2 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                j <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E2<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #616E88\"># print(tmp.j_invariant(), j)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> j <\/span><span style=\"color: #81A1C1\">not<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> jlist<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    jlist<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">j<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">set<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> j <\/span><span style=\"color: #81A1C1\">not<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> jlist<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">tmp<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()&#93;:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    jlist<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">tmp<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()&#93;.<\/span><span style=\"color: #88C0D0\">add<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">j<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    Elist<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">E2<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    Tab <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> x <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> jlist<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Tab<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">x<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">list<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">jlist<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">x<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    G <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Graph<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Tab<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    G<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">set_pos<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">G<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">layout_circular<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    G<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">plot<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">vertex_labels<\/span><span style=\"color: #81A1C1\">=True<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9\">vertex_size<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">vertex_size<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">show<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">figsize<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">size<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u901a\u8fc7\u8fd9\u4e2a\u7b97\u6cd5\u753b\u51fa\u6765\u7684\\(GF(431^2)\\)\u4e0b\u7684\\(\\ker([2])\\)\u7684\u540c\u6e90\u56fe\u957f\u8fd9\u6837\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/blog202502261957075.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1986\" height=\"1979\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/blog202502261957075.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-112\"  sizes=\"auto, (max-width: 1986px) 100vw, 1986px\" \/><\/div><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">\u8d85\u5947\u5f02\u540c\u6e90Diffie-Hellman\u5bc6\u94a5\u4ea4\u6362\u4f53\u7cfb\uff08SIDH\uff09<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">SIDH\u534f\u8bae\u7ec6\u8282<\/h3>\n\n\n\n<p>\u9996\u5148\u5bc6\u94a5\u4ea4\u6362\u53cc\u65b9\uff08\u4ee5\u4e0b\u79f0\u4e3aAlice\u548cBob\uff09\u534f\u5546\u9009\u53d6\u6a21\u6570\\(p=2^a3^b-1\\)\uff0c\u5176\u4e2d\\(2^a\\approx 3^b\\)\uff0c\u7136\u540e\u9009\u53d6\u4e00\u6761\\(GF(p^2)\\)\u4e0b\u7684\u8d85\u5947\u5f02\u692d\u5706\u66f2\u7ebf\\(E\\)\uff0c\u5728\u6b64\u4e4b\u540e\uff0cAlice\u9009\u53d6\\(E\\)\u4e0a\u9636\u4e3a\\(2^a\\)\u7684\u4e24\u70b9\\(P_A,Q_A\\)\u5e76\u516c\u5f00\uff0cBob\u9009\u53d6\\(E\\)\u4e0a\u9636\u4e3a\\(3^b\\)\u7684\u4e24\u70b9\\(P_B,Q_B\\)\u5e76\u516c\u5f00\uff08\u5728\u9009\u53d6\u7684\u65f6\u5019\uff0c\u9700\u8981\u4fdd\u8bc1\\(P_A,Q_A\\)\u7ebf\u6027\u65e0\u5173\uff0c\\(P_B,Q_B\\)\u7ebf\u6027\u65e0\u5173\uff09\u3002 Alice\u968f\u673a\u9009\u53d6\u79d8\u5bc6\u503c\\(k_A\\in\\{0,1,\\cdots,2^a-1\\}\\)\uff0c\u8ba1\u7b97\\(S_A=P_A+k_AQ_A\\)\uff0c\u5e76\u901a\u8fc7\\(S_A\\)\u8ba1\u7b97\u540c\u6e90\\(\\phi_A:E\\mapsto E_A\\)\uff0c\u5176\u4e2d\\(E_A=E\/\\langle S_A\\rangle\\)\uff0c\\(\\phi_A\\)\u7531\\(a\\)\u4e2a\\(2\\)-\u540c\u6e90\u7ec4\u5408\u800c\u6210\uff0c\u6700\u540e\u4f7f\u7528\\((E_A,\\phi_A(P_B),\\phi_A(Q_B))\\)\u4f5c\u4e3a\u516c\u94a5\uff0c\\((k_A,S_A)\\)\u4f5c\u4e3a\u79c1\u94a5\uff1b \u540c\u6837\u7684\uff0cBob\u968f\u673a\u9009\u53d6\u79d8\u5bc6\u503c\\(k_B\\in\\{0,1,\\cdots,3^b-1\\}\\)\uff0c\u8ba1\u7b97\\(S_B=P_B+k_BQ_B\\)\uff0c\u901a\u8fc7\\(S_B\\)\u8ba1\u7b97\u540c\u6e90\\(\\phi_B:E\\mapsto E_B\\)\uff0c\u5176\u4e2d\\(\\phi_B\\)\u7531\\(b\\)\u4e2a\\(3\\)-\u540c\u6e90\u7ec4\u5408\u800c\u6210\uff0c\u4f7f\u7528\\((E_B,\\phi_B(P_A),\\phi_B(Q_A))\\)\u4f5c\u4e3a\u516c\u94a5\uff0c\\((k_B,S_B)\\)\u4f5c\u4e3a\u79c1\u94a5\u3002 \u901a\u8fc7\u4e0a\u8ff0\u8ba1\u7b97\u5f97\u5230\u7684\u516c\u94a5\uff0cAlice\u53ef\u4ee5\u8ba1\u7b97\u51fa\\(S_{A}&#8217;=\\phi_B(P_A)+k_A\\phi_B(Q_A)\\)\uff0c\u8ba1\u7b97\u540c\u6e90\\(\\phi_A&#8217;:E_B\\mapsto E_{AB}\\)\uff0c\u5c31\u53ef\u4ee5\u8ba1\u7b97\u51fa\\(j_{AB}=j(E_{AB})\\)\uff0c\u540c\u6837\u7684\uff0cBob\u53ef\u4ee5\u8ba1\u7b97\u51fa\\(S_{B}&#8217;=\\phi_A(P_B)+k_B\\phi_A(Q_B)\\)\uff0c\u7136\u540e\u8ba1\u7b97\u540c\u6e90\\(\\phi_B&#8217;:E_A\\mapsto E_{BA}\\)\uff0c\u4ece\u800c\u53ef\u4ee5\u8ba1\u7b97\u51fa\\(j_{BA}=j(E_{BA})\\)\uff0c\u6709\\(j_{AB}=j_{BA}\\)\uff0c\u6240\u4ee5\u5171\u4eab\u5bc6\u94a5\u503c\u4e3a\\(j=j_{AB}=j_{BA}\\).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">SIDH\u5b9e\u4f8b<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u672c\u6837\u4f8b\u6765\u6e90\u4e8e\u53c2\u8003\u8d44\u65992<\/p>\n<\/blockquote>\n\n\n\n<p>Alice\u548cBob\u534f\u5546\u9009\u53d6\u6a21\u6570\\(p=2^43^3-1=431\\)\uff0c\u5e76\u9009\u53d6\\(GF(p^2)\\)\u4e0a\u7684\u4e00\u6761\u8d85\u5947\u5f02\u692d\u5706\u66f2\u7ebf\uff1a<\/p>\n\n\n\n<p>$$<br>E:y^2=x^3+(329i+423)x^2+x<br>$$<\/p>\n\n\n\n<p>\u6709\\(j(E)=87i+190\\)\uff0cAlice\u4ece\u4e2d\u9009\u53d6\u4e24\u4e2a\u9636\u4e3a\\(2^4\\)\u7684\u70b9\uff1a<\/p>\n\n\n\n<p>$$<br>P_A=(100i+248,304i+199),Q_A=(426i+394,51i+79)<br>$$<\/p>\n\n\n\n<p>\u540c\u65f6Bob\u4ece\u4e2d\u9009\u53d6\u4e24\u4e2a\u9636\u4e3a\\(3^3\\)\u7684\u70b9\uff1a<\/p>\n\n\n\n<p>$$<br>P_B = (358i+275, 410i+104),Q_B = (20i+185, 281i+239)<br>$$<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>p = 2^4 * 3^3 - 1\nR.&lt;i> = GF(p^2, modulus=&#91;1, 0, 1&#93;)\na = 329*i + 423\n\nE = EllipticCurve(R, &#91;0, a, 0, 1, 0&#93;)\n\nPA = E(100*i+248, 304*i+199)\nQA = E(426*i+394, 51*i+79)\nassert PA.order() == QA.order() == 2^4\n\nPB = E(358*i+275, 410*i+104)\nQB = E(20*i+185, 281*i+239)\nassert PB.order() == QB.order() == 3^3<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">329<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">423<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> a<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">248<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">304<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">199<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">426<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">394<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">51<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">79<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">assert<\/span><span style=\"color: #D8DEE9FF\"> PA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> QA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">358<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">275<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">410<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">104<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">185<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">281<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">239<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">assert<\/span><span style=\"color: #D8DEE9FF\"> PB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> QB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">3<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u7136\u540eAlice\u4ece\\(\\{0,1,\\cdots,2^4-1\\}\\)\u4e2d\u9009\u62e9\\(k_A=11\\)\uff0c\u636e\u6b64\u8ba1\u7b97\\(S_A=P_A+k_AQ_A=(271i + 79, 153i + 430)\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u7b97\u6cd5\u8ba1\u7b97\u540c\u6e90\u8def\u5f84\u4ece\u800c\u5f97\u5230\\(S_A\\)\u5bf9\u5e94\u7684\u540c\u6e90\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-4.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-4.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"478\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-4.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-102\"  sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u5176\u4e2d\\(e\\)\u8868\u793a\u6052\u7b49\u6620\u5c04\uff0csage\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>phis = []\n\nSA_, EA_, PB_, QB_ = SA, E, PB, QB\n\nfor e in range(a-1, -1, -1):\n    RA_ = SA_ * 2^e\n    phi = EA_.isogeny(-RA_, model=\"montgomery\")\n    phis.append(phi)\n    SA_, EA_, PB_, QB_ = phi(SA_), phi.codomain(), phi(PB_), phi(QB_)\n\nphiA = phis&#91;-1&#93;\nfor i in range(len(phis) - 2, -1, -1):\n    phiA = phiA * phis&#91;i&#93;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">phis <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> EA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QB_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> SA<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PB<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QB<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> e <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">a<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    RA_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> SA_ <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\">e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EA_<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">RA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phis<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phi<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    SA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> EA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QB_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SA_<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PB_<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QB_<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phiA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phis<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">len<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phis<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phiA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phiA <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> phis<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8ba1\u7b97\u5f97\u5230\\(E_A:y^2 = x^3 + (128i+19)x^2 + x\\)\uff0c\\(\\phi_A(P_B)=(130i + 170,428i + 290)\\)\uff0c\\(\\phi_A(Q_B)=(235i+209,126i+15)\\)\uff1b \u540c\u7406\uff0cBob\u5728\\(\\{0,1,\\cdots,3^3-1\\}\\)\u4e2d\u9009\u62e9\\(k_B=2\\)\uff0c\u8ba1\u7b97\\(S_B=P_B+k_BQ_B=(122i +309, 291i+374)\\)\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b\u7b97\u6cd5\u8ba1\u7b97\u51fa\\(S_B\\)\u5bf9\u5e94\u7684\u540c\u6e90\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-5.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"653\" height=\"481\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-103\"  sizes=\"auto, (max-width: 653px) 100vw, 653px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u5176\u4e2d\\(e\\)\u8868\u793a\u6052\u7b49\u6620\u5c04\uff0csage\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>phis = []\nSB_, EB_, PA_, QA_ = SB, E, PA, QA\n\nfor e in range(b-1, -1, -1):\n    RB_ = SB_ * 3^e\n    phi = EB_.isogeny(RB_, model=\"montgomery\")\n    phis.append(phi)\n    SB_, EB_, PA_, QA_ = phi(SB_), phi.codomain(), phi(PA_), phi(QA_)\n\nphiB = phis&#91;-1&#93;\nfor i in range(len(phis) - 2, -1, -1):\n    phiB = phiB * phis&#91;i&#93;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">phis <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> EB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QA_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> SB<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PA<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QA<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> e <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">b<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    RB_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> SB_ <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\">e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EB_<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">RB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phis<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phi<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    SB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> EB_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> PA_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> QA_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SB_<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PA_<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QA_<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phiB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phis<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">len<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phis<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phiB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phiB <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> phis<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8ba1\u7b97\u5f97\u5230\\(E_B:y^2 = x^3 + (329i+8)x^2 + x\\)\uff0c\\(\\phi_B(P_A)=(160i + 421, 246i + 252)\\)\uff0c\\(\\phi_B(Q_A)=(119i+14, 246i + 138)\\)\u8fd9\u6837\u53cc\u65b9\u7684\u516c\u94a5\u5747\u5df2\u7ecf\u8ba1\u7b97\u51fa\u6765\uff0c\u6700\u540eAlice\u5c31\u53ef\u4ee5\u901a\u8fc7\u81ea\u5df1\u7684\u79c1\u94a5\u8ba1\u7b97\u51fa\uff1a<\/p>\n\n\n\n<p>$$<br>S_{A}&#8217;=\\phi_B(P_A)+k_A\\phi{(Q_A)}<br>$$<\/p>\n\n\n\n<p>\u518d\u901a\u8fc7\u4e0a\u8ff0\u7b97\u6cd5\u8ba1\u7b97\u51faAlice\u4fa7\\(S_{A}&#8217;\\)\u5bf9\u5e94\u7684\u540c\u6e90\u7684\u966a\u57df\\(E_A\/\\langle S_{A}&#8217;\\rangle\\)\uff0c\u90a3\u4e48\u8fd9\u4e2a\u966a\u57df\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u5c31\u662f\u5171\u4eab\u5bc6\u94a5\uff0c\u540c\u6837\u7684\uff0cBob\u53ef\u4ee5\u901a\u8fc7\u81ea\u5df1\u7684\u79c1\u94a5\u8ba1\u7b97\u51fa\uff1a<\/p>\n\n\n\n<p>$$<br>S_{B}&#8217;=\\phi_A(P_B)+k_B\\phi{(Q_A)}<br>$$<\/p>\n\n\n\n<p>\u518d\u901a\u8fc7\u4e0a\u8ff0\u7b97\u6cd5\u8ba1\u7b97\u51faBob\u4fa7\\(S_{B}&#8217;\\)\u5bf9\u5e94\u7684\u540c\u6e90\u7684\u966a\u57df\\(E_B\/\\langle S_{B}&#8217;\\rangle\\)\uff0c\u90a3\u4e48\u8fd9\u4e2a\u966a\u57df\u7684\\(j\\)-\u4e0d\u53d8\u91cf\u5c31\u662f\u5171\u4eab\u5bc6\u94a5\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u4ee3\u7801\u8ba1\u7b97\u51fa\u5171\u4eab\u5bc6\u94a5\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>SAB = phiA(PB) + kB * phiA(QB)\nEAB = EA_.isogeny(SAB, model=\"montgomery\").codomain()\nBob_shared_secret = EAB.j_invariant()\n\nprint(Bob_shared_secret)\nSBA = phiB(PA) + kA * phiB(QA)\nEBA = EB_.isogeny(SBA, model=\"montgomery\").codomain()\nAlice_shared_secret = EBA.j_invariant()\n\nprint(Alice_shared_secret)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">SAB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PB<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kB <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QB<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EAB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EA_<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SAB<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Bob_shared_secret <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EAB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Bob_shared_secret<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SBA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kA <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EBA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EB_<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SBA<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Alice_shared_secret <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EBA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Alice_shared_secret<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u8ba1\u7b97\u51fa\u5171\u4eab\u5bc6\u94a5\u4e3a\\(234\\)\uff0c\u6574\u7406\u5e76\u4f18\u5316\u4ee3\u7801\u540e\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>a = 4\nb = 3\np = 2^a * 3^b - 1\nR.&lt;i> = GF(p^2, modulus=&#91;1, 0, 1&#93;)\nA = 329*i + 423\n\nE = EllipticCurve(R, &#91;0, A, 0, 1, 0&#93;)\n\nPA = E(100*i+248, 304*i+199)\nQA = E(426*i+394, 51*i+79)\n\nPB = E(358*i+275, 410*i+104)\nQB = E(20*i+185, 281*i+239)\nassert PA.order() == QA.order() == 2^4 and PB.order() == QB.order() == 3^3\n\nkA = 11\nSA = PA + kA * QA\nphiA = E.isogeny(SA, model=\"montgomery\", algorithm=\"factored\")\nEA = phiA.codomain()\nPB_ = phiA(PB)\nQB_ = phiA(QB)\n\nkB = 2\nSB = PB + kB * QB\nphiB = E.isogeny(SB, model=\"montgomery\", algorithm=\"factored\")\nEB = phiB.codomain()\nPA_ = phiB(PA)\nQA_ = phiB(QA)\n\nSAB = phiA(PB) + kB * phiA(QB)\nEAB = EA.isogeny(SAB, model=\"montgomery\", algorithm=\"factored\").codomain()\nBob_shared_secret = EAB.j_invariant()\n\nSBA = phiB(PA) + kA * phiB(QA)\nEBA = EB.isogeny(SBA, model=\"montgomery\", algorithm=\"factored\").codomain()\nAlice_shared_secret = EBA.j_invariant()\n\nassert Bob_shared_secret == Alice_shared_secret\nprint(Alice_shared_secret)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">b <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">p <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\">a <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\">b <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GF<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">p<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">modulus<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">A <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">329<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">423<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">E <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">EllipticCurve<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">R<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> A<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">248<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">304<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">199<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">426<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">394<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">51<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">79<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">358<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">275<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">410<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">104<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">E<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">185<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">281<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #B48EAD\">239<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">assert<\/span><span style=\"color: #D8DEE9FF\"> PA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> QA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">and<\/span><span style=\"color: #D8DEE9FF\"> PB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> QB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">order<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #B48EAD\">3<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">kA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> PA <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kA <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> QA<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phiA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SA<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phiA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PB_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PB<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QB_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QB<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">kB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> PB <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kB <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> QB<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">phiB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SB<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> phiB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">PA_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">QA_ <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SAB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PB<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kB <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiA<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QB<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EAB <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SAB<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Bob_shared_secret <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EAB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">SBA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PA<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> kA <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phiB<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QA<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">EBA <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EB<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">SBA<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Alice_shared_secret <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> EBA<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">assert<\/span><span style=\"color: #D8DEE9FF\"> Bob_shared_secret <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> Alice_shared_secret<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Alice_shared_secret<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u6216\u8005\u53ef\u4ee5\u5c06\u5c01\u88c5\u516c\u94a5\u548c\u8ba1\u7b97\u79c1\u94a5\u5c01\u88c5\u4e3a\u51fd\u6570\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def gen_public_key(E, P1, Q1, s, P2, Q2):\n    S = P1 + s*Q1\n    phi = E.isogeny(S, model='montgomery', algorithm=\"factored\")\n    return phi, (phi.codomain(), phi(P2), phi(Q2))\n\ndef gen_shared_secret(E, P, Q, s):\n    S = P + s*Q\n    phi1 = E.isogeny(S, model='montgomery', algorithm=\"factored\")\n    return phi1.codomain().j_invariant()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">gen_public_key<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">E<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">P1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Q1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">s<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">P2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Q2<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    S <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> P1 <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> s<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">Q1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phi <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">S<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> phi<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">phi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">P2<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">phi<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Q2<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">gen_shared_secret<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">E<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">P<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Q<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">s<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    S <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> P <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> s<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">Q<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    phi1 <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> E<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">isogeny<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">S<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">model<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">montgomery<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">algorithm<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">factored<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> phi1<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">codomain<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">j_invariant<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">SIDH\u7684\u5b89\u5168\u6027<\/h3>\n\n\n\n<p>\u7406\u8bba\u4e0aSIDH\u7684\u5b89\u5168\u6027\u4e3b\u8981\u4f9d\u8d56\u4e8e\u901a\u8fc7\u516c\u94a5\u4e2d\u7ed9\u51fa\u7684\u66f2\u7ebf\u6765\u6c42\u51fa\u5b83\u5bf9\u5e94\u7684\u540c\u6e90\u3002\u4f46\u662f\u57282022\u5e74SIDH\u5c31\u88ab\u5ba3\u5e03\u5b8c\u5168\u7834\u89e3\uff0c\u5728Github\u4e0a\u5c31\u6709\u4ee3\u7801\uff1a<a href=\"https:\/\/github.com\/GiacomoPope\/Castryck-Decru-SageMath\">GiacomoPope\/Castryck-Decru-SageMath: A SageMath implementation of the Castryck-Decru Key Recovery attack on SIDH<\/a>\uff0c<del>\u8981\u7528\u7684\u8bdd\u62d4\u51fa\u6765\u7528\u5c31\u884c<\/del><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e8c\u6b21\u6269\u57df\u4e0a\u7684\u692d\u5706\u66f2\u7ebf\u540c\u6e90\u7406\u8bba\u4ee5\u53ca\u8d85\u5947\u5f02\u540c\u6e90Diffie-Hellman\u5bc6\u94a5\u4ea4\u6362\u4f53\u7cfb\u7b80\u8ff0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[7,11,6],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-3","tag-crypto","tag-isogeny","tag-6"],"_links":{"self":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":9,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/97\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}