PDA

View Full Version : چگونه میتوان معادله یک الگوریتم را بدست اورد؟



naser2000
جمعه 15 اردیبهشت 1385, 11:57 صبح
فرض میکنیم یک برنامه در ازای ورودی هایی از اعداد صحیح مختلف یک خروجی تولید میکنه
ایا میشه با داشتن ورودی و خروجیهای به الگوریتم اون برنامه پی برد؟ ایا میشه برنامه ای نوشت که با دادن این ورودی و خروجیها و با سعی و خطا همه حالتهای ممکن رو تست کنه و اون فرمول موجود در الگوریتم رو بدست بیاره ؟البته منطقا بزرگی عدد ورودی و خروجی هم مهمه پس با فرض بر ورودی 4 بایتی و خروجی 1 بایتی این کار به این راحتیها شدنیه؟
برای این کار بطور کلی چه طرحی باید داشته باشیم ؟ مثلا یه راه میتونه این باشه که ابتدا بین اولین ورودی و خروجی یه رابطه پیدا کنیم بعد در ورودی دوم این رابطه رو تست کنیم و اگه درست نبود برنامه به دنبال یافتن یه رابطه دیگه بره و اون رو روی هر دو مورد تست کنه و اگه درست بود دوباره ورودی و خروجی سوم رو بگیره و این کار رو به تعداد حالتهای ممکن از ورودیمون تکرار کنه
البته یه سوالی هم در همین الگوریتم پیشنهادی هست و اینکه در اون قسمت از برناممون که وظیفه یافتن یک رابطه رو بین ورودی و خروجی داره چطور عمل کنیم؟

Inprise
جمعه 15 اردیبهشت 1385, 12:08 عصر
جواب سوالت بطور کلی منفیه .
برای توضیح ریاضی این جواب نیاز به ذکر مقدمات زیادی هست که بعیده به دردت بخوره . یه توضیح ساده میتونه این باشه که اگر فضای محاسبه رو یک محیط دو بعدی ساده فرض کنیم ، نگاشتهائی که مجموعهء دامنه یا صفحه های دامنه نگاشت رو به صفحهء نتایج نظیر میکنه ، دو وضعیت داره :

الف. دو صفحهء مذکور مستقل خطی باشند
ب. دو صفحه مذکور مستقل خطی نباشند

اگر باشند بینهایت نگاشت مفروض میتونه وجود داشته باشه ، و اگر نباشند ، یا یک نگاشت یک به یک داریم ( یعنی الگوریتم نداریم ) یا اصلا" نگاشتی نداریم ( یعنی - مسامحتا" - الگوریتم نداریم ) . سایز ورودی ها و خروجی ها چه یک بایت باشه چه چهل میلیون بایت تفاوتی در اصل مسئله ایجاد نمیکنه .

چون مسئله رو تو بخش رمزنگاری پرسیدی ، احتمالا" دنبال روشی هستی که بشه یک کریپتو الگوریتم رو از مجموعه ورودیها و خروجیها آنالیز کرد ؛ که ضمن تاکید بر جواب منفی ای که اون بالا خوندی لازمه تذکر بدم که تمام مباحث مطرح ذیل عنوان رمزنگاری ، همیشه زیر سایهء چند پیش فرض بدیهی هستند ، که یکیش اینه : ما همیشه در مورد جزئیات الگوریتم همه چیز رو میدونیم ؛ هیچ اتفاق واقعی ای با الگوریتمهای ناشناخته نمیفته .

naser2000
جمعه 15 اردیبهشت 1385, 15:29 عصر
ممنون Inprise جان ازسرعت در پاسخ

همونطور که شما هم حدث زدید ( :) ) در سیستم های کد گزاری بمانند کانالهای ماهواره ای
یک کریپتو الگوریتم هست که در داخل کارت اصلی هست خب در داخل این کارت هم یک میکروکنترلر وجود داره که این الگوریتم رو اجرا میکنه پس ما 2 راه خواهیم داشت یا فایل برنامه درون میکرو که همون الگوریتم هست رو استخراج کنیم و اونو دی اسمبل کنیم یا اینکه به یه طریقی این الگوریتم رو حدث بزنیم خب مورد اول که تقریبن غیر ممکن هست و دومی به نظر شما کاملا منتفی!
تا اونجایی که میدونم به طور ساده میشه سیستم کد گزاری تصویر رو اینطوری شرح داد که اطلاعات تصویری به پاکت های اطلاعاتی تبدیل میشه که هر پاکت به یه روش خاصی کد گزاری میشه و کلید باز کردن این پاکت بوسیله کارت درون رسیور ایجاد میشه به اینصورت که به همراه هر پاکت اطلاعاتی یک عدد فرستاده میشه و رسیور این عدد رو به کارت تحویل میده و کارت کلید اون پاکت رو به رسیور میده در این شرایط ما یک عدد به عنوان ورودی داریم و یک عدد هم برای خروجی مربوط به اون ورودی .
من از ریاضی چیز زیادی یادم نمونده و اون مطالب شما درمورد نگاشت رو درست نگرفتم
بگزارید این مثال رو بزنم ما یه فرمول داریم که نا معلومه ولی در ازای عدد 10 عدد 25 میده در ازای 20 عدد 45 و در ازای 30 عدد 65 و در ازای 40 عدد 85 خب با یه نگاه ساده فرمول رو تشخیص میدیم نه؟
در مورد همون سیستم کد گزاری ماهواره ما میدونم که بسیاری از الگوریتمها بوسیله هکرها شکسته شدن (و البته تعدادی هم به کمک سازندگانشون و به مصلحت منتشر شدن)
اونها چطور اینکار رو کردن؟
ایا همین تکنیکی که ذهن ما در اون مثال برای یافتن فرمول بکار میبره نمیتونه کار ساز باشه؟
ایا مهندسی معکوس برای چنین مواردی استفاده ای نداره؟

پ.ن : شاید محل مناسبی متناسب با این موضوع برای این تاپیک انتخاب نکرده باشم شرمنده

Inprise
جمعه 15 اردیبهشت 1385, 16:21 عصر
کدهای شبکه های ماهواره ای رو با مهندسی معکوس کارت کانال مورد نظر باز میکنند ؛ کار ساده ای هم هست .

بطور کلی برای درک منطق یک الگوریتم ، مقایسه ورودیها و خروجیها بی فایده است ، چون تابعی که بدنهء اصلی الگوریتم رو تشکیل میشه ، اغلب یک تابع گسسته خطی ساده نیست ؛ روش متداول بررسی کد موجود در چیپ کارتهای مورد نظر هست . در عمل کار از این حرفها ساده تر هست ، اغلب شبکه های ماهواره ای ویدئو از روشهای جدی ای برای انکدینگ استفاده نمیکنن ، و عموما" یک کلید عوض میشه که پیدا کردنش با یک DVB ارزان قیمت کار ساده ای هست

موفق باشی

naser2000
جمعه 15 اردیبهشت 1385, 17:04 عصر
کدهای شبکه های ماهواره ای رو با مهندسی معکوس کارت کانال مورد نظر باز میکنند ؛ کار ساده ای هم هست .
منظورتون از "مهندسی معکوس کارت " به طور عامیانه تر چیه؟

روش متداول بررسی کد موجود در چیپ کارتهای مورد نظر هست
ولی به نظر من اینکار غیر ممکنه چون این چیپها در همون مرحله ساخت و بعد از پروگرام شدن بسته میشوند و امکان استخراج کدها از بین میرود جدای از اینکه در میکروها قفلهای سخت افزاری هم برای محافطت از برنامه درون میکرو بکار برده میشود که استخراج کد از اون رو غیر ممکن میکنه بطور مثال در میکروهای معمول در بازار هم مثل PIC ها بعد از فعال کردن بیت مربوط به حفاطت flash میکرو که فیوز بیت lock memory گفته میشه دیگه امکان خوندن flash میکرو نیست و فقط میتوان کل flash میکرو رو پاک کرد و دوباره مجدد برنامه جدیدی روی اون لود کرد
به همین ترتیب در مورد کارتهای اصلی این کار به نظر من امکان پذیر نیست
پس منظور شما از "بررسی کد موجود در چیپ" به طور دقیق چیست؟

از توجه شما ممنونم

Inprise
شنبه 16 اردیبهشت 1385, 11:50 صبح
همواره ارائه کنندگان یک تکنولوژی در توضیح امکانات امنیتیش از الفاظ "نمیشه" و "غیر ممکنه" استفاده میکنند ، اما عموما" در عمل "نمیشه" و "غیر ممکنه" شانس زیادی برای وجود ندارند . یک نمونه اش رو اینجا (http://www.cl.cam.ac.uk/%7Esps32/mcu_lock.html) ببین ؛ اما مسئلهء شبکه های ماهواره ای همیشه خیلی ساده تر از این حرفهاست . Scrambling مورد استفاده عموما" ساده است چون کاربران شبکه های ماهواره ای اغلب کاربران خانگی ای هستند که تجهیزات ارزان قیمتی دارند و طبعا" این ابزارهای ساده - آنالوگهای قدیمی و دیجیتالهای جدید - توانائی پردازشی بالائی ندارن و اگر کاربر از شبکه ای ناراضی باشه اون رو فراموش میکنه ، و اغلب تلاش میکنند هزینه هاشون رو از طریق آگهی ها پوشش بدن ، ضمن اینکه مشتریان دولتی یا سازمانی همواره پول میدن و میشه روی اونها هم حساب کرد . Scrambling ساده این شبکه ها عموما" یکبار کرک میشه و هر دفعه بعد از هر تغییر جزئی کافیه تو کد قبلی کمی دستکاری کنند .

روشهای عمومی حفاظت از شبکه های تلویزیونی ماهواره ای (http://www.hitech-projects.com/euprojects/smash/reports/tu-609-1/t609-1-b.htm)

عموما" ساده ترین روش برای کرک این شبکه ها خریدن یک کارت واقعی ، آنالیز ارتباط کارت با ریسیور ، شنود اطلاعات در حال مبادله و سپس نوشتن Patch ای که همان کار رو انجام میده هست ، که براحتی میتونی ریسیور رو به کامپیوتر وصل کنی و اون Patch رو اجرا کنی و شبکهء مورد نظرت رو دریافت کنی . ساده ترین حالت - که متداول هم هست - اینه که ترافیک بین کارت واقعی و ریسیور که حاوی Security Key و احتمالا" امضای دیجیتال اون هست شنود میشه ، و بعد بسته به مدل ریسیور و کارت مورد استفاده ، نرم افزارش جوری Patch میشه که به خواندن از کارت نیازی نداشته باشه و Key موجود در کارت بهش اضافه بشه ، و همین Patch روی اینترنت پخش میشه و ...

موفق باشی

naser2000
شنبه 16 اردیبهشت 1385, 13:57 عصر
Inprise عزیز ممنون که این بحث رو دنبال کردی
پس این قفلهای میکرو باز شدنی هست هر چند به سختی و بکمک دانش زیاد ولی به هر حال بر خلاف گفته من این کار امکان پذیر هست (تشکر از لینک ها )

1- حال یک سوال پیش میاد اینکه چرا سازندگان کارت ها به مرور برای امنیت بیشتر سایز اعداد و الگوریتم خود را بزرگتر میکنن؟ مثلا در ابتدا 64 بیتی یا کمتر بوده و اکنون به 128 بیت یا بیشتر رسیده در صورتی که به گفته شما سایز اعداد ورودی و خروجی مهم نیست و پیدا کردن الگوریتم از روی انالیز ورودی خروحی نشدنی هست !

2- ببینید شما گفتید که انالیز کردن ورودی خروجیها برای بدست اوردن الگوریتم و فرمول معادله بی فایده هست ولی از طرف دیگه

عموما" ساده ترین روش برای کرک این شبکه ها خریدن یک کارت واقعی ، آنالیز ارتباط کارت با ریسیور ، شنود اطلاعات در حال مبادله و سپس نوشتن Patch ای که همان کار رو انجام میده هست
که در اینجا گفتید "شنود اطلاعات در حال مبادله " منظور شما ورودی که رسیور به کارت میده و خروجی که کارت به رسیور پس میده هست؟ این یعنی پیدا کردن رابطه بین ورودی و خروجی؟

3- همچنین شما گفتید "سپس نوشتن Patch ای که همان کار رو انجام میده " ولی اون پچ باید اون الگوریتم موجود در کارت رو هم در بر داشته باشه پس ایا ما با انالیز کردن کارت و رسیور این الگوریتم رو پیدا میکنیم؟ یا تنها راه بدست اوردن کد درون چیپ کارت اصلی هست؟

4- سیستم هایی مثل وی اکسس مدتهاست که هک شدند ولی سیستمی مثل ناگرا 2 که کانال های معروف شو تایم روی اون هستند چندین ساله که باز نشدن و الگوریتم اونا لو نرفته چرا؟

5- ایا نظر شما اینه که همه سیستم هایی که تا به حال هک شدن قفط بواسطه لو رفتن کد درون چیپ ها بوده ؟

Inprise
شنبه 16 اردیبهشت 1385, 14:22 عصر
re 1 : وقتی در مورد طول کلید حرف میزنیم ، یعنی صورت مسئله ما مقابله با Brute Force هست . عموما" در شبکه های ماهواره ای روشهای ساده تری برای عبور از حفاظها وجود دارن . طول کلید چه 64 بیت باشه چه 2048 بیت ، تو اگر یه کارت واقعی رو بخری ، میتونی Patch ای مشابه اون تولید کنی و رو اینترنت پخش کنی ؛ این دو مساله تقابلی با هم ندارن .

re 2 : وقتی در مورد کلید حرف میزنیم ، یا وقتی تو میگی مایلی از ورودی و خروجی به الگوریتم برسی ، ما در حال حرف زدن دربارهء یک Stream رمز شده هستیم که میخواهیم بازش کنیم . وقتی من در مورد مهندسی معکوس کارت حرف میزنم بحث چیز دیگری هست : وقتی تو یک کارت میخری که کلید کلید عمومی روش هست ، برای باز کردن ترافیک ماهواره باید کارت رو به ریسیور متصل کنی یا کلید خونده بشه - اصلا" به الگوریتم فکر نکن - مهندسی معکوس بهت کمک میکنه کلید عمومی مذکور رو بفهمی ، و همینطور محلی از نرم افزار ریسیور که این کلید رو دریافت میکنه ، و سپس خودت Patch ای بنویسی که کلید رو ببره و سرجاش بگذاره . چون مشتری ها فقط دریافت میکنند و سیستم مرکزی نمیتونه چیزی از مشتری دریافت کنه ، میتونی از یک کلید معتبر یک Patch‌بسازی و به بیشمار مشتری بدی ، و همگی بدون مشکل ترافیک رو دریافت خواهند کرد ، چون بر خلاف شبکه های داده که دو طرفه هستند ( ارسال و دریافت ) و میشه از هویت دریافت کننده مطمئن شد شبکه های تلویزیونی یک طرفه هستند ( دریافت ) و نمیشه از هویت آزمائی مشتری امکان پذیر نیست . پس صورت مسئله تو ، یعنی بررسی ورودی و خروجی و کشف الگوریتم و کرک کردن اندینگ و ...، ضمن اینکه عملی نیست ، با محوریت ترافیک ماهواره به مسئله نگاه میکنه ، اما اتفاقی که این روزها در عمل میفته ، مهندسی معکوس چیپهائی که فروخته میشن ، و نوشتن Patch ای است که همون کار رو انجام بده ، در واقع اغلب اوقات ، کسی که این کار رو انجام میده هیچ ایده ای در مورد الگوریتمهای موجود نداره ؛ این یک فرآیند ساده هست ، یک الگوریتم - هر الگوریتمی - بصورت نرم افزاری به یک کلید نیاز داره تا کار کنه ، کارت هوشمند واقعی این کلید رو فراهم میکنه ، و مهندسی معکوس کارت کمک میکنه کلید کشف بشه و یک Patch برای جواب دادن به فانکشنی که مسئول کلید در الگوریتم هست نوشته بشه و ...بقیه ماجرا ...

re 4 : در مورد این سیستمها اطلاعاتی ندارم .

re 5 : مواردی که من در جریانش هستم یا درباره شون چیزهائی خوندم عموما" همینطور بودن ، اما طبیعیه که ممکنه روشهای دیگری هم وجود داشته باشه ؛ شبکه های ماهواره ای از استانداردها و پروتکلهای متنوعی استفاده میکنن و شاید بسته به نوع و قاعده مورد استفاده برای Scarmbling‌ روشهای ساده تری هم وجود داشته باشه...چیزهائی که نوشته شد فقط چیزهائی بود که من در موردشون میدونم قاعدتا" اگر جستجو کنی میتونی به اطلاعات کاملتری برسی و اگرم این اتفاق افتاد بد نیست که در قالب یه سری مطلب یا مقاله ساده همینجا یه جائی مثل اینجا منتشر کنی که بقیه استفاده کنن .

موفق باشی

naser2000
شنبه 16 اردیبهشت 1385, 16:22 عصر
Inprise دوست عزیز از توجه و پاسخ های شما ممنونم به قول شما باید بدنبال اطلاعات بیشتری در این ضمینه باشم وحتما اطلاعاتم رو در این ضمینه در اختیار سایرین قرار خواهم داد
موفق باشید

Inprise
شنبه 16 اردیبهشت 1385, 17:26 عصر
خواهش میکنم . موفق باشی و به سایت برنامه نویس خوش امدی .