2026 能源网络安全大赛 crypto 2
·
某个安全芯片在调试模式下会输出 ECDSA 签名过程中的一小段运行窗口。开发人员只保留了每次随机数的高位部分,认为低位没有公开,因此不会泄露私钥。
附件给出了曲线名称、公开密钥、未知低位长度,以及多条签名记录和对应的随机数高位窗口。请利用这些不完整的窗口信息恢复签名私钥。私钥按大端字节还原后就是本题 flag。
{
"curve": "secp256k1",
"unknown_low_bits": 44,
"pubkey": "02f9c0050330ed90988be87df9d7cdf5d8b33b2819c53c2371ae29ed51540a35e5",
"samples": [
{
"msg": "73636f70652d77696e646f773a00009d991a72234ddf8758401a32a73d314c5ba7509e",
"sig_der": "304502201400aa7f3b9f03e56ea68406e2239de51564a2df79ef3f43c921b6ffb51b3475022100fcef47d0d41b05fd54ffd17ff9a140e87e63fad15519aad5e25d54487bfb4021",
"k_high": "5408986911649339014179284354967337137147213194751495774028238972"
},
{
"msg": "73636f70652d77696e646f773a00013ab383b133e5641ce069e246ae12b8157d35a810",
"sig_der": "304402206f7cd5016fd401a1fadf21832a6508bd4d5e38dcc6a97bcef803333bd32c4a350220437ad1c56fbdf1607aaf1f5ca1286d0fcf140ae389c79674bfdaae5096975665",
"k_high": "3236252854785305893483165508344476386502948593540148093291539767"
},
{
"msg": "73636f70652d77696e646f773a00021ce235913f9f378ac5496ab7765c6aaa7d12f37a",
"sig_der": "304402200a3773a03444eafb2315393485453f6da42dc8ccc2692becc8564e1afdd3887c0220681ea571ec5afd7d8d31e65d6d4091c9a739f99b66f29ed4a8b63fe48b2af229",
"k_high": "85219733905389319284754704832348708007224924872241514839383077"
},
{
"msg": "73636f70652d77696e646f773a0003ead5adec68db4b036eea13b7540e6ea4d97fa978",
"sig_der": "30450220269470c7b082fc802a3a96f183e135b6b0e512f3ff7dde18bd0e75cc6842d7c60221009681ccf9ebafc054f19a00434341428b8976e9fefa5be886b8900505cfa6019e",
"k_high": "6247048329667159531464752640843827201392853375613053980455743481"
},
{
"msg": "73636f70652d77696e646f773a0004eccff4d7d7bdd86b71bb2d64e5cb62ce66a017bb",
"sig_der": "3044022068f20382d698e783bc7bb2aa1b628731c37eab54d8287cc30ec4169e3aec0b4702204cbe280f10c573ab6350e267bf807707964789cd82f6ed7290f9eff3704e566d",
"k_high": "1204843114134395798117373728729205853539433349365794994186742714"
},
{
"msg": "73636f70652d77696e646f773a0005423de0a23e7aa2e02508e70fe33e05a6bc98ecf5",
"sig_der": "304502210091bae9034b9a65c8cf83c3d17dc0272c8c5620ad0597e74a351b2d4e5bb67e8502204553dbef028589cd1f402e436305a7bdaf27c3948aaf70c3d1d8428c80369261",
"k_high": "1568900240068196814938550901127454364123216772186663711557604076"
},
{
"msg": "73636f70652d77696e646f773a00069173acbab41bbe242f2eec359155886b24d53567",
"sig_der": "304502204b443a129b82d58b5cc8e65e8ca5d4b22d8317ac4ad9148eb28e65c3f38c178d022100a6ef986d0f336f0e24b4e0e74acbdccade502ab7d82dfbe8f545bf78014dd17d",
"k_high": "3883929984509098241408757272444620127166124698003856304153021261"
},
{
"msg": "73636f70652d77696e646f773a000755a6d6490104aee744a8a6847dd7b7b3b6d4b7e0",
"sig_der": "30450221009c12f3ae2f4b716c838c0d9d6dd16f67e0ac3a97ba4c66f2d4ffeb781d42177302204cbb348a25546ac83ff85cd075b68c2567b923addd1655b97f00798eb2880843",
"k_high": "3651127735667494613388578606876429200531940240135747294210445376"
},
{
"msg": "73636f70652d77696e646f773a000881cd868683ca431a5079717d90f00f535eaecc2f",
"sig_der": "3046022100eaf82db9f65a13a3dea535068c5335ad0a5706e06b2b8eb9de146192bad3d5a70221009081d3f0d2cb4b84e34033a2c98372b9ccde2f548b575e9f48f40e1caf4a8923",
"k_high": "6208932273951163309872574158607462546176665143699107505371915944"
},
{
"msg": "73636f70652d77696e646f773a0009d591761868ece168e1125730392b3b27d762a92f",
"sig_der": "304402206215a260a91575f9a39bbc2598c39a1b84d3f8e60bd0ea31487321262e4973dd02206541e3ce46647c5d07b397630885be80c1dd9c72e8a84b467717b142609c1bda",
"k_high": "2111190694503721038778684270826486081472779374529130075522835760"
},
{
"msg": "73636f70652d77696e646f773a000a70180369418df1fe3ba53e7dc0f13976c8fe1745",
"sig_der": "304602210080e3738f7e2637b54194489a27dc76060a147b2606c188e62cf272a2ad7b5a1c022100cffad6570d392c897e82c0c49a915ba8df5be148baea2ade8b9cc53d59a446c2",
"k_high": "2419589262778551944646281013134043346957348112811985199292072094"
},
{
"msg": "73636f70652d77696e646f773a000bae2bea3d0115528323b18ddf18f2c6275079180d",
"sig_der": "304602210090b131752084d8d97fe49d5ae79c7fe2bd45a999a2a99e218bf17478c36bf92c0221008df3ff15eb9d95080e790c2702b0d01cb594dccf195aec694cd900136b1a336a",
"k_high": "2945261310022283046010561366198413992288468715911124703776174887"
},
{
"msg": "73636f70652d77696e646f773a000c0b9862c341a7362ba926e993dfcaf7c80dd563ec",
"sig_der": "3046022100f3833f3627f17fe69d86af9b3b82c6e7afb0b2d89725104fc97bf5ebd32bd27c022100df58af6c04da0f0bcc3c3fd4708b005ca47b3041da48e65ed2d3035ea527d245",
"k_high": "6464475823748418219679592287146094343986765627968206371926637756"
},
{
"msg": "73636f70652d77696e646f773a000dddbd533d619182eea12473b9d22f99005aa28cdf",
"sig_der": "3045022100e33ab6799159d5494625a05ef6029da671b563e94877ee7ae89b490da62f325b02204d229be2f3eb36d62e83d7f6c2159abf7a3b5df6a452b8595a43cf338a70dbb8",
"k_high": "4513446151267957104545395808127518497672982326820324746919383619"
},
{
"msg": "73636f70652d77696e646f773a000e8921dbe9c299645680287a41b06bdc4df1b5251a",
"sig_der": "304402202cdf096152fc4d546c9b74fc269fde1c44310f74515752d9094ca70ff39be60e02203ad204639e6d3827f83c0d68cb3e7370e693017805b83d1b792d72d2de1e44ad",
"k_high": "3550724015864371567752803149479272817524078933378471431303805604"
},
{
"msg": "73636f70652d77696e646f773a000f0ff12bcb52f2fce21e813cccc90454cc8e6b9596",
"sig_der": "304502206e3ae1abac2d98ccd80b6efc1d05a10a5a631bec246cd40baf57a2f88ded80f902210086481559be4e1486cff378b9df96db30b6c69f913e8d36338c274337b6e7bfbe",
"k_high": "4149637611929257400074482546726853626334817533252726942913941389"
},
{
"msg": "73636f70652d77696e646f773a0010a53009ffff8e989b6c72b345ea14cab123c51907",
"sig_der": "30460221008369491682dd49445b35d88df6304b7a644f7012dcea7e947ad7b237b5d5b32d022100f57c6ed34c48566ccec8444dd4494d6e73f276490bc6978f27d15993f3b0092e",
"k_high": "858191916625962940241560986312059631618750997308869843295547912"
},
{
"msg": "73636f70652d77696e646f773a00114ec7dda4bf476a2373cb6b010679738f2e6bd721",
"sig_der": "304402200a7d871ec82421aa9af74ca08d2f1d8359e040c488de70ee408a93bbbc4ce643022037986f6db0babcc8ad09f60688810d7406109a36ed08af841a269d8875910fd6",
"k_high": "4288208220489476787482036311212294606570730176025153093296768445"
},
{
"msg": "73636f70652d77696e646f773a00123d19acb594c0597e00da52518447a55b2775e54d",
"sig_der": "30450221008b857509fa702372c45a38abd4d78f59ab01e3d6b326f0c34673d3dfb24caa6302207dfd4323203a84eecc506d41f0756a2f449c893862f0d083b012a31cc404f929",
"k_high": "145161247198959749323886389752274856426607453870172994665813325"
},
{
"msg": "73636f70652d77696e646f773a0013e7e6a3fa7d8af98f85c0932a8ce022abc12945ba",
"sig_der": "3045022066d82f63584680d05d6a43cd5172f854b0464ed32fa2408543a71d9328e5d3e0022100e74be6fb31f2e1539ad506917d9af7827d2d5a2454cae1914960ef5d430bd891",
"k_high": "4507125239388902261383264371055735022631688719711147215751663639"
},
{
"msg": "73636f70652d77696e646f773a0014f0a9627a4712548a9601a9f82d6635cfa8afa550",
"sig_der": "3046022100e8f06665fb99051f7d34e21726f0b3053814c9f2bf3e05b6bc4c82513bc486080221008fcda4c7b2f25b1e172fe637d536890af98878037cd1d3ee4dd72ce05718af1f",
"k_high": "3254941239244965208221846452599259303114531021648087928908071602"
},
{
"msg": "73636f70652d77696e646f773a00158c971a5bea53232780ed42e3ca2891cbe85459d9",
"sig_der": "304502200db2e11f08d30911ef91c519a449916e795997a73b095b9fa2f833ffc34ff6f0022100a39a4f78ac8fca438e69359d5d6fdba1f2d6b0197ac0bc6230de9fdf2c998b72",
"k_high": "141599214416447799397795690035694188330828205353726776414767976"
},
{
"msg": "73636f70652d77696e646f773a00162c59a520220fb2ae7ff715ae2388617199ceb673",
"sig_der": "3045022048e2dc556bc33b710086465270d19415a45b1a8cb501e12d1dd5ade4cb44dd21022100cae39e231b68b631a98bff990cb7fe09cccffb9471a7264969e2bc0ef271eb12",
"k_high": "5980347743381161357498392519550632529319772908818401591243709177"
},
{
"msg": "73636f70652d77696e646f773a00178e03661afa40d116e84813f6d7290ae4464b7f55",
"sig_der": "3046022100d58648d5af98fe8415dd7493b9afe5aa550a6330c7c02c8d570918f7991a99a1022100f1a774fb5b79821e54419a7e71840b460550a7ddebc9d8ac634a30f3e3b5b6dc",
"k_high": "3077805758367582113931723467295087698765288657429297708427408459"
},
{
"msg": "73636f70652d77696e646f773a001847c2c240482636b064e87470f9c8d1f2a34013dc",
"sig_der": "304502205613a4830c5f1ccbae986c4473c58dea71db559befbfa1f90f2c6ace8050eb0402210096b5dc8673b834fa6ac724480c1da3771caab7b0750af5f6ab6a6b8dc46fb218",
"k_high": "2536564028471815497002341312467082154996783471998297085232650426"
},
{
"msg": "73636f70652d77696e646f773a0019ce69ceb1cadbfde548b49e6f9ed93bf275e7eab6",
"sig_der": "304502203e07aea9aee258cdfc8ebb21d5f769e79ddfcc2d0c0da0b55d020cedc12f1e3c022100d70cc56b09917ec64234f4f6a182c9e5c4eb7bf21393d2fabcdc3381256cdc66",
"k_high": "1006032537921465534515412168840679274555819663426690737515049814"
},
{
"msg": "73636f70652d77696e646f773a001a7e10d2b8569df8f027ea5b0131824ce4419e1fd1",
"sig_der": "3046022100adcc8627fd44f775db7ea1eb64cc98b0f8ba3c536e725e3034b029f1713a836c022100dca4b4d5dcbb04fd248227c91416422536c9c52fa059a0b0a09526bade5ec456",
"k_high": "2354966701929622604058760585932971838115857926761027739161649017"
},
{
"msg": "73636f70652d77696e646f773a001b6e4eca87511f7f62936cfb06737945269b75eb0f",
"sig_der": "304502207778d1ac4c894b9960430abc27df0efba97268b53f503531a739052f046fe867022100e44d1944001f0d13006776c5edf16439977ff9e6235a67e14c3c418da2f8ea2a",
"k_high": "5409697899060841992696142840823332010795393021287330353301058507"
}
]
}
wp
import hashlib
from Crypto.Util.number import bytes_to_long, long_to_bytes
samples= [
{
"msg": "73636f70652d77696e646f773a00009d991a72234ddf8758401a32a73d314c5ba7509e",
"sig_der": "304502201400aa7f3b9f03e56ea68406e2239de51564a2df79ef3f43c921b6ffb51b3475022100fcef47d0d41b05fd54ffd17ff9a140e87e63fad15519aad5e25d54487bfb4021",
"k_high": "5408986911649339014179284354967337137147213194751495774028238972"
},
{
"msg": "73636f70652d77696e646f773a00013ab383b133e5641ce069e246ae12b8157d35a810",
"sig_der": "304402206f7cd5016fd401a1fadf21832a6508bd4d5e38dcc6a97bcef803333bd32c4a350220437ad1c56fbdf1607aaf1f5ca1286d0fcf140ae389c79674bfdaae5096975665",
"k_high": "3236252854785305893483165508344476386502948593540148093291539767"
},
{
"msg": "73636f70652d77696e646f773a00021ce235913f9f378ac5496ab7765c6aaa7d12f37a",
"sig_der": "304402200a3773a03444eafb2315393485453f6da42dc8ccc2692becc8564e1afdd3887c0220681ea571ec5afd7d8d31e65d6d4091c9a739f99b66f29ed4a8b63fe48b2af229",
"k_high": "85219733905389319284754704832348708007224924872241514839383077"
},
{
"msg": "73636f70652d77696e646f773a0003ead5adec68db4b036eea13b7540e6ea4d97fa978",
"sig_der": "30450220269470c7b082fc802a3a96f183e135b6b0e512f3ff7dde18bd0e75cc6842d7c60221009681ccf9ebafc054f19a00434341428b8976e9fefa5be886b8900505cfa6019e",
"k_high": "6247048329667159531464752640843827201392853375613053980455743481"
},
{
"msg": "73636f70652d77696e646f773a0004eccff4d7d7bdd86b71bb2d64e5cb62ce66a017bb",
"sig_der": "3044022068f20382d698e783bc7bb2aa1b628731c37eab54d8287cc30ec4169e3aec0b4702204cbe280f10c573ab6350e267bf807707964789cd82f6ed7290f9eff3704e566d",
"k_high": "1204843114134395798117373728729205853539433349365794994186742714"
},
{
"msg": "73636f70652d77696e646f773a0005423de0a23e7aa2e02508e70fe33e05a6bc98ecf5",
"sig_der": "304502210091bae9034b9a65c8cf83c3d17dc0272c8c5620ad0597e74a351b2d4e5bb67e8502204553dbef028589cd1f402e436305a7bdaf27c3948aaf70c3d1d8428c80369261",
"k_high": "1568900240068196814938550901127454364123216772186663711557604076"
},
{
"msg": "73636f70652d77696e646f773a00069173acbab41bbe242f2eec359155886b24d53567",
"sig_der": "304502204b443a129b82d58b5cc8e65e8ca5d4b22d8317ac4ad9148eb28e65c3f38c178d022100a6ef986d0f336f0e24b4e0e74acbdccade502ab7d82dfbe8f545bf78014dd17d",
"k_high": "3883929984509098241408757272444620127166124698003856304153021261"
},
{
"msg": "73636f70652d77696e646f773a000755a6d6490104aee744a8a6847dd7b7b3b6d4b7e0",
"sig_der": "30450221009c12f3ae2f4b716c838c0d9d6dd16f67e0ac3a97ba4c66f2d4ffeb781d42177302204cbb348a25546ac83ff85cd075b68c2567b923addd1655b97f00798eb2880843",
"k_high": "3651127735667494613388578606876429200531940240135747294210445376"
},
{
"msg": "73636f70652d77696e646f773a000881cd868683ca431a5079717d90f00f535eaecc2f",
"sig_der": "3046022100eaf82db9f65a13a3dea535068c5335ad0a5706e06b2b8eb9de146192bad3d5a70221009081d3f0d2cb4b84e34033a2c98372b9ccde2f548b575e9f48f40e1caf4a8923",
"k_high": "6208932273951163309872574158607462546176665143699107505371915944"
},
{
"msg": "73636f70652d77696e646f773a0009d591761868ece168e1125730392b3b27d762a92f",
"sig_der": "304402206215a260a91575f9a39bbc2598c39a1b84d3f8e60bd0ea31487321262e4973dd02206541e3ce46647c5d07b397630885be80c1dd9c72e8a84b467717b142609c1bda",
"k_high": "2111190694503721038778684270826486081472779374529130075522835760"
},
{
"msg": "73636f70652d77696e646f773a000a70180369418df1fe3ba53e7dc0f13976c8fe1745",
"sig_der": "304602210080e3738f7e2637b54194489a27dc76060a147b2606c188e62cf272a2ad7b5a1c022100cffad6570d392c897e82c0c49a915ba8df5be148baea2ade8b9cc53d59a446c2",
"k_high": "2419589262778551944646281013134043346957348112811985199292072094"
},
{
"msg": "73636f70652d77696e646f773a000bae2bea3d0115528323b18ddf18f2c6275079180d",
"sig_der": "304602210090b131752084d8d97fe49d5ae79c7fe2bd45a999a2a99e218bf17478c36bf92c0221008df3ff15eb9d95080e790c2702b0d01cb594dccf195aec694cd900136b1a336a",
"k_high": "2945261310022283046010561366198413992288468715911124703776174887"
},
{
"msg": "73636f70652d77696e646f773a000c0b9862c341a7362ba926e993dfcaf7c80dd563ec",
"sig_der": "3046022100f3833f3627f17fe69d86af9b3b82c6e7afb0b2d89725104fc97bf5ebd32bd27c022100df58af6c04da0f0bcc3c3fd4708b005ca47b3041da48e65ed2d3035ea527d245",
"k_high": "6464475823748418219679592287146094343986765627968206371926637756"
},
{
"msg": "73636f70652d77696e646f773a000dddbd533d619182eea12473b9d22f99005aa28cdf",
"sig_der": "3045022100e33ab6799159d5494625a05ef6029da671b563e94877ee7ae89b490da62f325b02204d229be2f3eb36d62e83d7f6c2159abf7a3b5df6a452b8595a43cf338a70dbb8",
"k_high": "4513446151267957104545395808127518497672982326820324746919383619"
},
{
"msg": "73636f70652d77696e646f773a000e8921dbe9c299645680287a41b06bdc4df1b5251a",
"sig_der": "304402202cdf096152fc4d546c9b74fc269fde1c44310f74515752d9094ca70ff39be60e02203ad204639e6d3827f83c0d68cb3e7370e693017805b83d1b792d72d2de1e44ad",
"k_high": "3550724015864371567752803149479272817524078933378471431303805604"
},
{
"msg": "73636f70652d77696e646f773a000f0ff12bcb52f2fce21e813cccc90454cc8e6b9596",
"sig_der": "304502206e3ae1abac2d98ccd80b6efc1d05a10a5a631bec246cd40baf57a2f88ded80f902210086481559be4e1486cff378b9df96db30b6c69f913e8d36338c274337b6e7bfbe",
"k_high": "4149637611929257400074482546726853626334817533252726942913941389"
},
{
"msg": "73636f70652d77696e646f773a0010a53009ffff8e989b6c72b345ea14cab123c51907",
"sig_der": "30460221008369491682dd49445b35d88df6304b7a644f7012dcea7e947ad7b237b5d5b32d022100f57c6ed34c48566ccec8444dd4494d6e73f276490bc6978f27d15993f3b0092e",
"k_high": "858191916625962940241560986312059631618750997308869843295547912"
},
{
"msg": "73636f70652d77696e646f773a00114ec7dda4bf476a2373cb6b010679738f2e6bd721",
"sig_der": "304402200a7d871ec82421aa9af74ca08d2f1d8359e040c488de70ee408a93bbbc4ce643022037986f6db0babcc8ad09f60688810d7406109a36ed08af841a269d8875910fd6",
"k_high": "4288208220489476787482036311212294606570730176025153093296768445"
},
{
"msg": "73636f70652d77696e646f773a00123d19acb594c0597e00da52518447a55b2775e54d",
"sig_der": "30450221008b857509fa702372c45a38abd4d78f59ab01e3d6b326f0c34673d3dfb24caa6302207dfd4323203a84eecc506d41f0756a2f449c893862f0d083b012a31cc404f929",
"k_high": "145161247198959749323886389752274856426607453870172994665813325"
},
{
"msg": "73636f70652d77696e646f773a0013e7e6a3fa7d8af98f85c0932a8ce022abc12945ba",
"sig_der": "3045022066d82f63584680d05d6a43cd5172f854b0464ed32fa2408543a71d9328e5d3e0022100e74be6fb31f2e1539ad506917d9af7827d2d5a2454cae1914960ef5d430bd891",
"k_high": "4507125239388902261383264371055735022631688719711147215751663639"
},
{
"msg": "73636f70652d77696e646f773a0014f0a9627a4712548a9601a9f82d6635cfa8afa550",
"sig_der": "3046022100e8f06665fb99051f7d34e21726f0b3053814c9f2bf3e05b6bc4c82513bc486080221008fcda4c7b2f25b1e172fe637d536890af98878037cd1d3ee4dd72ce05718af1f",
"k_high": "3254941239244965208221846452599259303114531021648087928908071602"
},
{
"msg": "73636f70652d77696e646f773a00158c971a5bea53232780ed42e3ca2891cbe85459d9",
"sig_der": "304502200db2e11f08d30911ef91c519a449916e795997a73b095b9fa2f833ffc34ff6f0022100a39a4f78ac8fca438e69359d5d6fdba1f2d6b0197ac0bc6230de9fdf2c998b72",
"k_high": "141599214416447799397795690035694188330828205353726776414767976"
},
{
"msg": "73636f70652d77696e646f773a00162c59a520220fb2ae7ff715ae2388617199ceb673",
"sig_der": "3045022048e2dc556bc33b710086465270d19415a45b1a8cb501e12d1dd5ade4cb44dd21022100cae39e231b68b631a98bff990cb7fe09cccffb9471a7264969e2bc0ef271eb12",
"k_high": "5980347743381161357498392519550632529319772908818401591243709177"
},
{
"msg": "73636f70652d77696e646f773a00178e03661afa40d116e84813f6d7290ae4464b7f55",
"sig_der": "3046022100d58648d5af98fe8415dd7493b9afe5aa550a6330c7c02c8d570918f7991a99a1022100f1a774fb5b79821e54419a7e71840b460550a7ddebc9d8ac634a30f3e3b5b6dc",
"k_high": "3077805758367582113931723467295087698765288657429297708427408459"
},
{
"msg": "73636f70652d77696e646f773a001847c2c240482636b064e87470f9c8d1f2a34013dc",
"sig_der": "304502205613a4830c5f1ccbae986c4473c58dea71db559befbfa1f90f2c6ace8050eb0402210096b5dc8673b834fa6ac724480c1da3771caab7b0750af5f6ab6a6b8dc46fb218",
"k_high": "2536564028471815497002341312467082154996783471998297085232650426"
},
{
"msg": "73636f70652d77696e646f773a0019ce69ceb1cadbfde548b49e6f9ed93bf275e7eab6",
"sig_der": "304502203e07aea9aee258cdfc8ebb21d5f769e79ddfcc2d0c0da0b55d020cedc12f1e3c022100d70cc56b09917ec64234f4f6a182c9e5c4eb7bf21393d2fabcdc3381256cdc66",
"k_high": "1006032537921465534515412168840679274555819663426690737515049814"
},
{
"msg": "73636f70652d77696e646f773a001a7e10d2b8569df8f027ea5b0131824ce4419e1fd1",
"sig_der": "3046022100adcc8627fd44f775db7ea1eb64cc98b0f8ba3c536e725e3034b029f1713a836c022100dca4b4d5dcbb04fd248227c91416422536c9c52fa059a0b0a09526bade5ec456",
"k_high": "2354966701929622604058760585932971838115857926761027739161649017"
},
{
"msg": "73636f70652d77696e646f773a001b6e4eca87511f7f62936cfb06737945269b75eb0f",
"sig_der": "304502207778d1ac4c894b9960430abc27df0efba97268b53f503531a739052f046fe867022100e44d1944001f0d13006776c5edf16439977ff9e6235a67e14c3c418da2f8ea2a",
"k_high": "5409697899060841992696142840823332010795393021287330353301058507"
}
]
# ---------- secp256k1 参数 ----------
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
F = GF(p)
E = EllipticCurve(F, [0, 7])
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
G = E(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
# ---------- 公钥解压 ----------
pubkey_hex = "02f9c0050330ed90988be87df9d7cdf5d8b33b2819c53c2371ae29ed51540a35e5"
def uncompress(pk):
pref = pk[:2]
x = int(pk[2:], 16)
y_sq = (pow(x, 3, p) + 7) % p
y = pow(y_sq, (p + 1) // 4, p)
y_int = int(y)
if (pref == "02" and y_int % 2 != 0) or (pref == "03" and y_int % 2 == 0):
y = p - y
return E(x, y)
Q = uncompress(pubkey_hex)
print(f"[*] 公钥解压成功")
# ---------- 题目参数 ----------
L = 44
K = 1 << (L - 1) # 2^43
T = 1 << L # 2^44
# ---------- 请将28条样本完整粘贴在此 ----------
raw_samples = samples
# ---------- 解析签名 ----------
def parse_der(der_hex):
der = bytes.fromhex(der_hex)
pos = 2
if der[1] & 0x80:
lenlen = der[1] & 0x7f
pos += lenlen
len_r = der[pos + 1]
r = bytes_to_long(der[pos + 2 : pos + 2 + len_r])
pos += 2 + len_r
len_s = der[pos + 1]
s = bytes_to_long(der[pos + 2 : pos + 2 + len_s])
return r, s
# 预处理所有样本(使用完整消息,不去前缀)
all_data = []
for smp in raw_samples:
msg = bytes.fromhex(smp["msg"]) # 完整消息
h = bytes_to_long(hashlib.sha256(msg).digest()) % n
r, s = parse_der(smp["sig_der"])
s_inv = pow(s, -1, n)
a = int((s_inv * r) % n)
k_high = int(smp["k_high"])
b_val = int((s_inv * h - k_high * T) % n)
b_prime = (b_val - K) % n # ★ 修正:减 K,不是加 K
all_data.append((a, b_prime, h, r, s, k_high))
print(f"[*] 成功解析 {len(all_data)} 条签名")
# ---------- 攻击函数(消去 d,使用前 use 条,LLL) ----------
def recover(use):
subset = all_data[:use]
m = len(subset)
pivot = 0
a0, b0, h0, r0, s0, kh0 = subset[pivot]
inv_a0 = pow(a0, -1, n)
c_list, rhs_list = [], []
for i in range(1, m):
ai, bi, _, _, _, _ = subset[i]
ci = int((ai * inv_a0) % n)
c_list.append(ci)
# rhs_i = c_i * b0 - bi (mod n)
rhs_i = int((ci * b0 - bi) % n)
rhs_list.append(rhs_i)
dim = m + 1 # (m-1)个 l_i,1个 t0,1个常数
flat = []
for i in range(dim):
for j in range(dim):
if i < dim-2 and j < dim-2:
flat.append(int(n) if i==j else 0)
elif i == dim-2: # t0 行
if j < dim-2:
flat.append(int(c_list[j]))
elif j == dim-2:
flat.append(1)
else:
flat.append(0)
elif i == dim-1: # 常数行
if j < dim-2:
flat.append(int((-rhs_list[j]) % n))
elif j == dim-2:
flat.append(0)
else:
flat.append(K)
else:
flat.append(0)
B = matrix(ZZ, dim, dim, flat)
B_red = B.LLL()
for row in B_red:
if row[-1] == K or row[-1] == -K:
t0 = row[-2] if row[-1] == K else -row[-2]
if -K <= t0 < K:
k_low = t0 + K
k = (kh0 << L) + k_low
d = int(((s0 * k - h0) * pow(r0, -1, n)) % n)
if d * G == Q:
return d
# 缩放情况
if row[-1] != 0 and K % abs(row[-1]) == 0:
scale = K // row[-1]
t0 = row[-2] // scale
if -K <= t0 < K:
k_low = t0 + K
k = (kh0 << L) + k_low
d = int(((s0 * k - h0) * pow(r0, -1, n)) % n)
if d * G == Q:
return d
return None
# ---------- 主流程:只试 6,7,8 条 ----------
found = False
for use in [6, 7, 8]:
print(f"[*] 尝试 {use} 条签名 (LLL)...")
d = recover(use)
if d is not None:
print(f"\n{'='*50}")
print(f"[+] 私钥恢复成功! (使用 {use} 条签名)")
print(f"d = {hex(d)}")
flag_bytes = long_to_bytes(int(d), 32)
print(f"Flag: {flag_bytes}")
print(f"{'='*50}")
found = True
break
if not found:
print("[-] 仍未找到,请检查数据或尝试更多样本。")
本质还是格,hidden number problem(HNP)
更多推荐
所有评论(0)