2016-03-24 5 views
2

ich einen RSA-Schlüssel mit diesem Befehl generiert haben:Openssl RSA-Schlüsselgröße

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 

Ich exportierte die das das Schlüsselformat auf DEN, welche die binäre Form ist. Der Schlüssel ist ein Waay mehr als 2k Bits. Für den Test exportierte ich den öffentlichen Schlüssel in das DER-Format, das etwas mehr als 2k Bits ist.

Also die Frage, was sind 2048 Bits? Wie kann ich die Rohbits aus der generierten Datei erhalten?

Danke, Lev

+0

Wo möchten Sie Ihre rohen Bits bekommen? Welche Sprache oder welches Werkzeug möchten Sie verwenden? – user2807083

+0

Stack Overflow ist eine Website für Programmier- und Entwicklungsfragen. Diese Frage scheint off-topic zu sein, weil es nicht um Programmierung oder Entwicklung geht. Siehe [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) in der Hilfe. Vielleicht [Super User] (http://superuser.com/) oder [Information Security Stack Exchange] (http://security.stackexchange.com/) wäre ein besserer Ort zu fragen. Auch [Wo veröffentliche ich Fragen zu Dev Ops?] (Http://meta.stackexchange.com/q/134306). – jww

+0

Ich möchte den Schlüssel in einen FLASH einer CPU schreiben. Die CPU wird den Schlüssel zum Verschlüsseln/Entschlüsseln von Nachrichten verwenden und über die drahtlose Schnittstelle senden. – Lev

Antwort

0

Um mit einem RSA-Schlüssel zu verschlüsseln und zu entschlüsseln, benötigen Sie den Modulo, den privaten und den öffentlichen Exponenten.

Normalerweise erfolgt die Verschlüsselung mit dem Paar (Modul, öffentlicher Exponent) und Entschlüsselung mit dem Paar (Modul, privater Exponent).

Nun, bei einigen Implementierungen, wie oft auf eingebetteten Geräten, wird der öffentliche Exponent standardmäßig auf die Zahl F4 gesetzt, die 0x10001 oder 65537 Dezimal ist.

Mit einem 2048 Bit RSA-Schlüssel ist der private Exponent exakt 2048 Bit, sowie der Modul.

Sie können die privaten Exponenten im Binärformat erhalten, indem eine String-Manipulation zu tun:

openssl rsa -in key.der -inform der -text -noout | awk '/^[^ ]/{if($1 == "privateExponent:") {dump=1} else {dump=0}} /^ /{if(dump==1){gsub(":","");printf "%s", $1}}END{print ""}' | xxd -ps -r -c256 > pr_key.bin 

Sie können auch das Modul erhalten, indem die Zeichenfolge in dem awk-Befehl zu ersetzen.

Um fortzufahren, benötigen Sie 4096 Bits (512 Bytes), um Ihren privaten 2048-Bit-Schlüssel zu speichern. Um den öffentlichen Schlüssel zu speichern, benötigen Sie 2048 Bit (256 Byte).

+0

Danke, das ist, was ich gesucht habe. Es stellte sich jedoch heraus, dass die von uns verwendete Bibliothek das DER-Format benötigt, das einfach zu erstellen ist. Steh dumm, und Entschuldigung für den Lärm. – Lev

0

EDIT 04.03:

ich keine convinient Weise zu tun, dass gefunden zu haben. Wie auch immer, können Sie versuchen, die folgenden:

openssl rsa -in <yourfile> -noout -text

Es wird weitere Informationen über den privaten Schlüssel anzuzeigen. Überprüfen Sie wikipedia für, wie die Schlüssel mit den gegebenen Informationen berechnet werden.

Old Solution (nicht funktioniert, so ignorieren)

Für einen automatisierten Prozess oder einfach nur für Ausbildungszwecke?

Eine manuelle Ansatz könnte die folgende (vorausgesetzt, Sie ein Linux-Benutzer sind):

  • Erstellen Sie eine Kopie der Schlüsseldatei

  • Ihre pem-Datei mit vi (m) Öffnen und entfernen Sie die erste und letzte Zeile (BEGIN/END PRIVATE KEY)

  • die Zeilenumbrüche entfernen (zB:% s/\ n // g)

  • Save the Datei

  • Jetzt Base64 dekodieren die Datei (base64 -d [your file name here] > [destination])

Aber wahrscheinlich OpenSSL bietet eine convinient Weg, um dieses Ziel zu erreichen

EDIT 1:

Dies könnte falsch sein, falls pem/der neben dem Schlüssel zusätzliche Informationen speichert.

EDIT 2:

Außerdem habe ich nie einen Grund zu extrahieren, den privaten Schlüssel noch (oder sogar erzeugen eine in der Art und Weise Sie tun) gesehen habe.

Was ist das Ziel, das Sie erreichen möchten?

+0

* "Entfernen Sie die Zeilenumbrüche ..." * - Wenn Sie die Zeilenumbrüche für die Pre-und Post-Kapselungsheader entfernen ('----- BEGIN X -----' und '----- END X ----- '), dann kann der Schlüssel nicht geparst werden und Sie könnten den Fehler ***' PEM_read_bio: no start ... '*** bekommen. – jww

+0

Genau, deshalb ist der erste Schritt, eine Kopie des Schlüssels zu erstellen;) also haben wir immer noch eine korrekte PEM-Datei, mit der wir später arbeiten können. –

+0

Dies führt zu dem gleichen Ergebnis, wenn ich das DER-Format verwende. Immer noch nicht 2048bits. Ich möchte den Schlüssel im Speicher einer MCU speichern. – Lev