Timeline for ECDSA: (v, r, s), what is v?
Current License: CC BY-SA 4.0
19 events
when toggle format | what | by | license | comment | |
---|---|---|---|---|---|
S Aug 19, 2018 at 16:59 | history | suggested | alex.kampa | CC BY-SA 4.0 |
Added note about cofactor
|
Aug 19, 2018 at 13:22 | review | Suggested edits | |||
S Aug 19, 2018 at 16:59 | |||||
Jun 19, 2018 at 6:05 | history | edited | Raghav Sood | CC BY-SA 4.0 |
edited body
|
Feb 11, 2018 at 15:18 | comment | added | Sentinel | @Souza - agreed. It is a struggle. I am trying to contact Ethereum foundation to put together accessible protocol documentation and get funding to do it. I am putting together a light client using reactive extensions and .NET, where I am treating all protocol messages as streams flowing through stack-layer adapters, and trying to insulate the top level protocol from lower level differences (discv4 vs v5 etc for example). By the time I am done I should be able to write a book on it. | |
Feb 10, 2018 at 16:04 | comment | added | Souza | @Sentinel my strugle's the same. I am working on top of Ethereum's protocol and they say little to nothing about this. And you're right, they both use libsecp256k1. | |
Feb 10, 2018 at 11:42 | comment | added | Sentinel | @Souza / Pieter - Thanks. I had already managed to discover the answer to that - it took me forever! I did actually find that ASN.1 in sec1-v2.pdf after an enormous amount of digging. When I found it, I thought I'd struck gold. The problem is that the Ethereum documentation (I am implementing an Ethereum light client) does not include detailed protocol info, and official implementations tend to rely on libraries that go where Bitcoin already trod, so details like the 'v' parameter are lost/buried in very, very obscure code. | |
Feb 10, 2018 at 0:19 | comment | added | Pieter Wuille | 27 = lower X even Y. 28 = lower X odd Y. 29 = higher X even Y. 30 = higher X odd Y. Note that 29 and 30 are exceedingly rarely, and will in practice only ever be seen in specifically generated examples. There are only two possible X values if r is between 1 and (p mod n), which has a chance of about 0.000000000000000000000000000000000000373 % to happen randomly. | |
Feb 10, 2018 at 0:14 | comment | added | Souza | @Sentinel You can get full information on the recovery method here: secg.org/sec1-v2.pdf | |
Jan 10, 2018 at 15:09 | comment | added | Sentinel | Which, please, of the 4 possible output (27..30) corresponds to which of the possible results. Eg: 0 = positive Y and X1? where is this documented? | |
Oct 27, 2017 at 21:00 | comment | added | Pieter Wuille | ECDSA always supports public key, regardless of the curve. For curves with cofactor > 1 it is slightly more complicated. That linked answer explains the procedure. | |
Oct 27, 2017 at 18:28 | comment | added | Karel Bílek | @PieterWuille - Is this specific for secp2561k, or can this be generalized for all elliptic curve signatures? Also, how does it relate to this answer on crypto SE - crypto.stackexchange.com/questions/18105/… ? | |
Nov 13, 2015 at 10:19 | history | edited | Jannes | CC BY-SA 3.0 |
Missing word
|
Aug 18, 2015 at 12:26 | comment | added | Pieter Wuille | X and Y coordinates are numbers modulo p, the field size, which is around 2^256 - 2^32 for secp256k1. The value r and s in the signature however are modulo n, the group order, which is around 2^256 - 2^128. When R.x is between n and p, r is reduced to R.x-n. Thus, if you have an r value below 2^128-2^32, there may be 2 valid R.x values corresponding to it. | |
Aug 18, 2015 at 12:20 | comment | added | Wizard Of Ozzie |
@PeterWuille There can be up to 4 different points with a given "X coordinate modulo n". (2 because each X coordinate has two possible Y coordinates, and 2 because r+n may still be a valid X coordinate). I understand the former (2 y values for each x, because of the symmetry)... But how does the latter work? ie r+n may still be a valid X coordinate ??
|
|
Aug 2, 2015 at 9:00 | comment | added | Wizard Of Ozzie | It's more a way of learning things I understand pretty well already, and am interested in. I've learned Python that way and the ultimate goal is to know the core software too | |
Aug 1, 2015 at 9:42 | comment | added | Pieter Wuille | The signing code is in libsecp256k1, which also has verification code, but that is not currently used. For verification, there is C code in Bitcoin Core (see pubkey.cpp) which does a series of OpenSSL calls to do the bulk of the work. I am not sure that reading cryptographic C code is the best way to learn C++ :) | |
Aug 1, 2015 at 6:21 | comment | added | Wizard Of Ozzie | Can you link to the code which implements this? I'm going to start learning C++ using functions like this which I understand | |
Aug 1, 2015 at 4:05 | vote | accept | Wizard Of Ozzie | ||
Jul 31, 2015 at 23:04 | history | answered | Pieter Wuille | CC BY-SA 3.0 |