Clé de chiffrement matériel à 3 $ - est-ce possible?


Le résultat final est une clé de la taille d'une clé USB. Un

cryptage gĂ©nĂ©ralisĂ© et, par consĂ©quent, une abondance de clĂ©s vous font penser Ă  leur stockage fiable. Le stockage de clĂ©s sur des pĂ©riphĂ©riques externes, d'oĂč elles ne peuvent pas ĂȘtre copiĂ©es, a longtemps Ă©tĂ© considĂ©rĂ© comme une bonne pratique. Je vais vous expliquer comment fabriquer un tel appareil pour 3 $ et 2 heures.

Que signifie l'image?
. . : « — , 
 , ...». , , )

En bref sur les principes du travail


La cryptographie nous donne l'occasion de cacher ce que nous voulons envoyer, de nous assurer que nous communiquons avec celui avec qui nous pensons et bien d'autres choses intéressantes. Habituellement, pour que tout cela fonctionne bien, ils nous demandent une seule chose - garder nos clés de cryptage secrÚtes . Cela semble facile, non? Voyons comment cacher nos clés:

  • Enregistrer dans un fichier sur votre bureau est un moyen ancien et Ă©prouvĂ© d'enregistrer quelque chose au fil des ans. Le problĂšme est qu'en plus de l'utilisateur lui-mĂȘme, un tas d'autres programmes ont accĂšs aux fichiers sur votre bureau. Et si vous ĂȘtes absolument sĂ»r qu'ils font tous ce Ă  quoi ils sont destinĂ©s, ne collectez aucune donnĂ©e vous concernant et ne les fusionnez tout simplement pas dans le rĂ©seau - cet article n'est pas pour vous.
  • — - , . , , , - -
  • — , . , . , . , ( ssh-) .

Comme vous pouvez le voir, le principal problĂšme est que les touches sont soit directement stockĂ©es sur votre ordinateur, soit saisies Ă  l'aide d'un clavier, d'une clĂ© USB, etc. Mais, vous objectez, comment mon ordinateur cryptera-t-il alors les donnĂ©es s'il ne connaĂźt pas la clĂ©? La bonne rĂ©ponse n'est pas possible. La solution a longtemps Ă©tĂ© inventĂ©e. L'idĂ©e principale est de connecter un appareil spĂ©cial Ă  l'ordinateur, qui chiffrera lui-mĂȘme les donnĂ©es. Et l'ordinateur n'enverra que des donnĂ©es et recevra le rĂ©sultat. Ainsi, par exemple, de nombreuses cartes Ă  puce fonctionnent.



Composants requis


Alors, commençons. Nous assemblerons notre appareil sur un microcontrĂŽleur peu coĂ»teux et assez populaire de la sĂ©rie STM32. Bien sĂ»r, vous pouvez fabriquer vous-mĂȘme une carte de circuit imprimĂ© , mais nous voulons gĂ©rer en 2 heures? Prenons donc une solution toute faite - le programmeur ST-Link v2. Cet appareil ressemble Ă  ceci.



Curieusement, le programmateur pour microcontrÎleurs STM32 est assemblé sur le microcontrÎleur STM32. Cet appareil ressemble beaucoup à un lecteur flash, ce que nous pouvons faire. De plus, son corps est en aluminium, vous ne pouvez donc pas vous inquiéter qu'il soit endommagé. Cela coûte un miracle pour aliexpress 1,5-3 dollars. Nous aurons besoin de deux de ces choses. Nous allons refaire l'un d'eux sur une base clé en main, et nous utiliserons le second pour télécharger le firmware sur le premier. Si vous avez déjà un programmeur STM32, vous pouvez faire une chose.

Au total, nous avons besoin de:

  • Programmeur ST-Link v2 - 2 piĂšces
  • Fer Ă  souder
  • Peu de fils - en rĂšgle gĂ©nĂ©rale, des fils appropriĂ©s sont dĂ©jĂ  inclus avec ST-Link
  • Linux, afin de compiler et tĂ©lĂ©charger le firmware

Compiler le firmware


Commençons donc par la partie logicielle - assembler le firmware de notre clé. Les codes source du firmware se trouvent dans ce référentiel . Je suggÚre de télécharger la derniÚre version stable (vous pouvez la trouver dans l'onglet tags). Vous pouvez cloner le référentiel ou télécharger en tant qu'archive zip. Pétrissez vos doigts, lancez le terminal et accédez au dossier du projet. Accédez au dossier src

$ cd src

Pour compiler et télécharger le firmware, nous devons installer plusieurs packages:

  • bras-aucun-eabi-gcc
  • bras-aucun-eabi-newlib
  • openocd

J'utilise le gestionnaire de paquets pacman, dans mon cas, cela ressemble Ă  ceci


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

Si vous ĂȘtes assis sur Ubuntu - utilisez apt.

Permettez-moi de vous rappeler que nous sommes dans le dossier src du projet.
Exécutez le script de configuration

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

Nous exécutons l'utilitaire make et observons comment notre firmware est compilé.

$ make

AprĂšs la compilation, le dossier de construction apparaĂźt et contient le fichier gnuk.elf - nous en avons besoin.

Télécharger le firmware sur l'appareil


Maintenant que nous avons le fichier fini avec le firmware, il nous suffit de le télécharger sur l'appareil. Pour cela, nous devons travailler un peu avec un fer à souder. Ne vous inquiétez pas, vous n'avez pas besoin de compétences particuliÚres, soudez simplement 4 fils.

Donc, nous prenons l'un des programmeurs et en retirons le boßtier. Le programmeur sélectionné sera notre donateur. Voici ce que nous trouvons à l'intérieur.



Faites attention aux 4 broches sur la carte. Nous devrons leur souder. Pour cela, je recommande d'utiliser les fils fournis avec ST-Link. Nous nettoyons les fils d'une extrémité et les soudons aux contacts. Si nous avons de la chance, alors au tableau, il y aura des signes de ces contacts.

"

Maintenant, nous connectons la deuxiĂšme extrĂ©mitĂ© des fils au programmeur entier restant. Si vous ĂȘtes chanceux, connectez simplement les fils conformĂ©ment aux inscriptions:

GND Ă  GND
3,3
V Ă  3,3 V SWDIO Ă  SWDIO
SWCLK Ă  SWCLK

S'il n'y a pas d'Ă©tiquettes sur la carte, vous devrez piquer au hasard pour utiliser le testeur. En l'utilisant, vous pouvez facilement trouver GND (il est connectĂ© Ă  GND aux bornes du programmateur donneur), similaire Ă  3,3V. Les deux fils restants devront ĂȘtre connectĂ©s au hasard. Heureusement, il n'y a que 2 options. Par consĂ©quent, nous obtenons quelque chose de similaire Ă  ceci.



Sur cette photo, le périphérique bleu est le programmeur, que nous utilisons uniquement en tant que programmeur.. Ne soyez pas dérouté par le fait que sur la photo au début de l'article, l'appareil final a une couleur de corps bleue. Ce n'est pas lui. Le futur appareil est à droite.

Téléchargez le firmware


Nous sommes à deux pas du succÚs, il ne reste plus qu'à télécharger le firmware. Ouvrez le terminal, allez dans le dossier avec notre firmware (gnuk.elf).

Exécutez la commande:

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

Donc, maintenant, nous avons téléchargé le firmware sur notre appareil. Il ne restait plus qu'une étape: interdire la lecture de la mémoire du microcontrÎleur. ATTENTION! Il s'agit d'une étape trÚs importante, qui ne permettra pas à la personne qui a volé votre clé d'en extraire des informations secrÚtes.

Pour ce faire, exécutez la commande:

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

Maintenant, tout est prĂȘt.

Tout remettre


Maintenant que toutes les étapes sont en retard, il reste à prendre soin de l'apparence de notre appareil. Nous soudons les fils. Nous n'avons également plus besoin de la barre de contact d'origine, vous pouvez donc la dessouder en toute sécurité.



Brisez le support et soudez les contacts un par un.



Maintenant, nous remettons le boßtier et scellons la paroi arriÚre avec un morceau de plastique approprié.

Comment utiliser


Ce que nous avons assemblé est un émulateur de carte à puce OpenPGP . Une telle carte peut stocker des clés GPG, SSH. La portée est assez large, par exemple:

  • Signer git s'engage - un problĂšme de sĂ©curitĂ© a dĂ©jĂ  Ă©tĂ© soulevĂ© ici
  • Stockage de clĂ© SSH
  • Cryptage et signature des e-mails S / MIME - n'a pas vĂ©rifiĂ©, mais ils Ă©crivent que cela fonctionne
  • Entrer dans l'OS sans mot de passe - un bon guide est dĂ©jĂ  sur le hub

Comme vous pouvez le voir, vous pouvez faire beaucoup de choses intéressantes et utiles.

Exemple d'utilisation de ssh


Et à la fin, voyons comment vous pouvez utiliser cette clé pour stocker les clés ssh et vous connecter à un serveur distant.

Il existe deux façons - de générer une nouvelle clé ou d'importer une clé existante dans un jeton.

Voyons les deux options. Nous insérons le jeton dans USB. Dans dmesg, vous pouvez voir des informations sur l'appareil connecté.


$ 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

Nouvelle génération de clé ssh


Il est important de comprendre que la clĂ© est gĂ©nĂ©rĂ©e sur l'appareil lui - mĂȘme et non sur votre ordinateur. Donc, une telle clĂ© ne quitte jamais l'appareil.

Allez au gpg:


$ gpg --card-edit

Le mode interactif gpg s'ouvre, activez le mode administrateur avec la commande admin:


gpg/card> admin

Ensuite, exécutez la nouvelle commande de génération de clés:


gpg/card> generate

Vient ensuite la procédure de génération de clé gpg standard. Au cours de laquelle il vous sera demandé d'enregistrer la clé de sauvegarde sur le disque. Les développeurs recommandent de faire des sauvegardes, mais vous décidez.
La seule chose est que la gĂ©nĂ©ration matĂ©rielle de clĂ©s RSA jusqu'Ă  2048 bits est prise en charge. Si vous avez besoin de 4096, vous devrez gĂ©nĂ©rer la clĂ© sur l'ordinateur, puis l'importer sur l'appareil lui-mĂȘme.
Ensuite, vous aurez besoin de codes PIN. Par défaut, les codes PIN suivants sont protégés dans le micrologiciel:

PIN CARTE - 123456
PIN ADMIN - 12345678

À l'avenir, ils doivent ĂȘtre modifiĂ©s.

La clĂ© peut ĂȘtre gĂ©nĂ©rĂ©e un peu plus longtemps que si elle a Ă©tĂ© gĂ©nĂ©rĂ©e directement sur l'ordinateur, nous avons donc un peu de patience.

Importer une clé existante


Voyons maintenant quoi faire si vous avez déjà une clé ssh que vous souhaitez utiliser.
Pour ce faire, importez la clé en gpg:


$ pem2openpgp temporary_id < id_rsa  | gpg --import

Maintenant, nous devons trouver l'id de la clé. Pour ce faire, listez tout ce qui est disponible en gpg:


$ gpg -K

Et nous trouvons la clé importée:


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


Dans mon cas, l'ID de la clé est DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Accédez au mode interactif pour modifier la clé gpg:


$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Et nous donnons la commande pour copier la clé sur la carte à puce:


gpg> keytocard

Tout, la clé est enregistrée.

Exporter la clé publique au format ssh


Nous obtenons la clé publique souhaitée du jeton afin de la mettre sur le serveur:

$ pkcs15-tool --list-keys

Dans mon cas, la sortie ressemble Ă  ceci:


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

Ici, nous nous intéressons à la clé ID de la clé, dans mon cas 01. Maintenant, nous exportons la clé publique:


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

Copiez la clé publique dans le fichier pub.key:


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

Et convertissez-le au format ssh-rsa:


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

Il s'avÚre que la clé publique au format souhaité:


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

Vient ensuite la procédure standard pour configurer ssh pour se connecter avec une clé donnée - vous devez ajouter la clé au fichier ~ / .ssh / authorized_keys sur le serveur distant.

Configuration Ssh


Maintenant, pour accéder au serveur à l'aide de notre jeton, vous devez appeler ssh avec le commutateur -I et passer le chemin d'accÚs au pilote de jeton. Notre jeton est compatible avec l'un des pilotes standard, nous allons donc l'utiliser

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

Cependant, il sera plus pratique d'utiliser le fichier de configuration (~ / .ssh / config).
Ajoutez-y les lignes suivantes.

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

L'appel ssh est maintenant encore plus simple:


$ ssh digitalOceanServer

Comment changer les codes PIN standard


Une étape tout aussi importante consistera à installer vos propres codes PIN. Vous devez d'abord comprendre que deux codes PIN différents sont utilisés:

  • Code PIN - ce code est utilisĂ© pour les opĂ©rations de routine avec une carte Ă  puce - pour crypter quelque chose, signer, etc.
  • Code PIN administrateur - ce code est nĂ©cessaire pour changer / supprimer des clĂ©s et faire toutes sortes de choses "admin"
  • RĂ©initialiser le code - un code qui vous permettra de dĂ©verrouiller le jeton aprĂšs trois tentatives incorrectes de saisie du code PIN. Son utilisation est facultative, donc c'est Ă  vous

Vous n'avez que 3 tentatives pour chacun des codes. AprÚs quoi le jeton est bloqué.

Commençons maintenant. Pour ce faire, nous passons à nouveau en mode GPG interactif:


$ gpg --card-edit

Et entrez la commande passwd:


gpg/card> passwd

Une fenĂȘtre s'ouvrira oĂč vous pourrez modifier le code PIN Ă  partir du jeton.

Vous devez maintenant modifier le code PIN administrateur. Pour ce faire, passez en mode administrateur:


gpg/card> admin

Entrez Ă  nouveau la commande passwd:


gpg/card> passwd

Cependant, maintenant, cela fonctionne en mode avancé et il nous sera proposé plusieurs options:


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

Your selection?

Nous sélectionnons Modifier le code PIN administrateur et définissons le mot de passe administrateur selon le schéma standard. Permettez-moi de vous rappeler que le code PIN administrateur par défaut est 12345678.

À propos de la sĂ©curitĂ© des appareils


Bien sĂ»r, pour 3 $, vous ne pouvez pas atteindre un niveau de sĂ©curitĂ© clĂ© pour plus de 200 dollars. Cependant, le dispositif assemblĂ© peut ĂȘtre considĂ©rĂ© comme une clĂ© d'entrĂ©e de gamme. Pour autant que je sache, les clĂ©s d'usine Nitrokey Start utilisent le mĂȘme firmware. Dans tous les cas, l'utilisation d'un tel appareil augmentera la sĂ©curitĂ© d'au moins un niveau supĂ©rieur. C'est donc un excellent moyen de commencer Ă  utiliser les clĂ©s matĂ©rielles.

Parlons maintenant un peu de ce qui se passera si vous perdez cette clĂ©. La clĂ© elle-mĂȘme est protĂ©gĂ©e par un code PIN. AprĂšs plusieurs tentatives infructueuses, la clĂ© est verrouillĂ©e. La mĂ©moire de l'appareil lui-mĂȘme est protĂ©gĂ©e contre la lecture, il ne fonctionnera donc pas directement pour lire les clĂ©s qui y sont Ă©crites.
Il existe certains types d'attaques sur la puce elle-mĂȘme (par exemple, la prĂ©paration et la connexion de microĂ©lectrodes Ă  celle-ci, qui mesureront la tension n'importe oĂč dans la puce, y compris la mĂ©moire), mais elles sont assez coĂ»teuses.

Donc, je le rĂ©pĂšte encore une fois, c'est une excellente option d'entrĂ©e de gamme, et mĂȘme avec elle, la sĂ©curitĂ© atteindra un tout nouveau niveau.

Liens vers des documents utiles


Lors de l'utilisation de l'appareil, il sera certainement nécessaire de disposer d'informations supplémentaires. J'ai dressé une liste de bonnes sources.

  • Page du site Web Debian
  • Documentation des jetons
  • Manuel pour le jeton Nitrokey Start - il utilise le mĂȘme firmware, donc les conseils nous conviendront aussi

L'appareil que nous avons assemblĂ© est dĂ©veloppĂ© par le projet open source GNUK (en fait, il s'agit d'un token), donc plus d'informations peuvent ĂȘtre trouvĂ©es dans Google Ă  la demande de "GNUK".

Upd. Les commentaires suggĂšrent qu'il existe un firmware qui vous permet d'utiliser l'appareil pour l'authentification Ă  deux facteurs. Le code du firmware peut ĂȘtre trouvĂ© ici
Upd. 2 15/02/2020 Les commentaires suggĂšrent que pour cette puce particuliĂšre il y a une vulnĂ©rabilitĂ© qui pourrait vider le contenu de la mĂ©moire. Si je comprends bien, il n'a pas encore Ă©tĂ© publiĂ©, mais il a Ă©tĂ© annoncĂ©. Donc pour l'instant, tout n'est pas clair. Ils ont Ă©galement suggĂ©rĂ© une bonne solution - verser de l' Ă©poxy dans le corps de l'appareilmĂ©langĂ© avec de la poudre d'aluminium. Cette mĂ©thode a Ă©tĂ© dĂ©crite dans le livre de Kevin Mitnick, «The Art of Deception». Ainsi, afin d'accĂ©der Ă  la puce, il sera nĂ©cessaire de fissurer la colle qui, si elle est manipulĂ©e avec prĂ©caution, peut endommager dĂ©finitivement la puce. Bien sĂ»r, cette mĂ©thode peut ĂȘtre contournĂ©e, ce qui augmente encore plus le coĂ»t du piratage. Bien sĂ»r, si nĂ©cessaire, le Mossad fera ses affaires au Mossad et cela ne l'arrĂȘtera pas, mais le retardera seulement.
Upd. 3De nombreux messages sont venus au PM que les gens ne peuvent pas obtenir le firmware ST-Link. AprÚs l'avoir compris, nous avons découvert que maintenant les fabricants chinois ont commencé à économiser activement sur les composants et à utiliser des puces avec 64 Ko de mémoire à bord. Et cela ne suffit pas pour le firmware, recherchez une puce de 128 Ko à bord. Par conséquent, je recommande que lors de l'achat, vérifiez quelle puce est installée (si possible), ou vérifiez auprÚs du vendeur / dans les avis.
Upd. 4 Il s'avÚre que vous pouvez toujours utiliser des programmeurs chinois avec une puce de 64 Ko (bien que vous deviez utiliser la derniÚre version du firmware) - un article intéressant à ce sujet est paru sur le hub .

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


All Articles