某个安全芯片在调试模式下会输出 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)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐