How can my private key be revealed if I use the same nonce while generating the signature?How do you derive the private key from two signatures that share the same k value?How can I use message signing to prove that I have private keys for many different accounts?Step by Step - how does sending 1 bitcoin work?Can same private key generate multiple addresses?How a private key can be invalid?Multi signature wallet I'll know the private keyGenerating private/public key and using ECC and EC_POINT_mul() functionDigital Signature and private/public keyWhat does a bitcoin transaction contain?generating private key from bip39 seedHow can you calculate the inverse of S component of signature, while you cannot do it in ECC to calculate private key from public key?

Doing something right before you need it - expression for this?

Operational amplifier as comparator at high frequency

Is it inappropriate for a student to attend their mentor's dissertation defense?

expand `ifthenelse` immediately

List<T>.RemoveAll() efficiency / compiler optimisation

How to regain access to running applications after accidentally zapping X.org?

Get value of a counter

How old can references or sources in a thesis be?

Can a Cauchy sequence converge for one metric while not converging for another?

Theorems that impeded progress

Why can't we play rap on piano?

Submarine propulsion using evaporation

Rock identification in KY

Revoked SSL certificate

Question on branch cuts and branch points

Was any UN Security Council vote triple-vetoed?

How to format long polynomial?

Is it unprofessional to ask if a job posting on GlassDoor is real?

70s TV miniseries: antagonist gets followers to his pacifist ideology through mind control devices

Can I ask the recruiters in my resume to put the reason why I am rejected?

What's the point of deactivating Num Lock on login screens?

Check if button is pressed in QGIS 3 module

Important Resources for Dark Age Civilizations?

Filter any system log file by date or date range



How can my private key be revealed if I use the same nonce while generating the signature?


How do you derive the private key from two signatures that share the same k value?How can I use message signing to prove that I have private keys for many different accounts?Step by Step - how does sending 1 bitcoin work?Can same private key generate multiple addresses?How a private key can be invalid?Multi signature wallet I'll know the private keyGenerating private/public key and using ECC and EC_POINT_mul() functionDigital Signature and private/public keyWhat does a bitcoin transaction contain?generating private key from bip39 seedHow can you calculate the inverse of S component of signature, while you cannot do it in ECC to calculate private key from public key?













2















I know it is well understood that it is not a good practice to use the same nonce while generating the signatures, but I am not getting the math right.



Assume I have some UTXOs that are controlled by my private key Q. Say I have spent two of the UTXOs using nonce 'N' to generate my signature. Now the (R,S) components of the signature are public and the transactions are public so everyone has access to them.



S1 = N^(-1)*[hash(m1) + Q*R] mod p


S2 = N^(-1)*[hash(m2) + Q*R] mod p



S1 - S2 = N^(-1)*[hash(m1) - hash(m2)] mod p


Even though we know S1, S2, m1 and m2, isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?










share|improve this question






















  • Possible duplicate of How do you derive the private key from two signatures that share the same k value?

    – MCCCS
    Mar 29 at 15:44











  • Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

    – Ugam Kamat
    Apr 1 at 7:24















2















I know it is well understood that it is not a good practice to use the same nonce while generating the signatures, but I am not getting the math right.



Assume I have some UTXOs that are controlled by my private key Q. Say I have spent two of the UTXOs using nonce 'N' to generate my signature. Now the (R,S) components of the signature are public and the transactions are public so everyone has access to them.



S1 = N^(-1)*[hash(m1) + Q*R] mod p


S2 = N^(-1)*[hash(m2) + Q*R] mod p



S1 - S2 = N^(-1)*[hash(m1) - hash(m2)] mod p


Even though we know S1, S2, m1 and m2, isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?










share|improve this question






















  • Possible duplicate of How do you derive the private key from two signatures that share the same k value?

    – MCCCS
    Mar 29 at 15:44











  • Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

    – Ugam Kamat
    Apr 1 at 7:24













2












2








2








I know it is well understood that it is not a good practice to use the same nonce while generating the signatures, but I am not getting the math right.



Assume I have some UTXOs that are controlled by my private key Q. Say I have spent two of the UTXOs using nonce 'N' to generate my signature. Now the (R,S) components of the signature are public and the transactions are public so everyone has access to them.



S1 = N^(-1)*[hash(m1) + Q*R] mod p


S2 = N^(-1)*[hash(m2) + Q*R] mod p



S1 - S2 = N^(-1)*[hash(m1) - hash(m2)] mod p


Even though we know S1, S2, m1 and m2, isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?










share|improve this question














I know it is well understood that it is not a good practice to use the same nonce while generating the signatures, but I am not getting the math right.



Assume I have some UTXOs that are controlled by my private key Q. Say I have spent two of the UTXOs using nonce 'N' to generate my signature. Now the (R,S) components of the signature are public and the transactions are public so everyone has access to them.



S1 = N^(-1)*[hash(m1) + Q*R] mod p


S2 = N^(-1)*[hash(m2) + Q*R] mod p



S1 - S2 = N^(-1)*[hash(m1) - hash(m2)] mod p


Even though we know S1, S2, m1 and m2, isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?







private-key signature cryptography






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 26 at 16:41









Ugam KamatUgam Kamat

49313




49313












  • Possible duplicate of How do you derive the private key from two signatures that share the same k value?

    – MCCCS
    Mar 29 at 15:44











  • Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

    – Ugam Kamat
    Apr 1 at 7:24

















  • Possible duplicate of How do you derive the private key from two signatures that share the same k value?

    – MCCCS
    Mar 29 at 15:44











  • Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

    – Ugam Kamat
    Apr 1 at 7:24
















Possible duplicate of How do you derive the private key from two signatures that share the same k value?

– MCCCS
Mar 29 at 15:44





Possible duplicate of How do you derive the private key from two signatures that share the same k value?

– MCCCS
Mar 29 at 15:44













Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

– Ugam Kamat
Apr 1 at 7:24





Not necessarily. My question asks further expansion of the answer derived from that question, asking how solving for N^(-1) is not finding a solution to the discrete logarithm problem.

– Ugam Kamat
Apr 1 at 7:24










2 Answers
2






active

oldest

votes


















7














Let me rewrite your question in a different notation, where all lowercase values are integers and uppercase values are points.



  • The group generator is G (a known constant).

  • The private key is q, its corresponding public key is Q = qG.

  • The nonce is n, its corresponding point is R = nG.

  • The X coordinate of R is r.

  • The hash function is h(x).

  • A signature is (r,s), where s is computed as n-1(h(m) + qr).

  • A signature is valid iff r = x(s-1(h(m)G + rQ)).

Now for the two signatures it holds that:



  • s1 = n-1(h(m1) + qr)

  • s2 = n-1(h(m2) + qr)

  • s1 - s2 = n-1(h(m1) - h(m2))

  • n = (s1 - s2)-1(h(m1) - h(m2))

As s1 and s2 are just integers, (s1 - s2)-1 can be trivially computed using a modular inverse; there are no elliptic curve points involved here (over which this problem would be hard).



Once you know n, you can find q by rewriting the first equation:



  • ns1 = h(m1) + qr

  • ns1 - h(m1) = qr

  • q = r-1(ns1 - h(m1))





share|improve this answer
































    1















    isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?




    No, it is not. This does not require finding the discrete logarithm at all. Solving the discrete logarithm is finding the exponent to a known base. However in this problem we are trying to find the base and know what the exponent is. Furthermore, this known exponent is -1 for which finding the base of something raise to -1 is to raise the result to -1 again, i.e. taking the inverse of the inverse.



    There are algorithms that exist to find the modular inverse of a number which is how N^(-1) is found in the first place. To find N, you just need to take the inverse of N^(-1) because of the identity that an inverse an inverse is the element itself.






    share|improve this answer























    • Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

      – Ugam Kamat
      Mar 26 at 18:40






    • 1





      No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

      – Andrew Chow
      Mar 26 at 19:03











    • That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

      – Ugam Kamat
      Mar 26 at 19:20











    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "308"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    noCode: true, onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fbitcoin.stackexchange.com%2fquestions%2f85638%2fhow-can-my-private-key-be-revealed-if-i-use-the-same-nonce-while-generating-the%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    7














    Let me rewrite your question in a different notation, where all lowercase values are integers and uppercase values are points.



    • The group generator is G (a known constant).

    • The private key is q, its corresponding public key is Q = qG.

    • The nonce is n, its corresponding point is R = nG.

    • The X coordinate of R is r.

    • The hash function is h(x).

    • A signature is (r,s), where s is computed as n-1(h(m) + qr).

    • A signature is valid iff r = x(s-1(h(m)G + rQ)).

    Now for the two signatures it holds that:



    • s1 = n-1(h(m1) + qr)

    • s2 = n-1(h(m2) + qr)

    • s1 - s2 = n-1(h(m1) - h(m2))

    • n = (s1 - s2)-1(h(m1) - h(m2))

    As s1 and s2 are just integers, (s1 - s2)-1 can be trivially computed using a modular inverse; there are no elliptic curve points involved here (over which this problem would be hard).



    Once you know n, you can find q by rewriting the first equation:



    • ns1 = h(m1) + qr

    • ns1 - h(m1) = qr

    • q = r-1(ns1 - h(m1))





    share|improve this answer





























      7














      Let me rewrite your question in a different notation, where all lowercase values are integers and uppercase values are points.



      • The group generator is G (a known constant).

      • The private key is q, its corresponding public key is Q = qG.

      • The nonce is n, its corresponding point is R = nG.

      • The X coordinate of R is r.

      • The hash function is h(x).

      • A signature is (r,s), where s is computed as n-1(h(m) + qr).

      • A signature is valid iff r = x(s-1(h(m)G + rQ)).

      Now for the two signatures it holds that:



      • s1 = n-1(h(m1) + qr)

      • s2 = n-1(h(m2) + qr)

      • s1 - s2 = n-1(h(m1) - h(m2))

      • n = (s1 - s2)-1(h(m1) - h(m2))

      As s1 and s2 are just integers, (s1 - s2)-1 can be trivially computed using a modular inverse; there are no elliptic curve points involved here (over which this problem would be hard).



      Once you know n, you can find q by rewriting the first equation:



      • ns1 = h(m1) + qr

      • ns1 - h(m1) = qr

      • q = r-1(ns1 - h(m1))





      share|improve this answer



























        7












        7








        7







        Let me rewrite your question in a different notation, where all lowercase values are integers and uppercase values are points.



        • The group generator is G (a known constant).

        • The private key is q, its corresponding public key is Q = qG.

        • The nonce is n, its corresponding point is R = nG.

        • The X coordinate of R is r.

        • The hash function is h(x).

        • A signature is (r,s), where s is computed as n-1(h(m) + qr).

        • A signature is valid iff r = x(s-1(h(m)G + rQ)).

        Now for the two signatures it holds that:



        • s1 = n-1(h(m1) + qr)

        • s2 = n-1(h(m2) + qr)

        • s1 - s2 = n-1(h(m1) - h(m2))

        • n = (s1 - s2)-1(h(m1) - h(m2))

        As s1 and s2 are just integers, (s1 - s2)-1 can be trivially computed using a modular inverse; there are no elliptic curve points involved here (over which this problem would be hard).



        Once you know n, you can find q by rewriting the first equation:



        • ns1 = h(m1) + qr

        • ns1 - h(m1) = qr

        • q = r-1(ns1 - h(m1))





        share|improve this answer















        Let me rewrite your question in a different notation, where all lowercase values are integers and uppercase values are points.



        • The group generator is G (a known constant).

        • The private key is q, its corresponding public key is Q = qG.

        • The nonce is n, its corresponding point is R = nG.

        • The X coordinate of R is r.

        • The hash function is h(x).

        • A signature is (r,s), where s is computed as n-1(h(m) + qr).

        • A signature is valid iff r = x(s-1(h(m)G + rQ)).

        Now for the two signatures it holds that:



        • s1 = n-1(h(m1) + qr)

        • s2 = n-1(h(m2) + qr)

        • s1 - s2 = n-1(h(m1) - h(m2))

        • n = (s1 - s2)-1(h(m1) - h(m2))

        As s1 and s2 are just integers, (s1 - s2)-1 can be trivially computed using a modular inverse; there are no elliptic curve points involved here (over which this problem would be hard).



        Once you know n, you can find q by rewriting the first equation:



        • ns1 = h(m1) + qr

        • ns1 - h(m1) = qr

        • q = r-1(ns1 - h(m1))






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Mar 26 at 19:26

























        answered Mar 26 at 19:17









        Pieter WuillePieter Wuille

        48k3100162




        48k3100162





















            1















            isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?




            No, it is not. This does not require finding the discrete logarithm at all. Solving the discrete logarithm is finding the exponent to a known base. However in this problem we are trying to find the base and know what the exponent is. Furthermore, this known exponent is -1 for which finding the base of something raise to -1 is to raise the result to -1 again, i.e. taking the inverse of the inverse.



            There are algorithms that exist to find the modular inverse of a number which is how N^(-1) is found in the first place. To find N, you just need to take the inverse of N^(-1) because of the identity that an inverse an inverse is the element itself.






            share|improve this answer























            • Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

              – Ugam Kamat
              Mar 26 at 18:40






            • 1





              No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

              – Andrew Chow
              Mar 26 at 19:03











            • That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

              – Ugam Kamat
              Mar 26 at 19:20















            1















            isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?




            No, it is not. This does not require finding the discrete logarithm at all. Solving the discrete logarithm is finding the exponent to a known base. However in this problem we are trying to find the base and know what the exponent is. Furthermore, this known exponent is -1 for which finding the base of something raise to -1 is to raise the result to -1 again, i.e. taking the inverse of the inverse.



            There are algorithms that exist to find the modular inverse of a number which is how N^(-1) is found in the first place. To find N, you just need to take the inverse of N^(-1) because of the identity that an inverse an inverse is the element itself.






            share|improve this answer























            • Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

              – Ugam Kamat
              Mar 26 at 18:40






            • 1





              No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

              – Andrew Chow
              Mar 26 at 19:03











            • That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

              – Ugam Kamat
              Mar 26 at 19:20













            1












            1








            1








            isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?




            No, it is not. This does not require finding the discrete logarithm at all. Solving the discrete logarithm is finding the exponent to a known base. However in this problem we are trying to find the base and know what the exponent is. Furthermore, this known exponent is -1 for which finding the base of something raise to -1 is to raise the result to -1 again, i.e. taking the inverse of the inverse.



            There are algorithms that exist to find the modular inverse of a number which is how N^(-1) is found in the first place. To find N, you just need to take the inverse of N^(-1) because of the identity that an inverse an inverse is the element itself.






            share|improve this answer














            isn't solving for N^(-1), and hence N, becomes equivalent to finding the solution to the discrete logarithm?




            No, it is not. This does not require finding the discrete logarithm at all. Solving the discrete logarithm is finding the exponent to a known base. However in this problem we are trying to find the base and know what the exponent is. Furthermore, this known exponent is -1 for which finding the base of something raise to -1 is to raise the result to -1 again, i.e. taking the inverse of the inverse.



            There are algorithms that exist to find the modular inverse of a number which is how N^(-1) is found in the first place. To find N, you just need to take the inverse of N^(-1) because of the identity that an inverse an inverse is the element itself.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Mar 26 at 18:21









            Andrew ChowAndrew Chow

            33.3k42462




            33.3k42462












            • Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

              – Ugam Kamat
              Mar 26 at 18:40






            • 1





              No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

              – Andrew Chow
              Mar 26 at 19:03











            • That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

              – Ugam Kamat
              Mar 26 at 19:20

















            • Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

              – Ugam Kamat
              Mar 26 at 18:40






            • 1





              No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

              – Andrew Chow
              Mar 26 at 19:03











            • That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

              – Ugam Kamat
              Mar 26 at 19:20
















            Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

            – Ugam Kamat
            Mar 26 at 18:40





            Isn't the order of how the equation is written same as the public key generation? You have [hash(m1) - hash(m2)] as the base and N^(-1) as the exponent?

            – Ugam Kamat
            Mar 26 at 18:40




            1




            1





            No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

            – Andrew Chow
            Mar 26 at 19:03





            No. [hash(m1) - hash(m2)] is an integer, not a elliptic curve point. N^(-1) is also an integer. So this formula is just integer multiplication. It is not exponentiation nor is it curve point multiplication (the two things that have discrete log problems). Thus it is not solving any discrete logarithm.

            – Andrew Chow
            Mar 26 at 19:03













            That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

            – Ugam Kamat
            Mar 26 at 19:20





            That's what I was looking for. So since N^(-1)*[hash(m1) - hash(m2)] is just integer multiplication modulo p vs curve point addition.

            – Ugam Kamat
            Mar 26 at 19:20

















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Bitcoin Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fbitcoin.stackexchange.com%2fquestions%2f85638%2fhow-can-my-private-key-be-revealed-if-i-use-the-same-nonce-while-generating-the%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

            Tähtien Talli Jäsenet | Lähteet | NavigointivalikkoSuomen Hippos – Tähtien Talli

            Do these cracks on my tires look bad? The Next CEO of Stack OverflowDry rot tire should I replace?Having to replace tiresFishtailed so easily? Bad tires? ABS?Filling the tires with something other than air, to avoid puncture hassles?Used Michelin tires safe to install?Do these tyre cracks necessitate replacement?Rumbling noise: tires or mechanicalIs it possible to fix noisy feathered tires?Are bad winter tires still better than summer tires in winter?Torque converter failure - Related to replacing only 2 tires?Why use snow tires on all 4 wheels on 2-wheel-drive cars?