Kunci enkripsi perangkat keras $ 3 - apakah ini mungkin?


Hasil akhirnya adalah kunci ukuran flash drive USB.

Enkripsi yang tersebar luas dan, sebagai akibatnya, banyaknya tombol membuat Anda berpikir tentang penyimpanan yang dapat diandalkan. Menyimpan kunci pada perangkat eksternal, dari mana mereka tidak dapat disalin, telah lama dianggap praktik yang baik. Saya akan berbicara tentang cara membuat perangkat seperti itu selama $ 3 dan 2 jam.

Apa maksud gambar itu?
. . : ยซ โ€” , โ€ฆ , ...ยป. , , )

Secara singkat tentang prinsip kerja


Kriptografi memberi kita kesempatan untuk menyembunyikan apa yang ingin kita kirim, untuk memastikan bahwa kita berkomunikasi dengan orang yang kita pikirkan dan banyak hal menarik lainnya. Biasanya, agar semua ini berfungsi dengan baik, mereka hanya meminta kami satu hal - untuk menjaga rahasia kunci enkripsi kami . Kedengarannya mudah, bukan? Baiklah, mari kita lihat bagaimana kita bisa menyembunyikan kunci kita:

  • Menyimpan ke file di desktop Anda adalah cara lama dan terbukti untuk merekam sesuatu selama bertahun-tahun. Masalahnya adalah bahwa selain pengguna sendiri, banyak program lain memiliki akses ke file di desktop Anda. Dan jika Anda benar-benar yakin bahwa mereka semua melakukan apa yang dimaksudkan, jangan kumpulkan data tentang Anda dan jangan gabungkan mereka ke dalam jaringan - artikel ini bukan untuk Anda.
  • โ€” - , . , , , - -
  • โ€” , . , . , . , ( ssh-) .

Seperti yang Anda lihat, masalah utama adalah bahwa tombol-tombol tersebut secara langsung disimpan di komputer Anda atau dimasukkan ke sana menggunakan keyboard, flash drive, dll. Tapi, Anda keberatan, bagaimana kemudian komputer saya akan mengenkripsi data jika tidak tahu kuncinya? Jawaban yang benar tidak mungkin. Solusinya telah lama ditemukan. Gagasan utamanya adalah menghubungkan perangkat khusus ke komputer, yang dengan sendirinya akan mengenkripsi data. Dan komputer hanya akan mengirim data dan menerima hasilnya. Jadi, misalnya, banyak kartu pintar berfungsi.



Komponen yang Diperlukan


Jadi mari kita mulai. Kami akan memasang perangkat kami pada mikrokontroler yang murah dan cukup populer dari seri STM32. Tentu saja, Anda dapat membuat papan sirkuit tercetak sendiri, tetapi kami ingin mengelola dalam 2 jam? Jadi mari kita ambil solusi yang sudah jadi - programmer ST-Link v2. Perangkat ini terlihat seperti ini.



Anehnya, programmer untuk mikrokontroler STM32 dipasang pada mikrokontroler STM32. Perangkat ini sangat mirip flash drive, yang hanya bisa kita lakukan. Apalagi bodinya terbuat dari aluminium, jadi Anda tidak perlu khawatir akan rusak. Harganya keajaiban untuk aliexpress 1,5-3 dolar. Kita akan membutuhkan dua hal ini. Kami akan membuat ulang salah satu dari mereka berdasarkan turn-key, dan kami akan menggunakan yang kedua untuk mengunggah firmware ke yang pertama. Jika Anda sudah memiliki programmer STM32, Anda dapat melakukan satu hal.

Total, kita perlu:

  • Programmer ST-Link v2 - 2 buah
  • Baut pateri
  • Beberapa kabel - sebagai aturan kabel yang sesuai sudah disertakan dengan ST-Link
  • Linux, untuk mengkompilasi dan mengunggah firmware

Kompilasi firmware


Jadi, mari kita mulai dengan bagian perangkat lunak - memasang firmware untuk kunci kita. Kode sumber firmware dapat ditemukan di repositori ini . Saya sarankan mengunduh versi stabil terbaru (Anda dapat menemukannya di tab tag). Anda dapat mengkloning repositori atau mengunduh sebagai arsip zip. Uleni jari, luncurkan terminal dan pergi ke folder proyek. Buka folder src

$ cd src

Untuk mengkompilasi dan mengunduh firmware, kita perlu menginstal beberapa paket:

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

Saya menggunakan manajer paket pacman, dalam kasus saya sepertinya ini


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

Jika Anda duduk di Ubuntu - gunakan apt.

Biarkan saya mengingatkan Anda bahwa kami berada di folder src proyek.
Jalankan skrip konfigurasi

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

Kami menjalankan utilitas make dan mengamati bagaimana firmware kami dikompilasi.

$ make

Setelah dikompilasi, folder build muncul, dan di dalamnya ada file gnuk.elf - kita membutuhkannya.

Unduh firmware ke perangkat


Sekarang kita memiliki file yang sudah selesai dengan firmware, kita hanya perlu mengunduhnya ke perangkat. Untuk ini, kita harus bekerja sedikit dengan setrika. Jangan khawatir, Anda tidak perlu keahlian khusus, cukup solder 4 kabel.

Jadi, kami mengambil salah satu programmer dan mengambil kasingnya. Programmer yang dipilih akan menjadi donor kami. Inilah yang kami temukan di dalamnya.



Perhatikan 4 pin di papan tulis. Kita perlu menyolder kepada mereka. Saya sarankan menggunakan kabel yang datang dengan ST-Link untuk ini. Kami membersihkan kabel dari satu ujung dan menyoldernya ke kontak. Jika kita beruntung, maka di papan akan ada tanda-tanda kontak ini.

"

Sekarang, kami menghubungkan ujung kedua kabel ke seluruh programmer yang tersisa. Jika Anda beruntung, maka cukup sambungkan kabel sesuai dengan prasasti:

GND ke GND
3.3V ke 3.3V
SWDIO ke SWDIO
SWCLK ke SWCLK

Jika tidak ada label di papan tulis, Anda harus menyodok secara acak untuk menggunakan tester. Dengan menggunakannya, Anda dapat dengan mudah menemukan GND (terhubung ke GND di terminal programmer donor), mirip dengan 3.3V. Dua kabel yang tersisa harus terhubung secara acak. Untungnya, hanya ada dua opsi. Akibatnya, kita mendapatkan sesuatu yang mirip dengan ini.



Dalam foto ini, perangkat biru adalah programmer, yang kita gunakan hanya sebagai programmer. Jangan bingung dengan kenyataan bahwa di foto di awal artikel, perangkat akhir memiliki warna tubuh biru. Bukan dia. Perangkat yang akan datang ada di sebelah kanan.

Unduh firmware


Kami selangkah lagi dari kesuksesan, tetap hanya mengunduh firmware. Buka terminal, buka folder dengan firmware kami (gnuk.elf).

Jalankan perintah:

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

Jadi, sekarang kami telah mengunggah firmware ke perangkat kami. Ada satu langkah lagi - untuk melarang membaca memori mikrokontroler. PERHATIAN! Ini adalah tahap yang sangat penting, yang tidak akan memungkinkan orang yang mencuri kunci Anda untuk mengambil informasi rahasia darinya.

Untuk melakukan ini, jalankan perintah:

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

Sekarang semuanya sudah siap.

Kembalikan semuanya


Sekarang setelah semua langkah di belakang, itu masih untuk menjaga penampilan perangkat kita. Kami menyolder kabel. Kami juga tidak lagi memerlukan bilah kontak yang asli, sehingga Anda dapat dengan aman melepaskannya.



Hancurkan dudukan dan solder kontak satu per satu.



Sekarang kami meletakkan kembali case dan menutup dinding belakang dengan potongan plastik yang cocok.

Bagaimana saya bisa menggunakan


Apa yang kami rakit adalah emulator kartu pintar OpenPGP . Kartu semacam itu dapat menyimpan kunci GPG, SSH. Lingkupnya cukup besar, misalnya:

  • Menandatangani komitmen git - masalah keamanan telah dimunculkan di sini
  • Penyimpanan kunci SSH
  • Enkripsi dan penandatanganan email S / MIME - tidak memeriksa, tetapi mereka menulis bahwa itu berfungsi
  • Memasuki OS tanpa kata sandi - panduan yang baik sudah ada di hub

Seperti yang Anda lihat, Anda dapat melakukan banyak hal menarik dan berguna.

Contoh penggunaan untuk ssh


Dan pada akhirnya, mari kita lihat bagaimana Anda dapat menggunakan kunci ini untuk menyimpan kunci ssh dan terhubung ke server jauh.

Ada dua cara - untuk menghasilkan kunci baru atau mengimpor kunci yang ada ke token.

Mari kita lihat kedua opsi. Kami memasukkan token ke USB. Di dmesg Anda dapat melihat informasi tentang perangkat yang terhubung.


$ 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

Generasi kunci ssh baru


Penting untuk dipahami bahwa kunci dibuat pada perangkat itu sendiri , dan bukan pada komputer Anda. Jadi, kunci seperti itu tidak pernah meninggalkan perangkat sama sekali.

Pergi ke gpg:


$ gpg --card-edit

Mode interaktif gpg terbuka, aktifkan mode admin dengan perintah admin:


gpg/card> admin

Selanjutnya, jalankan perintah pembuatan kunci baru:


gpg/card> generate

Berikut ini adalah prosedur pembuatan kunci gpg standar. Di mana Anda akan diminta untuk menyimpan kunci cadangan ke disk. Pengembang merekomendasikan untuk membuat cadangan, tetapi Anda yang memutuskan.
Satu-satunya hal yang didukung adalah pembuatan kunci RSA hingga 2048 bit yang didukung. Jika Anda membutuhkan 4096, Anda harus membuat kunci di komputer, dan kemudian mengimpornya ke perangkat itu sendiri.
Selanjutnya Anda akan memerlukan kode pin. Secara default, kode PIN berikut dilindungi dalam firmware:

CARD PIN - 123456
PIN ADMIN - 12345678

Di masa mendatang, kode PIN tersebut harus diubah.

Kunci dapat dibuat sedikit lebih lama daripada jika itu dihasilkan langsung di komputer, jadi kami memiliki kesabaran.

Impor kunci yang ada


Sekarang mari kita lihat apa yang harus dilakukan jika Anda sudah memiliki kunci ssh yang ingin Anda gunakan.
Untuk melakukan ini, impor kunci dalam gpg:


$ pem2openpgp temporary_id < id_rsa  | gpg --import

Sekarang kita perlu mencari tahu id kuncinya. Untuk melakukan ini, daftarkan semua yang tersedia di gpg:


$ gpg -K

Dan kami menemukan kunci yang diimpor:


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


Dalam kasus saya, id kuncinya adalah DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Buka mode interaktif untuk mengedit kunci gpg:


$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Dan kami memberikan perintah untuk menyalin kunci ke kartu pintar:


gpg> keytocard

Semuanya, kuncinya direkam.

Ekspor kunci publik dalam format ssh


Kami mendapatkan kunci publik yang diinginkan dari token untuk meletakkannya di server:

$ pkcs15-tool --list-keys

Dalam kasus saya, hasilnya terlihat seperti ini:


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

Di sini kami tertarik pada kunci-ID kunci, dalam kasus saya 01. Sekarang kami mengekspor kunci publik:


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

Salin kunci publik ke file pub.key:


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

Dan konversikan ke format ssh-rsa:


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

Ternyata kunci publik dalam format yang diinginkan:


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

Berikutnya adalah prosedur standar untuk mengkonfigurasi ssh untuk masuk dengan kunci yang diberikan - Anda perlu menambahkan kunci ke file ~ / .ssh / official_keys di server jarak jauh.

Konfigurasi ssh


Sekarang, untuk masuk ke server menggunakan token kami, Anda perlu memanggil ssh dengan sakelar -I dan meneruskan jalur ke driver token. Token kami kompatibel dengan salah satu driver standar, jadi kami akan menggunakannya

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

Namun, akan lebih mudah menggunakan file config (~ / .ssh / config).
Tambahkan baris-baris berikut ini.

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

Panggilan ssh sekarang bahkan lebih mudah:


$ ssh digitalOceanServer

Cara mengubah kode pin standar


Langkah yang sama pentingnya adalah memasang kode pin Anda sendiri. Pertama, Anda perlu memahami bahwa ada dua kode pin yang berbeda yang digunakan:

  • Kode PIN - kode ini digunakan untuk operasi rutin dengan kartu pintar - untuk mengenkripsi sesuatu, menandatangani, dll.
  • Admin Pin-code - kode ini diperlukan untuk mengubah / menghapus kunci dan melakukan segala macam hal seperti "admin"
  • Reset kode - kode yang memungkinkan Anda membuka kunci token setelah tiga upaya memasukkan kode PIN yang salah. Penggunaannya adalah opsional, jadi terserah Anda

Anda hanya memiliki 3 upaya untuk masing-masing kode. Setelah itu token diblokir.

Sekarang mari kita mulai. Untuk melakukan ini, kita kembali ke mode GPG interaktif:


$ gpg --card-edit

Dan masukkan perintah passwd:


gpg/card> passwd

Sebuah jendela akan terbuka di mana Anda dapat mengubah kode pin dari token.

Sekarang Anda perlu mengubah PIN administrator. Untuk melakukan ini, buka mode administrator:


gpg/card> admin

Masukkan perintah passwd lagi:


gpg/card> passwd

Namun, sekarang berfungsi dalam mode lanjutan dan kami akan ditawari beberapa opsi:


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

Your selection?

Kami memilih mengubah PIN Admin dan mengatur kata sandi administrator sesuai dengan skema standar. Biarkan saya mengingatkan Anda bahwa PIN Admin default adalah 12345678.

Tentang keamanan perangkat


Tentu saja, dengan $ 3 Anda tidak dapat mencapai tingkat keamanan kunci untuk 200+ dolar. Namun, perangkat yang dirakit dapat dianggap sebagai kunci tingkat entri. Sejauh yang saya tahu, Nitrokey Mulai kunci pabrik menggunakan firmware yang sama. Dalam hal apa pun, penggunaan perangkat semacam itu akan meningkatkan keamanan setidaknya pada tingkat yang lebih tinggi. Jadi ini adalah cara terbaik untuk mulai menggunakan kunci perangkat keras.

Sekarang mari kita bicara sedikit tentang apa yang akan terjadi jika Anda kehilangan kunci ini. Kunci itu sendiri dilindungi oleh kode pin. Setelah beberapa upaya gagal, kuncinya dikunci. Memori perangkat itu sendiri dilindungi dari pembacaan, jadi itu tidak akan bekerja secara langsung untuk membaca kunci yang ditulis ke dalamnya.
Ada beberapa jenis serangan pada chip itu sendiri (misalnya, persiapan dan koneksi microelectrodes untuk itu, yang akan mengukur tegangan di mana saja di dalam chip, termasuk memori), tetapi mereka cukup mahal.

Jadi, saya ulangi sekali lagi, ini adalah opsi entry-level yang hebat, dan bahkan dengan itu, keamanan akan mencapai level yang sama sekali baru.

Tautan ke materi yang bermanfaat


Dalam proses menggunakan perangkat, tentu akan ada kebutuhan untuk informasi tambahan. Saya mengumpulkan daftar sumber yang bagus.

  • Halaman Situs Debian
  • Dokumentasi Token
  • Manual untuk token Nitrokey Start - ini menggunakan firmware yang sama, jadi tipsnya juga cocok untuk kita

Perangkat yang kami kumpulkan sedang dikembangkan oleh proyek GNUK open source (sebenarnya, itu disebut token), sehingga lebih banyak informasi dapat ditemukan di Google atas permintaan "GNUK".

Pembaruan. Komentar menyarankan bahwa ada firmware yang memungkinkan Anda untuk menggunakan perangkat untuk otentikasi dua faktor. Kode firmware dapat ditemukan di sini
Pembaruan. 2 02/15/2020 Komentar menyarankan bahwa untuk chip khusus ini ada kerentanan yang dapat menguras isi memori. Seperti yang saya pahami, itu belum dipublikasikan, tetapi sudah diumumkan. Jadi untuk saat ini, semuanya tidak jelas. Mereka juga menyarankan solusi yang bagus - tuangkan epoksi ke tubuh perangkatdicampur dengan bubuk aluminium. Metode ini dijelaskan dalam buku Kevin Mitnick, "The Art of Deception." Dengan demikian, untuk mendapatkan akses ke chip, perlu untuk memecahkan lem, yang, jika ditangani secara sembarangan, dapat merusak chip secara permanen. Tentu saja, metode ini dapat dielakkan, ini meningkatkan biaya peretasan lebih banyak. Tentu saja, jika perlu, Mossad akan membuat hal - hal Mossad dan ini tidak akan menghentikannya, tetapi hanya menunda saja.
Pembaruan. 3Banyak pesan datang ke PM bahwa orang tidak bisa mendapatkan firmware ST-Link. Setelah mengetahuinya, kami menemukan bahwa sekarang produsen Cina mulai aktif menghemat komponen dan menggunakan chip dengan memori 64Kb. Dan ini tidak cukup untuk firmware, cari chip 128Kb on board. Karena itu, saya sarankan saat membeli, periksa chip mana yang dipasang (jika mungkin), atau tanyakan pada penjual / di ulasan.
Pembaruan. 4 Ternyata Anda masih dapat menggunakan programmer Cina dengan chip 64 KB (meskipun Anda harus menggunakan versi firmware terbaru) - sebuah artikel menarik tentang ini muncul di hub .

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


All Articles