$ 3 Hardware-Verschlüsselungsschlüssel - ist das möglich?


Das Endergebnis ist ein Schlüssel von der Größe eines USB-Flash-Laufwerks. Die

weit verbreitete Verschlüsselung und damit eine Fülle von Schlüsseln lassen Sie über deren zuverlässige Speicherung nachdenken. Das Speichern von Schlüsseln auf externen Geräten, von denen sie nicht kopiert werden können, gilt seit langem als bewährte Methode. Ich werde darüber sprechen, wie man ein solches Gerät für 3 und 2 Stunden herstellt.

Was bedeutet das Bild?
. . : « — , … , ...». , , )

Kurz über die Prinzipien der Arbeit


Die Kryptographie gibt uns die Möglichkeit, zu verbergen, was wir senden möchten, um sicherzustellen, dass wir mit demjenigen kommunizieren, mit dem wir denken, und mit vielen anderen interessanten Dingen. Damit dies alles gut funktioniert, bitten sie uns normalerweise nur eines - unsere Verschlüsselungsschlüssel geheim zu halten . Klingt einfach, nicht wahr? Mal sehen, wie wir unsere Schlüssel verstecken können:

  • Das Speichern in einer Datei auf Ihrem Desktop ist eine alte und bewährte Methode, um über die Jahre etwas aufzuzeichnen. Das Problem ist, dass neben dem Benutzer selbst eine Reihe anderer Programme Zugriff auf Dateien auf Ihrem Desktop haben. Und wenn Sie absolut sicher sind, dass alle das tun, wofür sie bestimmt sind, sammeln Sie keine Daten über Sie und führen Sie sie einfach nicht in das Netzwerk ein - dieser Artikel ist nichts für Sie.
  • — - , . , , , - -
  • — , . , . , . , ( ssh-) .

Wie Sie sehen können, besteht das Hauptproblem darin, dass die Tasten entweder direkt auf Ihrem Computer gespeichert oder dort über eine Tastatur, ein Flash-Laufwerk usw. eingegeben werden. Aber wie verschlüsselt mein Computer dann Daten, wenn er den Schlüssel nicht kennt? Die richtige Antwort ist auf keinen Fall. Die Lösung ist seit langem erfunden. Die Hauptidee besteht darin, ein spezielles Gerät an den Computer anzuschließen, der die Daten selbst verschlüsselt. Und der Computer sendet nur Daten und empfängt das Ergebnis. So funktionieren beispielsweise viele Smartcards.



Erforderliche Komponenten


Also lasst uns anfangen. Wir werden unser Gerät auf einem kostengünstigen und recht beliebten Mikrocontroller der STM32-Serie zusammenbauen. Natürlich können Sie selbst eine Leiterplatte herstellen , aber wir möchten in 2 Stunden fertig sein? Nehmen wir also eine vorgefertigte Lösung - den ST-Link v2-Programmierer. Dieses Gerät sieht so aus.



Seltsamerweise ist der Programmierer für STM32-Mikrocontroller auf dem STM32-Mikrocontroller montiert. Dieses Gerät ähnelt einem Flash-Laufwerk, und genau das können wir tun. Darüber hinaus besteht der Körper aus Aluminium, sodass Sie sich keine Sorgen machen können, dass er beschädigt wird. Es kostet ein Wunder für aliexpress 1,5-3 Dollar. Wir werden zwei dieser Dinge brauchen. Wir werden eine davon schlüsselfertig neu erstellen und die zweite verwenden, um die Firmware auf die erste hochzuladen. Wenn Sie bereits einen STM32-Programmierer haben, können Sie eine Sache tun.

Insgesamt brauchen wir:

  • Programmierer ST-Link v2 - 2 Stück
  • Lötkolben
  • Wenige Drähte - in der Regel sind in ST-Link bereits geeignete Drähte enthalten
  • Linux, um Firmware zu kompilieren und hochzuladen

Kompilieren Sie die Firmware


Beginnen wir also mit dem Softwareteil - dem Zusammenstellen der Firmware für unseren Schlüssel. Firmware-Quellcodes finden Sie in diesem Repository . Ich würde vorschlagen, die neueste stabile Version herunterzuladen (Sie finden sie auf der Registerkarte Tags). Sie können das Repository klonen oder als Zip-Archiv herunterladen. Finger kneten, Terminal starten und zum Projektordner gehen. Gehen Sie zum Ordner src

$ cd src

Um die Firmware zu kompilieren und herunterzuladen, müssen mehrere Pakete installiert werden:

  • arm-none-eabi-gcc
  • arm-none-eabi-newlib
  • openocd

Ich benutze den Pacman-Paketmanager, in meinem Fall sieht es so aus


$ sudo pacman -S arm-none-eabi-gcc
$ sudo pacman -S arm-none-eabi-newlib
$ sudo pacman -S openocd

Wenn Sie auf Ubuntu sitzen - verwenden Sie apt.

Ich möchte Sie daran erinnern, dass wir uns im Ordner src des Projekts befinden.
Führen Sie das Konfigurationsskript aus

$ ./configure --vidpid=234b:0000

Wir führen das Dienstprogramm make aus und beobachten, wie unsere Firmware kompiliert wird.

$ make

Nach der Kompilierung erscheint der Build-Ordner und darin die Datei gnuk.elf - wir brauchen sie.

Laden Sie die Firmware auf das Gerät herunter


Nachdem wir die fertige Datei mit der Firmware haben, müssen wir sie nur noch auf das Gerät herunterladen. Dafür müssen wir ein wenig mit einem Lötkolben arbeiten. Mach dir keine Sorgen, du brauchst keine besonderen Fähigkeiten, löte nur 4 Drähte.

Also nehmen wir einen der Programmierer und ziehen den Koffer ab. Der ausgewählte Programmierer wird unser Spender sein. Folgendes finden wir im Inneren.



Achten Sie auf die 4 Stifte auf der Platine. Wir müssen mit ihnen löten. Ich empfehle hierfür die mit ST-Link gelieferten Kabel. Wir reinigen die Drähte von einem Ende und löten sie an die Kontakte. Wenn wir Glück haben, gibt es an der Tafel Anzeichen für diese Kontakte.

""

Jetzt verbinden wir das zweite Ende der Drähte mit dem verbleibenden gesamten Programmierer. Wenn Sie Glück haben, schließen Sie einfach die Drähte gemäß den Bezeichnungen an:

GND zu GND
3,3 V zu 3,3 V
SWDIO zu SWDIO
SWCLK zu SWCLK

Wenn sich keine Etiketten auf der Platine befinden, müssen Sie nach dem Zufallsprinzip stoßen, um den Tester zu verwenden. Mit ihm können Sie leicht GND finden (es ist an den Anschlüssen des Donor-Programmiergeräts mit GND verbunden), ähnlich wie bei 3,3 V. Die verbleibenden zwei Drähte müssen zufällig angeschlossen werden. Glücklicherweise gibt es nur zwei Optionen. Als Ergebnis erhalten wir etwas Ähnliches.



Auf diesem Foto ist das blaue Gerät der Programmierer, den wir nur als Programmierer verwenden. Lassen Sie sich nicht durch die Tatsache verwirren, dass auf dem Foto am Anfang des Artikels das endgültige Gerät eine blaue Körperfarbe hat. Es ist nicht er. Das zukünftige Gerät ist auf der rechten Seite.

Firmware herunterladen


Wir sind einen Schritt vom Erfolg entfernt, es bleibt nur das Herunterladen der Firmware. Öffnen Sie das Terminal und gehen Sie in den Ordner mit unserer Firmware (gnuk.elf).

Führen Sie den folgenden Befehl aus:

$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program build/gnuk.elf verify reset exit'

Nun haben wir die Firmware auf unser Gerät hochgeladen. Es war noch ein Schritt übrig - das Lesen des Speichers des Mikrocontrollers zu verbieten. BEACHTUNG! Dies ist eine sehr wichtige Phase, in der die Person, die Ihren Schlüssel gestohlen hat, keine geheimen Informationen daraus extrahieren kann.

Führen Sie dazu den folgenden Befehl aus:

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "stm32f1x lock 0" -c reset -c exit   

Jetzt ist alles fertig.

Alles zurücklegen


Nachdem alle Schritte zurückliegen, muss noch auf das Erscheinungsbild unseres Geräts geachtet werden. Wir löten die Drähte. Wir brauchen auch nicht mehr die originale Kontaktleiste, damit Sie sie sicher ablöten können.



Brechen Sie die Halterung und löten Sie die Kontakte nacheinander.



Jetzt setzen wir das Gehäuse wieder auf und versiegeln die Rückwand mit einem geeigneten Stück Plastik.

Wie kann ich verwenden


Was wir zusammengestellt haben, ist ein OpenPGP-Smartcard- Emulator . Auf einer solchen Karte können GPG- und SSH-Schlüssel gespeichert werden. Der Umfang ist ziemlich groß, zum Beispiel:

  • Unterzeichnen von Git-Commits - hier wurde bereits ein Sicherheitsproblem angesprochen
  • SSH-Schlüsselspeicher
  • S / MIME E-Mail-Verschlüsselung und Signatur - nicht überprüft, aber sie schreiben, dass es funktioniert
  • Eingabe des Betriebssystems ohne Kennwort - eine gute Anleitung befindet sich bereits auf dem Hub

Wie Sie sehen können, können Sie viele interessante und nützliche Dinge tun.

Anwendungsbeispiel für ssh


Lassen Sie uns am Ende sehen, wie Sie mit diesem Schlüssel SSH-Schlüssel speichern und eine Verbindung zu einem Remote-Server herstellen können.

Es gibt zwei Möglichkeiten: einen neuen Schlüssel zu generieren oder einen vorhandenen Schlüssel in ein Token zu importieren.

Sehen wir uns beide Optionen an. Wir stecken den Token in USB. In dmesg sehen Sie Informationen zum angeschlossenen Gerät.


$ dmesg
[11073.599862] usb 1-3: USB disconnect, device number 11
[11311.647551] usb 1-3: new full-speed USB device number 12 using xhci_hcd
[11311.796881] usb 1-3: New USB device found, idVendor=234b, idProduct=0000, bcdDevice= 2.00
[11311.796884] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[11311.796885] usb 1-3: Product: Gnuk Token
[11311.796887] usb 1-3: Manufacturer: Free Software Initiative of Japan

Neue SSH-Schlüsselgenerierung


Es ist wichtig zu verstehen, dass der Schlüssel auf dem Gerät selbst und nicht auf Ihrem Computer generiert wird . Ein solcher Schlüssel verlässt das Gerät also überhaupt nicht.

Gehe zu gpg:


$ gpg --card-edit

Der interaktive GPG-Modus wird geöffnet. Aktivieren Sie den Administratormodus mit dem Befehl admin:


gpg/card> admin

Führen Sie als Nächstes den neuen Befehl zur Schlüsselgenerierung aus:


gpg/card> generate

Als nächstes folgt das Standardverfahren zur Generierung von GPG-Schlüsseln. Währenddessen werden Sie aufgefordert, den Sicherungsschlüssel auf der Festplatte zu speichern. Entwickler empfehlen, Backups zu erstellen, aber Sie entscheiden.
Das einzige ist, dass die Hardware-Generierung von RSA-Schlüsseln mit bis zu 2048 Bit unterstützt wird. Wenn Sie 4096 benötigen, müssen Sie den Schlüssel auf dem Computer generieren und dann in das Gerät selbst importieren.
Als nächstes benötigen Sie PIN-Codes. Standardmäßig sind die folgenden PIN-Codes in der Firmware geschützt:

CARD PIN - 123456
ADMIN PIN - 12345678

In Zukunft müssen sie geändert werden.

Der Schlüssel kann etwas länger generiert werden, als wenn er direkt auf dem Computer generiert wurde. Wir haben also etwas Geduld.

Importieren Sie einen vorhandenen Schlüssel


Nun wollen wir sehen, was zu tun ist, wenn Sie bereits einen SSH-Schlüssel haben, den Sie verwenden möchten.
Importieren Sie dazu den Schlüssel in gpg:


$ pem2openpgp temporary_id < id_rsa  | gpg --import

Jetzt müssen wir die ID des Schlüssels herausfinden. Listen Sie dazu alle in gpg verfügbaren auf:


$ gpg -K

Und wir finden den importierten Schlüssel:


sec>  rsa2048 2020-02-05 [C]
      DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC
      Card serial no. = FFFE 87144751
uid           [ unknown] temporary_id


In meinem Fall lautet die Schlüssel-ID DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC. Wechseln

Sie in den interaktiven Modus, um den GPG-Schlüssel zu bearbeiten:


$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Und wir geben den Befehl, den Schlüssel auf die Smartcard zu kopieren:


gpg> keytocard

Alles, der Schlüssel wird aufgezeichnet.

Exportieren Sie den öffentlichen Schlüssel im SSH-Format


Wir erhalten den gewünschten öffentlichen Schlüssel vom Token, um ihn auf dem Server abzulegen:

$ pkcs15-tool --list-keys

In meinem Fall sieht die Ausgabe folgendermaßen aus:


Using reader with a card: Free Software Initiative of Japan Gnuk (FSIJ-1.2.15-87144751) 00 00
Private RSA Key [Signature key]
	Object Flags   : [0x03], private, modifiable
	Usage          : [0x20C], sign, signRecover, nonRepudiation
	Access Flags   : [0x1D], sensitive, alwaysSensitive, neverExtract, local
	ModLength      : 2048
	Key ref        : 0 (0x00)
	Native         : yes
	Auth ID        : 01
	ID             : 01
	MD:guid        : f3de5f55-d100-4973-d572-40d67e20f033

Hier interessiert uns der ID-Schlüssel des Schlüssels, in meinem Fall 01. Jetzt exportieren wir den öffentlichen Schlüssel:


$ pkcs15-tool --read-public-key 01

Kopieren Sie den öffentlichen Schlüssel in die Datei pub.key:


-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyzHQIWEApliWYaf0T8jb
Vh2nc5+LklKXeuJFTN3BW2VqdrTw1rpKXiANWpi+qbtZhZ2nP3CJX6qoGobXyCOd
/iAiygFlyW4BwTQpnAm81IE9lPzfasOK7SBuKJ+ZbB4WpuYJRozgtt/gpWzmnWnW
84/CU9Lqbhz95v/C/DImSf6LiwVdmiEj4CUNInl5pY4trguDsSfkw1u8gGqSPEsD
ZXtlVRx8iBGi0JR02g9KTL4dDGocUtcTK8W0eY+BDbQSXfTGCy93v8sEyhdQjHs8
oDiwkvFQ86gYqwL5DJ7U/rFSO3A5X6zmkFFV8nJZjxB2qfE5aommtXxow4iPml3x
YwIDAQAB
-----END PUBLIC KEY-----

Und konvertieren Sie es in das ssh-rsa-Format:


$ ssh-keygen -f pub.key -i -mPKCS8 

Es stellt sich der öffentliche Schlüssel im gewünschten Format heraus:


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLMdAhYQCmWJZhp/RPyNtWHadzn4uSUpd64kVM3cFbZWp2tPDWukpeIA1amL6pu1mFnac/cIlfqqgahtfII53+ICLKAWXJbgHBNCmcCbzUgT2U/N9qw4rtIG4on5lsHham5glGjOC23+ClbOadadbzj8JT0upuHP3m/8L8MiZJ/ouLBV2aISPgJQ0ieXmlji2uC4OxJ+TDW7yAapI8SwNle2VVHHyIEaLQlHTaD0pMvh0MahxS1xMrxbR5j4ENtBJd9MYLL3e/ywTKF1CMezygOLCS8VDzqBirAvkMntT+sVI7cDlfrOaQUVXyclmPEHap8Tlqiaa1fGjDiI+aXfFj

Als Nächstes wird das Standardverfahren zum Konfigurieren von ssh für die Anmeldung mit einem bestimmten Schlüssel beschrieben. Sie müssen den Schlüssel zur Datei ~ / .ssh / autorisierte_keys auf dem Remote-Server hinzufügen.

SSH-Konfiguration


Um nun mit unserem Token auf den Server zuzugreifen, müssen Sie ssh mit dem Schalter -I aufrufen und den Pfad an den Token-Treiber übergeben. Unser Token ist mit einem der Standardtreiber kompatibel, daher werden wir es verwenden

$ ssh -I /usr/lib/opensc-pkcs11.so martin@remotehost

Es ist jedoch bequemer, die Konfigurationsdatei (~ / .ssh / config) zu verwenden.
Fügen Sie die folgenden Zeilen hinzu.

Host digitalOceanServer
        HostName 192.168.0.1
        User root
        PKCS11Provider /usr/lib/opensc-pkcs11.so

Der SSH-Aufruf ist jetzt noch einfacher:


$ ssh digitalOceanServer

So ändern Sie Standard-PIN-Codes


Ein ebenso wichtiger Schritt ist die Installation Ihrer eigenen PIN-Codes. Zuerst müssen Sie verstehen, dass zwei verschiedene PIN-Codes verwendet werden:

  • PIN-Code - dieser Code wird für Routineoperationen mit einer Smartcard verwendet - um etwas zu verschlüsseln, zu signieren usw.
  • Admin-PIN-Code - Dieser Code wird benötigt, um Schlüssel zu ändern / löschen und alle möglichen „Admin“ -Dinge auszuführen
  • Code zurücksetzen - Ein Code, mit dem Sie das Token nach drei falschen Versuchen, den PIN-Code einzugeben, entsperren können. Die Verwendung ist optional, Sie entscheiden also

Sie haben nur 3 Versuche für jeden der Codes. Danach wird der Token blockiert.

Jetzt fangen wir an. Dazu wechseln wir erneut in den interaktiven GPG-Modus:


$ gpg --card-edit

Und geben Sie den Befehl passwd ein:


gpg/card> passwd

Es öffnet sich ein Fenster, in dem Sie den PIN-Code des Tokens ändern können.

Jetzt müssen Sie die Administrator-PIN ändern. Wechseln Sie dazu in den Administratormodus:


gpg/card> admin

Geben Sie den Befehl passwd erneut ein:


gpg/card> passwd

Jetzt funktioniert es jedoch im erweiterten Modus und es werden uns mehrere Optionen angeboten:


1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection?

Wir wählen Admin-PIN ändern und legen das Administratorkennwort gemäß dem Standardschema fest. Ich möchte Sie daran erinnern, dass die Standard-Admin-PIN 12345678 lautet.

Informationen zur Gerätesicherheit


Natürlich können Sie für 3 US-Dollar keine Sicherheit auf Schlüsselebene für mehr als 200 US-Dollar erreichen. Das zusammengebaute Gerät kann jedoch als Einstiegsschlüssel betrachtet werden. Soweit ich weiß, verwenden die Nitrokey Start-Werksschlüssel dieselbe Firmware. In jedem Fall erhöht die Verwendung eines solchen Geräts die Sicherheit um mindestens ein höheres Niveau. Dies ist also eine großartige Möglichkeit, Hardware-Schlüssel zu verwenden.

Lassen Sie uns nun ein wenig darüber sprechen, was passieren wird, wenn Sie diesen Schlüssel verlieren. Der Schlüssel selbst ist durch einen PIN-Code geschützt. Nach mehreren erfolglosen Versuchen wird der Schlüssel gesperrt. Der Speicher des Geräts selbst ist vor dem Lesen geschützt, sodass das Lesen der darin geschriebenen Schlüssel nicht direkt funktioniert.
Es gibt einige Arten von Angriffen auf den Chip selbst (z. B. die Vorbereitung und den Anschluss von Mikroelektroden an diesen, mit denen die Spannung an einer beliebigen Stelle im Chip gemessen wird, einschließlich des Speichers), die jedoch recht teuer sind.

Ich wiederhole noch einmal, dies ist eine großartige Einstiegsoption, und selbst damit wird die Sicherheit ein ganz neues Niveau erreichen.

Links zu nützlichen Materialien


Bei der Verwendung des Geräts werden sicherlich zusätzliche Informationen benötigt. Ich habe eine Liste guter Quellen zusammengestellt.

  • Debian Website Seite
  • Token- Dokumentation
  • Handbuch für das Nitrokey Start-Token - es verwendet dieselbe Firmware, daher passen die Tipps auch zu uns

Das Gerät, das wir zusammengestellt haben, wird vom Open-Source-GNUK-Projekt entwickelt (eigentlich als Token bezeichnet), sodass auf Anfrage von "GNUK" weitere Informationen in Google zu finden sind.

Upd. In den Kommentaren wurde darauf hingewiesen, dass es eine Firmware gibt, mit der Sie das Gerät für die Zwei-Faktor-Authentifizierung verwenden können. Den Firmware-Code finden Sie hier
. 2 15.02.2020 In den Kommentaren wurde darauf hingewiesen, dass für diesen bestimmten Chip eine Sicherheitsanfälligkeit vorliegt, die den Inhalt des Speichers belasten könnte. Soweit ich weiß, wurde es noch nicht veröffentlicht, aber es wurde angekündigt. Im Moment ist also nicht alles klar. Sie schlugen auch eine gute Lösung vor - gießen Sie Epoxidharz in den Körper des Gerätsgemischt mit Aluminiumpulver. Diese Methode wurde im Buch von Kevin Mitnick, "The Art of Deception", beschrieben. Um Zugang zum Chip zu erhalten, muss der Klebstoff geknackt werden, was bei unachtsamer Handhabung den Chip dauerhaft beschädigen kann. Natürlich kann diese Methode umgangen werden, was die Kosten für das Hacken noch weiter erhöht. Natürlich wird der Mossad bei Bedarf seine Mossad-Sachen machen und dies wird ihn nicht aufhalten, sondern nur verzögern.
Upd. 3Viele Nachrichten gingen an die PM, dass die Leute keine ST-Link-Firmware bekommen können. Nachdem wir es herausgefunden hatten, stellten wir fest, dass chinesische Hersteller nun aktiv an Komponenten sparen und Chips mit 64 KB Speicher an Bord verwenden. Und dies ist nicht genug für Firmware, suchen Sie nach einem 128-KB-Chip an Bord. Daher empfehle ich, beim Kauf zu überprüfen, welcher Chip installiert ist (falls möglich), oder sich beim Verkäufer / in den Bewertungen zu erkundigen.
Upd. 4 Es stellt sich heraus, dass Sie weiterhin chinesische Programmierer mit einem 64-KB-Chip verwenden können (obwohl Sie die neueste Firmware-Version verwenden müssen) - ein interessanter Artikel dazu wurde auf dem Hub veröffentlicht .

Source: https://habr.com/ru/post/undefined/


All Articles