
أداة تحليل شفرات آلية ومعيارية؛ أي سلاح تدمير رياضي.
FeatherDuster هي أداة كُتبت بشكل أساسي بواسطة Daniel "unicornfurnace" Crowley، إلى جانب مساهمات من المجتمع، بهدف كسر التشفير؛ وتحاول جعل عملية تحديد واستغلال الأنظمة التشفيرية الضعيفة سهلة قدر الإمكان. Cryptanalib هي الأجزاء المتحركة خلف FeatherDuster، ويمكن استخدامها بشكل مستقل عن FeatherDuster.
لماذا "FeatherDuster"؟ هناك نكتة داخلية بين بعض المهتمين بالتشفير حيث يُطلق على استخدام التشفير بشكل سيئ، أو لحل مشكلة لا يُفترض بالتشفير حلها، اسم "رشّ الغبار السحري الخيالي للتشفير عليه". وFeatherDuster مخصص لتنظيف هذا الغبار السحري الخيالي للتشفير.
هذا إصدار تجريبي (beta) من FeatherDuster. قد تكون بعض الأشياء معطلة.
إذا وجدت خطأً، يُرجى فتح issue. نرحب بطلبات السحب (pull requests) ونشجع عليها.
python featherduster/featherduster.py [ciphertext file 1] ... [ciphertext file n]
إذا كنت قد ثبّتّ FeatherDuster في بيئتك الافتراضية، يمكنك ببساطة تشغيله عبر:
(featherduster) $ featherduster [ciphertext file 1] ... [ciphertext file n]
عند استيراد العينات عبر الوسائط الموضعية، سيتم استهلاك كل ملف ومعاملته كنص مشفّر مستقل بذاته، بغض النظر عن تنسيق الملفات. يمتلك FeatherDuster القدرة على التعرّف تلقائيًا على الترميزات الشائعة وفك تشفيرها، لذا لا بأس إذا كانت هذه الملفات تحتوي على عينات مشفّرة.
بمجرد إطلاق وحدة تحكم FeatherDuster، ستتوفر طرق بديلة لاستيراد النصوص المشفّرة، وتحديدًا إمكانية استيراد ملف يحتوي على عينات مفصولة بأسطر جديدة حيث يُتعامل مع كل سطر كعينة مستقلة، على النحو التالي:
68657920636f6f6c
796f752072656164
74686520726561646d65
وإمكانية تحديد نص مشفّر واحد في FeatherDuster عبر إدخال سطر الأوامر. ولأن هذا الإدخال سينتهي عند سطر جديد، يُنصح باستخدام شكل من أشكال الترميز في حال احتوت العينة على سطر جديد.
يمكن استخدام Cryptanalib بشكل منفصل عن FeatherDuster لبناء أدوات هجوم تشفيري مبنية على بايثون. يمكن الوصول إلى توثيق دوال cryptanalib عبر دالة help() في بايثون كما يلي:
>>> import cryptanalib as ca
>>> dir(ca) # output edited for a cleaner README file
[ ... 'analyze_ciphertext', 'batch_gcd', 'bb98_padding_oracle', 'break_alpha_shift', 'break_ascii_shift', 'break_columnar_transposition', 'break_generic_shift', 'break_many_time_pad', ... ]
>>> help(ca.bb98_padding_oracle)
Help on function bb98_padding_oracle in module cryptanalib:
bb98_padding_oracle(ciphertext, padding_oracle, exponent, modulus, verbose=False, debug=False)
Bleichenbacher's RSA-PKCS1-v1_5 padding oracle from CRYPTO '98
Given an RSA-PKCS1-v1.5 padding oracle and a ciphertext,
decrypt the ciphertext.
ciphertext - The ciphertext to decrypt
padding_oracle - A function that communicates with the padding oracle.
The function should take a single parameter as the ciphertext, and
should return either True for good padding or False for bad padding.
exponent - The public exponent of the keypair
modulus - The modulus of the keypair
verbose - (bool) Whether to show verbose output
debug - (bool) Show very verbose output
يمكن لمحرك التحليل في Cryptanalib، المستخدم بواسطة FeatherDuster، اكتشاف الترميزات تلقائيًا وفك تشفير العينات. يفترض المحرك أن جميع العينات وُلّدت باستخدام العملية نفسها (على سبيل المثال، base64encode(aes_encrypt(datum)))، لكنه يستطيع التعامل مع عينات مختلطة إلى حد ما. حاليًا، يمكن لـ Cryptanalib اكتشاف وفك تشفير مخططات الترميز التالية:
يمكن لمحرك تحليل Cryptanalib أيضًا اكتشاف عدد من الخصائص في مرحلة التحليل: