مفتاح تشفير الأجهزة $ 3 - هل هذا ممكن؟


والنتيجة النهائية هي مفتاح بحجم محرك أقراص USB المحمول ،

فالتشفير الواسع النطاق ، ونتيجة لذلك ، وفرة من المفاتيح تجعلك تفكر في تخزينها الموثوق به. لطالما اعتبر تخزين المفاتيح على الأجهزة الخارجية ، حيث لا يمكن نسخها ، ممارسة جيدة. سأتحدث عن كيفية صنع هذا الجهاز لمدة 3 دولارات وساعتين.

ماذا تعني الصورة؟
. . : « — , … , ...». , , )

باختصار عن مبادئ العمل


يتيح لنا التشفير الفرصة لإخفاء ما نريد إرساله ، للتأكد من أننا نتواصل مع الشخص الذي نفكر معه والعديد من الأشياء الأخرى المثيرة للاهتمام. عادة ، لكي يعمل كل هذا بشكل جيد ، يطلبون منا شيئًا واحدًا فقط - للحفاظ على سرية مفاتيح التشفير الخاصة بنا . يبدو سهلا ، أليس كذلك؟ حسنًا ، دعنا نرى كيف يمكننا إخفاء مفاتيحنا:

  • يعد الحفظ في ملف على سطح المكتب طريقة قديمة ومثبتة لتسجيل شيء ما على مر السنين. تكمن المشكلة في أنه بالإضافة إلى المستخدم نفسه ، فإن مجموعة من البرامج الأخرى يمكنها الوصول إلى الملفات الموجودة على سطح المكتب. وإذا كنت متأكدًا تمامًا من أنهم جميعًا يفعلون ما هو مخصص له ، فلا تجمع أي بيانات عنك وببساطة لا تدمجها في الشبكة - هذه المقالة ليست لك.
  • — - , . , , , - -
  • — , . , . , . , ( ssh-) .

كما ترون ، فإن المشكلة الرئيسية هي أنه يتم تخزين المفاتيح إما مباشرة على جهاز الكمبيوتر الخاص بك أو يتم إدخالها هناك باستخدام لوحة المفاتيح ، محرك أقراص فلاش ، إلخ. ولكن ، أنت تعترض ، فكيف سيقوم الكمبيوتر بتشفير البيانات إذا لم يكن يعرف المفتاح؟ الجواب الصحيح هو بأي حال من الأحوال. لقد تم اختراع الحل منذ فترة طويلة. الفكرة الرئيسية هي توصيل جهاز خاص بالكمبيوتر ، والذي سيؤدي في حد ذاته إلى تشفير البيانات. وسيقوم الكمبيوتر بإرسال البيانات واستلام النتيجة فقط. لذا ، على سبيل المثال ، تعمل العديد من البطاقات الذكية.



المكونات المطلوبة


لذلك دعونا نبدأ. سنقوم بتجميع جهازنا على متحكم غير مكلف وغير مكلف من سلسلة STM32. بالطبع ، يمكنك إنشاء لوحة دوائر مطبوعة بنفسك ، لكننا نريد أن نديرها في ساعتين؟ لذلك دعونا نأخذ حل جاهز - مبرمج ST-Link v2. هذا الجهاز يبدو هكذا.



ومن الغريب أن المبرمج لميكروكنترولر STM32 تم تجميعه على متحكم STM32. يبدو هذا الجهاز يشبه إلى حد كبير محرك أقراص محمول ، وهو ما يمكننا القيام به. علاوة على ذلك ، جسمه مصنوع من الألمنيوم ، لذلك لا داعي للقلق من أنه سيتضرر. يكلف معجزة aliexpress 1.5-3 دولار. سنحتاج إلى اثنين من هذه الأشياء. سنقوم بإعادة تشكيل واحد منهم على أساس تسليم المفتاح ، وسنستخدم الثاني لتحميل البرنامج الثابت إلى الأول. إذا كان لديك بالفعل مبرمج STM32 ، يمكنك القيام بشيء واحد.

المجموع ، نحن بحاجة إلى:

  • مبرمج ST-Link v2 - 2 قطعة
  • لحام حديد
  • عدد قليل من الأسلاك - كقاعدة عامة ، تم تضمين الأسلاك المناسبة بالفعل في ST-Link
  • لينكس ، من أجل تجميع وتحميل البرامج الثابتة

تجميع البرامج الثابتة


لذا ، دعنا نبدأ بجزء البرنامج - تجميع البرامج الثابتة لمفتاحنا. يمكن العثور على رموز مصدر البرامج الثابتة في هذا المستودع . أود أن أقترح تنزيل أحدث إصدار ثابت (يمكنك العثور عليه في علامة التبويب العلامات). يمكنك استنساخ المستودع أو تنزيله كأرشيف مضغوط. يعجن الأصابع ، قم بتشغيل المحطة وانتقل إلى مجلد المشروع. انتقل إلى المجلد src

$ cd src

من أجل تجميع وتنزيل البرامج الثابتة ، نحتاج إلى تثبيت عدة حزم:

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

أستخدم مدير حزم pacman ، في حالتي يبدو مثل هذا


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

إذا كنت تجلس على أوبونتو - استخدم apt.

دعني أذكرك بأننا في مجلد src الخاص بالمشروع.
قم بتشغيل تكوين البرنامج النصي

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

نحن ندير أداة الصنع ونلاحظ كيف يتم تجميع البرامج الثابتة الخاصة بنا.

$ make

بعد التجميع ، يظهر مجلد البناء ، وفيه ملف gnuk.elf - نحن بحاجة إليه.

قم بتنزيل البرامج الثابتة على الجهاز


الآن بعد أن حصلنا على الملف النهائي مع البرامج الثابتة ، نحتاج فقط إلى تنزيله على الجهاز. لهذا ، علينا العمل قليلاً بمكواة اللحام. لا تقلق ، لا تحتاج إلى أي مهارات خاصة ، فقط قم بلحام 4 أسلاك.

لذا ، نأخذ أحد المبرمجين ونخرج القضية منه. المبرمج المختار سيكون مانحنا. إليكم ما نجده بالداخل.



انتبه للأربعة دبابيس الموجودة على اللوحة. سنحتاج لحام لهم. أوصي باستخدام الأسلاك التي تأتي مع ST-Link لهذا الغرض. نقوم بتنظيف الأسلاك من طرف واحد ونلحمها في جهات الاتصال. إذا كنا محظوظين ، فستظهر على اللوحة علامات على هذه الاتصالات.

"

الآن ، نقوم بتوصيل الطرف الثاني من الأسلاك بالمبرمج بأكمله المتبقي. إذا كنت محظوظًا ، فما عليك سوى توصيل الأسلاك وفقًا للنقوش:

GND إلى GND
3.3V إلى 3.3V
SWDIO إلى SWDIO
SWCLK إلى SWCLK

إذا لم تكن هناك ملصقات على اللوحة ، فسيتعين عليك الضغط بشكل عشوائي لاستخدام المختبر. باستخدامه ، يمكنك بسهولة العثور على GND (وهو متصل بـ GND في أطراف المبرمج المبرمج) ، على غرار 3.3V. يجب توصيل السلكين المتبقيين بشكل عشوائي. لحسن الحظ ، هناك خياران فقط. ونتيجة لذلك ، نحصل على شيء مشابه لهذا.



في هذه الصورة ، الجهاز الأزرق هو المبرمج ، الذي نستخدمه فقط كمبرمج. لا تخلط بين حقيقة أنه في الصورة في بداية المقال ، يكون للجهاز النهائي لون جسم أزرق. ليس هو. الجهاز المستقبلي على اليمين.

تنزيل البرامج الثابتة


نحن على بعد خطوة من النجاح ، يبقى فقط تنزيل البرنامج الثابت. افتح الوحدة الطرفية ، وانتقل إلى المجلد باستخدام برنامجنا الثابت (gnuk.elf).

قم بتشغيل الأمر:

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

لذا ، قمنا الآن بتحميل البرامج الثابتة على أجهزتنا. بقيت خطوة واحدة - لحظر قراءة ذاكرة وحدة التحكم الدقيقة. انتباه! هذه مرحلة مهمة للغاية ، والتي لن تسمح للشخص الذي سرق مفتاحك باستخراج معلومات سرية منه.

للقيام بذلك ، قم بتشغيل الأمر:

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

الآن كل شيء جاهز.

نعيد كل شيء


الآن بعد أن اتبعت جميع الخطوات ، يبقى الاهتمام بمظهر جهازنا. نحن نلحم الأسلاك. لم نعد بحاجة أيضًا إلى شريط الاتصال الأصلي ، حتى تتمكن من إلغاء تأمينه بأمان.



قم بكسر الحامل ولحام جهات الاتصال في كل مرة.



الآن نعيد وضع العلبة ونغلق الجدار الخلفي بقطعة بلاستيكية مناسبة.

كيف يمكنني استخدام


ما قمنا بتجميعه هو محاكي OpenPGP للبطاقة الذكية . يمكن لهذه البطاقة تخزين مفاتيح GPG و SSH. النطاق كبير جدًا ، على سبيل المثال:

  • توقيع التزامات git - لقد أثيرت بالفعل مشكلة أمنية هنا
  • تخزين مفتاح SSH
  • تشفير وتوقيع البريد الإلكتروني S / MIME - لم يتم التحقق ، لكنهم يكتبون أنه يعمل
  • إدخال نظام التشغيل بدون كلمة مرور - يوجد دليل جيد موجود بالفعل على المحور

كما ترى ، يمكنك القيام بالكثير من الأشياء المفيدة والمفيدة.

مثال للاستخدام ل ssh


وفي النهاية ، دعنا نرى كيف يمكنك استخدام هذا المفتاح لتخزين مفاتيح ssh والاتصال بخادم بعيد.

هناك طريقتان - لإنشاء مفتاح جديد أو استيراد مفتاح موجود إلى رمز مميز.

دعنا نرى كلا الخيارين. نقوم بإدخال الرمز المميز في USB. في dmesg يمكنك رؤية معلومات حول الجهاز المتصل.


$ 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

الجيل الجديد لمفتاح SSH


من المهم أن تفهم أن المفتاح يتم إنشاؤه على الجهاز نفسه ، وليس على جهاز الكمبيوتر الخاص بك. لذا ، لا يترك هذا المفتاح الجهاز على الإطلاق.

انتقل إلى gpg:


$ gpg --card-edit

يفتح الوضع التفاعلي gpg ، قم بتمكين وضع المسؤول باستخدام الأمر admin:


gpg/card> admin

بعد ذلك ، قم بتشغيل أمر إنشاء المفاتيح الجديد:


gpg/card> generate

فيما يلي إجراء إنشاء مفتاح gpg القياسي. سيُطلب منك خلاله حفظ مفتاح النسخ الاحتياطي على القرص. يوصي المطورون بعمل نسخ احتياطية ، لكنك تقرر.
الشيء الوحيد هو دعم إنشاء الأجهزة من مفاتيح RSA حتى 2048 بت. إذا كنت بحاجة إلى 4096 ، فسيتعين عليك إنشاء المفتاح على الكمبيوتر ، ثم استيراده إلى الجهاز نفسه.
بعد ذلك ستحتاج إلى رموز PIN. بشكل افتراضي ، تكون رموز PIN التالية محمية في البرنامج الثابت:

CARD PIN - 123456
ADMIN PIN - 12345678

في المستقبل ، يجب تغييرها.

يمكن إنشاء المفتاح لفترة أطول قليلاً مما لو تم إنشاؤه مباشرة على الكمبيوتر ، لذلك لدينا بعض الصبر.

استيراد مفتاح موجود


الآن دعنا نرى ما يجب فعله إذا كان لديك بالفعل مفتاح ssh ترغب في استخدامه.
للقيام بذلك ، قم باستيراد المفتاح في gpg:


$ pem2openpgp temporary_id < id_rsa  | gpg --import

الآن نحن بحاجة إلى معرفة معرف المفتاح. للقيام بذلك ، قم بإدراج كل ما هو متاح في gpg:


$ gpg -K

ونجد المفتاح المستورد:


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


في حالتي ، معرف المفتاح هو DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

انتقل إلى الوضع التفاعلي لتحرير مفتاح gpg:


$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

ونعطي الأمر لنسخ المفتاح إلى البطاقة الذكية:


gpg> keytocard

كل شيء ، يتم تسجيل المفتاح.

تصدير مفتاح عمومي بتنسيق ssh


نحصل على المفتاح العام المطلوب من الرمز المميز لوضعه على الخادم:

$ pkcs15-tool --list-keys

في حالتي ، يبدو الناتج كما يلي:


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

هنا نحن مهتمون بمفتاح معرف المفتاح ، في حالتي 01. الآن نقوم بتصدير المفتاح العام:


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

انسخ المفتاح العام في ملف pub.key:


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

وتحويله إلى تنسيق ssh-rsa:


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

اتضح المفتاح العام بالتنسيق المطلوب:


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

التالي هو الإجراء القياسي لتكوين ssh لتسجيل الدخول باستخدام مفتاح معين - تحتاج إلى إضافة المفتاح إلى ملف ~ / .ssh / certified_keys على الخادم البعيد.

تكوين Ssh


الآن ، للدخول إلى الخادم باستخدام الرمز المميز الخاص بنا ، تحتاج إلى استدعاء ssh باستخدام مفتاح التبديل -I وتمرير المسار إلى برنامج تشغيل الرمز المميز. الرمز المميز لدينا متوافق مع أحد برامج التشغيل القياسية ، لذلك سنستخدمه

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

ومع ذلك ، سيكون أكثر ملاءمة لاستخدام ملف التكوين (~ / .ssh / config).
أضف الأسطر التالية إليه.

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

أصبحت مكالمة ssh الآن أسهل:


$ ssh digitalOceanServer

كيفية تغيير رموز PIN القياسية


ستكون الخطوة ذات الأهمية نفسها تثبيت رموز PIN الخاصة بك. عليك أولاً أن تفهم أن هناك رمزين مختلفين يستخدمان:

  • رمز PIN - يُستخدم هذا الرمز للعمليات الروتينية باستخدام البطاقة الذكية - لتشفير شيء ما ، وتوقيعه ، وما إلى ذلك.
  • Admin Pin-code - هذا الرمز مطلوب لتغيير / حذف المفاتيح والقيام بكل أنواع هذه الأشياء "الإدارية"
  • إعادة تعيين الرمز - رمز يسمح لك بإلغاء قفل الرمز المميز بعد ثلاث محاولات غير صحيحة لإدخال رمز PIN. استخدامه اختياري ، لذا فالأمر متروك لك

لديك 3 محاولات فقط لكل رمز. بعد ذلك يتم حظر الرمز المميز.

الآن دعنا نبدأ. للقيام بذلك ، ننتقل مرة أخرى إلى وضع GPG التفاعلي:


$ gpg --card-edit

وأدخل أمر passwd:


gpg/card> passwd

ستفتح نافذة حيث يمكنك تغيير رمز PIN من الرمز المميز.

الآن تحتاج إلى تغيير PIN المسؤول. للقيام بذلك ، انتقل إلى وضع المسؤول:


gpg/card> admin

أدخل الأمر passwd مرة أخرى:


gpg/card> passwd

ومع ذلك ، فإنه يعمل الآن في الوضع المتقدم وسيتم عرض العديد من الخيارات:


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

Your selection?

نختار تغيير رمز PIN للمسؤول ونقوم بتعيين كلمة مرور المسؤول وفقًا للنظام القياسي. دعني أذكرك بأن رقم التعريف الشخصي الافتراضي للمسؤول هو 12345678.

حول أمان الجهاز


بالطبع ، مقابل 3 دولارات أمريكية ، لا يمكنك تحقيق مستوى أمان أساسي لأكثر من 200 دولار. ومع ذلك ، يمكن اعتبار الجهاز المجمع كمفتاح مستوى الدخول. على حد علمي ، تستخدم مفاتيح مصنع Nitrokey Start نفس البرامج الثابتة. على أي حال ، فإن استخدام مثل هذا الجهاز سيرفع مستوى الأمان بنسبة أعلى على الأقل. لذا فهذه طريقة رائعة لبدء استخدام مفاتيح الأجهزة.

الآن دعونا نتحدث قليلاً عما سيحدث إذا فقدت هذا المفتاح. المفتاح نفسه محمي برمز PIN. بعد عدة محاولات فاشلة ، تم قفل المفتاح. ذاكرة الجهاز نفسه محمية من القراءة ، لذلك لن تعمل مباشرة لقراءة المفاتيح المكتوبة فيها.
هناك بعض أنواع الهجمات على الرقاقة نفسها (على سبيل المثال ، إعداد وتوصيل أقطاب كهربائية دقيقة لها ، والتي ستقيس الجهد في أي مكان في الرقاقة ، بما في ذلك الذاكرة) ، ولكنها مكلفة للغاية.

لذا ، أكرر مرة أخرى ، هذا خيار رائع على مستوى الدخول ، وحتى مع ذلك ، سيصل الأمان إلى مستوى جديد تمامًا.

روابط لمواد مفيدة


في عملية استخدام الجهاز ، ستكون هناك بالتأكيد حاجة إلى معلومات إضافية. جمعت قائمة المصادر الجيدة.

  • صفحة موقع دبيان
  • توثيق الرمز
  • دليل لرمز Nitrokey Start - يستخدم نفس البرامج الثابتة ، لذلك ستلائمنا النصائح أيضًا

يتم تطوير الجهاز الذي قمنا بتجميعه بواسطة مشروع GNUK مفتوح المصدر (في الواقع ، يطلق عليه رمز مميز) ، لذلك يمكن العثور على مزيد من المعلومات في Google بناءً على طلب "GNUK".

تحديث. تشير التعليقات إلى وجود برامج ثابتة تتيح لك استخدام الجهاز للمصادقة الثنائية. يمكن العثور على رمز البرنامج الثابت هنا
. 15/20/2020 2 أشارت التعليقات إلى وجود ثغرة يمكن أن تستنزف محتويات الذاكرة لهذه الشريحة المعينة. كما أفهمها ، لم يتم نشرها بعد ، ولكن تم الإعلان عنها. حتى الآن ، كل شيء غير واضح. واقترحوا أيضًا حلاً جيدًا - صب الايبوكسي في جسم الجهازممزوجة بمسحوق الألومنيوم. تم وصف هذه الطريقة في كتاب كيفن ميتنيك ، "فن الخداع". وبالتالي ، من أجل الوصول إلى الرقاقة ، سيكون من الضروري كسر الغراء ، والذي ، إذا تم التعامل معه بلا مبالاة ، يمكن أن يتلف الرقاقة بشكل دائم. بالطبع ، يمكن التحايل على هذه الطريقة ، وهذا يزيد من تكلفة القرصنة أكثر. بالطبع ، إذا لزم الأمر ، سيصنع الموساد أشياءه في الموساد وهذا لن يمنعه ، ولكن يؤخره فقط.
تحديث. 3وصلت العديد من الرسائل إلى رئيس الوزراء بأن الأشخاص لا يمكنهم الحصول على برنامج ST-Link الثابت. بعد أن اكتشفنا ذلك ، اكتشفنا أن الشركات المصنعة الصينية بدأت الآن في التوفير الفعال للمكونات واستخدام الرقائق مع ذاكرة 64 كيلوبايت على متنها. وهذا لا يكفي للبرامج الثابتة ، ابحث عن شريحة 128 كيلوبايت على متنها. لذلك ، أوصي أنه عند الشراء ، تحقق من الشريحة المثبتة (إن أمكن) ، أو تحقق مع البائع / في المراجعات.
تحديث. 4 اتضح أنه لا يزال بإمكانك استخدام المبرمجين الصينيين بشريحة 64 كيلوبايت (على الرغم من أنه سيتعين عليك استخدام أحدث إصدار من البرامج الثابتة) - ظهرت مقالة مثيرة للاهتمام حول هذا الموضوع على لوحة الوصل .

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


All Articles