Sichern eines Lizenzschlüssels mit einem RSA-Schlüssel

Es ist spät, ich bin müde und wahrscheinlich ziemlich dicht ...

Ich habe eine Anwendung geschrieben, die ich sichern muss, damit sie nur auf Computern ausgeführt werden kann, für die ich einen Schlüssel generiere. Was ich jetzt tue, ist, die BIOS-Seriennummer zu erhalten und daraus einen Hash zu generieren, dann verschlüssele ich ihn mit einem privaten XML-RSA-Schlüssel. Ich signiere dann das XML, um sicherzustellen, dass es nicht manipuliert wird. Ich versuche, den öffentlichen Schlüssel zu packen, um die Signatur zu entschlüsseln und zu verifizieren, aber jedes Mal, wenn ich versuche, den Code als ein anderer Benutzer auszuführen, als der, der die Signatur generiert hat, tritt ein Fehler bei der Signatur auf.

Der größte Teil meines Codes wurde anhand des gefundenen Beispielcodes geändert, da ich mit der RSA-Verschlüsselung nicht so vertraut bin, wie ich es gerne hätte. Unten ist der Code, den ich verwendet habe, und der Code, von dem ich dachte, dass ich ihn verwenden muss, damit er richtig funktioniert ...

Für jede Rückmeldung wäre ich sehr dankbar, da ich an dieser Stelle ziemlich verloren bin. Der ursprüngliche Code, mit dem ich gearbeitet habe, war dieser. Dieser Code funktioniert einwandfrei, solange der Benutzer, der das Programm startet, derselbe ist, der das Dokument ursprünglich signiert hat.

 CspParameters cspParams = new CspParameters();
            cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
            cspParams.Flags = CspProviderFlags.UseMachineKeyStore;

            // Create a new RSA signing key and save it in the container. 
            RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams)
            {
                PersistKeyInCsp = true,
            };

Ich bin der Meinung, dass dieser Code das ist, was ich tun sollte, aber er kann die Signatur nicht überprüfen, egal was ich tue, unabhängig davon, ob es sich um denselben oder einen anderen Benutzer handelt ...

RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider();
            //Load the private key from xml file
            XmlDocument xmlPrivateKey = new XmlDocument();
            xmlPrivateKey.Load("KeyPriv.xml");
            rsaKey.FromXmlString(xmlPrivateKey.InnerXml);

Ich glaube, dass dies etwas mit dem Namen des Schlüsselcontainers zu tun hat (bitte entschuldigen Sie, dass dies ein echter Blödsinn ist). Ich bin mir ziemlich sicher, dass dies die Zeile ist, die beide dazu führt, dass es im ersten Fall funktioniert und verhindert, dass es im Internet funktioniert zweiter Fall ....

cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";

Gibt es eine Möglichkeit, das XML mit einem privaten Schlüssel zu signieren / verschlüsseln, wenn die Anwendungslizenz generiert wird, und den öffentlichen Schlüssel dann in das App-Verzeichnis abzulegen und diesen zum Überprüfen / Entschlüsseln des Codes zu verwenden? Ich kann den Verschlüsselungsteil löschen, wenn der Signaturteil ordnungsgemäß funktioniert. Ich habe es als Backup verwendet, um die Herkunft des Lizenzcodes zu verschleiern, von dem ich schreibe.

Ist irgendetwas davon sinnvoll? Bin ich ein totaler Trottel?

Vielen Dank für jede Hilfe, die mir jemand geben kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage