John the Ripper 1.9.0-jumbo-1 با پشتیبانی از FPGA

منتشر شد نسخه جدید قدیمی ترین برنامه حدس رمز عبور پشتیبانی شده John the Ripper 1.9.0-jumbo-1. (این پروژه از سال 1996 در حال توسعه است.) در صفحه پروژه سورس ها برای دانلود و همچنین مجموعه های آماده برای ویندوز در دسترس هستند.

خاطرنشان می شود که 1.8.0 سال از انتشار نسخه 1-jumbo-4.5 می گذرد که طی آن بیش از 6000 تغییر (git commits) از بیش از 80 توسعه دهنده انجام شد. در این دوره، توسعه دهندگان استفاده از آن را توصیه کردند نسخه فعلی از GitHub، که وضعیت آن علیرغم تغییرات ایجاد شده به لطف پایدار حفظ شد ادغام مداوم، که شامل تأیید اولیه هر تغییر (درخواست کشش) در بسیاری از پلتفرم ها است. ویژگی خاص نسخه جدید ظاهر پشتیبانی از FPGA (FPGA) علاوه بر CPU، GPU و Xeon Phi است.


برای تابلوها ZTEX 1.15yاز جمله 4 تراشه FPGA و در اصل برای استخراج بیت کوین استفاده می شد، 7 نوع هش رمز عبور اکنون پیاده سازی شده است: bcrypt، رمزگشایی کلاسیک (شامل bigcrypt)، sha512crypt، sha256crypt، md5crypt (شامل Apache apr1 و AIX smd5)، Drupal7 و phpass (استفاده می شود. ، به ویژه در وردپرس). برخی از آنها برای اولین بار بر روی FPGA پیاده سازی می شوند. برای bcrypt، عملکرد به دست آمده ~ 119 هزار سی سی در ثانیه با 2^5 تکرار («2 دلار 05 میلیارد دلار») با مصرف برق حدود 27 وات به طور قابل توجهی از نتایج آخرین GPU در هر برد، به ازای قیمت سخت افزار و به ازای هر وات بیشتر است. همچنین پشتیبانی می شود خوشه ها از بردهایی از این نوع، که تا 16 برد (64 FPGA) کنترل شده از یک Raspberry Pi 2 آزمایش شده است. عملکرد معمول John the Ripper از جمله همه حالت های حدس زدن رمز عبور و دانلود همزمان تعداد زیادی هش پشتیبانی می شود. برای سرعت بخشیدن به کار، ما استفاده از یک ماسک (حالت "--mask"، از جمله در ترکیب با حالت های دیگر) و مقایسه هش های محاسبه شده با موارد بارگذاری شده در سمت FPGA را اجرا کردیم. از منظر پیاده سازی، بسیاری از طرح ها (به عنوان مثال sha512crypt و Drupal7) بلوک های متشکل از هسته های پردازنده چند رشته ای (هسته های CPU نرم) در تعامل با هسته های رمزنگاری استفاده می شود. توسعه این قابلیت توسط Denis Burykin با هماهنگی سایر توسعه دهندگان جامبو انجام شد.

سایر تغییرات عمده:

  • پشتیبانی از تعداد زیادی از انواع اضافی هش، رمز و غیره، از جمله هش های رمز عبور کلاسیک (به عنوان مثال، از نسخه های جدید QNX)، و همچنین کیف پول های رمزنگاری، آرشیوهای رمزگذاری شده و سیستم های فایل رمزگذاری شده (به عنوان مثال، Bitlocker و FreeBSD geli)، و همچنین پشتیبانی از انواع جدیدی از فرمت‌هایی که قبلاً پشتیبانی شده‌اند (به عنوان مثال، پشتیبانی اضافه شده برای bcrypt-pbkdf برای OpenBSD softraid) و موارد دیگر. در مجموع، 80 فرمت بر روی CPU و 47 فرمت در OpenCL اضافه شده است (و تعداد کمی از فرمت های قدیمی به عنوان یکپارچه شده به فرمت های جدید و منسوخ حذف شده اند). تعداد کل فرمت‌ها اکنون 407 در CPU است (یا 262 فرمت بدون احتساب فرمت‌های "دینامیک" پیکربندی شده از فایل‌های پیکربندی) و 88 فرمت در OpenCL.
  • امتناع از پشتیبانی از زبان CUDA به نفع OpenCL، که به هیچ وجه در استفاده کامل از پردازنده‌های گرافیکی NVIDIA تداخل ایجاد نمی‌کند (و حتی کمک می‌کند، به لطف تمرکز توسعه و بهینه‌سازی روی یک پیاده‌سازی از هر فرمت برای GPU به جای دو پیاده‌سازی قبلی).
  • پشتیبانی از مجموعه دستورالعمل های جدید SIMD - AVX2، AVX-512 (از جمله برای نسل دوم Xeon Phi) و MIC (برای نسل اول) - و همچنین استفاده جهانی تر و کامل تر از SIMD در اجرای بسیاری از فرمت ها، از جمله استفاده از دستورالعمل‌هایی که قبلاً پشتیبانی می‌شدند تا AVX و XOP روی x86(-64) و
    NEON، ASIMD و AltiVec به ترتیب در ARM، Aarch64 و POWER. (تا حدی به عنوان بخشی از GSoC 2015.)
  • بهینه‌سازی‌های متعدد برای CPU و OpenCL، هم برای کارکرد مؤثرتر با تعداد زیادی هش به طور همزمان (به عنوان مثال، بارگذاری 320 میلیون هش SHA-1 روی GPU آزمایش شد)، و هم برای افزایش سرعت محاسبات هش. برخی از این بهینه‌سازی‌ها جهانی هستند، برخی زیرمجموعه‌های مختلف فرمت‌ها را پوشش می‌دهند، و بسیاری از آنها مختص فرمت‌های فردی هستند.
  • (خودکار) پیکربندی بافر بهینه رمزهای عبور بررسی شده در CPU ("—tune=auto —verbosity=5") و اندازه های بهینه کار در OpenCL (به طور پیش فرض فعال شده است)، از جمله در نظر گرفتن افزایش آهسته NVIDIA GTX پردازنده‌های گرافیکی سری با فرکانس کاری کامل 10xx و جدیدتر. استفاده از هش های بارگذاری شده واقعی و طول واقعی گذرواژه هایی که بررسی می شوند (زمانی که از قبل مشخص باشد) برای چنین تنظیم خودکار.
  • افزودن یک کامپایلر برای «عبارات پویا» مشخص شده مستقیماً در خط فرمان و پیاده‌سازی انواع هش ترکیبی جدید، به عنوان مثال «-format=dynamic='sha1(md5($p).$s)'»، محاسبه‌شده روی CPU با استفاده از SIMD . به عنوان اجزای چنین عباراتی، ده‌ها هش سریع (از هش‌های رایج مانند MD5 تا موارد نسبتاً عجیب و غریب مانند Whirlpool)، الحاق زیر رشته‌ها، رمزگذاری و رمزگشایی، تبدیل حروف کاراکتر، ارجاع به رمز عبور، نمک، نام کاربری و ثابت‌های رشته پشتیبانی می‌شوند.
  • حذف تفاوت‌های ناخواسته از هش‌کت، از جمله پشتیبانی از قوانین قبلاً خاص هش‌کت (فرمان‌های قوانین فهرست کلمات)، انتقال به شماره‌گذاری دستگاه OpenCL از ۱، استفاده پیش‌فرض از طول‌های رمز عبور یکسان (معمولاً طول ۷) برای آزمایش‌های عملکرد.
  • حالت‌های جدید برای تولید رمزهای عبور قابل تأیید (حالت‌های شکستن)، از جمله PRINCE از hashcat (با ترکیب چند کلمه به ترتیب افزایش طول کل، «عبارات» را تشکیل می‌دهد)، زیر مجموعه‌ها (گذرواژه‌هایی را با تعداد ناکافی کاراکترهای مختلف نمایش می‌دهد، حتی اگر این کاراکترها آمده باشند. از مجموعه بزرگی از موارد ممکن) و ترکیبی خارجی (به حالت‌های خارجی، که در فایل‌های پیکربندی به زبانی شبیه C توضیح داده شده‌اند، اجازه می‌دهد تا رمزهای عبور قابل تأیید زیادی را بر اساس هر «کلمه» اصلی دریافت‌شده از حالت دیگر تولید کنند). همچنین چندین حالت خارجی از پیش تعریف شده جدید.
  • ویژگی های اضافی برای استفاده از چندین حالت به طور همزمان (یکی روی دیگری - انباشتن)، و همچنین برای استفاده از مجموعه قوانین (انباشته قوانین فهرست کلمات).
  • بهبود حالت های ماسک (کشش تدریجی ماسک در محدوده مشخصی از طول، استفاده از ماسک در کنار دستگاه OpenCL یا برد FPGA) و تک ترک (رفتار معقول در دستگاه هایی که تعداد زیادی هش را به صورت موازی محاسبه می کنند). ، که قبلاً رمزهای عبور قابل تأیید کافی در این حالت وجود نداشت و همچنین محدودیت هایی در مصرف حافظه وجود داشت).
  • پیشرفت های زیادی برای پشتیبانی از یونیکد و سایر رمزگذاری ها در زیرسیستم های مختلف.
  • پیشرفت‌های زیادی در برنامه‌های *2john (که فایل‌های فرمت‌های مختلف را برای
    استفاده با john)، به خصوص wpapcap2john (ترافیک WiFi را کنترل می کند).
  • بسیاری از گزینه های خط فرمان جدید، تنظیمات در john.conf، پیکربندی گزینه های اسکریپت و ویژگی های جدید مربوطه وجود دارد که همه آنها در اینجا ذکر نشده اند.
  • بهبود کیفیت کد به لطف پشتیبانی داخلی از ساخت‌های اشکال زدایی با AddressSanitizer (قبلا) و UndefinedBehaviorSanitizer (اضافه شده)، افزودن یک فرمت fuzzer داخلی (به عنوان بخشی از GSoC 2015)، با استفاده از یکپارچه‌سازی مداوم (ساخت برای ده‌ها سیستم عامل و کامپایلر). ترکیب ها و آزمایش آنها برای پشتیبانی صحیح از همه فرمت ها).

منبع: linux.org.ru

اضافه کردن نظر