C secp256k1 : Segmentation Fault beim übergeben von NULL Kontext zu secp256k1_ecdsa_verify

Die übergabe eines NULL - Kontext zu secp256k1_ecdsa_verify Ergebnisse in einem "segmentation fault" (siehe angehängten code). Ich habe das Gefühl, das dieses Verhalten nicht beabsichtigt ist, wie die secp256k1 Bibliothek wird systematisch in der Prüfung für NULL - Zeiger. Allerdings bin ich mir nicht sicher, weil 1. Sie brauchen einen Kontext aufrufen, die call-back-Funktion (so kann es nicht hier), und 2. die Bibliothek übernimmt stillschweigend akzeptieren NULL-Kontext, wenn es egal ist (also, vielleicht ist es eine bewusste Politik der nicht-Tests für die NULL-Kontext).

#include "secp256k1.h"
#include <assert.h>

int main(){

 // Gültiger Schlüssel
 const unsigned char *pubkey_bytes = "\x03"
"\xf0\x28\x89\x2b\xad\x7e\xd5\x7d\x2f\xb5\x7b\xf3\x30\x81\xd5\xcf"
"\xcf\x6f\x9e\xd3\xd3\xd7\XF1 verfüllen\x59\xc2\xe2\xff\xf5\x79\xdc\x34\x1a";

 // gültige Signatur
 const unsigned char *sig_bytes = 
"\x98\x62\x10\xb9\xdc\x0a\x2f\x21\xbc\xae\xc0\x96\xf4\xf5\x5f\xf4"
"\x48\x6f\xcc\x4e\x3a\xaf\xe7\xe0\xcb\xf6\x46\x92\x59\x6e\x99\x4a"
"\x0e\x5c\x6e\xc6\x54\x08\xd6\x5a\xae\x9e\x1c\xe8\xe9\x53\xc3\x1e"
"\xd0\x3f\x41\x79\x09\x1d\x20 - \xd1\x59\xda\xe4\x19\xe9\x0c\xa3\x63";

 const unsigned char *hash_bytes = 
"\x7f\x83\xb1\x65\x7f\XF1 verfüllen\xfc\x53\xb9\x2d\xc1\x81\x48\xa1\xd6\x5d"
"\xfc\x2d\x4b\x1f\xa3\xd6\x77\x28\x4a\xdd\xd2\x00\x12\x6d\x90\x69";

 int Wert;
 secp256k1_context *ctx;
 secp256k1_pubkey pub;
 secp256k1_ecdsa_signature sig;


 ctx = secp256k1_context_create
 ( SECP256K1_CONTEXT_VERIFY 
 | SECP256K1_CONTEXT_SIGN
);

 // Parsen der öffentlichen Schlüssel
 Wert = secp256k1_ec_pubkey_parse(ctx, &pub, pubkey_bytes, 33);
 assert(value == 1);

 // Parsen der Signatur
 Wert = secp256k1_ecdsa_signature_parse_compact(ctx, &sig, sig_bytes);
 assert(value == 1);

 // überprüfen der Signatur 
 Wert = secp256k1_ecdsa_verify(ctx, &sig, hash_bytes, &pub);
 assert(value == 1);

 // übergabe von NULL-Kontext (SEGMENTATION FAULT)
 Wert = secp256k1_ecdsa_verify(NULL, &sig, hash_bytes, &pub);


secp256k1_context_destroy(ctx);

 return 0;

}
+119
Ricky L 01.04.2014, 00:32:02
17 Antworten

Lernen von einem source-code ist sehr nützlich, zu Zeiten, aber es ist ein Schmerz, wenn der code ist nicht kommentiert gut. Die von der open-source-Bitcoin-software haben die meisten gründlich und verständlich dokumentierter Quellcode? Das ist, wenn jemand wollte verstehen, wie die wichtigsten Kunden, dem Bergmann, den pool oder andere Bitcoin-software arbeitet, welche Projekte sollte man anschauen?

+961
louder777 03 февр. '09 в 4:24

Aufträge sind Kauf-oder Verkaufsaufträge, die angibt, den Wunsch der person, die die Aufträge in der Börse.

Ein trade ist, was passiert, wenn 2 Aufträge (teilweise) abgestimmt. Von selbst (ohne weiteren Kontext) ein Handel ist neutral und umfasst sowohl die buy und sell side.

Hinzufügen von ein wenig Kontext, eine person könnte sagen: "ich habe einen buy-trade von gestern".

+909
jmax 31.03.2016, 17:54:18

Was die Ableitung Pfad für die Erstellung von Adressen verwendet wird, in dem Ledger für BTG? Generierte Adresse aus dem Gerät entspricht nicht der Adresse vom Pfad m/44'/0'/0'/0/0 dargestellt ist für die BTG in BIP39 für den ersten Schlüssel.

UPDATE 1: (zu klären) hatte ich folgende (test -) Merksatz erzeugt, von ledger:

haste essay möglich ei Gedanke äußere Armut Arzt Sinn lab erraten Tor Pfeil obersten Höhle Traube sonnigen Ablagerung Erodieren Zitrone couch wilde Fantasie gleich

Wenn ich abgeleiteten Schlüssel mit m/44'/0'/0'/0/0 Pfad (im BIP39), bekam ich GTUDDiUvkFJtL24f3Bq3pGyTwULuyzMSv1 - Adresse (gleiche wie auf der Website), aber Ledger erwartet GX1FXv2PrRSARyctabywsi5X58teAjYFu4.

+846
mcastle 12.12.2012, 06:59:20

Warum leichte Knoten sind weniger sicher?

Einen leichten Knoten ist weniger sicher, weil es nicht seine eigene Kopie der gesamten blockchain.

Das bedeutet, dass es nicht überprüfen kann, für sich selbst die Integrität der eingehenden Blöcke mit völliger Gewissheit. Es hat in der Regel verlassen sich auf die Integrität von einem externen server zumindest für einige Startlöchern. Dies ist die Art von Vertrauen, die von Dritten Parteien, die Satoshi Nakamoto versuchte zu vermeiden, die beim erstellen von Bitcoin.

und die nächste Frage ist

Eine Frage pro Frage. Bitte nutzen Sie den "Frage stellen" - button oben rechts eine neue Frage stellen. Sie können einen link zurück zu dieser Frage, wenn es hilft klären Sie Ihre nächste Frage.

+768
AlexandraV 15.01.2012, 13:57:37

Die Signaturen erzeugt in diesem Prozess mehr Metadaten als üblich zu unterstützen, die in public-key-recovery. Es umfasst recovery-flags (8 bit integer), die kodiert, ob der öffentliche Schlüssel komprimiert wurde, und eine spezifische Erholung ID.

Als Secg PDF http://www.secg.org/sec1-v2.pdf Punkte aus (Seite 47) - gegeben (r, s), die Sie wiederherstellen können eine Reihe von wahrscheinlichen öffentlichen Schlüssel. Die Erholung ID macht dies eine explizite Ableitung der richtigen öffentlichen Schlüssel.

Auch die Frage, ob der öffentliche Schlüssel wird komprimiert, ist auch wichtig. Bitcoin-Signaturen überprüft werden durch eine Adresse, die nicht einer public-key!

Deine Signatur sieht wie folgt aus: [32 bytes r] [32 bytes s] [recoveryFlags], und ist in der Regel base64-kodiert ist.

Wenn man einen dieser Signaturen, und eine bitcoin-Adresse, die Verifikation funktioniert wie folgt:

  • die Generierung der öffentlichen Schlüssel
  • Codierung es richtig (Kompression)
  • hashing-Ergebnis
  • vergleichen Sie die hash mit dem hash extrahiert aus den angegebenen bitcoin-Adresse.
+765
John simon 10.10.2019, 20:15:38

Es sieht so aus, nur mit den 17nu-Adresse hier ein:

https://longhorn.bullpay.com/?gateway=2&data=17nu7oViEtGCYaYwrKKVGyrs7jkcNwpVf2

Nur 2 Transaktionen aufgetreten ist. Diese Transaktion:

https://longhorn.bullpay.com/?gateway=2&data=fae9171eea55eb69cbe73f8a23003f9267b71e5a7292d2bcd7b396a58aa82827

Führte in der UTXO für 1 BTC zu 17nu.

Dass UTXO war dann diese:

https://longhorn.bullpay.com/?gateway=2&data=4837f44e4169f287ca6802c45ceab2dfef36ab7d8ecaa0eaebfa59ea6c76e17b

Aber es war kombiniert mit anderen Transaktion unabhängig von der Brieftasche. Ich würde sagen, Ihr Portemonnaie war gefährdet. Ihre Transaktionen kam gebündelt mit anderen UTXO die anderswo nicht Verwandte zu Ihrer Brieftasche.

Die Adresse Sie gesendet wurde:

https://longhorn.bullpay.com/?gateway=2&data=1NqJgMT4eLPycaD2i7T7xzbd9F9fycWE9u

hatte eine Flut von Aktivität auf 5/6/14 innerhalb einer 2 Stunden Frist. In einigen Fällen mit massiven Bündelung von UTXO ist. 34 Eingänge, 56 Eingänge. Die Transaktionen bewegen BTC aus, dass die Geldbörse aus der Tasche verließ er mit einem null-Saldo.

Fast alle dieser Trichter in Adresse 17gH1u6VJwhVD9cWR59jfeinLMzag2GZ43:

https://longhorn.bullpay.com/?gateway=2&data=17gH1u6VJwhVD9cWR59jfeinLMzag2GZ43&grid-page=1

Die verarbeiteten 17,990 Transaktionen zwischen März 2014 bis Oktober 2014. Die gesamte Brieftasche war leer, mit 120,347 BTC passiert.

Entweder diese Adresse wird verwendet, um zu waschen BTC oder einfach als Konvergenzpunkt für die Verteilung. Entweder Weg, diese Adresse ist gebunden an eine Anzahl von google-Suchergebnissen, in der die Menschen immer gehackt. ZB: https://bitcointalk.org/index.php?topic=754624.0;alle

Endgültige Antwort. Sie wurden gehackt, in gewisser Weise.

Hinweis: ich fügte hinzu, alle den text hier zu zeigen, wie ich verfolgt seine BTC von seiner Adresse an eine bekannte Adresse für hacking. Dies war zu zeigen, wie ich zu dem Schluss kam, es war ein hack und nicht eine Anomalie, software, Fehler, bug oder was anderes.

+720
N44 02.08.2010, 14:01:24

Terabox.mir hat HTTPS. Von Coinbase jeder kann Geld senden Terabox.mir und topup das Gleichgewicht. Nach der topup das Geld gestohlen. Wenn Sie versuchen, setzen Sie Sie nicht zu beantworten.

Niemand Sie Herunterfahren, Sie sind immer online und handeln wie Sie nicht Betrug ist, gibt es keine Gemeinschaft zu halten, berichten über Betrug, so dass seine shut-down-mindestens.

Verlor ich bereits mein Geld es kann nicht zurücktreten, es immer wieder zu topup mehr und wenn ich den Kontakt mit Ihnen, Sie Antworten Sie nie, werden Sie nie erwähnen, was ist die Mindest-balance zu beginnen durch, die Weise, in der Menschen verwirrt und zahlen mehr und mehr, und Sie halten was der gleiche Fehler Betrug.

enter image description here enter image description here

Kann das jemand abstellen? Bericht zufällige lokale scam-community, so dass wir gemeinsam handeln stärker gegen Sie?

+699
user2999692 29.02.2012, 16:28:46

Ich bin derzeit mit der bitcoind v0.16.0.0 auf meinem macbook (osx 10.12.6), und das erste sync-Zeit ist wirklich langsam. Ich bin Synchronisierung bei rund 88 Blöcke pro Stunde, was bedeuten würde, es würde noch 2 Monate zu synchronisieren.. In der Aktivitätsanzeige sieht es aus wie bitcoind ist mit nur 3% der CPU-Zeit. Könnte dies das Problem sein? Gibt es eine Möglichkeit es zu beschleunigen?

+642
heyv 19.01.2017, 17:48:20

Da Bitcoin im Allgemeinen verwendet little-endian, während die meisten Hash-Bibliotheken verwenden big-endian.

Für weitere details und links finden Sie hier.

+640
254123179 05.08.2019, 13:35:09

ein float nativ geht nur bis zu 7 Dezimalstellen in den meisten Fällen. wenn Sie nur Rollen mit dezimal-du wirst sicher sein. Wenn Sie Runde eine 7 stellige Zahl auf 8 Nachkommastellen ist, dass man in die Rundung Probleme.

+595
Priyanka Shah Patel 09.11.2015, 16:35:44

In gewisser Weise, eine Halbierung der Belohnung wird verhindert, dass die Menschen mit macht und Geld zu manipulieren, um das bitcoin-Netzwerk. Angebliche Sie haben jede Menge dollars. Sie beschlossen, das bitcoin-Netzwerk ist nun wertvoll für Ihren Zweck. Sie können Ihr Geld in bitcoin. Wenn es keine Halbierung, der Preis wird voraussichtlich stabil sein. Ihr Anteil von Münzen wird im Laufe der Zeit erhöhen. Wenn Sie die macht haben, Geld zu drucken, können Sie aufblasen Ihrer Währungen um dies zu tun.

Irgendwann haben Sie genug Münzen, um die Kontrolle Kursbewegung. Bei Halbierung erhalten Sie diminishing return. Wenn Sie Blasen Sie Ihre Geld, um das Netzwerk zu Steuern, Sie bekommen weniger Münzen.

Ich denke, wenn es bläst bei exponentiellen rate, inflation kann auch deflate-Manipulatoren. Aber es geht um die exponentielle inflation, nicht Konstante inflation.

+485
Rifqi Ikhwanuddin 22.06.2014, 00:42:14

price_per_byte ist der Schlüssel, der Effekt Transaktionskosten für den Benutzer. In der Regel standard-Gebühren für price_per_byte = 206 satoshi pro byte, die ist zu kostspielig und höher für Benutzer, wir können es reduzieren, bis 2 satoshi. es werden die Kosten sehr niedrig.

206 satoshi pro byte Transaktion abgeschlossen ist, im nächsten block oder in der nächsten Transaktion sofort. während 2 satoshi pro kb Transaktion dauert bis zu 2 bis 3 Stunden abgeschlossen Transaktion.

Allgemeine Transaktion Raum 224 299 kb, wenn Benutzer senden BTC im single-user-Menge ist nicht die Frage hier, also die Transaktion, die Kosten werden sehr niedrig sein basiert, wie viel satoshi Menge Benutzer-setup für die Transaktion.

+457
Adrian Popa 08.06.2018, 14:44:16

Ich versuche zu verstehen, wie bitcoin funktioniert technisch. Ich verstehe die blockchain digitale Signaturen etc ... ich bin mehr daran interessiert, was passiert, um eine Transaktion, sobald es "angelegt".

Angenommen, Bitcoin enthält nur eine Transaktion pro block (zu vereinfachen). Grundsätzlich:

  1. jemand eine Transaktion erstellen mit seine Brieftasche
  2. diese Transaktion validiert werden müssen (check Eingänge, digitale Signatur etc ...
  3. ein Nachweis der arbeiten berechnet werden müssen, auf die block-hash
  4. der block wird Hinzugefügt, um die blockchain

Also ich weiß Bergleute verantwortlich sind, kommen mit dem Nachweis der Arbeit. Meine Fragen sind:

  • wie funktioniert ein Knoten eine broadcast-Transaktion zu Minern ? Ist es Teil der P2P-Protokoll ?
  • hat miner überprüfen Sie die Transaktion (digitale Unterschrift, die verfügbaren Eingänge etc ...) ?
  • hat miner direkt Einreichen Blöcke der blockchain ?

Dieser Teil ist noch verwirrend für mich keine Hilfe von Zeigern zum Artikel wäre toll :)

Update:

In einem P2P-Netzwerk, die Knoten sind nicht mit jedem anderen Knoten. Sagen wir also, dass das Netzwerk sieht wie folgt aus:

node1 <-> node2 <-> knoten3 (1 und 2 sind direkt angeschlossen und 2 und 3 sind direkt miteinander verbunden. 1 und 3 sind miteinander verbunden durch 2)

Wenn node1 will-Sendung eine Transaktion für die Validierung, es wird nur ausgestrahlt, die es auf node2. Dann node2 kann schließlich die broadcast-it an knoten3 , um ihm die Möglichkeit zu überprüfen node1's Transaktion.

Aber, weil wir in einem nicht vertrauenswürdigen Netzwerk, wird nichts verhindern, dass Knoten 2 zu überprüfen die Transaktion ohne nie sende es an knoten3 und so halten mining-Gebühren für sich selbst.

Wir könnten uns auch vorstellen, dass node1 nie ausgestrahlt es unbestätigte Transaktion, tun die mining-Arbeit selbst und die einzige Sendung die validierte block, damit es "verschmolzen" in der blockchain.

Wie funktioniert Bitcoin mit dieser situation umgehen ?

+393
user60464 02.05.2017, 05:16:18

Das Bitcoin-Core-daemon ist besser-reviewed und schneller (wegen C++). Bitcore lib ist eine Javascript-Bibliothek, und nicht ein Knoten, der Knoten version ist Bitcore Knoten. Sollten Sie sich Fragen, was Sie tun, mit einem Knoten. Wenn Sie ein Bergmann, die Sie nicht nehmen sollten Risiko und wählen Sie Kern. Wenn Sie möchten, verwenden Sie die Javascript-API, verwenden Sie Bitcore.

+377
stackdump 20.12.2013, 15:04:26

Satoshi hat nie wirklich gerechtfertigt oder erklärt viele dieser Konstanten.

enter image description here

enter image description here

es ist jemand fand heraus, über diese Konstanten noch?

link: https://en.bitcoin.it/wiki/Controlled_supply

+302
svetapavel8590 25.01.2016, 13:06:53

Ein hardfork ist eine Regel ändern, die nicht mit der letzten Regel festgelegt. So werden alle Knoten, die nicht aktualisiert werden, um die neuen Regeln sind und bleiben einfach an der Kette folgt, dass die legacy-Regel Satz: wenn alle Bergleute und Knoten zu aktualisieren, wird es eine nicht-Besserung-chain-split, was eine neue Gabel Münze erstellt werden.

Ein softfork ist eine Regel ändern, die kompatibel mit der vorherigen Regel festgelegt, d.h. eine Verschärfung der Vorschriften über die Einschränkung der gültigen Blöcke, um eine Teilmenge der zuvor erlaubt. Solange die Mehrheit der mining-power-updates zu den neuen Regeln, alle Knoten konvergieren auf die neuen Regeln. Bergleute, die nicht aktualisiert wurden, um die neuen Regeln gelegentlich finden einen neuen block, der ist nicht kompatibel mit den neuen Regeln, die Waisen werden von der Mehrheit der mining-power.

Wenn sowohl Kette-Tipps verwenden Sie die gleichen Regeln auf crafting Transaktionen die meisten Transaktionen werden wiederholbare, auf der anderen Kette. Sicher sind nur die Transaktionen, die sich aus einer coinbase-Ausgang auf die entsprechende Kette-Tipp oder UTXO wurden disintermediated durch senden von zwei miteinander in Konflikt stehende Transaktionen zwei-chain-Tipps. Einen expliziten replay-Schutz erreicht werden kann, einschließlich einer änderung der Transaktion format in der Gabel-update.

Siehe auch: Was ist eine weiche Gabel?

+184
lucio 13.12.2010, 14:21:47

Gerade angesichts all der Nachrichten über dieses Thema in letzter Zeit (Android-Sicherheitslücke), ich bin gespannt, WO und WARUM die Zufallszahl verwendet wird, während der Unterzeichnung einer Transaktion.

Ich dachte immer, eine Transaktion unterzeichnet wurde, nur durch Vermischung der prev_out** und dann zu verschlüsseln, dass der hash mit dem privaten Schlüssel, so dass, wenn es ist veröffentlicht zusammen mit dem öffentlichen Schlüssel kann verifiziert werden, indem andere Knoten.

**(vielleicht muss ich hier mehr Klarheit zu: ist die GANZE vorhergehende Transaktion Hash an dieser Stelle, oder nur die Eingabe in die prev_out?)

+59
parnicsha 30.12.2018, 00:20:24

Fragen mit Tag anzeigen