PyCrypto und Putty RSA Keys?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hallo,

weiss jemand wie man einen PuTTY RSA key / OpenSSH RSA key mit PyCrypto RSA verwenden kann?

Ich habe keinerlei import funktionen gefunden.
Selbst die Wrapper scheinen diese Keys nicht lesen zu können.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wie liegen diese Schlüssel denn vor? Im PKCS#1-Format? PKCS#8? Mit Passwort? Oder PKCS#12? PEM-encoded vielleicht? Oder reines DER? Falls Python es nicht direkt lesen kann, openssl (als Schweizer Messer für alles in Sachen Kryptografie) wird es sicherlich konvertieren können. Vielleicht hilft dir "openssl rsa -?" weiter.

Stefan
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Das problem ist das ich keine ahnung habe in was für einem Format Putty, OpenSSH oder ssh.com ist.

OpenSSH würde ja reichen, ich finde allerdings nirgendwo eine beschreibung
wie ich aus dem file n, e, p, d, q oder u extrahieren kann welches die zahlen von einem RSA key sind.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Zufällig hatte ich gestern das Problem. Putty speichert den Public Key im PEM-Format, den Private Key jedoch in einem speziellen Format. Das Programm puttygen.exe kann jedoch ein existierendes Schlüsselpaar laden und über das "Conversions"-Menü den privaten Schlüssel als OpenSSH-Schlüssel exportieren. Dann hat auch dieser das Standard PEM-Format.

IIRC ist PEM eine textuelle Repräsentation (eigentlich nur base64 mit Begrenzern) für DER-kodiertes ASN.1. Der PKCS#1-Standard definiert, wie ein Schlüssel aufgebaut ist. ASN.1 ist sowas wie XML, nur (in Form von DER) binär und nicht selbstbeschreibend. OpenSSL hat ein asn1parse-Modul, da kann man sich die Struktur anschauen.

Hier ist der private Schlüssel im openSSH-Format:

Code: Alles auswählen

-----BEGIN RSA PRIVATE KEY-----
MIIEoQIBAAKCAQEAujgArWmtMECIKT7hHnAVFt4zQan9+ZMWdWw0VrwSCl7+LHDB
FdvXLIjFJS1N5q72MBlXIwLw/eBw3X8s7Gjq/TPOeKrPA5mhyQzEWP/kOe0OKLC8
t4wzBl7CuVpcx+UxQv7g5bi0fIxJ8qE2yyjULNSNxuA97g3srETG18AfXBKHOutV
...
nz6yj0M7/lZ7sUckJUKKaPOYdDC5/SM1AfjBGSMUouf2eRlhMA==
-----END RSA PRIVATE KEY-----
Mit "openssl asn1parse -in .ssh/id_rsa -inform pem" sieht man jetzt sowas:

Code: Alles auswählen

    0:d=0  hl=4 l=1185 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :00
    7:d=1  hl=4 l= 257 prim: INTEGER           :BA3800AD69AD30408829
  268:d=1  hl=2 l=   1 prim: INTEGER           :23
  271:d=1  hl=4 l= 256 prim: INTEGER           :452ABE6C4BD29CE4C4D
  531:d=1  hl=3 l= 129 prim: INTEGER           :E3DBB2B9334F65F99B7
  663:d=1  hl=3 l= 129 prim: INTEGER           :D137C53FC2D03ED81A7
  795:d=1  hl=3 l= 129 prim: INTEGER           :95BC423F3058BF5AE28
  927:d=1  hl=3 l= 128 prim: INTEGER           :17E91DDB66B8B6B99CA
 1058:d=1  hl=3 l= 128 prim: INTEGER           :7E62BA418183CACCE9E
Ich habe jetzt keine Lust, zu recherchieren, was die einzelnen Elemente der SQUENCE da bedeuten, ich vermute aber, es sind die Schlüsselbestandteile. Beachte, das dies ein Schlüssel ohne Passphrase ist. Mit Passphrase wäre das noch mal 3DES-verschlüsselt, meine ich. Der Standard für private Schlüssel wäre übrigens PKCS#8, danach sieht das hier aber nicht aus.

Stefan
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Danke für deine Mühe.

Leider passt die anzahl der anzahl der teile des Schlüssels nicht zu dem was RSAkey.keydata beim PyCrypto enthält (5 zahlen).
Antworten