Le rĂ©sultat final est une clĂ© de la taille d'une clĂ© USB. Uncryptage 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 Ă GND3,3V Ă 3,3 V SWDIO Ă SWDIOSWCLK Ă SWCLKS'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 - 123456PIN 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 DFEFF02E226560B7F5A5F2CAB19534F88F8FE4ECAccé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Ă© iciUpd. 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 .