RSA Keypair Public Key exportieren (Modulus)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    RSA Keypair Public Key exportieren (Modulus)

    Hallo,

    folgende Frage: Ich muss aus einem PrivateKey ein Schlüsselpaar generieren und den Public Key weiterverarbeiten. Kann mir da jemand bitte ein Codeschnippsel geben? Meine Suchen im Internet waren bislang erfolglos, bzw. hab ich das nicht hinbekommen.

    Vielen Dank
    Gruß Marco
    Wärst du so lieb und würdest mir das mal als kleines Beispiel?

    Der Privatekey ist: f73c69c0d6ea6156f8af1efb0fe3ca46378d9632fe7f5f335bc161e7d83f4266
    Und rauskommen müsste als Public Address als String: 046DEF9A5CE4D845C0E988BC853CFC03CA2EB983738B09EB2F5C45F6C55C67E5CD175040296F9BBD8982F89D4CC26A73AF1F6202DBD40C64BDCDA03210769E00D5

    Lass dir auch gern was zukommen, hauptsache ich komme weiter.
    Gruß Marco
    Hmm... stellt sich nun die Frage, wie wurden diese Schlüssel erstellt?
    in .NET ist, ohne Zusatzlibraries, die einzige Möglichkeit mit Schlüsseln in Strings umzugehen im XML Format:
    docs.microsoft.com/de-de/dotne…XmlString_System_Boolean_

    So wie im Link müsste ein Schlüssel aussehen um importiert weden zu können.

    Je nachdem wie die Schlüssel erstellt wurden, lässt sich vielleicht mithilfe von Zusatzlibraries oder auch "von Hand" was programmieren.

    Marcolotti schrieb:

    Ich muss aus einem PrivateKey ein Schlüsselpaar generieren
    Ein Widerspruch.
    Ein Schlüsselpaar ist etwas, was gemeinsam (paarweise) generiert wird.
    Du kannst nicht so einfach aus einer Hälfte die andere Hälfte berechnen.
    Sonst wären die Verschlüsselungsverfahren unsicher und damit nutzlos.


    Edit: Der Weg von Private nach Public scheint bei RSA zu funktionieren:
    serverfault.com/questions/5228…-key-from-the-private-key

    Du kannst mit dem PublicKey verschlüsseln und mit dem PrivateKey entschlüsseln.
    Oder auch umgekehrt (signieren).


    Selbst generieren:
    docs.microsoft.com/en-us/dotne…encryption-and-decryption

    Damit arbeiten:
    docs.microsoft.com/en-us/dotne…/security/encrypting-data
    docs.microsoft.com/en-us/dotne…/security/decrypting-data

    Vielleicht noch ein paar Grundlagen:
    de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „petaod“ ()

    Punkt 2-5 hab ich. Funktioniert.
    6.1 Algorithm description

    1. First generate a key pair and extract the public key (a 64-byte byte array representing its x,y coordinates).
    2. Hash the public key using sha3-256 function and extract the last 20 bytes of the result.
    3. Add 41 to the beginning of the byte array. Length of the initial address should be 21 bytes.
    4. Hash the address twice using sha256 function and take the first 4 bytes as verification code.
    5. Add the verification code to the end of the initial address and get an address in base58check format through base58 encoding.
    An encoded mainnet address begins with T and is 34 bytes in length.
    Please note that the sha3 protocol we adopt is KECCAK-256.
    Wenn Du den Private Key hast, kannst Du evtl. eine RsaCryptoServiceProvider-Instanz bauen und daraus dann den PublicKey extrahieren. Das ist genau das, was in Post 2 schon vorgeschlagen wurde. Weiß aber nicht auswendig, ob das einfach so geht. Der Public Key ist normal auf jeden Fall (kA, ob implizit o. explizit) im Private Key enthalten. Das Problem ist halt, wie @EaranMaleasi schon angedeutet hat, das Format des Schlüssels. Ohne XML geht da nichts in .NET. Daher wäre relevant, woher die vorherigen Schlüssel stammen, um diese anzupassen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    *unnötiges Vollzitat entfernt*

    Hallo Trade,

    es handelt sich um das sha3 KECCAK-256. Mir geht es darum den Code zu verstehen, daher ist das am praktischen Beispiel für mich und andere Foren-Leser immer das beste.

    Gruß Marco

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Marcolotti schrieb:

    Mir geht es darum den Code zu verstehen, daher ist das am praktischen Beispiel für mich und andere Foren-Leser immer das beste.
    Das mag vielleicht sein, auch wenn es gut ist, jemanden zunächst in die richtige Richtung zu schubsen, damit er selbst das Prblem gelöst bekommt, doch vor all dem, müssen wir zunächst dein konkretes Problem verstehen. Dazu brauchen wir Kontext, und du wirfst nun plötzlich SHA3 in den Raum, von dem zuvor nie die rede war.

    In welchem Zusammenhang stehen bei dir nun Keccak-256 (SHA3) und RSA?
    Wie wurden diese "Schlüssel" generiert?
    Handelt es sich bei deinen oben geposteten Buchstaben- und Zahlenfolgen um SHA3 Hashes von Public und Private Keys?

    Sofern mit bekannt ist, ist SHA3 noch nicht im .NET Framework implementiert, daher wird die Handhabung damit nicht unbedingt einfach.
    Zwar gibt es BouncyCastle (auch für .NET Core) jedoch ist die Arbeitsweise damit anders als mit den üblichen Crypto-Providern in .NET.
    Hallo,

    hier gibt es nähere Informationen zu meinem Problem. github.com/tronprotocol/Docume…ster/TRX/Tron-overview.md Punkt 6.1

    Der PrivateKey und die Adresse werden durch eine FullNode des TRON Netzwerkes generiert. Ich habe ein Programm geschrieben, mit dem man sich per Adresse und PrivateKey einloggen kann. Auf anderen Seiten wie z.B. TronScan.org oder trxinfo.org kann man sich nur mit dem PrivateKey einloggen. Die bilden wie im obigen Link die Adresse, aber nur in dem sie die fertige TronWeb Api nutzen. Ich kann diese aber in VB nicht nutzen.Der Sinn dahinter? Ich möchte, dass sich die Leute per Privatekey einloggen können und die Wallet(Adresse) entsprechend im Programm angelegt wird. Der Sinn des Programmes ist, dass man die Webseiten nicht mehr braucht und direkt mit der FullNode kommunizieren kann. (Das funktioniert schon alles hervorragend)

    Gruß Marco
    Ich bin mal so frei und Poste den link, den du posten woltest, @Marcolotti:
    github.com/tronprotocol/Docume…6-user-address-generation

    Und nun meine Antwort für dich:
    Es handelt sich hier nicht um RSA sondern ECC oder auch Elliptic Curve Cryptography.
    Dummerweise gibt es im .NET Framework nur eine Implementierung um damit Hashes und Signaturen zu erzeugen/zu prüfen, jedoch nicht um direkt damit zu Verschlüsseln.
    Ist aber auch nicht weiter notwendig. Ein Problem bleibt jedoch, die komplett Fehlende Implementierung von SHA3 im .NET Framework aber wie schon gesagt, mit BouncyCastle ist das kein Problem.

    Ich habe mir das ganze mal nun etwas angesehen, und ich denke, das ganze ist mit etwas Aufwand zu schaffen. Ich habe keine Lösung, bei allem Interesse an dem Thema fehlt mir die Zeit dafür eine auszuarbeiten, jedoch kann ich dich in die richtige Richtung leiten. Vorne Weg, was du verlangst, ist kein allerweltscode. Vielleicht wurde das so noch nie in C# geschrieben, weswegen es uns hier leider unmöglich ist dir

    Marcolotti schrieb:

    ein Codeschnippsel
    zu geben. Außnahme natürlich, dass sich jemand hier befindet, der das Tron-Protokoll bzw. die Adressgenerierung bereits in C# Implementiert hat.

    Tron ist in Java Geschrieben, doch dank BouncyCastle, dass seine Java-Herkunft nicht versteckt, sind viele Dinge im Repo von Tron was Cryptographie angeht, auch in C# leicht übersetzbar. Vorraussichtlich musst du die ECKey Klasse von Tron neu in C# mit BouncyCastle Implementieren, um dieselben Funktionalitäten zu erhalten wie in ihrer Demo gezeigt wird. Am ende musst du nur noch SHA-256 und Keccak-256 aus Bouncy-Castle greifen, und entsprechend der Anleitung anwenden.