مفاتيح SSH موضحة Ed25519 ضد ECDSA ضد RSA (توقف عن الضغط على Enter)
أدخلت الأمر ssh-keygen، وضغطت على Enter أربع مرات، وانتهيت بحصولك على RSA. إليك السبب الذي يجعل Ed25519 هو الخيار الصحيح، ما يُخطئه ECDSA، والسيناريوهات الوحيدة التي يُطلب فيها استخدام RSA.
أحد الأمور التي يقوم بها كل مطور. تكتب ssh-keygen، تظهر نافذة توجيهية تسأل عن نوع المفتاح، طول البت، كلمة المرور، مسار الناتج — وتحاول أن تضغط على Enter حتى تظهر بصمة العينة العشوائية. ممتاز، الآن لديك مفتاح RSA-2048 ولا تعرف لماذا هذا العدد.
الإجابة المختصرة: استخدم Ed25519نفس ssh-keygen -t ed25519 -C "you@example.com" وأوقف قراءة إجابات موقع StackOverflow من عام 2012. تشرح باقي هذه المذكرة السبب — وتحدد الحالات القانونية التي يُطلب فيها استخدام RSA.
الثلاثة خوارزميات
RSA
تم استخدام خوارزمية RSA (Rivest–Shamir–Adleman، 1977) كخوارزمية مفتاح علني للإنترنت منذ عقود. تعتمد أمانها على صعوبة تحليل الأعداد الكبيرة، مما يعني أنك تحتاج إلى مفاتيح كبيرة للحفاظ على الأمان — على الأقل 2048 بت، ويفضل 4096. يبلغ حجم مفتاح RSA بحجم 4096 بت تقريبًا 800 بايت. يتضمن كل اتصال عمليات حسابية على هذه الأعداد الكبيرة، وهي أبطأ من البدائل الحديثة.
السبب الوحيد الذي يُستخدم لصالح RSA هو التوافق. الخوادم القديمة، الأجهزة الوراثية، الأجهزة الشبكية الخاصة من العقد الأول من 2010 — كلها تستخدم RSA. إذا كنت تربط مع شيء تم تجهيزه خلال فترة إدارة أوباما ولم يُعالج منذ ذلك الحين، فقد يكون RSA هو الخيار الوحيد لك.
ECDSA
أُدخلت ECDSA (خوارزمية التوقيع الرقمي على منحنى إهليلي) كخيار أسرع وأصغر بديل لـ RSA. يوفر مفتاح ECDSA بحجم 256 بت أمانًا يعادل تقريبًا مفتاح RSA بحجم 3072 بت. أفضل حسابات، مفتاح أصغر، عمليات أسرع — يبدو كأنه فوز.
المشكلة هي أن OpenSSH تستخدم منحنيات معينة بشكل افتراضي: منحنيات NIST (P-256، P-384، P-521). تثير هذه المنحنيات قلقًا حقيقيًا. كانت إدارة NIST مُختلطة في تطوير معايير منحنيات إهليلية — مساعدة في تطوير مولد الأعداد العشوائية Dual_EC_DRBG، والذي تم اكتشافه لاحقًا يحتوي على خلية خلفية. لم تُكتشف ECDSA كمُهددة، لكن معايير منحنيات NIST لا تُعرف بوضوح. لا يمكن إثبات أن هذه المعايير لم تُختار لمنح ميزة غير متوازية. معظم المطورين ليسوا أهدافًا لوكالة الأمن القومي، لكن لا يوجد سبب لقبول "ربما جيد" عندما يوجد خيار أفضل يمكن إثباته.
Ed25519
Ed25519 (EdDSA على منحنى Curve25519) هو المفتاح الذي يجب أن تستخدمه. تم تصميمه من قبل دانيل ج. بيرنستاين مع معايير مفتوحة تمامًا — يتم استخلاص معلمات المنحنى من أرقام "لا شيء في ملابسي"، وليس من عملية مغلقة.
البيانات العملية: يبلغ حجم مفتاح Ed25519 68 بايت. يتم التوقيع والتحقق أسرع من كلا RSA وECDSA. يتم تجنب هجمات التوقيت من خلال التصميم — لا توجد فروع تعتمد على سر، ولا عمليات متغيرة في الوقت. تم دعمه في OpenSSH 6.5 في عام 2014. دعمه في GitHub، GitLab، وBitbucket تم تطبيقه منذ سنوات. لا توجد عيوب مقارنة بـ ECDSA وكل المزايا مقارنة بـ RSA.
مقارنة جنبًا إلى جنب
| ملكية | RSA (4096 بت) | ECDSA (P-256) | Ed25519 |
|---|---|---|---|
| حجم المفتاح العلني | ~800 بايت | ~200 بايت | 68 بايت |
| مدى الأمان المكافئ | ~140 بت | ~128 بت | ~128 بت |
| سرعة التوقيع | بطيء | سريع | مُستخدمة بسرعة كبيرة |
| مقاوم للهجمات من خلال التوقيت | لا | لا | نعم (بتصميمه) |
| مجالات الثقة في المنحنيات | لا أحد | منحنيات NIST (مُشككة) | لا شيء (Curve25519) |
| دعم OpenSSH منذ | بشكل دائم | 5.7 (2011) | 6.5 (2014) |
| GitHub / GitLab / Bitbucket | نعم | نعم | نعم |
كيفية إنشاء كل نوع
الاختيار الافتراضي — استخدم هذا:
ssh-keygen -t ed25519 -C "you@example.com"
هل يتطلب النظام القديم RSA؟ استخدم على الأقل 4096 بت:
ssh-keygen -t rsa -b 4096 -C "you@example.com"
ECDSA، إذا كان لديك سبب محدد لتجنب Ed25519 (ربما لا توجد):
ssh-keygen -t ecdsa -b 521 -C "you@example.com"
إذا كنت ترغب في واجهة بصرية بدلًا من تذكر الأعلام، فإن مولد مفاتيح SSH على IO Tools يسمح لك بتحديد الخوارزمية، طول البت، وخيارات كلمة المرور دون التدخل في الطرف.
الحالات التي يُطلب فيها استخدام RSA فعلاً
توجد حالات قانونية حيث لا يمكن استخدام Ed25519:
- الخدمات المُقدمة قبل عام 2014 — أي شيء يعمل على OpenSSH قبل 6.5 لن يقبل Ed25519. نادر، لكنه حقيقي: الأنظمة المدمجة، الأجهزة الشبكية، أجهزة RHEL 6 القديمة التي لم تُحدث تحديثًا لـ OpenSSH.
- بيئات FIPS-140-2 — البيئات الحكومية والشركات المُراقبة تفرض خوارزميات مُعتمدة على FIPS. لا يُعتمد Ed25519 على FIPS. استخدم RSA-3072+ أو ECDSA مع P-384 في هذه البيئات.
- سياسة مُدارة مفتاح SSH من قبل المؤسسة — بعض الشركات تدير مراكز شهادات SSH مع متطلبات محددة على نوع المفتاح. تحقق قبل إنشاء مفتاح يُرفض عند التسجيل.
باستثناء هذه الحالات الثلاث، فإن السبب لاستخدام RSA هو التردد، وليس القيمة.
الكلمة المرور التي تُستبعد
متى ssh-keygen تطلب كلمة مرور وتحتاج إلى الضغط على Enter لتجاهله، فإن مفتاحك الخاص يبقى على القرص في صورة نصية. إذا اكتشف شخص ملكك للحاسوب، فإنه يحصل على كل ما يمكن الوصول إليه من خلال هذا المفتاح — كل الخوادم، كل مضيف Git، كل بيئة إنتاجية. أضف كلمة مرور. استخدم ssh-agent لأنك تكتبها مرة واحدة فقط في كل جلسة:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
على macOS، أضف --apple-use-keychain ل ssh-add لأن كلمة المرور تستمر عند إعادة التشغيل. على لينكس، تبدأ معظم بيئات المكتب تلقائيًا بـ ssh-agent — تحقق من echo $SSH_AUTH_SOCK.
أنت ضغطت على Enter أربع مرات دون قراءة. نافذة طلب كلمة المرور هي الأهم التي يجب أن تعود إليها.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
